MCP Swagger Server
An MCP (Model Context Protocol) server that automatically converts REST APIs with Swagger/OpenAPI documentation into MCP tools, making them accessible to MCP-compatible clients.
Features
- ๐ Automatic Tool Generation: Converts Swagger/OpenAPI endpoints to MCP tools
- ๐ SSL Certificate Handling: Option to ignore SSL certificate errors for internal APIs
- ๐ท๏ธ Custom Tool Prefixes: Organize tools with custom prefixes for better organization
- ๐ก Stdio Transport: Uses stdio format as the default transport mechanism
- ๐ Flexible Input: Supports both URL and local file swagger documentation
- ๐ง Parameter Support: Handles path, query, and body parameters
- ๐ Type Mapping: Maps Swagger types to JSON Schema types for proper validation
Installation
Global Installation
npm install -g mcp-swagger
From Source
git clone https://github.com/HainanZhao/mcp-swagger.git
cd mcp-swagger
npm install
npm run build
Usage
Command Line Options
mcp-swagger [options]
Options:
-u, --swagger-url <url> URL to swagger documentation
-f, --swagger-file <file> Path to local swagger file
-p, --tool-prefix <prefix> Custom prefix for generated tools
-b, --base-url <url> Override base URL for API calls
--ignore-ssl Ignore SSL certificate errors
-a, --auth-header <header> Authentication header (e.g., "Bearer token")
-h, --help Display help information
-V, --version Display version number
Examples
Load from URL with custom prefix
mcp-swagger --swagger-url https://api.example.com/swagger.json --tool-prefix example --ignore-ssl
Load from local file
mcp-swagger --swagger-file ./api-docs.json --tool-prefix local-api
With authentication
mcp-swagger --swagger-url https://api.example.com/swagger.json --auth-header "Bearer your-token-here"
Override base URL
mcp-swagger --swagger-file ./swagger.json --base-url https://staging.api.com --tool-prefix staging
Configuration
The server can be configured through command-line arguments or environment variables:
CLI Option | Environment Variable | Description |
---|---|---|
--swagger-url |
SWAGGER_URL |
URL to swagger documentation |
--swagger-file |
SWAGGER_FILE |
Path to local swagger file |
--tool-prefix |
TOOL_PREFIX |
Custom prefix for generated tools |
--base-url |
BASE_URL |
Override base URL for API calls |
--ignore-ssl |
IGNORE_SSL=true |
Ignore SSL certificate errors |
--auth-header |
AUTH_HEADER |
Authentication header |
MCP Integration
Add to your Agent configuration (e.g. claude_desktop_config.json
or ~/.gemini/settings.json
):
{
"mcpServers": {
"swagger-api": {
"command": "mcp-swagger",
"args": [
"--swagger-url", "https://example.com/swagger.json",
"--tool-prefix", "example",
"--ignore-ssl"
]
}
}
}
Other MCP Clients
The server uses the standard MCP stdio transport, so it should work with any MCP-compatible client. Start the server and connect via stdin/stdout.
Generated Tools
Tool Naming Convention
Tools are named using the following pattern:
{prefix}_{method}_{path_segments}
- Path parameters are converted to
by_{parameter_name}
Examples:
GET /v1/users/
โmyapi_get_v1_users
GET /v1/users/{id}
โmyapi_get_v1_users_by_id
POST /v1/users/
โmyapi_post_v1_users
Parameter Mapping
- Path parameters: Included in the URL path
- Query parameters: Added as URL query string
- Body parameters: Sent as JSON request body
- Header parameters: Added to request headers
Type Mapping
Swagger Type | JSON Schema Type |
---|---|
string |
string |
integer |
number |
boolean |
boolean |
array |
array |
object |
object |
Sample Swagger Document
The server has been tested with the following sample swagger document structure:
{
"swagger": "2.0",
"info": {
"title": "API Documentation",
"version": "1.0"
},
"host": "api.example.com",
"basePath": "/api",
"paths": {
"/v1/hosts/": {
"get": {
"summary": "Get a list of hosts",
"parameters": [
{
"name": "filter_by",
"in": "query",
"type": "string",
"description": "Filter criteria"
}
]
}
},
"/v1/hosts/{name}": {
"get": {
"summary": "Get host by name",
"parameters": [
{
"name": "name",
"in": "path",
"required": true,
"type": "string"
}
]
}
}
}
}
This would generate tools like:
example_get_v1_hosts
- List hosts with optional filteringexample_get_v1_hosts_by_name
- Get specific host by name
Error Handling
The server includes comprehensive error handling:
- SSL Certificate Errors: Can be ignored with
--ignore-ssl
flag - Network Errors: Returned as error responses with details
- Invalid Swagger: Validation errors are reported during startup
- Missing Parameters: Parameter validation based on swagger schema
- HTTP Errors: API response errors are captured and returned
Development
Building
npm run build
Testing
# Test with sample swagger file
npm run test
Linting
npm run lint
Troubleshooting
Common Issues
SSL Certificate Errors
- Use
--ignore-ssl
flag for internal APIs with self-signed certificates
- Use
Tool Name Conflicts
- Use
--tool-prefix
to add unique prefixes to avoid naming conflicts
- Use
Base URL Issues
- Use
--base-url
to override the base URL from swagger documentation
- Use
Authentication Failures
- Provide proper authentication header with
--auth-header
- Provide proper authentication header with
Debug Mode
The server logs important information to stderr:
- Swagger document loading status
- Number of tools generated
- Tool generation details
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Support
For issues and questions:
- Create an issue on GitHub
- Check the troubleshooting section above
- Review the sample configurations