API overview
Open MCP Portal's three HTTP surfaces (the MCP endpoint, the OAuth endpoints and the management API), their conventions and the generated reference.
Open MCP Portal serves three HTTP surfaces from one origin, its APP_URL:
- The MCP endpoint,
POST /mcp/{slug}: one per gateway, Streamable HTTP, for MCP clients and agents. It's JSON-RPC, so it isn't in the OpenAPI document. See The MCP endpoint. - The OAuth endpoints under
/oauth/and/.well-known/: the authorization server MCP clients sign in with, and the JWKS MCP servers verify identity tokens with. See OAuth endpoints. - The management API under
/v1, plus/auth/*and the health checks: everything the web app does. It's described by an OpenAPI 3.0 document that covers every route (a test in the product repository enforces it). See the reference, generated from that document.
The MCP endpoint
OAuth endpoints
The management API
The management API serves the web app. It authenticates browser sessions only: a request with an Authorization header is refused (401), so API keys and OAuth tokens can't call it. It may change between releases before 1.0.
Conventions:
- Responses are
{"data": ...}on success and{"error": {"code": "...", "message": "...", "details": ...}}on failure. Every response carriesX-Request-ID. - Writes need the session's CSRF token in
X-CSRF-Token(fromGET /v1/me) and a same-originOrigin. JSON bodies are decoded strictly: unknown fields are refused. - Edits use revisions: objects carry a
revisionand anETag, and updates sendIf-Match. A missingIf-Matchis428, a stale one412. - Lists use cursors (
cursor,limit, 50 by default, at most 200) and search withq. - IDs are UUIDs; teams, servers and gateways also have immutable slugs.
- Not allowed and not found look alike: people outside a team get
404for its objects. - Rate limit:
REQUESTS_PER_MINUTEper person (600 by default),429withRetry-After.
The tags group the routes: sign-in, me, teams, MCP servers, catalog, gateways and calls, API keys, OAuth consent and connected apps, service accounts, auth providers, connections, limits, retention, usage and admin.
Keeping the reference current
The reference is generated at build time from openapi/open-mcp-portal.yaml in this documentation's repository, a copy of api/openapi.yaml from the Open MCP Portal release these docs describe (v0.1.0, which follows main until it's tagged). The product repository's copy is the source of truth.