Skip to content

Extension: Server Identity and Tool Attestation#17

Open
thebenignhacker wants to merge 1 commit into
modelcontextprotocol:mainfrom
opena2a-upstream:ext/server-identity-attestation
Open

Extension: Server Identity and Tool Attestation#17
thebenignhacker wants to merge 1 commit into
modelcontextprotocol:mainfrom
opena2a-upstream:ext/server-identity-attestation

Conversation

@thebenignhacker

Copy link
Copy Markdown

Summary

  • Defines an optional extension for cryptographic server identity and tool attestation in MCP
  • Ed25519 key pairs for server identity, self/publisher/DNS attestation types, tool definition signing via _meta, challenge-response verification, and key revocation
  • Complements existing auth extensions (Client Credentials, Enterprise-Managed Authorization) by addressing server-to-client identity verification

Motivation

MCP has no mechanism for clients to verify server identity or detect tool definition tampering. The OWASP MCP Top 10 identifies related risks:

  • MCP03 — Tool Poisoning (tool definition tampering)
  • MCP04 — Supply Chain Attacks (no provenance chain)
  • MCP07 — Insufficient Authentication (no mutual auth)
  • MCP09 — Shadow MCP Servers (server impersonation)

Existing auth extensions solve client-to-server authorization. This extension solves the complementary problem: server-to-client identity.

Context

This was originally submitted as SEP-2267 to the core spec repository. Per maintainer guidance from @localden, this extension belongs in ext-auth rather than the core spec.

The document has been reformatted to follow the ext-auth extension conventions (MDX format, numbered sections, parameter tables, RFC keyword styling).

What's Included

  • specification/draft/server-identity-attestation.mdx — Full extension specification

Extension capabilities:

  1. Server Identity — Ed25519 key pairs in JWK format, identity metadata
  2. Attestation Types — Self (TOFU/key pinning), publisher (third-party signing), DNS (domain binding)
  3. Tool Attestation — Cryptographic signatures over tool definitions via _meta
  4. Challenge-Responseidentity/get and identity/challenge JSON-RPC methods
  5. Key Revocation — Revocation attestations and key rotation

Backward Compatibility

All new fields and methods are additive. Servers that do not implement this extension are unaffected. Clients that do not support it ignore the identity metadata. Existing OAuth mechanisms continue to work unchanged.

References

Define cryptographic server identity and tool attestation for MCP.
Addresses OWASP MCP Top 10 risks: server impersonation (MCP09),
tool poisoning (MCP03), supply chain attacks (MCP04), and
insufficient authentication (MCP07).

Specification includes:
- Ed25519 key pairs for server identity (JWK format)
- Self, publisher, and DNS attestation types
- Tool definition signing via _meta
- Challenge-response verification (identity/get, identity/challenge)
- Key revocation mechanism

Previously submitted as SEP-2267 to the core spec repository.
Redirected here per maintainer guidance as an auth extension.
@thebenignhacker

Copy link
Copy Markdown
Author

Hello maintainers, any feedback?

@thebenignhacker

Copy link
Copy Markdown
Author

@pcarleton @localden: a process question, following up on the redirect that brought this here.

This extension was filed per the guidance closing SEP-2267 (core spec to ext-auth). Reading the Governance section of this repo's README, authorization extensions follow the same SEP / community-discussion / consensus process as the core spec. So the direct question: what is the right form for a new extension to enter triage? An ext-auth-scoped SEP, a discussion thread first, or review on this PR as filed? I would rather restructure it to fit the process than have it sit in the wrong shape.

Since filing, the surrounding ecosystem work this extension composes with has firmed up:

The problem statement has not moved: clients still cannot verify server identity or detect tool-definition tampering (OWASP MCP03/04/07/09). Happy to bring this to a WG call if that is the faster route.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants