Binding: PPX over MCP¶
Target: Model Context Protocol (MCP), spec version 2025-11-25.
This document is normative for providers claiming the mcp transport binding
in their discovery card.
Overview¶
A PPX provider MAY expose itself as an MCP server. Each PPX core operation is surfaced as an MCP tool of the same name. Profile data MAY additionally be exposed via MCP resources (for read-only snapshots) where appropriate.
Authentication¶
HTTP-based MCP transports MUST use OAuth 2.1 per the MCP authorization model. PPX providers binding to MCP:
- MUST authenticate every request with a bearer access token.
- MUST issue access tokens bound to a specific PPX consent grant.
The token SHOULD carry a
grant_idclaim (or equivalent) that the provider re-validates against current grant state on every request. - MUST return
401 Unauthorizedwith aWWW-Authenticateheader on unauthenticated requests per RFC 9728. - SHOULD use Resource Indicators (RFC 8707) to bind tokens to the provider's resource URI.
Tool mapping¶
| PPX operation | MCP tool name | Brief |
|---|---|---|
get_profile_summary |
ppx_get_profile_summary |
Returns redacted summary of claims visible to the caller. |
query_claims |
ppx_query_claims |
Namespaced/keyed/domain/context query. |
get_effective_profile |
ppx_get_effective_profile |
Claims + resolved context modifiers under input context. |
propose_updates |
ppx_propose_updates |
Write-path subject to writeback policy. |
confirm_updates |
ppx_confirm_updates |
User/authorized confirmation of pending updates. |
list_consent_grants |
ppx_list_consent_grants |
Grants for the subject. |
revoke_consent_grant |
ppx_revoke_consent_grant |
Revoke a specific grant. |
export_profile |
ppx_export_profile |
Full export in PPX format. |
Each tool's input/output schema MUST be expressed as JSON Schema 2020-12 in
the server's tool listing, referencing the PPX core schemas published at
/.well-known/ppx-card.json.
Resources¶
Providers MAY expose:
ppx://profile/{profile_id}/summary— MCP resource returning the redacted summary.ppx://profile/{profile_id}/effective?context=...— parametric resource for effective profile.
Resources MUST honor the same grant scope as the equivalent tool call.
Discovery¶
A PPX provider binding over MCP:
- MUST serve the MCP metadata document (SEP-1649
/.well-known/mcp.jsonwhen applicable; see current MCP spec). - MUST also serve
/.well-known/ppx-card.jsonwithtransport_bindings.mcp.supported = trueandtransport_bindings.mcp.server_uriset to the MCP server URI.
Example discovery-card fragment¶
{
"transport_bindings": {
"mcp": {
"supported": true,
"server_uri": "https://profiles.example.com/mcp"
}
},
"auth": {
"schemes": ["oauth2.1"],
"authorization_endpoint": "https://profiles.example.com/oauth/authorize",
"token_endpoint": "https://profiles.example.com/oauth/token"
}
}
Error handling¶
| Condition | OAuth2.1 / MCP response |
|---|---|
| No or invalid token | 401 + WWW-Authenticate |
| Token valid but grant expired/revoked | 401 (provider SHOULD include error="invalid_token") |
| Scope violation (requested key/ns outside grant) | 403 + error="insufficient_scope" |
| Cross-domain transfer denied | 403 + PPX-specific error body |
| Writeback forbidden | 403 |
| Writeback pending review | 202 + writeback: proposal_created |
Non-goals (this binding)¶
- This binding does not define MCP prompts for PPX; user-facing prompts belong in the AG-UI binding.
- This binding does not re-specify OAuth 2.1; follow the MCP authorization spec verbatim.