MCP Swagger Server
by zecure
README.md
# MCP Swagger Server
Generate MCP (Model Context Protocol) servers from Swagger/OpenAPI specifications with flexible filtering.
## Features
- **Dynamic Tool Generation**: Automatically creates MCP tools from OpenAPI endpoints
- **Flexible Filtering**: Control exposed endpoints via HTTP methods, paths, tags, and operation IDs
- **Authentication**: Built-in Bearer token support
- **Type Safety**: Automatic parameter validation and conversion
- **FastMCP Integration**: Built on the FastMCP framework for reliable MCP server implementation
## Installation
```bash
# Install from source
pip install -e .
# Or install dependencies directly
pip install -r requirements.txt
```
## Quick Start
```bash
# Basic usage (exposes GET endpoints by default)
mcp-swagger path/to/swagger.json
# With authentication
mcp-swagger swagger.json --api-token "your-token"
# Custom base URL
mcp-swagger swagger.json --base-url "https://api.example.com"
```
## Filtering Options
Control which endpoints are exposed:
- **HTTP Methods**: `--methods get post put delete`
- **Path Patterns**: `--paths "/api/*" --exclude-paths "/admin/*"`
- **Tags**: `--tags public documents --exclude-tags internal`
- **Operation IDs**: `--operation-ids list_docs get_doc --exclude-operation-ids delete_all`
## Examples
```bash
# Public read-only API
mcp-swagger api.json --methods get --tags public --exclude-paths "/admin/*"
# Specific operations only
mcp-swagger api.json --operation-ids list_docs get_doc search_docs
# Preview generated tools without starting server
mcp-swagger api.json --dry-run --methods get post
```
## Configuration
### Command Line Options
- `--host`: Server host (default: localhost)
- `--port`: Server port (default: 8080)
- `--transport`: Transport protocol: `sse` or `streamable-http` (default)
- `--timeout`: Request timeout in seconds (default: 30)
- `--dry-run`: Preview tools without starting server
### Environment Variables
- `API_BASE_URL`: Default base URL for the API
- `API_TOKEN`: API token for authentication
## Docker
```bash
# Build image
docker build -t mcp-swagger .
# Run with configuration
docker run -p 8080:8080 \
-e API_BASE_URL=https://api.example.com \
-e API_TOKEN=your-token \
-v $(pwd)/swagger.json:/app/swagger.json \
mcp-swagger /app/swagger.json --methods get post
```
## Architecture
- **`config/`**: CLI parsing and settings
- **`filters/`**: Endpoint filtering logic
- **`generators/`**: MCP tool generation
- **`parsers/`**: OpenAPI spec parsing
- **`api_client/`**: HTTP client and auth
- **`models/`**: Data models
- **`utils/`**: Utilities and logging
## How It Works
1. Load OpenAPI/Swagger specification (file or URL)
2. Apply filters to select endpoints
3. Generate FastMCP tools with parameter validation and auth
4. Start MCP server with generated tools
This server cannot be deployed