mcpstandard.dev
mcp discovery standard
Internet-Draft · Individual Submission · March 2026

The "mcp" URI Scheme and MCP Server Discovery Mechanism

draft-serra-mcp-discovery-uri-03 · 99rig · Mumble Group
I-D Exists
This document defines the "mcp" URI scheme, a well-known URI discovery convention, and a DNS TXT fallback — enabling AI agents to autonomously discover MCP servers on any web domain without prior configuration.

1. The mcp:// URI Scheme

A machine-to-machine identifier for publicly reachable MCP servers.

// Syntax (ABNF) mcp-URI = "mcp://" authority path-abempty [ "?" query ] // Valid examples mcp://example.com mcp://api.example.com/shop mcp://example.com:8080

2. Discovery Sequence

Upon resolving an mcp:// URI, clients MUST attempt discovery in order:

1
Well-Known URI REQUIRED

HTTP GET to the well-known path. 200 + valid manifest = done. 404 or timeout (5s) = proceed to step 2.

GET https://{host}/.well-known/mcp-server Accept: application/json
2
DNS TXT Record FALLBACK

Query _mcp.{host} TXT. If present with v=mcp1, extract endpoint. Otherwise proceed to step 3.

_mcp.example.com IN TXT "v=mcp1; endpoint=https://example.com/mcp; auth=none"
3
Direct Endpoint LAST RESORT

Attempt MCP handshake at https://{host}/mcp. If it fails, no server found.

POST https://{host}/mcp

3. Manifest Schema

JSON document returned at /.well-known/mcp-server.

FieldTypeReqDescription
mcp_versionstringMUSTMCP spec version (e.g. "2025-06-18")
namestringMUSTHuman-readable server name
endpointstringMUSTURL of the MCP endpoint
transportstringMUST"http" or "stdio"
descriptionstringSHOULDNatural language description
authobjectSHOULD{ "type": "none" | "apikey" | "oauth2" }
capabilitiesarraySHOULD["tools", "resources", "prompts"]
categoriesarrayMAYSemantic categories
languagesarrayMAYISO 639-1 codes
coveragestringMAYISO 3166-1 country code
contactstringMAYContact email or URL
docsstringMAYDocumentation URL
last_updatedstringMAYISO 8601 timestamp
crawlbooleanMAYfalse to opt out of indexing

4. Reference Implementation

This domain serves a live manifest. Try it:

$ curl -s https://mcpstandard.dev/.well-known/mcp-server | python3 -m json.tool { "mcp_version": "2025-06-18", "name": "mcpstandard.dev Reference Server", "endpoint": "https://mcpstandard.dev/mcp", "transport": "http", "auth": { "type": "none" }, "capabilities": ["tools", "resources"], "categories": ["standards", "reference", "discovery"], "contact": "marco.serra@mumble.group", "crawl": true }

5. Implement

Server operator

# Minimal manifest mkdir -p .well-known cat > .well-known/mcp-server <<EOF { "mcp_version": "2025-06-18", "name": "My Server", "endpoint": "https://my.domain/mcp", "transport": "http" } EOF

Client developer

# Resolve mcp://domain.com # 1. well-known curl -sf https://domain.com\ /.well-known/mcp-server # 2. DNS fallback dig +short TXT _mcp.domain.com # 3. direct curl -X POST https://domain.com/mcp