MSR STANDARD · RFC 0001

MSR JSON Protocol Specification

Version 2.0.0 — An Open Standard for Decentralized Software Publishing and Automated Registry Synchronization

Status: Final Proposed Standard · Date: 2026-09-17 · Canonical Schema: msr-2.0.json

1. Abstract & Status

For over two decades, the Association of Shareware Professionals maintained the PAD (Portable Application Description) XML standard. PAD enabled developers to publish software once and have download portals (such as Tucows, Download.com, and Softpedia) ingest updates automatically without proprietary APIs.

However, legacy XML architectures present fundamental constraints in the modern software landscape: verbose CDATA sections, XXE vulnerabilities, lack of first-class internationalization, floating-point currencies, and total inability to represent SaaS backends, Model Context Protocol (MCP) servers, or autonomous AI agents.

The MSR JSON (Metadata for Software Registry) protocol v2.0 solves these challenges while preserving the decentralized ethos: software publishers remain the sole source of truth by hosting their metadata on their own domain, discoverable over standardized HTTP endpoints (RFC 8615).

2. Conformance & Key Words

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC 2119] [RFC 8174] when, and only when, they appear in all capitals.

An implementation is non-conformant if it fails to satisfy one or more of the MUST or REQUIRED statements for the sections it claims to support. Every conformant MSR JSON manifest MUST be a valid JSON document conforming to RFC 8259 and MUST validate without errors against the canonical JSON Schema (Draft 2020-12).

3. Core Architectural Principles

Decentralized Authority

Vendors host their manifest at https://<domain>/.well-known/msr.json per RFC 8615. Registries, indexers, and AI engines crawl this authoritative location.

Deterministic Minor Units

All monetary values MUST be expressed as integer minor units (cents) per ISO 4217 (e.g. 1999 for $19.99), completely eliminating floating-point rounding errors.

Cryptographic Verification

Manifests support Ed25519 signatures, domain verification through DNS-TXT challenges or HTTP well-known proofs, and SHA-256 binary artifact checksums.

First-Class AI & MCP Tooling

Dedicated interfaces block for Model Context Protocol (MCP) servers, OpenAPI 3.1 definitions, and runtime execution boundaries.

4. Document Anatomy

An MSR JSON document consists of five mandatory top-level objects and two optional objects:

{
  "$schema": "https://msr-standard.org/schemas/msr-2.0.json",
  "protocol": { ... },     // REQUIRED: Standard provenance and SemVer
  "entity": { ... },       // REQUIRED: Machine identity, FQDN, localized descriptions
  "capabilities": { ... }, // REQUIRED: Interfaces (MCP, OpenAPI), deployment, pricing
  "releases": { ... },     // REQUIRED: Latest version, changelog, and artifacts
  "trust": { ... },        // OPTIONAL: DNS-TXT proof, Ed25519 manifest signature
  "telemetry": { ... }     // OPTIONAL: Status page URL and push synchronization webhooks
}

4.1 Protocol Object (protocol)

Declares adherence to the specification and transparent provenance.

Field Type Req Description
name string Yes MUST be the exact string "MSR JSON".
version string Yes SemVer string conforming to ^2\.[0-9]+(?:\.[0-9]+)?$ (e.g. "2.0.0").
author string Yes Specification author or organization (e.g., "Antonio Santos").
specification_license string Yes SPDX license identifier for the specification (MUST be "CC-BY-4.0").
reference_implementation_license string Yes SPDX identifier for reference tooling (MUST be "MIT").
canonical_url string (URI) No Authoritative public HTTPS URI where this manifest is fetched.

4.2 Entity Object (entity)

Describes the identity, categorization, publisher entity, and localized descriptions.

Field Type Req Description
name string Yes Official title of the application, API, or tool (1–120 characters).
slug string Yes Unique lowercase kebab-case slug matching ^[a-z0-9]+(?:-[a-z0-9]+)*$.
domain string Yes Primary authoritative FQDN (e.g., "example.org").
type string (enum) Yes One of: "saas", "ai-agent", "mcp-server", "api", "software", "open-source", "framework", "library", "plugin", "extension", "desktop", "mobile".
descriptions map[string, object] Yes Map keyed by BCP 47 language tags (e.g. "en", "pt-BR", "es"). Each item MUST contain summary (max 256 chars), and MAY contain tagline and text.
license object No License object with type (open-source, proprietary, freeware, commercial), spdx_id, and commercial_terms.
vendor object No Legal organization details: name, website, country_code (ISO 3166-1 alpha-2), and support_url. country_code is where the vendor is based, not where the product is offered.

4.3 Capabilities Object (capabilities)

Declares deployment targets, functional interfaces (OpenAPI, MCP, gRPC), pricing, and ecosystem integrations.

Field Type Req Description
deployment array[string] Yes Non-empty array: "cloud", "self-hosted", "on-premise", "hybrid", "desktop", "mobile", "edge", "docker".
interfaces.mcp object No Model Context Protocol definition: version, transport ("sse", "stdio", "streamable-http"), endpoint, tools_count, and schema_url.
interfaces.openapi object No OpenAPI definition: version (e.g. "3.1.0") and spec_url.
pricing object No Pricing model ("free", "freemium", "subscription", "usage", "one-time", "quote"), integer starting_price_cents, and ISO 4217 currency.
integrations array[string] No List of supported integrations (e.g., ["kubernetes", "claude", "slack"]).

Not in 2.0: where a product may be bought and used, its interface and support languages, its billing currencies and where customer data is stored are proposed in RFC 0006 as capabilities.availability. It is a working draft, present only in msr-2.1-draft.json; a 2.0 manifest that carries it fails validation.

4.4 Releases Object (releases)

Details regarding active and historical distribution artifacts.

Field Type Req Description
latest.version string Yes Release version string (e.g. "2.4.0").
latest.published_at string (date-time) Yes ISO 8601 UTC timestamp (e.g., "2026-09-15T14:30:00Z").
latest.release_type string (enum) No One of: "major", "minor", "patch", "security", "initial".
latest.changelog_url string (URI) No Direct URL to release notes or changelog.
latest.artifacts array[object] No Array of downloadable binaries: platform, uri, sha256 (64 hex characters), and size_bytes.

4.5 Trust Object (trust)

Cryptographic proof, domain ownership attestations, and security audits.

Field Type Req Description
domain_verification object No Verification method: dns-txt, well-known-http, or tls-alpn; status: verified, pending, revoked.
signatures object No Cryptographic manifest signature: algorithm (ed25519, ecdsa-p256), public_key, and manifest_signature.
audit_receipt object No Security audit record: auditor, audit_url, audit_date, and status.

4.6 Telemetry Object (telemetry)

Availability endpoints and bi-directional event notifications.

Field Type Req Description
status_page string (URI) No Public system uptime URL (e.g. "https://status.example.org").
webhook.url string (URI) No HTTPS push receiver on the vendor's domain for real-time registry events.
webhook.events array[string] No Subscribed event triggers (e.g., ["release.published", "status.incident"]).

5. Verification Standard

5.1 Domain Ownership Proof

Aggregators MUST NOT allow arbitrary third-party accounts to claim authority over external domains. Conformance requires one of two verification channels:

  1. RFC 8615 Well-Known HTTP Proof: The manifest is fetched directly over HTTPS from https://<domain>/.well-known/msr.json using an SSRF-hardened HTTP client (strictly rejecting private/loopback IP blocks).
  2. DNS-TXT Challenge: A DNS TXT record on _msr-challenge.<domain> containing the registry token.

5.2 Webhook Signature Verification

When registries send event notifications to telemetry.webhook.url, they MUST include two HTTP request headers:

  • X-MSR-Timestamp: Integer Unix epoch timestamp.
  • X-MSR-Signature: Hex-encoded HMAC-SHA256 signature calculated over timestamp + "." + raw_body.
import hmac, hashlib

def verify_msr_webhook(secret: bytes, timestamp: str, raw_body: bytes, header_sig: str) -> bool:
    signed_payload = f"{timestamp}.".encode("utf-8") + raw_body
    computed = "sha256=" + hmac.new(secret, signed_payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(computed, header_sig)

6. Compatibility & Migration Guides

MSR JSON v2.0 is designed as an upgrade path for existing metadata standards:

  • Migrating from PAD XML: Use the official CLI utility msr convert --from-pad <file.xml> to automatically transform legacy XML fields into normalized MSR v2.0 structures. Floating-point prices are automatically converted to minor currency units.
  • Migrating from MSR v1.x: Top-level software and vendor blocks are consolidated into entity, and pad_version is replaced by protocol.version.
  • OpenAPI 3.1 Linkage: Simply declare your existing OpenAPI specification inside capabilities.interfaces.openapi to enable automatic API indexing.

7. Developer Examples

Review complete, validated manifests for various deployment archetypes:

8. Specification Changelog

Version Date Status Key Changes
v2.0.0 2026-09-17 Current Stable RFC 0001: Consolidation of entity archetype, native MCP & AI descriptors, integer minor currencies, Ed25519 trust signatures.
v1.1.0 2025-11-20 Legacy Bridge Added webhook synchronization headers and JSON Schema validation.
v1.0.0 2024-04-10 Deprecated Initial JSON translation of legacy ASP PAD XML standard.