Fire in da houseTop Tip:Paying $100+ per month for Perplexity, MidJourney, Runway, ChatGPT and other tools is crazy - get all your AI tools in one site starting at $15 per month with Galaxy AI Fire in da houseCheck it out free

openapi-to-mcp

MCP.Pizza Chef: ouvreboite

openapi-to-mcp is an MCP server that converts OpenAPI specifications into strongly typed MCP tools, enabling seamless integration of API endpoints into the MCP ecosystem. It allows developers to expose their RESTful APIs as structured, model-readable tools, facilitating real-time interaction and automation with LLMs. This server supports complex APIs like GitHub's and simplifies API consumption by standardizing access through MCP.

Use This MCP server To

Expose REST API endpoints as MCP server tools Integrate third-party APIs into MCP workflows Automate API calls using LLMs with typed interfaces Convert OpenAPI specs into model-readable MCP tools Securely manage API authentication within MCP Enable multi-step reasoning over API data Simplify API integration for AI agents

README

.NET Build NuGet

openapi-to-mcp

Use your OpenAPI specification to expose your API's endpoints as strongly typed tools.

Basic example for https://petstore3.swagger.io/ 🎉

{
  "mcpServers": {
    "petstore": {
      "command": "openapi-to-mcp",
        "args": [
          "https://petstore3.swagger.io/api/v3/openapi.json"
        ]
    }
  }
}

More complex example, using Github's API:

{
    "mcpServers": {
        "github": {
            "command": "openapi-to-mcp",
            "args": [
                "https://raw.githubusercontent.com/github/rest-api-description/refs/heads/main/descriptions/api.github.com/api.github.com.yaml",
                "--bearer-token",
                "github_pat_xxxxxx",
                "--tool-naming-strategy",
                "verbandpath"
            ]
        }
    }
}

This example use the bearer token auth (with a Github Personal Access Token) and force the tool naming strategy to "verb and path", as Github's operation ids are not valid tool names.

Github demo

Install

As a Nuget tool: openapi-to-mcp

dotnet tool install --global openapi-to-mcp

Or download the executables from the releases

Usage

Usage:
  openapi-to-mcp <open-api> [options]

Arguments:
  <open-api>  You OpenAPI specification (URL or file) [required]

Options:
  -t, --tool-naming-strategy <extension|extension_or_operationid_or_verbandpath|operationid|verbandpath>  How the tool name should be computed [default: extension_or_operationid_or_verbandpath]
  -h, --host-override                                                                                     Host override
  -b, --bearer-token                                                                                      Bearer token
  -o2, --oauth-2-grant-type <client_credentials|password|refresh_token>                                   OAuth2 flow to be used
  -o2_tu, --oauth-2-token-url                                                                             OAuth2 token endpoint URL (override the one defined in your OpenAPI for your chosen OAuth2 flow)
  -o2_ci, --oauth-2-client-id                                                                             OAuth2 client id (for the client_credentials grant_type)
  -o2_cs, --oauth-2-client-secret                                                                         OAuth2 client secret (for the client_credentials grant_type)
  -o2_rt, --oauth-2-refresh-token                                                                         OAuth2 refresh token (for the refresh_token grant_type)
  -o2_un, --oauth-2-username                                                                              OAuth2 username (for the password grant_type)
  -o2_pw, --oauth-2-password                                                                              OAuth2 password (for the password grant_type)
  -i, --instructions                                                                                      MCP instruction to be advertised by the server
  --verbose                                                                                               Log more info (in sdterr) [default: False]
  -?, -h, --help                                                                                          Show help and usage information
  --version                                                                                               Show version information

OpenAPI support

  • Currently, OpenAPI 2.0 and 3.0 are supported.
  • Specifications can be JSON/YAML and local (file) or remote (URL)
  • Only local $refs are supported

OpenAPI custom extensions

A set of custom extensions is available to customize how your API should be exposed:

  • info.x-mcp-instructions (string): Textual instructions exposed by the MCP server during the initialize handshake
  • operation.x-mcp-tool-name (string): Custom tool name
  • operation.x-mcp-tool-description (string): Custom tool description
  • operation.x-mcp-tool-enabled (boolean): Enabled/disabled a specific operation (enabled by default)

MCP features

Only STDIO transport is currently supported.

Tools

Operations ("endpoints") from your OpenAPI specification are translated to MCP tools

  • All path/query/JSON body parameters are exposed (using their JSON schema)
  • Response is returned as-is
  • By default, the tool name is computed using first the operation.x-mcp-tool-name extension, then the operation.operationId and then {httpMethod}_{escaped_path}
    • The tool naming strategy can be defined via the --tool-naming-strategy option.
    • ⚠️Tools are discarded if their name don't match ^[a-zA-Z0-9_-]{1,64}$
  • Tools description are extracted as follows: operation.x-mcp-tool-description ?? operation.description ?? path.description

Tool call and host

When a tool is called, the MCP server will call the underlying endpoint. To determine which host to call a combination of parameters are used:

  • the --host-override option
  • your specification first server's URL if it's an absolute URL
  • the host of the remote OpenAPI provided
  • otherwise, an error is thrown

For example running openapi-to-mcp https://petstore3.swagger.io/api/v3/openapi.json:

Authorization

Bearer token

A token can be provided as option --bearer-token. It'll be provided to all calls as the Authorization: Bearer {token} header. It'll also be provided when fetching a remote specification.

OAuth2

ClientCredentials, RefreshToken, Password are supported. If your OpenAPI specification declare securitySchemes for those flows, the corresponding tokenUrl will be used.

How to publish

Create a new tag/release 🤷

openapi-to-mcp FAQ

How do I provide my OpenAPI specification to openapi-to-mcp?
You supply the URL or local path to your OpenAPI JSON or YAML file as an argument when starting the server.
Can openapi-to-mcp handle authentication for APIs?
Yes, it supports common authentication methods like bearer tokens, which can be passed as arguments to the server.
Does openapi-to-mcp support complex APIs like GitHub's?
Yes, it can process large and complex OpenAPI specs such as GitHub's REST API, enabling full MCP integration.
How does openapi-to-mcp improve API usage with LLMs?
By exposing APIs as strongly typed MCP tools, it allows LLMs to call endpoints safely and with structured inputs and outputs.
Is openapi-to-mcp limited to any specific programming language or platform?
No, it is platform-agnostic and can be used wherever MCP servers are supported, as it operates based on OpenAPI specs.
How do I handle updates to my API spec?
You can restart or reload openapi-to-mcp with the updated OpenAPI specification to refresh the exposed MCP tools.
What formats of OpenAPI specs are supported?
Both JSON and YAML OpenAPI specification formats are supported for input.
Can openapi-to-mcp be used in CI/CD pipelines?
Yes, it can be integrated into CI/CD workflows to automatically expose updated APIs as MCP tools.