A powerful Model Context Protocol (MCP) server for analyzing OpenAPI specifications with Claude Desktop and other LLM clients. This server enables natural language queries about your API structures, endpoints, schemas, and helps identify inconsistencies across multiple OpenAPI specs.
- π Features
- π Installation
- βοΈ Configuration
- π― Usage
- π§ Available Tools
- π Example Output
- ποΈ Creating Your Own API Registry
- π¨ Troubleshooting
- π€ Contributing
- π Changelog
- π License
- π‘ API Registry Support: Automatically discover APIs from
apis.json
registries (support for 30+ APIs) - π URL-Based Loading: Load specs from individual URLs with automatic fallback
- π Local File Support: Traditional folder-based spec loading with multi-format support
- π Priority System: Discovery URL β Individual URLs β Local folder (intelligent fallback)
- π Bulk Analysis: Load and analyze 90+ OpenAPI specification files simultaneously
- π Smart Search: Find endpoints across all APIs using natural language queries
- π Comprehensive Stats: Generate detailed statistics about your API ecosystem
- π§ Inconsistency Detection: Identify authentication schemes and naming convention mismatches
- π Schema Comparison: Compare schemas with the same name across different APIs
- β‘ Fast Queries: In-memory indexing for lightning-fast responses
- Multi-Format Support: JSON, YAML, and YML specifications
- Version Support: OpenAPI 2.0, 3.0, and 3.1 specifications
- Remote & Local: Works with URLs, API registries, and local files
- Source Tracking: Know exactly where each API spec was loaded from
npm install openapi-analyzer-mcp
git clone https://github.com/sureshkumars/openapi-analyzer-mcp.git
cd openapi-analyzer-mcp
npm install
npm run build
The OpenAPI Analyzer supports three discovery methods with intelligent priority fallback:
- π Priority 1: API Registry (
OPENAPI_DISCOVERY_URL
) - π₯ Priority 2: Individual URLs (
OPENAPI_SPEC_URLS
) - π₯ Priority 3: Local Folder (
OPENAPI_SPECS_FOLDER
)
Find your config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\\Claude\\claude_desktop_config.json
Perfect for companies with centralized API registries:
{
"mcpServers": {
"openapi-analyzer": {
"command": "npx",
"args": ["-y", "openapi-analyzer-mcp"],
"env": {
"OPENAPI_DISCOVERY_URL": "https://docs.company.com/apis.json"
}
}
}
}
Load specific APIs from direct URLs:
{
"mcpServers": {
"openapi-analyzer": {
"command": "npx",
"args": ["-y", "openapi-analyzer-mcp"],
"env": {
"OPENAPI_SPEC_URLS": "https://api.example.com/v1/openapi.yaml,https://api.example.com/v2/openapi.yaml,https://petstore.swagger.io/v2/swagger.json"
}
}
}
}
Traditional approach for local specification files:
{
"mcpServers": {
"openapi-analyzer": {
"command": "npx",
"args": ["-y", "openapi-analyzer-mcp"],
"env": {
"OPENAPI_SPECS_FOLDER": "/absolute/path/to/your/openapi-specs"
}
}
}
}
Ultimate flexibility - tries all methods with intelligent fallback:
{
"mcpServers": {
"openapi-analyzer": {
"command": "npx",
"args": ["-y", "openapi-analyzer-mcp"],
"env": {
"OPENAPI_DISCOVERY_URL": "https://docs.company.com/apis.json",
"OPENAPI_SPEC_URLS": "https://legacy-api.com/spec.yaml,https://external-api.com/spec.json",
"OPENAPI_SPECS_FOLDER": "/path/to/local/specs"
}
}
}
}
Company with API Registry:
{
"mcpServers": {
"company-apis": {
"command": "npx",
"args": ["-y", "openapi-analyzer-mcp"],
"env": {
"OPENAPI_DISCOVERY_URL": "https://api.company.com/registry/apis.json"
}
}
}
}
Multiple API Sources:
{
"mcpServers": {
"multi-apis": {
"command": "npx",
"args": ["-y", "openapi-analyzer-mcp"],
"env": {
"OPENAPI_SPEC_URLS": "https://petstore.swagger.io/v2/swagger.json,https://api.example.com/v1/openapi.yaml"
}
}
}
}
Variable | Description | Example | Priority |
---|---|---|---|
OPENAPI_DISCOVERY_URL |
URL to API registry (apis.json format) | https://docs.company.com/apis.json |
1 (Highest) |
OPENAPI_SPEC_URLS |
Comma-separated list of OpenAPI spec URLs | https://api1.com/spec.yaml,https://api2.com/spec.json |
2 (Medium) |
OPENAPI_SPECS_FOLDER |
Absolute path to local OpenAPI files folder | /absolute/path/to/specs |
3 (Fallback) |
- At least one environment variable must be set
- System tries sources in priority order and stops at first success
- Always use absolute paths for
OPENAPI_SPECS_FOLDER
- Supports JSON, YAML, and YML formats for all sources
Once configured, you can interact with your OpenAPI specs using natural language in Claude Desktop:
"Load all APIs from the company registry and show me an overview"
"Discover APIs from the configured registry and analyze their authentication patterns"
"What APIs are available in our API registry?"
"Show me where my specs were loaded from"
"Load all my OpenAPI specs and give me a comprehensive summary"
"How many APIs do I have and what's the total number of endpoints?"
"Compare authentication schemes across all loaded APIs"
"Which APIs are using different versions of the same schema?"
"Show me all POST endpoints for user creation across all APIs"
"Find all endpoints related to authentication across all loaded APIs"
"Which APIs have pagination parameters?"
"Search for endpoints that handle file uploads"
"Find all APIs that use the 'User' schema"
"What authentication schemes are used across my APIs?"
"Which APIs have inconsistent naming conventions?"
"Compare the User schema across different APIs"
"Show me APIs that are still using version 1.0"
"Generate comprehensive statistics about my API ecosystem"
"Which HTTP methods are most commonly used?"
"What are the most common path patterns?"
"Show me version distribution across my APIs"
The MCP server provides these tools for programmatic access:
Tool | Description | Parameters |
---|---|---|
load_specs |
Smart Load: Automatically load specs using priority system (registry β URLs β folder) | None |
list_apis |
List all loaded APIs with basic info (title, version, endpoint count) | None |
get_api_spec |
Get the full OpenAPI spec for a specific file | filename |
search_endpoints |
Search endpoints by keyword across all APIs | query |
get_api_stats |
Generate comprehensive statistics about all loaded APIs | None |
find_inconsistencies |
Detect inconsistencies in authentication schemes | None |
compare_schemas |
Compare schemas with the same name across different APIs | schema1 , schema2 (optional) |
get_load_sources |
New! Show where specs were loaded from (registry, URLs, or folder) | None |
openapi-analyzer-mcp/
βββ src/
β βββ index.ts # Main server implementation
βββ tests/ # Comprehensive test suite
β βββ analyzer.test.ts # Core functionality tests
β βββ server.test.ts # MCP server tests
β βββ validation.test.ts # Environment tests
β βββ setup.ts # Test configuration
β βββ fixtures/ # Test data files
βββ dist/ # Compiled JavaScript
βββ coverage/ # Test coverage reports
βββ examples/ # Example configurations
β βββ claude_desktop_config.json
β βββ sample-openapi.json
βββ vitest.config.ts # Test configuration
βββ package.json
βββ tsconfig.json
βββ README.md
Note: You don't need an openapi-specs
folder in this repository. Point OPENAPI_SPECS_FOLDER
to wherever your actual OpenAPI files are located.
[
{
"type": "discovery",
"url": "https://api.company.com/registry/apis.json",
"count": 12,
"metadata": {
"name": "Company APIs",
"description": "Collection of company API specifications",
"total_apis": 12
}
}
]
{
"totalApis": 12,
"totalEndpoints": 247,
"loadedFrom": "API Registry",
"discoveryUrl": "https://api.company.com/registry/apis.json",
"apis": [
{
"filename": "User Management API",
"title": "User Management API",
"version": "2.1.0",
"endpointCount": 18,
"source": "https://docs.company.com/user-api.yaml"
},
{
"filename": "Product Catalog API",
"title": "Product Catalog API",
"version": "1.5.0",
"endpointCount": 32,
"source": "https://docs.company.com/product-api.yaml"
}
]
}
{
"totalApis": 12,
"totalEndpoints": 247,
"methodCounts": {
"GET": 98,
"POST": 67,
"PUT": 45,
"DELETE": 37
},
"versions": {
"1.0.0": 8,
"2.0.0": 3,
"3.1.0": 1
},
"commonPaths": {
"/api/v1/users/{id}": 8,
"/api/v1/orders": 6,
"/health": 12
}
}
[
{
"filename": "user-api.json",
"api_title": "User Management API",
"path": "/api/v1/users",
"method": "POST",
"summary": "Create a new user",
"operationId": "createUser"
},
{
"filename": "admin-api.json",
"api_title": "Admin API",
"path": "/admin/users",
"method": "POST",
"summary": "Create user account",
"operationId": "adminCreateUser"
}
]
Want to set up your own apis.json
registry? Here's how:
Create a file at https://your-domain.com/apis.json
:
{
"name": "Your Company APIs",
"description": "Collection of all our API specifications",
"url": "https://your-domain.com",
"apis": [
{
"name": "User API",
"baseURL": "https://api.your-domain.com/users",
"properties": [
{
"type": "Swagger",
"url": "https://docs.your-domain.com/user-api.yaml"
}
]
},
{
"name": "Orders API",
"baseURL": "https://api.your-domain.com/orders",
"properties": [
{
"type": "OpenAPI",
"url": "https://docs.your-domain.com/orders-api.json"
}
]
}
]
}
Or use the simpler custom format:
{
"name": "Your Company APIs",
"description": "Our API registry",
"apis": [
{
"name": "User API",
"version": "v2",
"spec_url": "https://docs.your-domain.com/user-api.yaml",
"docs_url": "https://docs.your-domain.com/user-api",
"status": "stable",
"tags": ["auth", "users"]
}
]
}
- Verify environment variables are set - At least one source must be configured
- Check that URLs are accessible - Test discovery URLs and spec URLs manually
- Restart Claude Desktop completely after configuration changes
- Check network connectivity for remote API registries
- Verify file formats - Supports JSON, YAML, and YML
- "β Error: No OpenAPI source configured": Set at least one of
OPENAPI_DISCOVERY_URL
,OPENAPI_SPEC_URLS
, orOPENAPI_SPECS_FOLDER
- "
β οΈ Warning: Failed to load from discovery URL": Check if the registry URL is accessible and returns valid JSON - "Invalid registry format: missing apis array": Your APIs.json file must have an
apis
array - "No OpenAPI spec URL found": API entries must have either
spec_url
orproperties
with OpenAPI/Swagger type
- "β Error: OPENAPI_SPECS_FOLDER does not exist": The specified directory doesn't exist
- "β Error: OPENAPI_SPECS_FOLDER is not a directory": The path points to a file, not a directory
- "β Error: No read permission for OPENAPI_SPECS_FOLDER": Check folder permissions
- "
β οΈ Warning: No OpenAPI specification files found": Directory exists but contains no supported files - "
β οΈ Skipping [file]: Invalid format": File is not valid JSON/YAML or malformed OpenAPI spec
Set NODE_ENV=development
to see detailed logging:
{
"mcpServers": {
"openapi-analyzer": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": {
"OPENAPI_SPECS_FOLDER": "/path/to/specs",
"NODE_ENV": "development"
}
}
}
}
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
git clone https://github.com/sureshkumars/openapi-analyzer-mcp.git
cd openapi-analyzer-mcp
npm install
npm run build
npm run dev # Start in development mode
This project includes a comprehensive test suite with 46+ tests covering all functionality:
# Run all tests
npm test
# Run tests in watch mode (re-runs on file changes)
npm run test:watch
# Run tests with coverage report
npm run test:coverage
The test suite provides extensive coverage with 100% test success rate:
- β 46 tests passing with 66.79% statement coverage and 100% function coverage
- Unit tests for the OpenAPIAnalyzer class (30 tests) - covers all loading methods and analysis features
- Integration tests for MCP server configuration (8 tests) - validates all tools and exports
- Validation tests for environment setup and error handling (8 tests) - tests all discovery methods
New in v1.2.0:
- β Smart discovery testing - URL loading, API registry parsing, fallback mechanisms
- β Constructor-based testing - Flexible test configuration without environment variables
- β Remote spec mocking - Full coverage of HTTP-based spec loading
- β Backward compatibility - All existing functionality preserved
tests/
βββ analyzer.test.ts # Core OpenAPIAnalyzer functionality tests
βββ server.test.ts # MCP server configuration tests
βββ validation.test.ts # Environment validation tests
βββ setup.ts # Test configuration
βββ fixtures/ # Sample test data
βββ sample-api.json
βββ another-api.json
βββ invalid-api.json
- β OpenAPI spec loading (valid/invalid files, JSON parsing)
- β Search functionality (by path, method, summary, operationId)
- β Statistics generation (method counts, versions, common paths)
- β Schema comparison (cross-API schema analysis)
- β Inconsistency detection (authentication schemes)
- β Error handling (missing env vars, file permissions)
- β Edge cases (empty directories, malformed JSON)
- Vitest - Fast test framework with TypeScript support
- Comprehensive mocking - File system operations and console output
- Type safety - Full TypeScript integration with proper interfaces
Released: September 2025
- π Smart Discovery System: Revolutionary API discovery with priority-based fallback
- π‘ API Registry Support: Full support for
apis.json
format and custom registries - π URL-Based Loading: Load specs directly from individual URLs
- π Intelligent Fallback: Discovery URL β Individual URLs β Local folder priority system
- π·οΈ Source Tracking: New
get_load_sources
tool shows where specs were loaded from
- π’ Production Ready: Successfully tested with 30+ production APIs from various registries
- π Bulk Processing: Load 90+ APIs from registries in seconds
- π Universal Format Support: JSON, YAML, YML from any source (remote or local)
- β 46 tests passing with 100% success rate
- π Improved coverage: 66.79% statement coverage, 100% function coverage
- π§ Constructor-based testing: Flexible test configuration
- π Remote spec mocking: Full HTTP-based loading test coverage
- β‘ Zero Breaking Changes: Full backward compatibility maintained
- π Comprehensive Documentation: Updated with real-world examples
- ποΈ Registry Setup Guide: Instructions for creating your own APIs.json registry
- π¨ Enhanced Error Handling: Better error messages and graceful fallbacks
- Added YAML/YML format support using @apidevtools/swagger-parser
- Enhanced schema comparison and inconsistency detection
- Improved error handling and validation
- Core OpenAPI analysis functionality
- Local folder-based spec loading
- MCP server implementation with 6 core tools
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with the Model Context Protocol SDK
- Supports OpenAPI specifications as defined by the OpenAPI Initiative
- Compatible with Claude Desktop and other MCP clients
Made with β€οΈ for API developers and documentation teams
If you find this tool helpful, please consider giving it a β on GitHub!