SEP-2752 · HTTP Message Signing for MCP Client Authentication

Wallets authenticate by signing.
Agents should too.

Today

MCP authenticates clients with bearer tokens — OAuth access tokens, API keys, MCP-Session-Id. Any wallet-backed agent needs a separate, MCP-specific credential provisioned, stored, rotated, and revoked alongside its private key.

With SEP-2752

The agent signs each MCP request with its wallet key using RFC 9421 HTTP Message Signatures. The same Ed25519 / secp256k1 / P-256 key that signs an on-chain transaction signs the request to the broker. No bearer issued, no OAuth flow, no token rotation, no second credential to leak.

Signed request envelope

POST /mcp
Content-Digest: sha-256=:<digest>:
MCP-Protocol-Version: 2026-03-26
MCP-Session-Id: sess_abc123
Signature-Input: sig1=("@method" "@target-uri" "content-digest"
  "mcp-protocol-version" "mcp-session-id");
  created=...; nonce=...; keyid="<JWK thumbprint>"; tag="<client-id>"
Signature: sig1=:<sig>:

Properties

  • — Private key never leaves the client.
  • — Signature binds method, URI, body, session, protocol version.
  • — Replay window ≤ 5 minutes, single use per (tag, nonce).
  • — Stable tag identity survives key rotation.
  • — Complementary to PR #1932 (DPoP). DPoP for OAuth-bound flows; this for the rest.