
Security News
Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.
api-docs-mcp
Advanced tools
Model Context Protocol (MCP) server that provides tools for interacting with API documentation. Supports GraphQL, OpenAPI/Swagger, and gRPC specifications, fetching schema definitions from various sources (local files or remote URLs), caching them, and exposing them through a set of tools.
api_docs) and retrieve detailed documentation for specific methods (api_search).graphql / gql files or json introspection results (local files or remote URLs).yaml / yml / json schemas from local files or remote URLs.proto files or via gRPC reflection from remote URLs.API_SOURCES environment variable, allowing flexible deployment and management.The api-docs-mcp project is designed as an MCP server that integrates with various API documentation sources.
graph TD
mcpServer[MCP Server] e1@--> tools(Tools:<br/>api_docs / api_search);
tools e2@--> cacheManager{Cache Manager};
cacheManager e3@--> configuration[Configuration:<br/>API_SOURCES env var];
configuration e4@--> schemaSources{Schema Sources};
schemaSources e5@-- FileSource--> localFiles(Local Files:<br/>.graphql, .json, .yaml, .proto);
schemaSources e6@-- UrlSource--> remoteUrls(Remote URLs:<br/>GraphQL Endpoints, OpenAPI/Swagger Endpoints, gRPC Endpoints);
localFiles e7@--> processor[Schema Processors];
remoteUrls e8@--> processor;
processor e9@--> cacheManager;
processor e10@--> openAPIProcessor(OpenAPI Processor:<br/>OpenAPI/Swagger);
processor e11@--> graphQLProcessor(GraphQL Processor);
processor e12@--> grpcProcessor(gRPC Processor)
cacheManager e13@--Cached Data--> tools;
subgraph Core Components
mcpServer
tools
cacheManager
configuration
end
subgraph Data Flow
schemaSources
localFiles
remoteUrls
processor
openAPIProcessor
graphQLProcessor
grpcProcessor
end
e1@{ animate: true }
e2@{ animate: true }
e3@{ animate: true }
e4@{ animate: true }
e5@{ animate: true }
e6@{ animate: true }
e7@{ animate: true }
e8@{ animate: true }
e9@{ animate: true }
e10@{ animate: true }
e11@{ animate: true }
e12@{ animate: true }
e13@{ animate: true }
Flow of Operations:
index.ts entry point initializes the MCP server and dynamically registers tools defined in the src/tools directory.CacheManager loads API source configurations from the API_SOURCES environment variable via src/utils/config.ts.CacheManager fetches API schemas.graphql, gql, json, yaml, yml, proto).src/api/api.ts for OpenAPI, src/gql/gql.ts for GraphQL, src/grpc/grpc.ts for gRPC).src/utils/cache.ts) with a specified TTL (Time-To-Live).api_docs: When invoked, this tool retrieves a list of all available API resources from the cache, filtered by source if provided.api_search: When invoked with a detailName, this tool provides detailed documentation (request, response, error structures) for a specific API resource from the cache.To set up the api-docs-mcp server, follow these steps:
Clone the repository:
git clone https://github.com/EliFuzz/api-docs-mcp.git
cd api-docs-mcp
Install dependencies:
pnpm install
Build the project:
pnpm build
The server's behavior is controlled by the API_SOURCES environment variable. This variable should contain a JSON string representing an array of SchemaSource objects. Each SchemaSource can be either a FileSource or a UrlSource.
FileSource ExampleFor a local GraphQL schema:
{
"name": "MyGraphQLFile",
"path": "/path/to/your/schema.graphql",
"type": "gql"
}
For a local OpenAPI JSON schema:
{
"name": "MyOpenAPIFile",
"path": "/path/to/your/openapi.json",
"type": "api"
}
For a local gRPC proto file:
{
"name": "MyGrpcFile",
"path": "/path/to/your/service.proto",
"type": "grpc"
}
UrlSource ExampleFor a remote GraphQL endpoint:
{
"name": "GitHubGraphQL",
"method": "POST",
"url": "https://api.github.com/graphql",
"headers": {
"Authorization": "Bearer YOUR_GITHUB_TOKEN"
},
"type": "gql"
}
For a remote OpenAPI endpoint:
{
"name": "PetstoreAPI",
"method": "GET",
"url": "https://petstore.swagger.io/v2/swagger.json",
"type": "api"
}
For a remote gRPC endpoint with reflection:
{
"name": "MyGrpcService",
"url": "grpc://localhost:9090",
"type": "grpc"
}
API_SOURCES Environment VariableYou can set this in your shell before running the server:
export API_SOURCES='[{"name": "MyGraphQLFile", "path": "./example/fixtures/graphql/graphql-schema.graphql", "type": "gql"}, {"name": "PetstoreAPI", "method": "GET", "url": "https://petstore.swagger.io/v2/swagger.json", "type": "api"}]'
Or in mcp.json for MCP execution:
"api-docs-mcp": {
"type": "stdio",
"command": "npx",
"args": [ "api-docs-mcp" ],
"env": {
"API_SOURCES": "[{\"name\": \"MyGraphQLFile\", \"path\": \"./example/fixtures/graphql/graphql-schema.graphql\", \"type\": \"gql\"}, {\"name\": \"PetstoreAPI\", \"method\": \"GET\", \"url\": \"https://petstore.swagger.io/v2/swagger.json\", \"type\": \"api\"}]"
}
}
Once configured and running, the api-docs-mcp server exposes two primary tools: api_docs and api_search.
This tool provides a list of all available API methods from the configured sources.
Name: api_docs
Description: Get a list of all available API methods.
Input Schema:
{
sourceName?: string; // The name of the API source (e.g., "GitHub") from MCP configuration environment variables. If not provided, docs from all sources will be returned.
}
Output Schema:
{
sources: Array<{
sourceName: string; // The name of the source API
resources: Array<{
resourceName: string; // The name of the API resource
resourceType: string; // The type of the API resource (e.g., "POST", "GET", "mutation", "query")
resourceDescription: string; // A brief description of the API resource
}>;
}>;
}
Output Example:
{
"sources": [
{
"sourceName": "GitHubGraphQL",
"resources": [
{
"resourceName": "getUser",
"resourceType": "query",
"resourceDescription": "Fetch a user by username"
},
{
"resourceName": "createIssue",
"resourceType": "mutation",
"resourceDescription": "Create a new issue in a repository"
}
]
},
{
"sourceName": "PetstoreAPI",
"resources": [
{
"resourceName": "getPetById",
"resourceType": "GET",
"resourceDescription": "Find pet by ID"
},
{
"resourceName": "addPet",
"resourceType": "POST",
"resourceDescription": "Add a new pet to the store"
}
]
}
]
}
This tool provides detailed documentation for a specific API method.
Name: api_search
Description: Search for a specific API method by name and get its full definition.
Input Schema:
{
resourceName: string; // The exact resource name of the API method to search for that was provided in `api_docs` tool's output
}
Output Schema:
{
details: Array<{
sourceName: string; // The name of the source API
resources: Array<{
resourceName: string; // The name of the resource
resourceType: "query" | "mutation" | "subscription"; // The type of GraphQL resource
resourceDescription: string; // Context or description of the resource
details: {
request?: string; // The request structure or input parameters for the API method
response?: string; // The response structure or output format for the API method
error?: string; // Error information or error handling details for the API method
};
}>;
}>;
}
Output Example:
{
"details": [
{
"sourceName": "GitHubGraphQL",
"resources": [
{
"resourceName": "getUser",
"resourceType": "query",
"resourceDescription": "Fetch a user by username",
"details": {
"request": "{ username: String! }",
"response": "{ id: ID!, login: String!, name: String }",
"error": "{ message: String!, code: Int! }"
}
}
]
}
]
}
Set the API_SOURCES environment variable as described in the Configuration section.
Start the server:
pnpm start
The server will connect to a StdioServerTransport, meaning it will communicate over standard input/output.
.
├── src/
│ ├── api/ # OpenAPI/Swagger schema processing
│ │ └── api.ts
│ ├── gql/ # GraphQL schema processing
│ │ └── gql.ts
│ ├── grpc/ # gRPC schema processing
│ │ └── grpc.ts
│ ├── tools/ # MCP tools definitions
│ │ ├── api_docs.ts
│ │ └── api_search.ts
│ ├── utils/ # Utility functions (cache, config, fetch, file, source)
│ │ ├── cache.ts
│ │ ├── config.ts
│ │ ├── fetch.ts
│ │ ├── file.ts
│ │ └── source.ts
│ ├── index.ts # Main entry point
│ └── server.ts # MCP server setup and tool registration
└── package.json # Project dependencies and scripts
└── README.md # This file
Contributions are welcome! Please feel free to open issues or submit pull requests.
This project is licensed under the Apache 2.0 License. See the LICENSE file for details.
FAQs
MCP server for API and GraphQL documentation and search
The npm package api-docs-mcp receives a total of 49 weekly downloads. As such, api-docs-mcp popularity was classified as not popular.
We found that api-docs-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.

Security News
Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.