Skip to main content
Glama
README.md4.71 kB
# MCP OpenAPI Template A template for building MCP (Model Context Protocol) servers from OpenAPI specifications. This template provides a production-ready foundation for creating MCP servers that expose any REST API with an OpenAPI specification to LLM-powered tools. ## Features - **Dynamic Tool Generation**: Automatically creates MCP tools from OpenAPI specs - **Auth Gateway Integration**: Centralized authentication via Auth Gateway - **Dual Transport**: Supports both `stdio` (local) and `sse` (remote) transports - **Configurable Validation**: Customizable ID patterns and input validation - **Tool Policies**: Risk-based policies for blocking/logging operations - **Docker Ready**: Production-ready Dockerfile and docker-compose ## Quick Start ### 1. Clone/Use Template ```bash # Using GitHub template feature (recommended) # Click "Use this template" on GitHub # Or clone directly git clone https://github.com/jesusperezdeveloper/mcp_openapi_template my-api-mcp cd my-api-mcp ``` ### 2. Initialize Your Service ```bash python -m scripts.init_service \ --name "github" \ --display-name "GitHub" \ --base-url "https://api.github.com" \ --openapi-url "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json" ``` ### 3. Configure Auth Gateway Edit `.env` with your Auth Gateway credentials: ```env AUTH_GATEWAY_URL=https://your-auth-gateway.com AUTH_GATEWAY_API_KEY=your-api-key ``` ### 4. Download OpenAPI Spec ```bash python -m scripts.fetch_openapi ``` ### 5. Run the Server ```bash # Local mode (stdio) PYTHONPATH=vendor python -m src.server # Remote mode (SSE) MCP_TRANSPORT=sse PYTHONPATH=vendor python -m src.server ``` ## Project Structure ``` mcp_openapi_template/ ├── src/ │ ├── server.py # Main MCP server │ ├── config.py # Configuration loader │ ├── openapi_tools.py # Dynamic tool generator │ ├── auth_gateway.py # Auth Gateway integration │ ├── validation.py # Input validation │ └── tool_policies.py # Risk policies ├── config/ │ ├── service.yaml # Service configuration │ ├── mcp.local.json # Local MCP config │ └── mcp.remote.json # Remote MCP config ├── scripts/ │ ├── fetch_openapi.py # Download OpenAPI spec │ └── init_service.py # Initialize new service ├── examples/ │ └── trello/ # Complete Trello example ├── openapi/ # OpenAPI specs (downloaded) ├── vendor/mcp/ # Vendorized MCP SDK ├── Dockerfile └── docker-compose.yml ``` ## Configuration ### service.yaml The main configuration file (`config/service.yaml`) defines: ```yaml service: name: "myservice" display_name: "My Service" api: base_url: "https://api.example.com" openapi_spec_url: "https://api.example.com/openapi.json" tool_prefix: "myservice" auth: gateway_endpoint: "/credentials/myservice" credentials_format: - name: "api_key" query_param: "key" validation: id_pattern: "^[a-zA-Z0-9]+$" policies: blocked_patterns: - "delete_organization" ``` ### Environment Variables | Variable | Required | Description | |----------|----------|-------------| | `AUTH_GATEWAY_URL` | Yes | Auth Gateway URL | | `AUTH_GATEWAY_API_KEY` | Yes | API Key for Auth Gateway | | `API_BASE_URL` | No | Override API base URL | | `MCP_TRANSPORT` | No | `stdio` (default) or `sse` | | `MCP_PORT` | No | Port for SSE mode (default: 8000) | ## Authentication Flow 1. User obtains JWT from Auth Gateway (login) 2. User calls `set_auth_token(jwt)` in the MCP 3. MCP fetches API credentials from Auth Gateway 4. Credentials are cached for the session 5. User can now use all available tools ## Adding Custom Helper Tools See `examples/trello/helpers.py` for a complete example of adding user-friendly wrapper tools. ```python # In src/helpers.py def register_helper_tools(mcp, auth_params, client_factory, require_auth): @mcp.tool(description="My custom tool") async def my_tool(param: str) -> dict: require_auth() # Implementation pass ``` ## Docker Deployment ```bash # Build with OpenAPI spec docker build \ --build-arg OPENAPI_SPEC_URL="https://api.example.com/openapi.json" \ -t my-mcp . # Run docker run -p 8000:8000 --env-file .env my-mcp ``` ## Examples See the `examples/` directory for complete configurations: - **Trello**: Full configuration with helper tools, validation, and policies ## License MIT ## Contributing Contributions are welcome! Please feel free to submit a Pull Request.

Latest Blog Posts

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/jesusperezdeveloper/mcp_openapi_template'

If you have feedback or need assistance with the MCP directory API, please join our Discord server