3.0.0
With standard OAuth, your client registers dynamically with every server it connects to, receiving a fresh client_id each time. This works, but the server has no way to verify who your client actually is — any client can claim any name during registration.
CIMD (Client ID Metadata Documents) flips this around. You host a small JSON document at an HTTPS URL you control, and that URL becomes your client_id. When your client connects to a server, the server fetches your metadata document and can verify your identity through your domain ownership. Users see a verified domain badge in the consent screen instead of an unverified client name.
Client Usage
Pass your CIMD document URL to theclient_metadata_url parameter of OAuth:
client_id instead of performing Dynamic Client Registration. The server fetches your document, validates it, and proceeds with the standard OAuth authorization flow.
You don’t need to pass
mcp_url when using OAuth with Client(auth=...) — the transport provides the server URL automatically.Creating a CIMD Document
A CIMD document is a JSON file that describes your client. The most important field isclient_id, which must exactly match the URL where you host the document.
Use the FastMCP CLI to generate one:
--client-id, the CLI generates a placeholder value and reminds you to update it before hosting.
CLI Options
Thecreate command accepts these flags:
| Flag | Description |
|---|---|
--name | Human-readable client name (required) |
--redirect-uri, -r | Allowed redirect URIs — can be specified multiple times (required) |
--client-id | The URL where you’ll host this document (sets client_id directly) |
--output, -o | Write to a file instead of stdout |
--scope | Space-separated list of scopes the client may request |
--client-uri | URL of the client’s home page |
--logo-uri | URL of the client’s logo image |
--no-pretty | Output compact JSON |
Redirect URIs
Theredirect_uris field supports wildcard port matching for localhost. The pattern http://localhost:*/callback matches any port, which is useful for development clients that bind to random available ports (which is what FastMCP’s OAuth helper does by default).
Hosting Requirements
CIMD documents must be hosted at a publicly accessible HTTPS URL with a non-root path:- HTTPS required — HTTP URLs are rejected for security
- Non-root path — The URL must have a path component (e.g.,
/oauth/client.json, not just/) - Public accessibility — The server must be able to fetch the document over the internet
- Matching
client_id— Theclient_idfield in the document must exactly match the hosting URL
Validating Your Document
Before deploying, verify your hosted document passes validation:- The URL is valid (HTTPS, non-root path)
- The document is well-formed JSON conforming to the CIMD schema
- The
client_idin the document matches the URL it was fetched from
How It Works
When your client connects to a CIMD-enabled server, the flow works like this:Client Presents Metadata URL
Your client sends its
client_metadata_url as the client_id in the OAuth authorization request.Server Recognizes CIMD URL
The server sees that the
client_id is an HTTPS URL with a path — the signature of a CIMD client — and skips Dynamic Client Registration.Server Fetches and Validates
The server fetches your JSON document from the URL, validates that
client_id matches the URL, and extracts your client metadata (name, redirect URIs, scopes).
