mcp:// URI scheme, a well-known URI discovery convention, a DNS TXT mechanism, and a security capability negotiation layer — enabling AI agents to autonomously discover MCP servers on any web domain without prior configuration.
This document defines Layer 2. Each layer is independently deployable.
A machine-to-machine identifier for publicly reachable MCP servers.
Two modes are defined. Operators declare which they support.
.well-known only. Works on any web server — shared hosting, WordPress, Wix — with zero DNS configuration required.
DNS TXT first (_mcp.{host}), then .well-known for metadata enrichment. A single UDP packet in <10ms confirms server existence before incurring TLS overhead. Recommended for operators who control DNS and for crawlers operating at scale.
Fast mode starts at Step 1. Base mode starts at Step 2.
Query _mcp.{host} TXT. If v=mcp1 is present, MCP existence confirmed. Proceed to Step 2 for manifest. If absent, proceed to Step 2 directly.
HTTP GET to the well-known path. 200 + valid manifest = done. 404 or timeout (5s) = proceed to Step 3. When both DNS TXT and .well-known specify endpoints, .well-known takes precedence.
Attempt MCP handshake at https://{host}/mcp. If it fails, no server found.
The manifest declares the server's security posture. Clients read and apply it before connecting — no additional round-trip required.
The trust_class field is OPTIONAL. If absent, clients MUST treat it as "public". Each value implies mandatory sub-fields.
expires is REQUIRED.auth object REQUIRED with at least one method. Clients MUST NOT connect before resolving auth.auth + compliance + logging all REQUIRED. compliance.jurisdiction MUST be declared (EU, EEA, UK, or ISO 3166-1).Authentication methods core vocabulary: none, bearer, mtls, apikey, oauth2. Extensions use x- prefix.
JSON document at /.well-known/mcp-server.
| Field | Type | Req | Description |
|---|---|---|---|
mcp_version | string | MUST | MCP spec version |
name | string | MUST | Human-readable server name |
endpoint | string | MUST | URL of the MCP endpoint |
transport | string | MUST | "http" | "sse" |
description | string | SHOULD | Natural language description |
auth | object | SHOULD | Authentication requirements (see ยง4) |
trust_class | string | MAY | "public" | "sandbox" | "enterprise" | "regulated" |
compliance | object | MAY* | REQUIRED when trust_class is "regulated" |
logging | object | MAY* | REQUIRED when trust_class is "regulated" |
capabilities | array | SHOULD | ["tools", "resources", "prompts"] |
cache_ttl | integer | MAY | Seconds. REQUIRED when trust_class is "regulated" |
expires | string | MAY | ISO 8601. REQUIRED when trust_class is "sandbox" |
payment_required | boolean | MAY | Whether tool calls require payment |
payment_methods | array | MAY | "x402" | "stripe" | "apikey" | "mpp-tempo" |
categories | array | MAY | Semantic categories |
languages | array | MAY | ISO 639-1 codes |
contact | string | MAY | Contact email or URL |
crawl | boolean | MAY | false to opt out of indexing |
This domain serves a live manifest conforming to -04: