OpenAPI MCP Server
Enables interaction with any REST API documented via Swagger or OpenAPI specifications, allowing for automatic endpoint discovery and execution of API requests with support for various authentication methods.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenAPI MCP Serverlist all available API endpoints and their parameters"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_requestFlexible 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
Related MCP server: Public API MCP Server
Installation
npm install @cloudwarriors/openapi-mcpOr run directly with npx:
npx @cloudwarriors/openapi-mcpConfiguration
The server is configured via environment variables:
Required
Variable | Description | Example |
| Base URL of the API |
|
Optional
Variable | Description | Default |
| Path to OpenAPI spec |
|
| Authentication type: |
|
| API key (when | - |
| Header name for API key |
|
| Bearer token (when | - |
| Request timeout in milliseconds |
|
| OpenAPI spec cache TTL |
|
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 devLicense
MIT
Author
CloudWarriors
Available Tools
2 toolsapi_discoverDiscover API EndpointsARead-onlyIdempotent
List all available API endpoints grouped by domain. Call this first to understand what APIs are available before making requests. Returns method, path, description, and optionally parameters for each endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Filter endpoints by domain/tag (e.g., 'auth', 'servers', 'workflows') | |
| includeParameters | No | Include parameter details for each endpoint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond annotations by specifying the return format ('Returns method, path, description, and optionally parameters for each endpoint') and the optional parameter inclusion behavior. While annotations cover safety (readOnlyHint, destructiveHint) and idempotency, the description provides practical output details that help the agent understand what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two sentences) and front-loaded with the core purpose. Every sentence earns its place: the first states what it does, the second provides usage guidance and output details. There's zero wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (discovery operation with 2 parameters), rich annotations (4 hints covering safety and behavior), and no output schema, the description provides good completeness. It covers purpose, usage context, and output format, though it doesn't detail potential limitations like pagination or rate limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already fully documents both parameters. The description mentions 'optionally parameters for each endpoint' which relates to the 'includeParameters' parameter, but doesn't add significant meaning beyond what's in the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all available API endpoints grouped by domain') and distinguishes it from the sibling tool 'api_request' by emphasizing this is for discovery before making actual requests. It explicitly mentions the verb 'list' and resource 'API endpoints' with grouping by domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('Call this first to understand what APIs are available before making requests') and implicitly suggests an alternative (use 'api_request' for actual API calls). It clearly establishes the context for discovery versus execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api_requestAPI RequestA
Make an HTTP request to any API endpoint. Use api_discover first to see available endpoints and their parameters. Supports path parameter substitution (e.g., '/api/servers/{id}' with pathParams: { 'id': '123' }).
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | HTTP method for the request | |
| path | Yes | API path (e.g., '/api/auth/status' or '/api/servers/{id}') | |
| body | No | Request body for POST/PUT/PATCH requests (will be JSON-encoded) | |
| query | No | Query parameters as key-value pairs | |
| pathParams | No | Path parameters to substitute (e.g., { 'id': '123' } for /api/servers/{id}) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains path parameter substitution syntax with a concrete example, mentions JSON encoding for request bodies, and references the api_discover prerequisite. While annotations cover safety aspects (readOnlyHint=false, destructiveHint=false), the description provides practical implementation details that help the agent use the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely efficient two-sentence structure with zero waste. The first sentence states the core purpose, the second provides critical usage guidance and parameter example. Every word serves a clear purpose in helping the agent understand and use the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a flexible HTTP request tool with openWorldHint=true and no output schema, the description provides good context about the workflow (api_discover prerequisite) and parameter usage (path substitution example). However, it doesn't address potential authentication requirements, rate limits, or error handling that would be helpful for such a general-purpose tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents all 5 parameters thoroughly. The description adds minimal parameter semantics - only clarifying path parameter substitution with an example. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Make an HTTP request') and resource ('to any API endpoint'), with explicit differentiation from its sibling tool ('Use api_discover first'). It goes beyond the tool name/title by specifying the HTTP nature and endpoint targeting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('Use api_discover first to see available endpoints and their parameters') and names the alternative tool (api_discover). This creates clear workflow context for when to use this tool versus its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v1.0.0- First observed
api_discover - First observed
api_request
TDQS
The two tools have clearly distinct purposes: api_discover is for listing and exploring available API endpoints, while api_request is for executing HTTP requests to those endpoints. There is no overlap in functionality, making it easy for an agent to choose the right tool for each task.
Both tools follow a consistent snake_case naming pattern with a clear 'api_' prefix and descriptive action names (discover and request). This uniformity makes the tool set predictable and easy to understand at a glance.
With only two tools, the server feels under-scoped for an OpenAPI server, which typically involves operations like schema validation, endpoint testing, or parameter management. While the tools cover basic discovery and execution, the count is too low for comprehensive API interaction, limiting functionality.
The tool set is severely incomplete for an OpenAPI domain, lacking essential operations such as schema retrieval, parameter validation, response inspection, or error handling. Agents will face dead ends when needing to perform common API tasks beyond simple listing and requesting, leading to potential failures.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA generic MCP server that dynamically converts OpenAPI-defined REST APIs into tools for LLMs like Claude. It supports multiple authentication methods and transport protocols, enabling seamless interaction with any OpenAPI-compliant API.21MIT
- AlicenseNot gradedqualityDmaintenanceTransforms OpenAPI specs into an MCP server, enabling dynamic API interaction through natural language with automatic authentication and endpoint discovery.131MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to interact with any REST API that has an OpenAPI specification by providing a lightweight MCP server that translates between natural language and API calls.MIT
- AlicenseNot gradedqualityCmaintenanceA generic MCP server that converts any OpenAPI/Swagger specification into MCP tools, enabling AI assistants to search, explore, and execute REST APIs.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cloudwarriors-ai/openapi-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server