Generate Model Context Protocol (MCP) servers from OpenAPI specifications.
This CLI tool automates the generation of MCP-compatible servers that proxy requests to existing REST APIs—enabling AI agents and other MCP clients to seamlessly interact with your APIs using your choice of transport methods.
- 🔧 OpenAPI 3.0 Support: Converts any OpenAPI 3.0+ spec into an MCP-compatible server.
- 🔁 Proxy Behavior: Proxies calls to your original REST API while validating request structure and security.
- 🔐 Authentication Support: API keys, Bearer tokens, Basic auth, and OAuth2 supported via environment variables.
- 🧪 Zod Validation: Automatically generates Zod schemas from OpenAPI definitions for runtime input validation.
- ⚙️ Typed Server: Fully typed, maintainable TypeScript code output.
- 🔌 Multiple Transports: Communicate over stdio, SSE via Hono, or StreamableHTTP.
- 🧰 Project Scaffold: Generates a complete Node.js project with
tsconfig.json
,package.json
, and entry point. - 🧪 Built-in HTML Test Clients: Test API interactions visually in your browser (for web-based transports).
npm install -g openapi-mcp-generator
You can also use
yarn global add openapi-mcp-generator
orpnpm add -g openapi-mcp-generator
# Generate an MCP server (stdio)
openapi-mcp-generator --input path/to/openapi.json --output path/to/output/dir
# Generate an MCP web server with SSE
openapi-mcp-generator --input path/to/openapi.json --output path/to/output/dir --transport=web --port=3000
# Generate an MCP StreamableHTTP server
openapi-mcp-generator --input path/to/openapi.json --output path/to/output/dir --transport=streamable-http --port=3000
Option | Alias | Description | Default |
---|---|---|---|
--input |
-i |
Path or URL to OpenAPI specification (YAML or JSON) | Required |
--output |
-o |
Directory to output the generated MCP project | Required |
--server-name |
-n |
Name of the MCP server (package.json:name ) |
OpenAPI title or mcp-api-server
|
--server-version |
-v |
Version of the MCP server (package.json:version ) |
OpenAPI version or 1.0.0
|
--base-url |
-b |
Base URL for API requests. Required if OpenAPI servers missing or ambiguous. |
Auto-detected if possible |
--transport |
-t |
Transport mode: "stdio" (default), "web" , or "streamable-http"
|
"stdio" |
--port |
-p |
Port for web-based transports | 3000 |
--force |
Overwrite existing files in the output directory without confirmation | false |
The generated project includes:
<output_directory>/
├── .gitignore
├── package.json
├── tsconfig.json
├── .env.example
├── src/
│ ├── index.ts
│ └── [transport-specific-files]
└── public/ # For web-based transports
└── index.html # Test client
Core dependencies:
-
@modelcontextprotocol/sdk
- MCP protocol implementation -
axios
- HTTP client for API requests -
zod
- Runtime validation -
json-schema-to-zod
- Convert JSON Schema to Zod - Transport-specific deps (Hono, uuid, etc.)
Communicates with MCP clients via standard input/output. Ideal for local development or integration with LLM tools.
Launches a fully functional HTTP server with:
- Server-Sent Events (SSE) for bidirectional messaging
- REST endpoint for client → server communication
- In-browser test client UI
- Multi-connection support
- Built with lightweight Hono framework
Implements the MCP StreamableHTTP transport which offers:
- Stateful JSON-RPC over HTTP POST requests
- Session management using HTTP headers
- Proper HTTP response status codes
- Built-in error handling
- Compatibility with MCP StreamableHTTPClientTransport
- In-browser test client UI
- Built with lightweight Hono framework
Feature | stdio | web (SSE) | streamable-http |
---|---|---|---|
Protocol | JSON-RPC over stdio | JSON-RPC over SSE | JSON-RPC over HTTP |
Connection | Persistent | Persistent | Request/response |
Bidirectional | Yes | Yes | Yes (stateful) |
Multiple clients | No | Yes | Yes |
Browser compatible | No | Yes | Yes |
Firewall friendly | No | Yes | Yes |
Load balancing | No | Limited | Yes |
Status codes | No | Limited | Full HTTP codes |
Headers | No | Limited | Full HTTP headers |
Test client | No | Yes | Yes |
Configure auth credentials in your environment:
Auth Type | Variable Format |
---|---|
API Key | API_KEY_<SCHEME_NAME> |
Bearer | BEARER_TOKEN_<SCHEME_NAME> |
Basic Auth |
BASIC_USERNAME_<SCHEME_NAME> , BASIC_PASSWORD_<SCHEME_NAME>
|
OAuth2 |
OAUTH_CLIENT_ID_<SCHEME_NAME> , OAUTH_CLIENT_SECRET_<SCHEME_NAME> , OAUTH_SCOPES_<SCHEME_NAME>
|
cd path/to/output/dir
npm install
# Run in stdio mode
npm start
# Run in web server mode
npm run start:web
# Run in StreamableHTTP mode
npm run start:http
For web and StreamableHTTP transports, a browser-based test client is automatically generated:
- Start the server using the appropriate command
- Open your browser to
http://localhost:<port>
- Use the test client to interact with your MCP server
- Node.js v20 or later
Contributions are welcome!
- Fork the repo
- Create a feature branch:
git checkout -b feature/amazing-feature
- Commit your changes:
git commit -m "Add amazing feature"
- Push and open a PR
📌 Repository: github.com/harsha-iiiv/openapi-mcp-generator
MIT License — see LICENSE for full details.