| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
Just adding a note of context for any readers here that as of the current commit, this is the text of the original SEP proposal, but a lot of folks have contributed feedback to the specifics of reworking the shape in this Google Doc. Pasting here for readability: {
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
"name": "io.modelcontextprotocol.anonymous/brave-search",
"description": "MCP server for Brave Search API integration",
"title": "Brave Search",
"websiteUrl": "https://anonymous.modelcontextprotocol.io/examples",
"repository": {
"url": "https://github.com/modelcontextprotocol/servers",
"source": "github",
"subfolder": "src/everything"
},
"version": "1.0.2",
"supportedProtocolVersions": [ "2025-03-12", "2025-06-15" ],
"icons": [ ... ],
"remotes": [ ... ],
"packages": [ ... ],
"capabilities": { ... },
"requires": { ... },
"resources": [ ... ],
"tools": [ ... ],
"prompts": [ ... ],
"_meta": { ... }
}Most significant sticking points so far:
The rest is largely just details we can bikeshed. I think it's important to design this so we introduce no breaking changes to server.json, as any breaking changes would cause major problems for a lot of production registry-related infrastructure and systems in the ecosystem. So my high level thinking would be to:
I also liked @yoannarz's points here that there is a use case for non-owners of MCP servers to use Server Cards. So if we're going to require Server Cards to be comprehensive descriptors of all the capabilities of a server that only a server owner can advertise, we still have a gap like "how do I as a restaurant owner advertise that Yelp's MCP server is the way to make bookings on my website; I don't actually control the details of its tools and capabilities but I know where it lives and want to put that on my website's .well-known" So maybe there is a path where we make Server Card a strict subset of server.json to elegantly fulfill all the above (e.g. perhaps Server Cards = purely Discovery concerns; then server.json is Discovery+Capabilities); will think more on that and circle back. |
Sorry, something went wrong.
|
Shall we also add an optional extended card for ancillary information (such as additional metadata)? |
Sorry, something went wrong.
|
@tadasant It would be great if we can avoid getting two different formats. Instead we could extend the MCP Registry server.json to also cover the requirements that came up here. Then an MCP Server Card would basically be conventions of what has to be provided (required) for describing remote MCP Servers. The discovery mechanism (.well-known) could be moved to the AI Card initiative, then MCP and A2A (potentially also other AI protocols) could share the discovery mechanism and providers / registries can use one instead of multiple. For this, I just drafted a SEP in AI Cards: Agent-Card/ai-catalog#14 My colleagues Vyshnavi and Raluca prepared a JSON Schema of how the MCP Server Card could look like if we combine it as hinted at above. This may help to see if we can get this together. In discussions with @dsp-ant the question came also up if we need two formats or not. As stated, we should not have two different formats to describe an MCP Server for the same protocol. But the registry itself may have additional information, so for consumers of the registry it is plausible to have a superset model of what the registry provides (like calculated properties, more context). I would keep this separate from the format for self-description and publishing to keep that as simple as possible. |
Sorry, something went wrong.
|
@dsp-ant Hi David fyi @tadasant |
Sorry, something went wrong.
|
@dsp-ant to help drive this forward, I've opened a PR against your branch here. If you are aligned with the direction it's going, could we get it merged and then continue community discussion on the remaining open questions (more detail below)? I'm happy to formally sign on as sponsor for this or as an author if helpful. I've taken into account all the feedback from:
Big thank you to @ggoodman, @PederHP, @sdatspun2, @connor4312, @SamMorrowDrums, @Fannon, @maiargu, @electrocucaracha, @ibuildthecloud, @yoannarz, @pcarleton and everyone else commenting and contributing so far; the feedback is all helping progress this forward. I have avoided iterating on some of the more controversial topics, like dynamic as a value option for primitives, so we can hopefully land this quickly and have separate longer-running discussions on those sticky points. Pasting the rest of the text from my PR for readability here: Some highlights worth pulling out Relationship to AI CardThe AI Card standard is paving a path to providing a protocol-agnostic .well-known path and file format for discovering services. They are planning to serve a list of AI Cards at .well-known/ai-catalog.json. MCP Server Cards will provide a richer, MCP-specific definition that can be used by MCP clients to actually connect and start performing MCP operations. We will store these values at .well-known/mcp/server-cards.json. Example:
We can develop and iterate on MCP Server Cards largely independently from the broader effort to integrate with AI Cards, as long as we maintain some integration point so it is possible to understand when an entry in an AI Card references an MCP Server Card that is hosted and maintained elsewhere. Instructions as a field in the Server Card@PederHP had a good point here. I think it's reasonable to consider, but we don't have it in server.json right now and it doesn't seem particularly critical to have blocking discussions on; I think we should leave it out for now. I've removed it in this PR. supportedProtocolVersionI've moved this field inside the remotes field, per discussion with @ggoodman here. I think it would be reasonable to consider removing this from the SEP to simplify, as we don't currently have it in server.json so we'd be trying to collect feedback on use cases as we try to land this higher level piece of work in Server Card. authenticationI've also moved this field inside the remotes field. My firsthand experience is that it is very common for different remotes entries to have different valid auth methods, so I think it would be a big shift for the ecosystem to consider authentication a top level Server Card concern. Some topics I think we should continue discussing (but out of scope for landing this PR) into the SEP -- Removing $schema from server.json and not including it in Server CardI've removed the explicit $schema field in this PR. We were planning to do this for the MCP Registry in the next iteration of server.json (rationale here, cc @rdimitrov). Basically, hardcoding the $schema field there introduces an unnecessary breaking change across versions, when we don't have intention to make breaking changes to these shapes. A better solution here would probably be to use something like @vyshnavigadamsetti's suggestion of mcpCard: "1.0" that wouldn't needlessly create breaks with every (non-breaking) change. Removing dynamic as an option in tools/primitive valuesThere is pretty significant community opposition to including dynamic as a possible value. @connor4312, @SamMorrowDrums, @Fannon, @sdatspun2 have all expressed their reasoning against it (link, link). Removing the spec language around serving Server Cards as a resourceI left it as-written in the SEP for now, but there is motivation to have this removed Placement of .well-known pathI didn't flesh this out further in this PR, but we should probably incorporate the thinking from @pcarleton and @simonrussell (link, link) explicitly into our language. |
Sorry, something went wrong.
|
Thanks for driving this forward! Just a quick question for clarity, there was a PR previously opened for community feedback iteration. Happy to align with whatever works best for you and the group. |
Sorry, something went wrong.
My suggestion (feel free to direct us otherwise @dsp) would be that going forward, now that we have solid high level alignment, folks should open PRs for discrete sub-topics. For example, one PR proposing dynamic value changes, another PR expanding on the relationship between server.json and Server Cards, another PR perhaps workshopping instructions, and so on. Then David can choose what he wants to pull it on a topic by topic basis and/or make changes to the SEP directly himself. Open threads worth iterating on:
I think each of these could be separate PRs. I'll definitely work on (1) very soon, and can draft more if other folks don't jump on them first. Edit: and maybe some of the smaller changes that are pretty constrained to modifying just one section of the SEP could be made directly as comments and discussed as threads, PR might be overkill for all of them. |
Sorry, something went wrong.
|
Thanks for the suggestion, @tadasant . This makes sense to me. Breaking things down into discrete PRs per sub-topic feels like the right next step now that there's high-level alignment. I'd also be interested to see a bit more community feedback on this approach, and then I'd be happy to help review or contribute where it's most useful. Looking forward to the follow-up PRs! |
Sorry, something went wrong.
|
I opened #2186 as a follow up to @dsp's comment
In the meantime I'll start working on a PR for:
Edit: that PR^ is somewhat intertwined with AI Card discussions, so will likely see where those land before putting something up here. |
Sorry, something went wrong.
|
I tried to clarify the reverse-DNS namespacing for name field and _meta keys in the registry docs. Some ambiguity around reverse-DNS namespacing surfaced during discussions about the name field and .well-known path suffixes, so this PR aims to make the intended conventions explicit without changing behavior: modelcontextprotocol/registry#926 Please let me know if this matches the intended interpretation. |
Sorry, something went wrong.
|
Thanks for the thoughtful work on this proposal! (let me know if this feedback/comment is better suited for a different PR) Wanted to raise a scenario we're seeing frequently in practice. We’re working with many small services businesses (gyms, home services, restaurants, spas..etc) to stand up MCP servers or MCP Apps for their business. A large number of these businesses run their websites on hosted platforms like Wix, or Squarespace, and similar builders. They own their custom domains, but many don't have the ability to place arbitrary files at .well-known paths, that's controlled by their hosting platform. Some more advanced hosting setups for WordPress sites could likely serve files from .well-known paths. But fully managed platforms like Squarespace and Wix don't expose filesystem level control to their users. And I don't believe this is something a plugin or app on those platforms could solve either with .well-known path routing being below what third-party apps would have access to in most website hosting platforms. These businesses are building capabilities like bookings, availability, quotes..etc and will want to adopt server cards to enable better discoverability of their tools, but likely won’t be able to without support from their website hosting platform (which could prioritize platform specific features versus the range of saas products that the small business might be using to enable their tools). I might be misunderstanding how the .well-known mechanism would work in practice for these platforms or businesses, if so would appreciate any guidance! Just wanted to raise this scenario and consideration to small services businesses building MCP capabilities and looking to evolve with new standards for discoverability. |
Sorry, something went wrong.
|
Excited to see this specification moving forward! On our end, we have a strong need to support localized titles and descriptions for MCP servers. The goal is to dynamically display server metadata (e.g., title/description) in the user’s preferred language, which would significantly improve UX by making the interface more accessible and user-friendly. Would it make sense to extend the current schema to accommodate localized fields? For example, we could modify the description field (and similarly for title) to support either:
"description": {
"oneOf": [
{ "type": "string" },
{
"type": "object",
"additionalProperties": { "type": "string" },
"description": "Keys must be valid RFC 5646 language tags (e.g., 'en-US', 'fr-FR')."
}
]
}
To ensure consistency, we should also apply this localization pattern to tool metadata (title and description). This would allow MCP hosts to display tool information in the user’s language, aligning with the broader goal of a localized UX. Happy to discuss about it and see if others feel the need of localization. |
Sorry, something went wrong.
|
|
||
| The full specification is maintained in the | ||
| [experimental-ext-server-card](https://github.com/modelcontextprotocol/experimental-ext-server-card) | ||
| repository. The TypeScript file [`schema.ts`](https://github.com/modelcontextprotocol/experimental-ext-server-card/blob/main/schema.ts) |
There was a problem hiding this comment.
Reading through the examples in the repo.
Is the Meta object meant to capture the Capabilities & Extensions the server supports? None of the examples show this?
Also since we have protocol version as a top level why wouldn't we have these two core capabilities as a high level as well?
Sorry, something went wrong.
There was a problem hiding this comment.
Is the Meta object meant to capture the Capabilities & Extensions the server supports? None of the examples show this?
@SamMorrowDrums added a line to clarify this is not the intent.
Also since we have protocol version as a top level why wouldn't we have these two core capabilities as a high level as well?
I think the plan here should be to align with DiscoverResult - namely that capabilities should be a peer to our already-modeled supportedProtocolVersions (and extensions should be at capabilities.extensions).
That said, for this initial v1 we don't have declaring capabilities/extensions in scope. Just added a tracking issue.
Sorry, something went wrong.
|
|
||
| Where the formats cover the same concepts, such as identity, documentation, and remote endpoints, they use compatible metadata where practical. A Registry entry can reference or embed a card's remote information, while vendors that need to attach installation hints directly to a card can use namespaced `_meta`. | ||
|
|
||
| ## Specification |
There was a problem hiding this comment.
Procedural question: I'm not sure we have a SEP which links out to the Schema and examples like this. Given that the schema can change independent of the SEP, how do we think about voting?
I.e. I can approve the SEP but the schema could change out from under it.
Sorry, something went wrong.
There was a problem hiding this comment.
Our intent is that, while Server Cards remain an extension, CMs would not have to approve every schema change. As precedent, I believe MCP Apps worked this way, no? i.e. MCP Apps has been an official extension for a while, and they have been evolving all their relevant schema shapes independent of any CM review.
When we are ready to graduate it out of Extensions into the core spec, we would lock in the shape at that time and transition its maintenance to require CM sign-off.
Sorry, something went wrong.
|
|
||
| This specification intentionally omits primitive definitions (tools, resources, and prompts) from server cards. MCP servers are inherently dynamic: the primitives a server exposes can vary by authenticated user, session, configuration, feature flags, deployment state, and more. A static document cannot reliably represent this surface, and there is currently no viable substitute for runtime listing via the protocol's standard operations (`tools/list`, `resources/list`, `prompts/list`) with the logged-in user's identity. Including primitives prematurely risks disadvantaging dynamic servers and encouraging clients to rely on information that may be incorrect. A follow-on SEP should address the prerequisites, such as variant enumeration and clear consumer contracts, before primitive advertisement is added. | ||
|
|
||
| ### Why Not Wait for Primitives? |
There was a problem hiding this comment.
nit: it seems like it would be good to have a comparison / disambiguation to server/discover endpoint
Sorry, something went wrong.
There was a problem hiding this comment.
Added by @SamMorrowDrums here
Sorry, something went wrong.
|
|
||
| This SEP is fully backward compatible with existing MCP implementations: | ||
|
|
||
| - Server cards are **optional**. Servers that don't implement them continue to work normally through standard initialization. |
There was a problem hiding this comment.
nit: some references to initialization and handshake throughout the SEP
Sorry, something went wrong.
There was a problem hiding this comment.
Addressed by @SamMorrowDrums here
Sorry, something went wrong.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…rd-sep-feedback Address final review feedback on SEP-2127
Maintainer Activity CheckHi @dsp-ant! You're assigned to this SEP but there hasn't been any activity from you in 16 days. Please provide an update on:
If you're no longer able to sponsor this SEP, please let us know so we can find another maintainer. This is an automated message from the SEP lifecycle bot. |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
This SEP proposes adding a standardized discovery mechanism for HTTP-based MCP servers.
Moved from: #1649
Summary
This enables clients to automatically discover:
...all before establishing a connection.
Key Features
See the full specification in seps/2127-mcp-server-cards.md.