Skip to main content
Glama

FastAPI MCP OpenAPI

by alamkanak
README.md9.75 kB
# <div align="center">FastAPI MCP OpenAPI</div> <p align="center"> <b>Instantly turn your FastAPI API Docs into an AI-friendly, fully introspectable MCP server for LLMs and agents like <a href="https://www.cursor.so/">Cursor</a> and <a href="https://github.com/features/copilot">GitHub Copilot in VS Code</a>.</b><br> <i>Discover, document, and stream your endpoints for next-gen AI workflows.</i> </p> <!-- Badges --> <div align="center"> <a href="https://pypi.org/project/fastapi-mcp-openapi/" style="text-decoration:none;"> <img src="https://img.shields.io/pypi/v/fastapi-mcp-openapi?label=PyPI%20version" alt="PyPI" /> </a> <a href="https://github.com/alamkanak/fastapi-mcp-openapi/releases" style="text-decoration:none;"> <img src="https://img.shields.io/github/v/tag/alamkanak/fastapi-mcp-openapi?label=GitHub%20release" alt="GitHub tag (latest by date)" /> </a> <a href="https://app.codecov.io/gh/alamkanak/fastapi-mcp-openapi" style="text-decoration:none;"> <img src="https://img.shields.io/codecov/c/github/alamkanak/fastapi-mcp-openapi?label=coverage" alt="Codecov" /> </a> <a href="https://github.com/alamkanak/fastapi-mcp-openapi/blob/main/LICENSE" style="text-decoration:none;"> <img src="https://img.shields.io/pypi/l/fastapi-mcp-openapi" alt="License" /> </a> <a href="https://github.com/astral-sh/ruff" style="text-decoration:none;"> <img src="https://img.shields.io/badge/linting-ruff-blue?logo=ruff" alt="Ruff" /> </a> <a href="https://github.com/python/mypy" style="text-decoration:none;"> <img src="https://img.shields.io/badge/type%20checked-mypy-blue" alt="mypy" /> </a> </div> --- ## Why use this? - **Zero-effort LLM/MCP integration:** Expose your FastAPI endpoints to AI agents, Cursor, GitHub Copilot, and other dev tools with a single line of code. - **Seamless API doc connectivity:** Tools like Cursor and Copilot can instantly discover and use your API docs for autocompletion, endpoint introspection, and more for app development. - **Full OpenAPI support:** Get detailed, resolved OpenAPI docs for every endpoint—no more guessing what your API does. - **Streamable, modern protocol:** Implements the latest MCP Streamable HTTP transport for real-time, agent-friendly workflows. - **Security by default:** CORS, origin validation, and session management out of the box. - **Production-ready:** Used in real-world AI agent stacks and developer tools. ## Who's using this? A FastAPI library that provides [Model Context Protocol (MCP)](https://modelcontextprotocol.io) tools for endpoint introspection and OpenAPI documentation. This library allows AI agents to discover and understand your FastAPI endpoints through MCP. ## Features - **Endpoint Discovery**: Lists all available FastAPI endpoints with metadata - **OpenAPI Documentation**: Provides detailed OpenAPI schema for specific endpoints with fully resolved inline schemas - **Clean Output**: Removes unnecessary references and fields for minimal context usage - **MCP Streamable HTTP Transport**: Full compatibility with the latest MCP protocol (2025-03-26) - **Easy Integration**: Simple mounting system similar to fastapi-mcp - **Security**: Built-in CORS protection and origin validation - **Focused Tool Set**: Only provides tools capability - resources and prompts endpoints are disabled ## 🚀 Try it in 5 minutes ```bash pip install fastapi-mcp-openapi # or uv add fastapi-mcp-openapi ``` Create a file called `main.py`: ```python from fastapi import FastAPI from fastapi_mcp_openapi import FastAPIMCPOpenAPI app = FastAPI(title="My API", version="1.0.0") @app.get("/hello") async def hello(): return {"message": "Hello, world!"} mcp = FastAPIMCPOpenAPI(app) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000) ``` Run it: ```bash python main.py ``` Visit [http://localhost:8000/mcp](http://localhost:8000/mcp) to see your MCP server in action! Your MCP server will be available at `http://localhost:8000/mcp` and provides two tools: 1. **listEndpoints**: Get all available endpoints (excluding MCP endpoints) 2. **getEndpointDocs**: Get detailed OpenAPI documentation for a specific endpoint > [!CAUTION] > All API endpoints must be fully typed with Pydantic models or FastAPI's native types to ensure proper OpenAPI generation and MCP compatibility. ## Configuration ### Constructor Parameters - `app`: The FastAPI application to introspect - `mount_path`: Path where MCP server will be mounted (default: "/mcp") - `server_name`: Name of the MCP server (default: "fastapi-openapi-mcp") - `server_version`: Version of the MCP server (default: "0.1.0") - `section_name`: Name of the section in documentation for MCP endpoints (default: "mcp") - `list_endpoints_tool_name`: Name of the list endpoints tool (default: "listEndpoints") - `get_endpoint_docs_tool_name`: Name of the get endpoint docs tool (default: "getEndpointDocs") ### Example with Custom Configuration ```python from fastapi import FastAPI from fastapi_mcp_openapi import FastAPIMCPOpenAPI app = FastAPI() # Custom configuration mcp = FastAPIMCPOpenAPI( app=app, mount_path="/api-mcp", server_name="Custom API Inspector", server_version="2.0.0" section_name="api-mcp", list_endpoints_tool_name="listApiEndpoints", get_endpoint_docs_tool_name="getApiEndpointDocs" ) ``` ## MCP Tools ### 1. listEndpoints Lists all available FastAPI endpoints with their metadata. **Input**: No parameters required **Output**: JSON array of endpoint information including: - `path`: The endpoint path - `methods`: Array of HTTP methods - `name`: Endpoint name - `summary`: Endpoint summary from docstring ### 2. getEndpointDocs Get detailed OpenAPI documentation for a specific endpoint. **Input**: - `endpoint_path` (required): The path of the endpoint (e.g., "/users/{user_id}") - `method` (optional): The HTTP method (default: "GET") **Output**: JSON object with detailed OpenAPI information including: - `path`: The endpoint path - `method`: The HTTP method - `operation`: OpenAPI operation details with fully resolved schemas ## Transport Support This library implements the latest MCP Streamable HTTP transport (protocol version 2025-03-26) which: - Uses a single HTTP endpoint for both requests and responses - Supports both immediate JSON responses and Server-Sent Events (SSE) streaming - Provides backward compatibility with older MCP clients - Includes proper session management with unique session IDs ## Security The library includes built-in security features: - **Origin Header Validation**: Prevents DNS rebinding attacks - **CORS Configuration**: Configured for localhost development by default - **Session Management**: Proper MCP session handling with unique IDs For production use, make sure to: 1. Configure appropriate CORS origins 2. Implement proper authentication if needed 3. Bind to localhost (127.0.0.1) for local instances ## Integration with AI Agents This library is designed to work with AI agents and MCP clients like: - Claude Desktop (via mcp-remote) - VS Code extensions with MCP support - Custom MCP clients Example client configuration for VS Code Copilot: ```json { "mcpServers": { "your-api-name": { "url": "http://localhost:8000/mcp", "type": "sse", "dev": { "debug": { "type": "web", } } } } } ``` ## Development ### Setting up the development environment ```bash git clone <repository-url> cd fastapi-mcp-openapi uv venv source .venv/bin/activate uv pip install -e ".[dev]" ``` ### Running tests ```bash uv run pytest # Coverage report (local) uv run pytest --cov=fastapi_mcp_openapi --cov-report=html ``` ### Code Quality This project uses several tools to maintain code quality: ```bash # Run linting ruff check . # Auto-fix linting issues ruff check . --fix # Format code ruff format . # Type checking mypy fastapi_mcp_openapi --ignore-missing-imports ``` ### Building the package ```bash uv build ``` ### Publishing See [PUBLISHING.md](PUBLISHING.md) for detailed instructions on setting up automated PyPI publishing with GitHub Actions. ### Using locally built package To use the locally built package in another FastAPI project, you can either install it from the wheel file or in editable mode. ```bash # Option 1: Install from wheel file pip install /path/to/fastapi_mcp_openapi-0.1.0-py3-none-any.whl # or with uv uv add /path/to/fastapi_mcp_openapi-0.1.0-py3-none-any.whl # Option 2: Install in editable mode pip install -e /path/to/fastapi-mcp-openapi # or with uv uv add --editable /path/to/fastapi-mcp-openapi ``` ## Example Applications This repository includes two example applications in the `examples/` folder demonstrating the library's features: ### Simple Example (`examples/simple_example.py`) A minimal example showing basic integration: ```bash # Run the simple example python examples/simple_example.py ``` This creates a basic FastAPI app with a few endpoints and shows the MCP integration info on startup. ### Complete Example (`examples/advanced_example.py`) A comprehensive example with multiple endpoint types, Pydantic models, and full CRUD operations: ```bash # Run the complete example python examples/advanced_example.py ``` Both examples can be seen in docs url at `http://localhost:8000/docs` after running the application. Use claude [MCP inspector](https://github.com/modelcontextprotocol/inspector) to see the MCP endpoints and tools. Connect to the MCP server at `http://localhost:8000/mcp` with transport type Streamable HTTP. ## License MIT License ## Contributing Contributions are welcome! Please feel free to submit a Pull Request.

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/alamkanak/fastapi-mcp-openapi'

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