OpenAPI MCP Server

$npm install @cloudwarriors/openapi-mcp
README.md

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_discover and api_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/tag
  • includeParameters (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/PATCH
  • query (optional): Query parameters as key-value pairs
  • pathParams (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.yaml or /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 API
API_OPENAPI_PATHPath to OpenAPI spec
API_AUTH_TYPEAuthentication type: none, apiKey, bearer
API_KEYAPI key (when API_AUTH_TYPE=apiKey)
API_KEY_HEADERHeader name for API key
API_BEARER_TOKENBearer token (when API_AUTH_TYPE=bearer)
API_TIMEOUT_MSRequest timeout in milliseconds
API_CACHE_TTL_MSOpenAPI spec cache TTL

Configuration

claude_desktop_config.json
{
  "mcpServers": {
    "my-api": {
      "command": "npx",
      "args": ["@cloudwarriors/openapi-mcp"],
      "env": {
        "API_BASE_URL": "https://api.example.com",
        "API_OPENAPI_PATH": "/docs/openapi.yaml"
      }
    }
  }
}

Try it

Use api_discover to list all available API endpoints grouped by domain.
Call api_discover with domain 'users' and includeParameters true.
Use api_request to make a GET request to /api/users/{id} with pathParams id=123.
Send a POST to /api/users with body containing user data using api_request.
Discover endpoints and then request data from the users domain.

Frequently Asked Questions

How do I install OpenAPI MCP Server?

Install OpenAPI MCP Server by running: npm install @cloudwarriors/openapi-mcp

What MCP clients work with OpenAPI MCP Server?

OpenAPI MCP Server works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Use OpenAPI MCP Server with Conare

Manage MCP servers visually, upload persistent context, and never start from zero with Claude Code & Codex.

Try Free