FastAPI OpenAPI MCP Server

FastAPI OpenAPI MCP Server

Converts FastAPI application OpenAPI documentation into MCP tools for AI assistants to efficiently query API information. Reduces token consumption by enabling on-demand, structured API queries instead of loading complete OpenAPI specifications.

Category
访问服务器

README

FastAPI OpenAPI MCP Server

🚀 将 FastAPI 应用的 OpenAPI 文档转换为 MCP (Model Context Protocol) Tools,让 AI 编程助手能够高效查询 API 信息,减少 Token 消耗。

Python Version License Code style: ruff

📖 项目简介

FastAPI OpenAPI MCP Server 是一个用于 FastAPI 应用的 MCP 服务器实现,它能够将 OpenAPI 文档转换为一系列可查询的 Tools,让 AI 编程助手(如 Claude、GPT 等)能够:

  • 🎯 按需查询 - 无需每次加载完整的 openapi.json
  • 🔍 精准定位 - 通过标签、路径、关键词快速找到目标接口
  • 📊 结构化信息 - 获取格式化的、易于理解的 API 信息
  • 💰 节省 Token - 显著减少 AI 编程过程中的 Token 消耗

适用场景

  • ✅ API 接口数量 > 30 个
  • ✅ 需要 AI 辅助开发和调试
  • ✅ 希望减少 AI 上下文 Token 消耗
  • ✅ 需要跨项目复用 MCP 功能

✨ 核心功能

MCP Tools

// TODO

MCP Tools

// TODO

访问方式

  • ✅ JSON-RPC 2.0 - 标准 MCP 协议
  • ✅ Streamable HTTP - 流式 HTTP

🏗️ 架构设计

目录结构

openapi-mcp-server/
│── openapi_mcp/
│   ├── __init__.py
│   ├── server.py          # 核心 MCP Server
│   ├── config.py      # 配置管理
│   ├── tools/         # Tools 实现
│   │   ├── __init__.py
|   │   ├── base.py        # Tool 基类
|   │   ├── endpoints.py   # 接口相关 tools
|   │   ├── models.py      # 模型相关 tools
|   │   └── search.py      # 搜索相关 tools
|   ├── formatters/        # 输出格式化
|   │   ├── __init__.py
|   │   ├── markdown.py    # Markdown 格式
|   │   └── json.py        # JSON 格式
|   └── cache.py           # 缓存机制
├── tests/                     # 测试文件
├── examples/                  # 使用示例
│   └── fastapi_integration.py
├── pyproject.toml
├── README.md
└── LICENSE

核心组件

1. OpenApiMcpServer

class OpenApiMcpServer:
    """OpenAPI MCP Server 主类"""

    def __init__(
        self,
        fastapi_app: FastAPI,
        config: OpenApiMcpConfig | None = None
    ):
        """初始化 MCP Server

        Args:
            fastapi_app: FastAPI 应用实例
            config: 配置对象(可选)
        """

2. OpenApiMcpConfig

class OpenApiMcpConfig:
    """MCP Server 配置"""

    # 缓存配置
    cache_enabled: bool = True
    cache_ttl: int = 300  # 5分钟

    # 路由配置
    prefix: str = '/openapi-mcp'
    include_sse: bool = True
    include_rest_api: bool = True  # 调试用的 REST API

    # 输出格式
    output_format: str = 'markdown'  # markdown | json | plain
    max_output_length: int = 10000  # 防止输出过长

    # 自定义扩展
    custom_tools: list[Tool] = []
    tool_filter: Callable | None = None  # 过滤哪些接口暴露

    # 安全配置
    auth_required: bool = False
    allowed_origins: list[str] = ['*']

🚀 快速开始

安装

# 从 PyPI 安装(TODO: 发布后)
pip install fastapi-openapi-mcp

# 或使用 uv
uv add fastapi-openapi-mcp

# 开发模式安装
git clone https://github.com/yourusername/openapi-mcp-server.git
cd openapi-mcp-server
uv sync

💡 立即测试(使用 MCP Inspector)

在开发模式下,你可以立即使用 MCP Inspector 测试:

# 确保已安装依赖
uv sync

# 使用 MCP Inspector 测试
npx @modelcontextprotocol/inspector uv run python examples/mcp_stdio_example.py

这会打开一个 Web 界面(http://localhost:5173),让你可以:

  • ✅ 查看所有 MCP Tools 和 Resources
  • ✅ 交互式调用工具
  • ✅ 实时查看返回结果

详细指南:QUICKSTART_INSPECTOR.md

基础使用

from fastapi import FastAPI
from openapi_mcp import OpenApiMcpServer

# 创建 FastAPI 应用
app = FastAPI(
    title="My Awesome API",
    version="1.0.0"
)

# 添加你的路由
@app.get("/users")
async def list_users():
    return {"users": []}

# 集成 MCP Server(仅需 1 行代码)
mcp_server = OpenApiMcpServer(app)
mcp_server.mount("/mcp")

# 启动应用
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

自定义配置

from openapi_mcp import OpenApiMcpServer, OpenApiMcpConfig

# 自定义配置
config = OpenApiMcpConfig(
    cache_enabled=True,
    cache_ttl=600,  # 10分钟缓存
    prefix='/openapi-mcp',
    output_format='markdown',
)

mcp_server = OpenApiMcpServer(app, config=config)
mcp_server.mount()

工具过滤(安全)

def tool_filter(path: str, method: str, endpoint_info: dict) -> bool:
    """过滤不想暴露给 AI 的接口"""
    # 过滤内部接口
    if path.startswith('/internal/'):
        return False
    # 过滤管理员接口
    if 'admin' in endpoint_info.get('tags', []):
        return False
    return True

config = OpenApiMcpConfig(tool_filter=tool_filter)
mcp_server = OpenApiMcpServer(app, config=config)

🔧 高级功能

缓存管理

# 手动清除缓存
mcp_server.invalidate_cache()

# 禁用缓存(用于开发调试)
config = OpenApiMcpConfig(cache_enabled=False)

自定义 Tools

from openapi_mcp.tools.base import BaseMcpTool
from mcp.types import CallToolResult, TextContent

class CustomTool(BaseMcpTool):
    name = 'my_custom_tool'
    description = 'My custom analysis tool'

    async def execute(self, **kwargs) -> CallToolResult:
        # 访问 OpenAPI schema
        spec = self.get_openapi_spec()

        # 自定义逻辑
        result = "Custom analysis result"

        return CallToolResult(
            content=[TextContent(type='text', text=result)]
        )

# 注册自定义工具
config = OpenApiMcpConfig(custom_tools=[CustomTool()])
mcp_server = OpenApiMcpServer(app, config=config)

📚 API 参考

MCP Tools 详细说明

// TODO

MCP Resources 详细说明

// TODO

🤝 贡献指南

我们欢迎各种形式的贡献!

开发环境搭建

# 克隆项目
git clone https://github.com/yourusername/openapi-mcp-server.git
cd openapi-mcp-server

# 安装依赖
uv sync

# 运行测试
uv run pytest

# 代码格式化
uv run ruff format .

# 代码检查
uv run ruff check . --fix

# 类型检查
uv run basedpyright

提交规范

遵循 Conventional Commits 规范:

feat: 添加新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 代码重构
test: 测试相关
chore: 构建或工具更新

📄 许可证

MIT License

🙏 致谢

  • FastAPI - 现代化的 Python Web 框架
  • MCP - Model Context Protocol
  • Anthropic - MCP 协议的创建者

📮 联系方式


注: 本项目当前处于开发阶段,API 可能会有变动。欢迎提前试用并提供反馈!

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选