For MCP server authors
What an MCP server behind Open MCP Portal receives, which requests reach it, and how it should trust them.
Your MCP server keeps running where your team runs it. Open MCP Portal connects to it as an MCP client over Streamable HTTP, reads its capabilities, and forwards the calls people and agents make through gateways. These pages are about what reaches your server and how to trust it.
The identity token
Provider tokens
OAuth-protected servers
Parameter headers
The mail example
What your server receives
- Discovery. When the server is registered, refreshed or its URL changes, the portal sends
initializeand lists every kind of capability you advertise: tools, prompts, resources and resource templates, page by page (at most 500 per kind). It never calls a tool to discover it. - Health checks. Every few minutes (5 by default), an MCP exchange to see that you answer. Plus a check whenever someone presses Test connection or Refresh capabilities.
- Calls.
tools/call,prompts/getandresources/read, only for capabilities a gateway selected and a caller was allowed to use. Lists never reach you: clients get the definitions the portal stored and approved.
The portal is stateless: each call is its own MCP session, so it performs the initialize handshake again before each call. Answer in JSON or as an SSE stream; the portal reads either.
Every forwarded call carries the identity token (unless your team turned off Send identity token), your static header if you registered one, and where relevant a provider token or, for an OAuth-protected server, the person's own bearer token. The caller's own API key or OAuth token never reaches you.
What the portal does with your answers
- Names: clients see your tool
check_outageof serverstatusasstatus__check_outage, and your resourcestatus://servicesasomp://status/status://services. Aresources/readarrives with your own URI (the prefix is stripped), andcontents[].uriin your answer is rewritten for the client. _meta["io.modelcontextprotocol/serverInfo"]is removed from results: clients talk to the portal, and your server's name and version aren't theirs to see. Other_metaentries pass through.structuredContentthat isn't a JSON object is dropped from results, and anoutputSchemathat isn't an object is dropped from tool lists, as the MCP schema requires.- Requests and responses are limited to 1 MiB, and every exchange to your server's timeout (1 to 120 seconds, set by your team).
- Redirects are never followed, and the portal never sends sampling, elicitation or roots requests to you or relays yours.
Definitions are reviewed
What you list (names, titles, descriptions, schemas) is shown to models as instructions, so platform admins review it before it reaches the catalog. When a definition changes on a published server, that capability leaves the catalog until the change is approved. Keep descriptions stable and honest, and don't put data that changes between calls in definitions: use _meta, which the portal leaves out of fingerprints. See Capabilities and change detection.
Annotations (read-only, destructive, idempotent and open-world hints) are shown to people but never trusted for any decision.
Your server decides what callers may do
The portal has already checked that the caller may use this tool through this gateway. Your server still decides what they may do with it: read the identity token's principal_type, sub, email and teams and apply your own rules.