项目简介
MCP-OpenAPI Server 是一个桥梁,它允许 AI 智能体通过 模型上下文协议 (MCP) 发现和交互您现有的 OpenAPI 定义的 API 接口。通过将 OpenAPI 服务作为 MCP 工具暴露,并提供适当的类型、身份验证和选择性的端点暴露,它简化了云端 AI 智能体与外部服务的集成,无需开发自定义工具。
主要功能点
- SSE 传输: 使用 SSE 传输协议实现 MCP,适用于多租户服务器端架构。每个 OpenAPI 服务在单独的路由 '<host>/<namespace>/sse' 下可用。
- 选择性路由暴露: 使用正则表达式选择仅暴露您希望 AI 智能体感知的路由/工具。
- 身份验证转发: 通过转发适当的授权标头和/或查询参数,在多个用户之间共享相同的 MCP 工具。
- 类型安全: 基于 OpenAPI schema 生成具有类型化参数的工具,支持嵌套对象和复杂 schema。
安装步骤
本地运行 (推荐使用 uv):
- 确保已安装 uv。
- 克隆仓库到本地。
- 在仓库根目录下,使用 uv 安装依赖:
uv pip install .
Docker 运行:
- 确保已安装 Docker。
- 克隆仓库到本地。
- 在仓库根目录下,构建 Docker 镜像:
docker build -t mcp-openapi .
服务器配置
服务器配置通过 'servers.yaml' 文件进行,以下是一个示例配置:
servers: - namespace: stripe # 命名空间,用于客户端识别 name: Stripe API # 工具名称,展示给 LLM url: https://raw.githubusercontent.com/stripe/openapi/refs/heads/master/openapi/spec3.yaml # OpenAPI 规范 URL base_url: https://api.stripe.com # 基础 URL,用于请求转发 forward_headers: # 需要转发的请求头 - Authorization paths: # 需要暴露的 API 路径,使用正则表达式 - /v1/customers$ - namespace: zendesk name: Zendesk API url: https://developer.zendesk.com/zendesk/oas.yaml base_url: https://{subdomain}.zendesk.com forward_headers: - Authorization paths: - /api/v2/tickets$ - namespace: weather name: Open Weather API url: https://gist.githubusercontent.com/mor10/6fb15f2270f8ac1d8b99aa66f9b63410/raw/0e2c4ed43eb4c126ec2284bc7c069de488b53d99/openweatherAPI.json base_url: https://api.openweathermap.org paths: - /data/2.5/weather forward_query_params: # 将请求头转发为查询参数 - x-open-weather-app-id: appid timeout: 0.5
MCP 客户端配置示例 (JSON 格式):
假设您配置了 Stripe API,以下是 MCP 客户端 (例如 LangChain MCP Client) 的配置示例,用于连接到 MCP-OpenAPI Server:
{ "server_name": "stripe_server", "command": "uv", "args": ["run", "main.py"], "namespace_configs": { "stripe": { "url": "http://localhost:8000/stripe/sse", "transport": "sse", "headers": { "Authorization": "Bearer YOUR_STRIPE_API_KEY" // 请替换为您的 Stripe API 密钥 } } } }
参数注释:
- 'server_name': MCP 服务器的名称,客户端内部标识符。
- 'command': 启动 MCP-OpenAPI Server 的命令,例如 'uv' 或 'python'。
- 'args': 启动命令的参数,例如 'run main.py'。
- 'namespace_configs': 针对不同 namespace 的配置,例如 'stripe'。
- 'stripe': 命名空间名称,与 'servers.yaml' 中配置的 namespace 一致。
- 'url': MCP-OpenAPI Server 中 Stripe API 的 SSE 端点 URL。
- 'transport': 传输协议,这里使用 'sse' (Server-Sent Events)。
- 'headers': 可选的请求头,例如用于身份验证的 'Authorization' 头。
- 'stripe': 命名空间名称,与 'servers.yaml' 中配置的 namespace 一致。
请注意: 您需要根据实际情况修改 'YOUR_STRIPE_API_KEY' 为您自己的 Stripe API 密钥,并确保 MCP-OpenAPI Server 运行在 'localhost:8000' 或您配置的地址和端口上。
基本使用方法
- 启动 MCP-OpenAPI Server: 根据您的选择 (本地或 Docker) 启动服务器。
- 配置 MCP 客户端: 根据您使用的 MCP 客户端 (例如 LangChain MCP Client),配置连接信息,包括服务器地址、端口、命名空间和必要的身份验证信息。
- 使用 AI 智能体: 在您的 AI 智能体应用中,通过 MCP 客户端调用 MCP 工具。工具名称将基于 OpenAPI 规范中的路径和操作 ID 生成。例如,Stripe API 的 'GET /v1/customers' 路径可能会生成名为 'get_customers' 的工具。
请参考仓库中的 'client-examples' 目录下的示例代码,了解如何使用低级别客户端和 LangChain 集成来与 MCP-OpenAPI Server 进行交互。
信息
分类
网页与API