A generic MCP server that exposes any OpenAPI-documented REST API to LLMs like Claude.
OpenAPI MCP Server
A generic Model Context Protocol (MCP) server that exposes any OpenAPI-documented REST API to LLMs like Claude.
Features
- Auto-discovers endpoints from any OpenAPI 3.x specification (YAML or JSON)
- Two simple tools:
api_discoverandapi_request - Flexible authentication: None, API Key, or Bearer token
- Caching: Caches OpenAPI spec locally with configurable TTL
- Retry logic: Automatic retry on rate limits (429) with exponential backoff
Installation
npm install @cloudwarriors/openapi-mcp
Or run directly with npx:
npx @cloudwarriors/openapi-mcp
Configuration
The server is configured via environment variables:
Required
| Variable | Description | Example |
|---|---|---|
API_BASE_URL |
Base URL of the API | https://api.example.com |
Optional
| Variable | Description | Default |
|---|---|---|
API_OPENAPI_PATH |
Path to OpenAPI spec | /openapi.yaml |
API_AUTH_TYPE |
Authentication type: none, apiKey, bearer |
none |
API_KEY |
API key (when API_AUTH_TYPE=apiKey) |
- |
API_KEY_HEADER |
Header name for API key | X-API-Key |
API_BEARER_TOKEN |
Bearer token (when API_AUTH_TYPE=bearer) |
- |
API_TIMEOUT_MS |
Request timeout in milliseconds | 30000 |
API_CACHE_TTL_MS |
OpenAPI spec cache TTL | 3600000 (1 hour) |
Usage with Claude Code
Add to your .mcp.json or Claude Code settings:
{
"mcpServers": {
"my-api": {
"command": "npx",
"args": ["@cloudwarriors/openapi-mcp"],
"env": {
"API_BASE_URL": "https://api.example.com",
"API_OPENAPI_PATH": "/docs/openapi.yaml"
}
}
}
}
Example: Connecting to Hermes
{
"mcpServers": {
"hermes": {
"command": "npx",
"args": ["@cloudwarriors/openapi-mcp"],
"env": {
"API_BASE_URL": "http://localhost:3345",
"API_OPENAPI_PATH": "/api/docs/openapi.yaml"
}
}
}
}
Example: Connecting to a Protected API
{
"mcpServers": {
"my-api": {
"command": "npx",
"args": ["@cloudwarriors/openapi-mcp"],
"env": {
"API_BASE_URL": "https://api.mycompany.com",
"API_OPENAPI_PATH": "/openapi.json",
"API_AUTH_TYPE": "bearer",
"API_BEARER_TOKEN": "your-token-here"
}
}
}
}
Tools
`api_discover`
Lists all available API endpoints grouped by domain/tag.
Parameters:
domain(optional): Filter endpoints by domain/tagincludeParameters(optional): Include parameter details (default: false)
Example:
{ "domain": "users", "includeParameters": true }
`api_request`
Makes an HTTP request to any API endpoint.
Parameters:
method(required): HTTP method (GET,POST,PUT,DELETE,PATCH)path(required): API path (e.g.,/api/users/{id})body(optional): Request body for POST/PUT/PATCHquery(optional): Query parameters as key-value pairspathParams(optional): Path parameter substitutions
Example:
{
"method": "GET",
"path": "/api/users/{id}",
"pathParams": { "id": "123" }
}
Finding Your API's OpenAPI Spec
Common locations for OpenAPI specifications:
/openapi.yamlor/openapi.json/api/docs/openapi.yaml/swagger.json/v1/openapi.json/api-docs
Check your API's documentation or try accessing these paths directly.
Development
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Development mode (watch)
npm run dev
License
MIT
Author
CloudWarriors
Tools (2)
api_discoverLists all available API endpoints grouped by domain/tag.api_requestMakes an HTTP request to any API endpoint.Environment Variables
API_BASE_URLrequiredBase URL of the APIAPI_OPENAPI_PATHPath to OpenAPI specAPI_AUTH_TYPEAuthentication type: none, apiKey, bearerAPI_KEYAPI key (when API_AUTH_TYPE=apiKey)API_KEY_HEADERHeader name for API keyAPI_BEARER_TOKENBearer token (when API_AUTH_TYPE=bearer)API_TIMEOUT_MSRequest timeout in millisecondsAPI_CACHE_TTL_MSOpenAPI spec cache TTLConfiguration
{
"mcpServers": {
"my-api": {
"command": "npx",
"args": ["@cloudwarriors/openapi-mcp"],
"env": {
"API_BASE_URL": "https://api.example.com",
"API_OPENAPI_PATH": "/docs/openapi.yaml"
}
}
}
}