0071 โ Generated MCP access to the Go API
Status: Proposed for the experimental/mcp branch.
Context
Shared MCP clients need the platform's read and write API, authenticated through
AAI. The historical architecture-reset implementation separated the MCP
gateway, OAuth broker and API assertions. The current API uses canonical Party
identity, current authentication generations and context-owned commands.
Decision
Keep MCP within the API service boundary, with two separate processes:
- A native Go gateway uses the official MCP SDK's stateless Streamable HTTP transport and a generated Go API client.
- An OAuth broker adapts the historical
oidc-providerimplementation. It federates to the configured AAI issuer and owns private technical OAuth state in a separate PostgreSQL database with restricted runtime credentials.
The MCP contract owns the reviewed operation manifest, schemas, scopes and private assertion protocol. OpenAPI remains the authority for business paths, inputs and responses. Generation covers every business operation, including commands and deletions. API additions and removals require an explicit parity review. Authentication callbacks, internal relays, diagnostics and realtime transports are outside the business tool catalogue.
The gateway has no business database, broker, operator-key or provider access. Every invocation crosses the existing HTTP bindings and owner authorisation. Command headers, input, revisions and pagination remain intact. The gateway never retries a business request automatically.
AAI login requires the exact verified issuer, subject and voperson_id. A
distinct broker login assertion asks the API to resolve an existing Party,
current AUP and its current authentication generation. This query cannot
register, adopt or recover a Party. OAuth accounts and grants retain that
generation immutably. Refresh and business calls recheck current authority.
Browser logout retains its own session semantics; Party disablement and
generation changes fence both access routes.
Access tokens target only the MCP resource. The gateway exchanges their verified identity for a short-lived, operation-bound API assertion signed by a different key. The API rejects a direct MCP access token. Public keys for the broker and gateway must be distinct.
Resource scopes separate each owner's reads and writes. Explicit consent names
the client and scopes. Operator-only Support routes also require a canonical
Party enrolled in API_MCP_OPERATOR_PARTIES; the default is empty. A scope or
AAI attribute alone cannot grant operator authority.
Consequences
The Go gateway is stateless and supports independent replicas. The broker needs its private database, persistent signing and cookie keys, a registered AAI client, HTTPS routing and operational key rotation. Retaining an established OAuth library adds a Node process alongside the Go API.
The optional laboratory profile activates these processes explicitly on development boxes with local AAI. Other deployments keep the experiment disabled. The runtime guide records enrolment and qualification. Source and disposable fixture checks establish the protocol boundaries; external AAI, actual MCP clients and deployed business journeys require separate qualification.
Page source
Source snapshot ยท Revision f928834c8.