Skip to main content

Convert OpenAPI specs into MCP (Model Context Protocol) servers

Project description

oapi2mcp

Convert any OpenAPI 3.x specification into a working MCP (Model Context Protocol) server — zero configuration, zero code.

PyPI Python License: MIT

Quick Start

# Run directly with uvx — no install needed
uvx oapi2mcp --spec http://localhost:3000/openapi.json

# Or install with pip
pip install oapi2mcp
oapi2mcp --spec http://localhost:3000/openapi.json

That's it. Every endpoint in your OpenAPI spec is now available as an MCP tool.

How It Works

  1. Parses your OpenAPI 3.x spec (local file or remote URL)
  2. Resolves all $ref references recursively
  3. Converts every operation into an MCP tool with a proper inputSchema
  4. Serves tools over stdio, SSE, or streamable-http
  5. Forwards tool calls to the upstream API via HTTP

Configuration

CLI Options

oapi2mcp --spec <SPEC> [--transport TRANSPORT] [--host HOST] [--port PORT] [--base-url URL]
Option Default Description
--spec required URL or local path to OpenAPI spec (JSON)
--transport stdio Transport: stdio, sse, streamable-http
--host 127.0.0.1 Host for SSE/streamable-http
--port 8000 Port for SSE/streamable-http
--base-url auto Override base URL for upstream API calls

Base URL Resolution

Base URL is resolved in this priority order:

  1. OPENAPI_BASE_URL environment variable
  2. --base-url CLI flag
  3. Inferred from spec URL (strip last path segment)
  4. servers[0].url from the spec itself

Authentication

Set environment variables to inject auth headers into upstream requests:

# Bearer token (default)
export API_KEY=your-token-here

# API key header
export API_KEY=your-key-here
export API_AUTH_TYPE=api-key

MCP Client Integration

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "my-api": {
      "command": "uvx",
      "args": ["oapi2mcp", "--spec", "https://api.example.com/openapi.json"],
      "env": {
        "API_KEY": "your-token"
      }
    }
  }
}

SSE / Streamable HTTP

# SSE transport
oapi2mcp --spec https://api.example.com/openapi.json --transport sse --port 8000

# Streamable HTTP transport
oapi2mcp --spec https://api.example.com/openapi.json --transport streamable-http --port 8000

Features

  • Recursive $ref resolution — handles nested references in components
  • Collision detection — renames body properties that conflict with path/query/header params
  • Fallback operationId — auto-generates from method + path when missing
  • Error wrapping — upstream HTTP errors surface as MCP errors with diagnostics
  • 3 transports — stdio (default), SSE, and streamable-http

Requirements

  • Python >= 3.10
  • An OpenAPI 3.x spec in JSON format

Disclaimer

This project was generated with the assistance of AI. While it has been tested, it may contain bugs or unexpected behavior. Use at your own risk. The author assumes no responsibility or liability for any damages or losses arising from the use of this software.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oapi2mcp-0.1.1.tar.gz (4.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oapi2mcp-0.1.1-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file oapi2mcp-0.1.1.tar.gz.

File metadata

  • Download URL: oapi2mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 4.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for oapi2mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 13916565e04dfa8affb14a4cda8a9d8034cef8f9c04c8d0599cdf995dff0c2e3
MD5 3dd2af0f57cf09bf4445ae653d866e3e
BLAKE2b-256 ee2bca821f043f033b3459420ff3e67cd5647d6ad00da0d23a25ac4f9d9632b4

See more details on using hashes here.

File details

Details for the file oapi2mcp-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: oapi2mcp-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for oapi2mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0e8a1a34e24f727f0741b0ead8a9218e8670ab8b224b4a70e32a754477a0dba2
MD5 bd0b21974ab1389a995100df7752606f
BLAKE2b-256 123e48c125f15bb9af79d2dd54bdf10e8adb8f2f645c13a89cb61b25977a09ef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page