fastmcp.server.auth.cimd
CIMD (Client ID Metadata Document) support for FastMCP.
.. warning::
Beta Feature: CIMD support is currently in beta. The API may change
in future releases. Please report any issues you encounter.
CIMD is a simpler alternative to Dynamic Client Registration where clients
host a static JSON document at an HTTPS URL, and that URL becomes their
client_id. See the IETF draft: draft-parecki-oauth-client-id-metadata-document
This module provides:
- CIMDDocument: Pydantic model for CIMD document validation
- CIMDFetcher: Fetch and validate CIMD documents with SSRF protection
- CIMDClientManager: Manages CIMD client operations
Classes
CIMDDocument
CIMD document per draft-parecki-oauth-client-id-metadata-document.
The client metadata document is a JSON document containing OAuth client
metadata. The client_id property MUST match the URL where this document
is hosted.
Key constraint: token_endpoint_auth_method MUST NOT use shared secrets
(client_secret_post, client_secret_basic, client_secret_jwt).
redirect_uris is required and must contain at least one entry.
Methods:
validate_auth_method
validate_redirect_uris
CIMDValidationError
Raised when CIMD document validation fails.
CIMDFetchError
Raised when CIMD document fetching fails.
CIMDFetcher
Fetch and validate CIMD documents with SSRF protection.
Delegates HTTP fetching to ssrf_safe_fetch_response, which provides DNS
pinning, IP validation, size limits, and timeout enforcement. Documents are
cached using HTTP caching semantics (Cache-Control/ETag/Last-Modified), with
a TTL fallback when response headers do not define caching behavior.
Methods:
is_cimd_client_id
fetch
- HTTPS only, DNS resolution with IP validation
- DNS pinning (connects to validated IP directly)
- Blocks private/loopback/link-local/multicast IPs
- Response size limit and timeout enforcement
- Redirects disabled
client_id_url: The URL to fetch (also the expected client_id)
- Validated CIMDDocument
CIMDValidationError: If document is invalid or URL blockedCIMDFetchError: If document cannot be fetched
validate_redirect_uri
doc: The CIMD documentredirect_uri: The redirect URI to validate
- True if valid, False otherwise
CIMDAssertionValidator
Validates JWT assertions for private_key_jwt CIMD clients.
Implements RFC 7523 (JSON Web Token (JWT) Profile for OAuth 2.0 Client
Authentication and Authorization Grants) for CIMD client authentication.
JTI replay protection uses TTL-based caching to ensure proper security:
- JTIs are cached with expiration matching the JWT’s exp claim
- Expired JTIs are automatically cleaned up
- Maximum assertion lifetime is enforced (5 minutes)
validate_assertion
assertion: The JWT assertion stringclient_id: Expected client_id (must match iss and sub claims)token_endpoint: Token endpoint URL (must match aud claim)cimd_doc: CIMD document containing JWKS for key verification
- True if valid
ValueError: If validation fails
CIMDClientManager
Manages all CIMD client operations for OAuth proxy.
This class encapsulates:
- CIMD client detection
- Document fetching and validation
- Synthetic OAuth client creation
- Private key JWT assertion validation
is_cimd_client_id
client_id: Client ID to check
- True if client_id is an HTTPS URL (CIMD format)
get_client
client_id_url: HTTPS URL pointing to CIMD document
- OAuthProxyClient with CIMD document attached, or None if fetch fails
validate_private_key_jwt
assertion: JWT assertion string from clientclient: OAuth proxy client (must have cimd_document)token_endpoint: Token endpoint URL for aud validation
- True if assertion is valid
ValueError: If client doesn’t have CIMD document or validation fails

