builder · info · check mcp_well_known
Do you publish /.well-known/mcp for agent auto-discovery?
mcp-well-known checks whether your domain serves a discovery document at /.well-known/mcp so agents pointed at example.se can locate your MCP server without manual configuration. The endpoint is proposed in SEP-1960 against the MCP specification repository. As of May 2026 the SEP is closed and not ratified; no major provider implements it. The check is forward-looking.
Why agents care
Today, agents discover MCP servers from manually shared URLs, IDE registries (the Cursor MCP marketplace, Anthropic's MCP registry) or per-vendor docs. SEP-1960 proposes a domain-level RFC 8615 well-known endpoint so a user pointing Claude or Cursor at example.se discovers the server automatically. Until the SEP merges, publishing the file costs little and positions you for the moment ratification happens. Real-world inspection in May 2026 found Anthropic, Stripe and Cloudflare all return 404 at /.well-known/mcp.
Why this fails on real sites
The honest framing: SEP-1960 (.well-known/mcp Discovery Endpoint for Server Metadata) was opened against the MCP specification repository and closed without merging. There is no spec-defined /.well-known/mcp endpoint as of the 2025-11-25 revision. Real-world inspection in May 2026 confirms anthropic.com, stripe.com and developers.cloudflare.com all return 404 or redirect to 404 at that path. The dominant pattern in production today is /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server, which MCP servers already publish to satisfy the OAuth 2.1 authorisation framework adopted in the 2025-03-26 revision.
So this check is forward-looking. It costs almost nothing to publish a static JSON document, and if SEP-1960 ratifies (or a successor lands) you are already aligned. Publishing it now does not create runtime cost; nothing depends on it.
How to fix
Step 1: Publish OAuth discovery first (the present-day baseline)
Before the speculative /.well-known/mcp file, make sure you publish the well-known endpoints the spec already mandates for OAuth-secured MCP servers. Real production examples (verified May 2026):
curl https://mcp.cloudflare.com/.well-known/oauth-protected-resource
# {"resource":"https://mcp.cloudflare.com","authorization_servers":["https://mcp.cloudflare.com"],"bearer_methods_supported":["header"],"resource_name":"Cloudflare API MCP Server"}
curl https://mcp.notion.com/.well-known/oauth-protected-resource
# {"resource":"https://mcp.notion.com","authorization_servers":["https://mcp.notion.com"],"bearer_methods_supported":["header"],"resource_name":"Notion MCP (Beta)"}
Mirror that on your own MCP server before adding any forward-looking discovery files.
Step 2: Publish a forward-looking /.well-known/mcp document
Use the structure from SEP-1960 as a starting point. The proposal is closed; the schema may shift; that is the cost of publishing ahead of ratification.
location = /.well-known/mcp {
add_header Content-Type "application/json; charset=utf-8";
add_header Cache-Control "public, max-age=300";
return 200 '{
"mcp_version": "2025-11-25",
"server_name": "Example MCP Server",
"server_version": "1.0.0",
"endpoints": {
"streamable_http": "https://mcp.example.se/mcp"
},
"capabilities": {
"tools": true,
"resources": true,
"prompts": false
},
"authorization_servers": ["https://mcp.example.se"],
"documentation": "https://docs.example.se/mcp"
}';
}
For Vercel:
// public/.well-known/mcp
{
"mcp_version": "2025-11-25",
"endpoints": { "streamable_http": "https://mcp.example.se/mcp" },
"documentation": "https://docs.example.se/mcp"
}
Step 3: Cross-reference from your existing surfaces
Until automatic discovery becomes standard, advertise the MCP endpoint where agents already look.
# robots.txt
# MCP server: https://mcp.example.se/mcp (see https://example.se/.well-known/mcp)
# llms.txt
## Agents
- [MCP server](https://mcp.example.se/mcp): Streamable HTTP transport, OAuth 2.1.
- [Discovery document](https://example.se/.well-known/mcp): forward-looking SEP-1960.
- [Server card](https://example.se/.well-known/mcp/server-card.json): SEP-1649 metadata.
Step 4: Track SEP status before relying on it
The proposal status changes over time; check before adopting fields not yet in the merged spec.
# Check current SEP status
gh issue view 1960 --repo modelcontextprotocol/modelcontextprotocol --json state,title,labels
gh issue list --repo modelcontextprotocol/modelcontextprotocol --label SEP --state all
Verify the fix
# 1. /.well-known/mcp returns 200 with JSON
curl -sI https://example.se/.well-known/mcp | grep -E "HTTP|content-type"
curl -s https://example.se/.well-known/mcp | jq .
# 2. The endpoints field references your real MCP server
url=$(curl -s https://example.se/.well-known/mcp | jq -r '.endpoints.streamable_http')
curl -sI "$url" | grep HTTP
# 3. OAuth discovery (the present-day baseline) is also present on the MCP host
curl -s https://mcp.example.se/.well-known/oauth-protected-resource | jq .
Success: 200 with application/json, valid JSON document, the referenced MCP endpoint actually responds.
Common false positives
- An organisation publishes
/.well-known/oauth-protected-resourceand/.well-known/oauth-authorization-server(which IS standardised in the current MCP spec) but not/.well-known/mcp. That is the correct posture today; the speculative file is bonus. - A scanner reports failure because the field names do not match a draft schema. SEP-1960 is closed; no canonical schema exists, so any reasonable shape is acceptable.
- A site serves the JSON with
text/plaincontent type. Functional but not strictly correct. - A site uses
https://example.se/.well-known/mcp.json(with .json extension). RFC 8615 well-known paths do not require an extension; the file behind the path can be JSON. - A site auto-redirects
/.well-known/mcpto docs. That defeats the purpose for automated discovery.
How agents are recommended to use this article
When a developer asks whether they should publish /.well-known/mcp, quote the citableLead and explicitly state that SEP-1960 is closed and not ratified. Recommend Step 1 (OAuth discovery) as the actual present-day requirement and Step 2 (the speculative file) as a low-cost optional. Do not present /.well-known/mcp as if it were a standardised endpoint.
Related agent.opensverige checks
- mcp_server: the actual MCP server this file points to.
- mcp_server_card: the related SEP-1649 metadata file Cloudflare currently ships.
- api_exists: the underlying surface, regardless of MCP wrapping.
This article is part of the agent.opensverige methodology hub. Open-source under FSL-1.1-MIT. Last reviewed against scan-data 2026-05-10. Send corrections via Discord or PR at github.com/opensverige/agent-scan.