An OpenAPI document describes an API. An MCP server lets an agent actually call it. "Converting" one to the other isn't a file-format transform — it's a deterministic mapping from operations to tools, plus the governance layer (risk, scopes, audit) that a raw spec has no concept of. Here's exactly what that mapping does, and how to run it.
An OpenAPI spec is documentation with structure — paths, methods, schemas. It doesn't run anything. An MCP server is a live, callable endpoint: an agent connects to it, discovers a set of tools via tools/list, and invokes them via tools/call. Turning the first into the second means, for every operation you select:
Nobody hand-assigns any of this — it's derived deterministically from the spec:
| OpenAPI | MCP tool |
|---|---|
| operationId | Tool name (camelCase → snake_case) |
| summary / description | Tool description (the model's only signal for when to call it — rewrite thin ones) |
| parameters + requestBody | JSON Schema inputSchema |
| HTTP method | GET/HEAD → low risk · DELETE → high risk · other writes → medium risk |
| servers[].url | The environment's base URL, used at call time |
The risk class isn't cosmetic — it's what the policy decision point uses at call time to decide allow, allow_with_confirmation, or allow_with_approval. A spec with only GETs converts to an all-low-risk server; add a DELETE and that one tool comes out high-risk automatically, with no policy authoring required to catch it.
That's a standard MCP Streamable-HTTP JSON-RPC 2.0 endpoint — initialize, tools/list, tools/call — ready to paste into Claude, ChatGPT, or any other MCP client. For the full walkthrough with a live example spec end to end, see Turn a REST API into an MCP server or the generic Connect Your First API tutorial.
If you'd rather not click through a UI at all, the platform exposes its own conversational MCP server that runs this exact pipeline from inside a chat with an agent — no forms, no clicking. See Create an MCP server from OpenAPI without code.
Working from an older Swagger 2.0 document instead of OpenAPI 3.x? See How to turn Swagger into an MCP server — the same pipeline handles both. Adding MCP to an API that's already in production? See How to add MCP to an existing API.