KyoMel / Yogyakarta, Indonesia

Term 222222 / 344

Client ID Metadata Documents (CIMD)

Month
April 2026
Day
28
Source
2026/apr-term.md

Definition:

Client ID Metadata Documents (CIMD) is an OAuth 2.0 identity mechanism — currently an IETF Internet-Draft (draft-ietf-oauth-client-id-metadata-document-01, by Aaron Parecki and Emelia Smith, adopted by the IETF OAuth Working Group in October 2025) — that fundamentally replaces pre-registration as the way OAuth clients identify themselves to authorization servers, by making the client_id itself a publicly-hosted HTTPS URL that resolves to a small, self-published JSON document containing the client’s name, redirect URIs, grant types, and other metadata — so that any authorization server, anywhere, that has never seen this client before, can fetch that URL on demand and proceed directly into an OAuth flow without any prior registration, database entry, or coordination, anchoring trust not in a central registry but in DNS and TLS domain ownership — the same foundational trust mechanism the web has relied on for decades.

CIMD does not add a smarter registration system on top of OAuth — it eliminates the registration step entirely. Instead of an authorization server knowing about a client because someone filled out a form in a developer portal, it knows about a client because it can read a JSON file the client controls at its own domain. The trust comes not from a central authority saying “we know this client” — it comes from the fact that only the legitimate owner of my-agent.example.com can control what is served at that URL.

Background — Why CIMD Exists

The Core Problem: OAuth Client Identity at Scale

Traditional OAuth requires clients to be KNOWN before they can participate in any flow:

Old model: Client developer → logs into developer portal → fills out registration form → receives: client_id = “abc123xyz” Authorization server stores: client_id: “abc123xyz” client_name: “My App” redirect_uris: [“https://myapp.com/callback”]

Every future auth request:
  client presents "abc123xyz"
  server looks up its own database
  finds the record → proceeds ✅

This works when: ✅ You have ONE auth server (Google, GitHub) ✅ A human developer can fill out a form ✅ The ecosystem is small and controlled

This FAILS completely when: ❌ An AI agent needs to connect to 100+ MCP servers each with a different authorization server ❌ A CLI tool needs OAuth without human setup ❌ An open federated ecosystem has thousands of clients ❌ No human is available to perform manual registration

Example:

An AI Agent Connecting to Multiple MCP Servers An AI coding agent needs to authenticate against dozens of different MCP servers — each with a different authorization server — without any pre-registration anywhere.

At scale: AI agent connecting to 100 MCP servers

                  Pre-Registration  DCR (RFC 7591)   CIMD
                  ────────────────────────────────────────────
Setup per server: Manual form       POST /register   NONE ✅
                  ❌ (impossible     (automated but
                  at scale)          creates problems)

Client_id per     Different per     Different per    ONE URL
auth server:      server ❌          server ❌         everywhere ✅

DB records        100 entries per   100 entries per  0 entries
created:          auth server ❌     auth server ❌    anywhere ✅

DoS surface:      None              Public write     None ✅
                                    endpoint ❌

Identity          By central        None — claimed   By DNS/TLS
verification:     registry          identity ❌       domain owner ✅

Client record     Manual deletion   No standard      N/A — no
cleanup:          required ❌        lifecycle ❌      records ✅

Scale to          ❌ Impossible      ⚠️ Operational   ✅ Works
100+ servers:                       chaos             natively

Enterprise        ✅ Works in       ❌ Barrier to     ✅ Preferred
adoption:         controlled env    adoption          default

Identity          Centralized       Centralized       Decentralized
trust model:      (auth server DB)  (auth server DB)  (DNS + TLS) ✅

Works without     ❌ Always needs   ❌ Needs runtime  ✅ Zero
prior contact:    pre-arrangement   POST handshake    prior contact ✅

Keep reading