Skip to content

Proposal: optional contract-stability metadata in server manifests (PIN-SPEC 3.2 surfaceHash) #1720

Closed as duplicate

Description

@Paraphern

The registry tells a consumer what a server is, but nothing about whether its tool surface is stable across the versions it lists. Quickstart pinning is being fixed on the docs side (modelcontextprotocol#3431); the next gap after "install this exact version" is "and here is what that version serves".

Proposal: an optional, verifiable contract-stability field in the per-server manifest. Concretely, a surfaceHash - sha-256 over the canonical (sorted-keys, compact JSON per PIN-SPEC §3) array of per-tool canonical objects {name, description, inputSchema}, sorted by tool name. This is not a proposal-stage format: PIN-SPEC §3.2 specifies it (additive, optional), the reference implementation stamps it into every pin since 1.5.0, and 60+ public per-version snapshots exist as worked examples (archive), plus a slug-to-registry-id mapping for the servers we watch (registry-mapping.json).

What it would give the registry: publishers attest "version X serves this exact tool surface"; clients and CI verify a resolved server against the attestation before first run; population-level stability becomes computable. The field evidence says it matters: 25 of 28 watched npm-distributed servers changed at least one tool contract across version windows (our corpus), and a third-party sandbox log measuring 21,738 packages reports 6.5% shipping a version whose tools/list differed from the previous one (same spec thread).

Scope note: this is an offer of an interchange format, not a product pitch - the spec is free to reuse independent of the reference implementation. Happy to write it up as an RFC-style issue with exact canonicalization rules if there is interest.

Activity

  1. rdimitrov commented on Oct 23, 2026

    @rdimitrov
    Member

    Consolidating this tool-surface/history proposal into #82. I linked it there with the specific proposal preserved, including the distinction between publisher-attested fingerprints and externally observed change history. Canonicalization, dynamic/auth-dependent tools, annotations and verification semantics still need a design decision; this closure does not adopt a format or claim implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions