nexpando-com/open-api-mcp
If you are the rightful owner of open-api-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Open API MCP is a command-line tool that generates an MCP (Model Context Protocol) server based on OpenAPI specifications.
open-api-mcp
Open API MCP is a command-line tool that generates an MCP (Model Context Protocol) server based on OpenAPI specifications.
It simplifies the process of creating API clients and servers by leveraging OpenAPI schemas and generating strongly-typed clients using Zod.
Features
- Generate MCP servers from OpenAPI specifications.
- Automatically create Zod-based API clients for type-safe interactions.
- Supports both JSON and YAML OpenAPI specification formats.
- Easily configurable via environment variables or Docker Compose.
How It Works
-
Clone the repository:
git clone https://github.com/nexpando-com/open-api-mcp.git cd open-api-mcp
-
Install dependencies:
bun install
-
Prepare an OpenAPI specification:
- Download an OpenAPI schema:
wget -q -O open-api.json https://fakestoreapi.com/fakestoreapi.json
- Or use
curl
:curl -o open-api.json https://fakestoreapi.com/fakestoreapi.json
- Download an OpenAPI schema:
-
Define environment variables:
cp .env.template .env
-
Start the MCP server:
bun dev # or ./cli.sh open-api.json
-
Console output:
Tool loginUser added to OpenApi MCP server. Tool getAllCarts added to OpenApi MCP server. Tool addCart added to OpenApi MCP server. Tool getCartById added to OpenApi MCP server. Tool updateCart added to OpenApi MCP server. Tool deleteCart added to OpenApi MCP server. Tool getAllProducts added to OpenApi MCP server. Tool addProduct added to OpenApi MCP server. Tool getProductById added to OpenApi MCP server. Tool updateProduct added to OpenApi MCP server. Tool deleteProduct added to OpenApi MCP server. Tool getAllUsers added to OpenApi MCP server. Tool addUser added to OpenApi MCP server. Tool getUserById added to OpenApi MCP server. Tool updateUser added to OpenApi MCP server. Tool deleteUser added to OpenApi MCP server. [FastMCP info] server is running on HTTP Stream at http://localhost:3000/stream OpenApi MCP server 0.0.1 running as httpStream
Docker Setup
-
Create a specs directory:
mkdir specs
-
Add your OpenAPI specification (
open-api.json
oropen-api.yml
) to the specs directory. -
Create a docker-compose.yml file. Example configuration:
services: open-api-mcp: image: nexpando/open-api-mcp container_name: open-api-mcp # ports: # - "3000:3000" volumes: - ./specs:/app/specs environment: - OPEN_API_FILE=/app/specs/open-api.json - API_URL= # Example: https://fakestoreapi.com # - API_KEY # - MCP_NAME=My MCP Server # - MCP_VERSION=1.0.0 # - MCP_TRANSPORT_TYPE=sse|stdio
-
Replace
API_URL
andAPI_KEY
with your data. -
Start the MCP server:
docker-compose up
Example MCP servers in Librechat
- See https://github.com/danny-avila/LibreChat
librechat.yaml
version: 1.1.4
cache: true
...
mcpServers:
my-mcp:
type: streamable-http
url: http://my-mcp:3000/stream
mailgun:
type: streamable-http
url: http://mailgun-mcp:3000/stream
Project Structure
.
├── cli.sh # CLI script to start the MCP server
├── generate-client.ts # Script to generate Zod-based API clients
├── get-input-output.ts # Utility functions for input/output paths
├── specs/ # Directory for OpenAPI specifications
├── mcp-servers/ # Example MCP server configurations
├── Dockerfile # Dockerfile for containerized deployment
├── docker-compose.yml # Example Docker Compose configuration
├── README.md # Project documentation
└── ...
Customizing Authentication
The project uses Axios for making HTTP requests, and the default authentication method is configured in the get-axios.ts
file. By default, it uses a Bearer token retrieved from the API_KEY
environment variable.
If you need to customize the authentication method (e.g., use a different header, token type, or authentication mechanism), you can override the get-axios.ts
file. For example:
// filepath: [get-axios.ts](http://_vscodecontentref_/1)
import axios from 'axios'
export const getAxiosInstance = () => {
const options = {
headers: {
'X-Custom-Auth': 'YourCustomAuthValue',
'Content-Type': 'application/json',
},
}
const instance = axios.create(options)
return instance
}
Customizing Authentication with Docker Compose
The project uses Axios for making HTTP requests, and the default authentication method is configured in the get-axios.ts
file. By default, it uses a Bearer token retrieved from the API_KEY
environment variable.
If you are using Docker Compose, you can override the get-axios.ts
file by mounting a custom version of the file as a volume. This allows you to customize the authentication method without modifying the original source code.
Steps to Customize
-
Create a custom
get-axios.ts
file with your desired authentication logic. For example:// filepath: ./custom/get-axios.ts import axios from 'axios' export const getAxiosInstance = () => { const options = { headers: { 'X-Custom-Auth': 'YourCustomAuthValue', 'Content-Type': 'application/json', }, } const instance = axios.create(options) return instance }
-
Update your
docker-compose.yml
file to override the defaultget-axios.ts
file with your custom version:services: open-api-mcp: image: nexpando/open-api-mcp container_name: open-api-mcp volumes: - ./specs:/app/specs - ./custom/get-axios.ts:/app/get-axios.ts environment: - OPEN_API_FILE=/app/specs/open-api.json - API_URL= ...
-
Start the MCP server with Docker Compose:
docker-compose up
By overriding the get-axios.ts
file, you can adapt the project to various authentication schemes, such as API keys, or custom headers, while keeping the original source code intact.
References
License
This project is licensed under the MIT License. See the LICENSE file for details.