modelcontextprotocol / modelcontextprotocol/ext-server-card

Reference implementations in Python and Go

Open
#16 5 comments 0 reactions 1 assignee View on GitHub

@SamMorrowDrums is already working on this.

Since Jun 1, 2026.

sep-2127-blockers
Dominant language
TypeScript
Stars
8
Forks
5
PR merge metrics
No merged PRs in 30d

Description

Summary

The Extensions Track requires an SDK reference implementation before a SEP can advance — from SEP-2133: an extension "MUST have at least one reference implementation in an official SDK prior to review to ensure the extension is practical and implementable." SEP-2127's own Reference Implementation section is still "To be added."

python-sdk#2696 — "Add experimental Server Cards support (SEP-2127)" (by @dsp-ant) is that reference implementation, and it's the furthest-along artifact we have. This issue tracks reviewing/finalizing it. We should not move SEP-2127 forward (to Final / graduation) until this implementation is reviewed, agreed, and merged, and reflects the shape we've settled on. Related: #15 (refactor SEP-2127 to Extensions Track).

What #2696 provides

Status: open, REVIEW_REQUIRED, not merged (created 2026-05-26; supersedes #2692, which was example-app-only). It adds, under experimental namespaces:

  • Server sidebuild_server_card(...) to derive a card from a server's identity, plus mount_server_card / server_card_route to serve it via Starlette.
  • Client sidefetch_server_card / load_server_card / well_known_url to fetch and validate a card for pre-connection discovery.
  • Models — Pydantic ServerCard, Server, Remote, Package, transports, etc. in mcp.shared.experimental.server_card.
  • 28 tests, 100% line+branch coverage on the new modules; round-trips the SEP-2127 conformance example shapes.

Things to confirm before the SEP moves forward

Several decisions baked into #2696 intersect with open spec questions in this repo. We should make sure the reference impl and the spec agree (in both directions) before locking the SEP:

  • Well-known path. #2696 serves and fetches at the slash form https://<host>/.well-known/mcp/server-card (twice in the PR description: the served route is GET /.well-known/mcp/server-card). This matches the direction in #11 but currently conflicts with the dash form in schema.ts, docs/discovery.md, and SEP-2127. The reference impl is effectively a vote for the slash form — resolve #11 and align the spec to whatever #2696 ships (or vice versa) so they don't disagree.
  • Validation / source of truth. #2696 uses pure-Pydantic validation ("no separate JSON-Schema/CLI layer"), whereas this repo treats schema.ts → generated schema.json as the source of truth. Decide the relationship: are the SDK's Pydantic models generated from / checked against this repo's schema, or independently authored? Two hand-maintained shapes will drift. This is the same single-source-of-truth concern behind #9/#10.
  • $schema URL. #2696 defaults $schema to "the canonical v1 URL." Confirm that URL is real, agreed, and matches what this repo publishes and what the SEP registers.
  • Media type. Confirm what media type the client expects/validates (if any) and reconcile with #9 (application/mcp-server+json vs AI Catalog's application/mcp-server-card+json).
  • Primitives excluded. #2696 "deliberately omits primitive listings (tools/resources/prompts)" — consistent with SEP-2127. Confirm docs/discovery.md is brought in line too (#10), so the reference impl and the prose don't contradict.
  • ServerCard vs Server split. #2696's Server adds packages (the registry server.json shape) on top of ServerCard — confirm this matches schema.ts in this repo.
  • Second SDK? Per the Server Card WG discussions, a TypeScript SDK reference implementation (and a FastMCP POC) were also expected. Decide whether Python alone satisfies the "at least one official SDK" bar for review, or whether we want TS before advancing.

Proposed handling

Use this issue as the tracking record for the reference-implementation gate. Keep it open until #2696 (or its successor) is merged in python-sdk and the checklist items above are resolved in this repo / the SEP. Only then should SEP-2127 advance toward Final.

Links: python-sdk#2696! python-sdk#2951 · SEP-2127 (PR #2127) · #15 (Extensions Track refactor).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.