.well-known/mcp directory
#1147
Replies: 28 comments 30 replies
-
|
Possibly related: #69 |
Beta Was this translation helpful? Give feedback.
-
|
One additional use case for |
Beta Was this translation helpful? Give feedback.
-
|
Just a note: this would also be useful for prompt MCP's related to a site (not just tools provided by API), e.g. for a research paper site that allows comments and has a prompt MCP that serves something like: |
Beta Was this translation helpful? Give feedback.
-
|
I'll throw in another use case that might be enabled by this effort: signaling to clients what it "costs" to use the server's data or capabilities. For example, some options could be:
In the current web, Google Search rewards services and publishers with traffic, and then the "cost" layer comes after (payment walls, display ads, affiliate links). As fewer humans and more LLM workflows/agents are the ones doing the "web browsing" and interfacing with MCP servers instead of websites, the payment walls & ads-supported models break if everything has to be simply "free" (see: the ongoing web scraping battles / data-for-cash deals between large publishers and the big LLM providers). So figuring out how to signal "cost" enables a whole class of non-free (higher quality) service/data/info providers to be discovered in the MCP ecosystem. |
Beta Was this translation helpful? Give feedback.
-
|
FYI, someone else has come up with a proposal for "/llms.txt" (not in .well-known) at https://llmstxt.org/ |
Beta Was this translation helpful? Give feedback.
-
|
Some thoughts on pushing this discussion forward -- Do we need a whole .well-known directory, or is a single file enough?The starting proposal is:
The .well-known spec itself does allow for directories, but most of the registered URI's in .well-known are just single files rather than directories. I'm not against using a directory if we can foresee a need for it. But I would bias towards keeping this integration with .well-known as simple (and optional) as possible, while putting more fine-grained complexity in some place like the InitializeResult that a client would have access to on initiating the connection with the server. Who is the intended "user" of this file/directory?The obvious answer here might be "MCP Clients," but an alternative idea would be: "MCP server directory web crawlers". Drawing from the sitemap.xml analogy: search engines like Google collect and process sitemaps from websites completely separately from the experience of actually surfacing search results to users. They use sitemap.xml (when available -- it's optional) as a kind of guidebook for their crawlers. And after discovering the website's pages, they apply their own proprietary logic as to whether to crawl them, and ultimately whether to index and rank them in search results. Details like "page title", "page description", contents of a page are not in sitemap.xml -- the crawler needs to go and make a GET request to the URL as part of its crawling process to get that information. If we peg "MCP Clients" as the users of this .well-known file, then we have to rely on them to properly make discovery and comparison/ranking decisions on the fly. It would be the equivalent of Google trying to do its whole discover/crawl/index/rank process the moment somebody enters a query into google.com. And it would have other problems, e.g. the fact that relying on self-owned domains to facilitate the best MCP servers likely won't be practical for some time -- most MCP servers today are by third-party devs that would never get discovered by an MCP Client running a search for "find me MCP servers available on github.com" because all the GitHub MCP servers are made by third parties. If we peg "MCP server directory web crawlers" as the users instead, I could see it playing out like this:
If the idea of building .well-known for third party directories instead of MCP clients directly appeals, the first step could look like this (just iterating on the original proposal) -- Establish a file, /.well-known/mcp.json: {
"version": "1.0",
"servers": [
{
"name": "primary",
"description": "Main API server for example.com",
"endpoint": "https://mcp.example.com/v1",
}
]
}I'm omitting I think that alone could be enough for an initial version. It would accomplish:
|
Beta Was this translation helpful? Give feedback.
-
|
Has the team considered using something like OAuth device flow? I think that, along with a standard token auth option, would be pretty flexible. OAuth Device Authorization Grant (RFC 8628) Standard Token Based Auth [
{
"domains": ["*.airtable.com","airtable.com"],
"token": "my-secret-key"
},{
"domains": ["*.github.com","github.com"],
"token": "another-secret-key"
}
] |
Beta Was this translation helpful? Give feedback.
-
|
Have we thought of aligning with W3C discovery RFC? {
"@context":[
"https://www.w3.org/ns/did/v1",
"https://www.w3.org/2022/wot/discovery-did"
],
...
"service": [{
"id": "did:example:wotdiscoveryexample#td",
"type": "WotThing",
"serviceEndpoint":
"https://wot.example.com/.well-known/wot"
}]
...
} |
Beta Was this translation helpful? Give feedback.
-
|
From the MCP workshop at the AI Engineer conf in NYC. Oauth2 support (and an official registry) was also confirmed.
|
Beta Was this translation helpful? Give feedback.
-
|
I have a question regarding "local" servers, such as the GitHub MCP server. Would it be possible to discover such MCP servers through a .well-known registration? While dynamic discovery of these servers could be useful, it raises security concerns about executing unknown code locally. However, the .well-known mechanism could serve as an approved list of MCP servers, whether they are remote or local. What are your thoughts on this? |
Beta Was this translation helpful? Give feedback.
-
|
Hey everyone! 👋 We've been following these discussions closely and have been thinking a lot about how we, as an agent framework (Mastra), would want to interact with MCP servers. We've also had some great conversations with folks in the community about this over the past week. We built a POC that explores what all this might look like from our perspective. The question we asked ourselves was: "As an agent framework, how could we build an abstraction that would simplify interacting with MCP servers for our users?" You can check out our exploration here: mastra/explorations/mcp-registry-client A few things we've learned:
Here's a quick example of what we have in the link above: const registry = new RegistryClient({
url: "https://example-tools.com/.well-known/mcp.json",
})
const directory = await registry.connect()
const allServers = await registry.listServers()
const stripeServer = await registry.getServerDefinition({ id: "stripe" })
// The server definition includes schemas that can be used to build UIs
const userInput = await userlandexample.buildServerUI(stripeServer.schemas)
const validConfig = stripeServer.parseConfig(userInput)We have some examples showing how this could be used in practice, including a TUI for discovering and configuring servers interactively. We wanted to share our perspective as a downstream MCP consumer and show how we're thinking about integrating once this all comes out. We're excited about these discussions and where MCP is heading! |
Beta Was this translation helpful? Give feedback.
-
|
I've been working on the MCP service discovery issue too since I learned about the protocol and created a POC for a DNS TXT pointer based system that checks for _mcp.domain.com for the tool server address. Here's my POC DNS record: And here where I'm writing up my ideas https://mcpintegrate.com with code here https://github.com/McSpidey/mcpi |
Beta Was this translation helpful? Give feedback.
-
|
This is what killed ChatGPT Plugins - be careful! |
Beta Was this translation helpful? Give feedback.
-
|
One of the things about having complex hosted infrastructure is that it adds more steps and often requires auth / rate limiting at a certain scale. It may make sense to make more plugins / MCPs run as local processes on the users' computer than requiring external hosting. Would prefer having a mechanism that allows discovering services from public GitHub repos as well as hosted services. |
Beta Was this translation helpful? Give feedback.
-
|
bro, look at my design |
Beta Was this translation helpful? Give feedback.
-
|
FYI:Agent2Agent Protocol (A2A) https://google.github.io/A2A/#/documentation?id=agent-card |
Beta Was this translation helpful? Give feedback.
-
|
FYI: Some of the .well-known discussion here has been intertwined with the discussion on the concept of a centralized registry, which is now under development here. FWIW: I think this notion of a decentralized .well-known mechanism for server discovery should still exist, and may become a more prominent server discovery entrypoint than the centralized registry in the long term, especially as remote servers grow in popularity. |
Beta Was this translation helpful? Give feedback.
-
|
This should exist. As a concrete example, at Shopify we've just shipped |
Beta Was this translation helpful? Give feedback.
-
|
I want to bring this up #138 to the .well-known discussion. At Smithery, many of our servers have required GET parameters for users to configure the behavior of a server upon connection. Having a standard way to be able to be able to discover these GET paramaeters would be useful. We're already using an internal Happy to contribute this to the main specification. That way, there's a standard way of defining what GET parameters are possible. |
Beta Was this translation helpful? Give feedback.
-
|
Hi everyone, I've created a community working group channel for this topic on the MCP CWG Discord server. This will help us gather implementation experiences and validate proposals with the wider community, complementing the great discussion happening here. For anyone who isn't already acquainted with the CWG, here's the link to the README which explains more about the working groups and has a link to join the Discord server: https://github.com/modelcontextprotocol-community/working-groups |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
This thread is really insightful!
I'm wondering if MCP Servers could be used as follows, in the future: For example, let's say you prompt ChatGPT something like:
and it'd do it's normal thing (surfaces information from the underlying LLM + a web search to pull promotions from local restaurants, etc.) but in addition to that, it also notices that the Dominos Pizza website references an MCP server in it's metadata (meta tag, .well-known, etc.) so it auto discovers it's functionality and notices that it exposes actions that actually place orders, leading to a response like this from ChatGPT:
Then ChatGPT continues the conversation with the user, helping them place an order (that is ultimately facilitated through the MCP Server abstraction.) Is this where things are going? If not, is there another direction that would provide this type of functionality? |
Beta Was this translation helpful? Give feedback.
-
|
Really appreciate all the work here. Especially the example from Shopify, which helps show how this could scale in practice. To keep things moving, I’m curious what’s holding back adoption from the client side particularly from platforms like OpenAI or Claude. Are there technical constraints, policy questions, or just uncertainty around what to implement? Whatever structure we land on (single file, directory, auth details, cost metadata), having a minimal, shared version of .well-known/mcp.json that clients can start supporting would be a strong step forward. Happy to help draft or test a baseline format if that would be useful. |
Beta Was this translation helpful? Give feedback.
-
|
I'd like to bring up what I think is potentially a serious issue here - it depends on how exactly this is implemented, but if .well-known becomes a critical part of the MCP initialization process, this is a tight coupling to http as a transport. The current model of all important interactions being messages means that MCP could be adapted to literally any transport, any flavor of http, udp, satellite comms, literally anything. I'm not sure if this is meant as purely discovery and initialization still is message based, but I'd be careful to use this for anything other than establishing the MCP connect url. |
Beta Was this translation helpful? Give feedback.
-
|
Great discussion! I'd like to propose a complementary approach inspired by Apple's Smart App Banners. When Safari sees We could do similar for MCP: <meta name="mcp" content="server=https://blog.com/mcp/sse, transport=sse, capabilities=search;read;summarize">Key advantage: LLMs already fetch and parse HTML. When they scrape a page, they'd discover MCP servers with zero additional requests. The client could then prompt: "This site offers enhanced MCP integration - connect for real-time features?" Why both approaches make sense:
The philosophical distinction matters. Meta tags avoid this entirely - they're only parsed if present, no 404s, no extra requests. ChatGPT and Claude's web tools could be tweaked to identify and surface these tags immediately. Combined with Thoughts? |
Beta Was this translation helpful? Give feedback.
-
|
Folks, this discussion needs to reach somewhere because MCP server discovery is a well-needed feature for publicly hosted MCP servers protected by OAuth 2.1. MCP was designed to allow resource and tool discovery by LLMs i.e. the tools/list call would directly return the payload that I can include in the system prompt. With OAuth 2.1, I can't make this call myself at the time of agent initialization/configuration because OAuth 2.1 is meant to allow authorization on behalf of the invoker of my agent, which might not necessarily be me (I may be an agent developer for my org for others to use it). This means that my agent won't even know what functionality it can invoke at the time of initialization. I can't fill the system prompt. Having a .well-known URI solves this problem, if the returned document contains (and it should contain) the resource and tool definitions of the MCP server, I can just include that in my agent's system prompt without the need to initiate the OAuth2.1 flow. |
Beta Was this translation helpful? Give feedback.
-
|
Reiterating on this point: #1147 (comment) Could these .well-known configuration files be utilized by enterprises to discover local MCP servers or servers hosted in remote clouds? I’m relatively new to this topic and might be missing some details. If anyone has experience with a similar use case, I’d really appreciate it if you could share your insights! |
Beta Was this translation helpful? Give feedback.
-
|
A small summary of the possibilities mentioned in this thread:
It looks like |
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.
-
As we think more about supporting remote MCP servers, there's been some discussion around using a Well-known URI (RFC 8615) for server discovery. This could enable automatic discovery and verification of MCP servers, similar to how
sitemap.xmlworks for search engines.The idea would be to establish a directory,
/.well-known/mcp/, allowing for future extensibility. We could then include aservers.jsonfile that might look something like:{ "version": "1.0", "servers": [ { "name": "primary", "description": "Main API server for example.com", "endpoint": "https://mcp.example.com/v1", "capabilities": ["resources", "tools"] } ] }This is just a strawman to get the discussion started—there are likely many other approaches worth considering.
Potential Benefits
Areas for Discussion
Directory Structure
Security
Implementation
Open to all feedback what this could look like and whether it would be valuable for the MCP ecosystem!
Scope
Beta Was this translation helpful? Give feedback.
All reactions