Development of the Official MCP Metaregistry #11
Replies: 6 comments 7 replies
-
The word "Licensing" never occurs. The license of each MCP needs to be recorded, and if no license is present, then the code should not be included in the registry: For your repository to truly be open source, you'll need to license it so that others are free to use, change, and distribute the software. Of the 2600+ MCP Servers I have mirrored (https://github.com/MCP-Mirror) 1000 don't have an obvious license file, of those 1000 some of them mention a license in various sub files (e.g. the pyproject.toml), but there are quite a few MCP Servers with no licensing information that I can find. |
Beta Was this translation helpful? Give feedback.
-
@tadasant You mentioned "It is a non-goal to try to rank related MCP servers". While I understand the intention, I think having some kind of tagging will be helpful for the MCP clients. Here are some use cases I could think of:
What do you think? |
Beta Was this translation helpful? Give feedback.
-
I think this is a bad idea. Discovery via crawling is one of the best inventions of the web. Making crawlers simple has been solved numerous times via conventions like Centralized registries create additional work for developers, in what should otherwise be a permissionless system. It also creates unspoken (or spoken) conditions for inclusion, and registry committers will inevitably be biased in their code, as is human nature. Clients, acting as user-agents, should of course do filtering and only use tools that they think provide a good UX for their customers. Clients will disagree on what a good UX is, and that's a good thing. But it should be up to user-agents to make that decision, not centralized committees. |
Beta Was this translation helpful? Give feedback.
-
To echo what others have said, the idea of a central registry doesn’t surprise me at all. We've already seen a wave of new companies emerging, each claiming to offer a “better” way to curate lists of MCP servers - yet hardly any of them define clear criteria for inclusion. If an official registry is going to exist, I strongly urge that we put real thought into establishing meaningful entry criteria. Maven has historically done a solid job here - packages go through checks and balances before being published. On the other hand, NPM is often cited as a cautionary tale: it's open to anyone, and that openness has come at the cost of trust and safety. What we don’t want is a scenario where users trust the registry by default, only to end up pulling a malicious MCP server that made it onto the list simply because no one was vetting it properly. Some of the criteria should include:
This is of course a fraction of what could be added. The goal should be that the bar for making its way onto the registry isn't as low as the floor. |
Beta Was this translation helpful? Give feedback.
-
Not sure if this is helpful or not but I put together a spec a while back and put it up about a month ago, for how I'd build something like what is being proposed here using existing infrastructure as solving for this is related to how we're thinking of solving for global deployments in our platform. https://github.com/zerocmd/acdp/blob/main/ACDP.md
It does contain a section on different options for registries. This would be for both agents & tool/server registration and discovery. |
Beta Was this translation helpful? Give feedback.
-
Hi, great work on exploring and building the registry! I’m curious — will the registry eventually support a feature that allows MCP servers to self-register, so that MCP clients can easily discover them automatically? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Edit (May 27, 2025): Here is a slide deck presentation from the recent MCP Developers Summit outlining the goals of the official registry.
Spurred by this discussion, a group of MCP community members have begun working on the official MCP metaregistry in this modelcontextprotocol/registry repository.
The initial deliverable we are sprinting towards is a REST API that centralizes metadata about MCP servers by leaning on server creators to submit and maintain metadata about their servers in a standardized format.
We envision that MCP client applications and other "server aggregator" type consumers will be able to leverage this metadata as a source of truth touchpoint in order to power functions like "extensions", "MCP marketplaces", "integrations", and other UX that involves discovering and installing MCP servers.
An official UI experience will likely come as a next-step after the initial API launch.
Coordinating this effort: @toby (GitHub), @alexhancock (Block), me (PulseMCP)
Leading development: @sridharavinash (GitHub)
Big thank you to everyone else who has contributed input on this working group so far: @dsp-ant, @jspahrsummers, Marc-Antoine Belanger, Benjamin Eckel, Chris Dickinson, Nils Adermann, @macoughl, @ravinahp, @jerome3o-anthropic, @topherbullock, @calclavia, @cliffhall
If anyone in the community has feedback or commentary on any aspect of the metaregistry, I encourage you to open up a Discussion explaining your use case and feedback. We feel good about the high level architecture and scope of the metaregistry, but are very open to feedback and want to make sure we are properly addressing the ecosystem's needs that should be in scope for this work.
Below is a high level review of where we currently stand and some architectural decisions we have made, along with some open questions we'd love feedback and input on (we'll spin some of these out to separate Discussions, but feel free to open your own if you don't see one already out there). The best way to contribute to this effort is to either (1) offer specific examples and use cases of your needs, or (2) pick up well-defined chunks of work that we have already aligned on and contribute to the codebase.
Details below are subject to change; I won't be updating the below as it goes stale. Consider this a starting point at the time of writing, but the codebase and its associated documentation is the ultimate source of truth, and other more fine-grained Discussions/Issues will likely progress forward these details.
Scope
Problem Statement
End-users of MCP clients have a need to be shown MCP servers they may want to install. MCP client hosts need to surface this data for their users.
Currently, the way MCP clients do this is one of the following:
This is a very fragmented approach that results in significant amounts of duplicated effort across the ecosystem, and still results in an inefficient, non-comprehensive UX for end-users. In addition, it puts server maintainers in a position where they must maintain their metadata on potentially dozens of different solutions (whether they be third party registries or MCP client registries).
Solution
Create a single source of truth "centralized metaregistry", to which server maintainers can push their metadata, and MCP clients (or other consumers) can consume that metadata, filter it, curate it, and serve it to their end-users.
This metadata should contain:
npx
anduvx
-style installation instructions).We aim to make the shape of this metaregistry be fit for re-use in other contexts, such as internal private metaregistries, or opinionated intermediate metaregistries that can be consumed by MCP clients instead of (or in addition to) the official centralized metaregistry.
Out of Scope
Massive scale & reliability (millions of consumers): this metaregistry should not be consumed by MCP client end-users. MCP client hosts should maintain asynchronous systems that integrate with the metaregistry. This means the maximum number of direct consumers of this metaregistry is roughly equal to "number of MCP client apps", rather than "number of MCP client app users".
Solving the long tail of MCP filtering & curation capabilities: MCP server "selection" is a complex problem with a myriad of long-tail use cases. The right "sort order" or "ranked search results" for a given use case or query is not something we want to solve centrally. MCP Client IDE's will solve this problem differently than MCP Client chat apps, who will solve it differently from MCP Client agent-building frameworks. While we may choose to include optional data fields that help facilitate solving this problem for end-users, we do not anticipate including that kind of data in the centralized metaregistry itself.
Reusability of infrastructure, implementation detail decisions: While we expect the ecosystem to reuse the shapes (such as OpenAPI shape, mcp.json shape) associated with this work, we are not designing for reuse of the underlying implementation details and infrastructure. As such, we will not provide instructions on "how to serve your own instance of this metaregistry".
Comprehensive security assurances: while there is some opportunity to improve security guarantees across the MCP ecosystem by working assurances into a centralized metaregistry, we are starting off by delegating source-code level concerns to package registries (we will not host any source code), and deferring opportunities like source code scanning, tool poisoning countermeasures, etc. to post-MVP iterations of the metaregistry.
Architecture
REST API: No authentication required to read; GitHub authentication required to publish. Publishers will submit metadata in a standardized format ("mcp.json") describing their MCP servers. The API will accept consumer requests to read published metadata, and have internal capability to perform async jobs and potentially issue webhook calls. It will be implemented with Go.
Note
We are choosing a REST API rather than, say, a daily data dump, because we expect our API shape to be repurposed by various consumers that augment (or make private versions of) the metaregistry. So while the centralized metaregistry is not designed for direct consumption by MCP client apps, the intermediate consumers may choose to mirror the shape of the centralized metaregistry, and it would be useful for them to expose their data to MCP client apps in a consistent manner.
NoSQL Database: To store application-level metadata and
mcp.json
data.GitHub OAuth: Will serve as our auth provider. Requests to publish data into our REST API must go through GitHub OAuth.
Source Code Registries: npm, PyPi, crates, dockerhub, GHCR, etc. will store original source code and version data. The metaregistry will store references to these on a per-server basis.
CLI tool: Used by developers to trigger publication requests to the REST API.
Building blocks
Domain-based namespacing: Publishers can use TXT-based DNS verification to get access to publish packages namespaced under reverse DNS (e.g.
com.microsoft(.subdomain)/my-mcp-server
). For those publishing source code to GitHub without DNS verification, we'll offer a namespace likeio.github.{username}/my-mcp-server
.Note
Whether we should use forward DNS or reverse DNS is still an open question. See #12
Auth delegation to GitHub OAuth: In its simplest form, this lets us tie a DNS verification to a GitHub user or an entire GitHub organization, used when executing metadata updates.
Delegation to existing package & container registries: Gives us a base level of security and anti-spam assurance.
Store only metadata that serves as a single source of truth: Anything that can be a reference to structured data stored elsewhere should be a reference, not a copy.
Design for consumers to poll & transform: Because we will not solve "curation" in a centralized manner, our design assumes that there will be at least one middle-layer of data transformation in between data published by the metaregistry and consumption by MCP client end-users.
Considerations
Third parties should be able to mirror our design for private or downstream usage: There will be a need for registering MCP server metadata beyond a single, centralized public repository. Consumers of this metadata may want to compose the centralized repository with their own private repositories, or augment data in the metaregistry with their own opinionation; our API surface area should keep those use cases in mind.
Example Flows
Here are example flows showing how the system will work in practice:
GitHub user publishes to personal namespace with no domain verification
GitHub user verifies domain ownership
GitHub user publishes under namespace they have previously verified
Frequently Asked Questions
How do I know if someone creates a server named @block/goose, that it is actually made by Block?
What should the name of the server be? Should we enforce that the name is the repo name or can it be freeform?
How do we handle domain transfers? E.g. domain expires, someone else buys it; we'd need to make sure the old owners don't still have access.
What fallbacks do we have in case spammers or other bad actors succeed in publishing malicious/spam content?
Will there be a problem with spam and abuse detection?
Will we maintain server quality guarantees in some way?
How often do we expect consumers to read our data?
Who will be responsible for monitoring, alerts, on-call?
How does versioning work?
version_detail
attributeHow will people discover servers they're interested in?
How will we get off the ground w.r.t. data in the metaregistry?
modelcontextprotocol/servers
README as a starting point (scrape and ingest); to be replaced by actual CLI-published data over timeWhich component will manage GitHub auth and verifying repo ownership?
How will identity work?
How will regaining access (such as when leaving a job) work?
How do we do change management w.r.t. to our API's and tools?
How do we encourage people to actually use this system?
How do we know whether folks are using our solution and happy with it?
What reliability guarantees do we need?
Is there any way to trick the official metaregistry to serving a package that a consumer is not expecting?
source_code_location
(e.g. to a GitHub repository) reference is pushed by an authenticated user. It may make sense to specifically OAuth on any attempt to linksource_code_location
(which could mean needing to integrate e.g. Gitlab OAuth alongside GitHub OAuth in order to support publishing Gitlab-hosted source code).Note
This note on avoiding misrepresentative packages is not fully fleshed out and could use more input.
How do we handle typosquatting?
npm install <packagename>
flow), this is not a particularly notable riskHow do we manage repo-jacking?
Have a way to quickly delete accidentally published private data
Are we introducing any privacy and/or security risks for end-users?
Note
Could use community input on potential risks and mitigation ideas here.
What registries should we support?
How will "search" work?
API Shape
See OpenAPI PR here.
mcp.json Schema
TBD: will likely be similar to/derived from the OpenAPI shape above.
Open questions
Not comprehensive and likely will evolve, but some questions we acknowledge are not yet fully solved:
Beta Was this translation helpful? Give feedback.
All reactions