mcp openapi代理
mcp openapi代理 是一个Python包,它实现了一个模型上下文协议(MCP)服务器,旨在将OpenAPI规范定义的REST API动态公开为MCP工具。这有助于将OpenAPI描述的API无缝集成到基于MCP的工作流中。
目录
-
概述
-
特性
-
安装
-
MCP生态系统整合
-
操作模式
-
快速MCP模式(简单模式)
-
低级别模式(默认)
-
环境变量
-
例子
-
Glama示例
-
Fly.io示例
-
渲染示例
-
松弛示例
-
GetZep示例
-
病毒总数示例
-
概念示例
-
Asana示例
-
APIs.guru示例
-
NetBox示例
-
方框API示例
-
WolframAlpha API示例
-
故障排除
-
许可证
概述
该软件包提供两种操作模式:
- 低级模式(默认): 动态注册与OpenAPI文档中指定的所有有效API端点对应的工具(例如。
/chat/completions成为chat_completions()). - 快速MCP模式(简单模式): 通过公开一组预定义的工具(例如。
list_functions()和call_function())基于静态配置。
特性
- 动态工具生成: 根据OpenAPI端点定义自动创建MCP工具。
- 简单模式选项: 通过FastMCP模式提供静态配置替代方案。
- OpenAPI规范支持: 与OpenAPI v3兼容,并可能支持v2。
- 灵活过滤: 允许根据路径或其他条件通过白名单进行端点过滤。
- 有效载荷身份验证: 支持通过JMESPath表达式进行自定义身份验证(例如,对于像Slack这样的API,它们期望有效载荷中的令牌而不是HTTP标头)。
- 标头身份验证: 用途
Bearer默认情况下为API_KEY在Authorization标头中,可针对Fly.io等API进行定制Api-Key. - MCP集成: 与MCP生态系统无缝集成,以调用REST API作为工具。
安装
使用以下命令直接从PyPI安装包:
BASH``` 1uvx mcp-openapi-proxy
### MCP生态系统整合
包括 **mcp openapi代理** 在您的MCP生态系统中配置它 `mcpServers` 设置。下面是一个通用示例:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12{
"mcpServers": {
"mcp-openapi-proxy": {
"command": "uvx",
"args": ["mcp-openapi-proxy"],
"env": {
"OPENAPI_SPEC_URL": "${OPENAPI_SPEC_URL}",
"API_KEY": "${API_OPENAPI_KEY}"
}
}
}
}
请参阅 例子 下面的部分介绍了为特定API量身定制的实用配置。
操作模式
快速MCP模式(简单模式)
- 启用方式: 设置环境变量
OPENAPI_SIMPLE_MODE=true. - 说明: 公开一组从代码中定义的特定OpenAPI端点派生的固定工具。
- 配置: 依赖于环境变量来指定工具行为。
低级别模式(默认)
- 说明: 自动将提供的OpenAPI规范中的所有有效API端点注册为单独的工具。
- 工具命名: 从标准化的OpenAPI路径和方法中导出工具名称。
- 行为: 从OpenAPI操作摘要和描述生成工具描述。
环境变量
OPENAPI_SPEC_URL:(必填)OpenAPI规范JSON文件的URL(例如。https://example.com/spec.json或file:///path/to/local/spec.json).OPENAPI_LOGFILE_PATH:(可选)指定日志文件路径。OPENAPI_SIMPLE_MODE:(可选)设置为true启用FastMCP模式。TOOL_WHITELIST:(可选)以逗号分隔的端点路径列表,作为工具公开。TOOL_NAME_PREFIX:(可选)所有工具名称前的前缀。API_KEY:(可选)发送为API的身份验证令牌Bearer <API_KEY>默认情况下,在“授权”标题中。API_AUTH_TYPE:(可选)覆盖默认值Bearer授权标头类型(例如。Api-KeyGetZep)。STRIP_PARAM:(可选)JMESPath表达式,用于删除不需要的参数(例如。tokenSlack)。DEBUG:(可选)当设置为“true”、“1”或“yes”时,启用详细调试日志记录。EXTRA_HEADERS:(可选)附加到传出API请求的“Header:Value”格式的HTTP标头(每行一个)。SERVER_URL_OVERRIDE:(可选)设置时覆盖OpenAPI规范中的基本URL,这对自定义部署很有用。TOOL_NAME_MAX_LENGTH:(可选)将工具名称截断到最大长度。- 附加变量:
OPENAPI_SPEC_URL_<hash>–每个测试配置的唯一变体(可追溯到OPENAPI_SPEC_URL). IGNORE_SSL_SPEC:(可选)设置为true在获取OpenAPI规范时禁用SSL证书验证。IGNORE_SSL_TOOLS:(可选)设置为true禁用工具发出的API请求的SSL证书验证。
例子
为了进行测试,您可以按照示例中的演示运行uvx命令,然后通过JSON-RPC消息与MCP服务器交互,列出工具和资源。请参阅下面的“JSON-RPC测试”部分。
Glama示例
Glama为mcp-openapi代理提供了最简单的配置,只需要 OPENAPI_SPEC_URL 环境变量。这种简单性使其成为快速测试的理想选择。
1.验证OpenAPI规范
检索Glama OpenAPI规范:
BASH``` 1curl https://glama.ai/api/mcp/openapi.json
确保响应是有效的OpenAPI JSON文档。
#### 2.为Glama配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON```
1
2
3
4
5
6
7
8
9
10
11{
"mcpServers": {
"glama": {
"command": "uvx",
"args": ["mcp-openapi-proxy"],
"env": {
"OPENAPI_SPEC_URL": "https://glama.ai/api/mcp/openapi.json"
}
}
}
}
3.测试
使用以下方式启动服务:
BASH``` 1OPENAPI_SPEC_URL=“https://glama.ai/api/mcp/openapi.json” uvx mcp-openapi-proxy
然后参考 JSON-RPC测试 有关列出资源和工具的说明的部分。
### Fly.io示例

Fly.io为管理机器提供了一个简单的API,使其成为理想的起点。从获取API令牌 [Fly.io文档](https://fly.io/docs/hands-on/install-flyctl/).
#### 1.验证OpenAPI规范
[检索Fly.io](http://xn--Fly-cf1gu38f.io) OpenAPI规范:
BASH```
1curl https://raw.githubusercontent.com/abhiaagarwal/peristera/refs/heads/main/fly-machines-gen/fixed_spec.json
确保响应是有效的OpenAPI JSON文档。
2.为Fly.io配置mcp-openapi代理
更新您的MCP生态系统配置:
JSON``` 1 2 3 4 5 6 7 8 9 10 11 12{ “mcpServers”: { “flyio”: { “command”: “uvx”, “args”: [“mcp-openapi-proxy”], “env”: { “OPENAPI_SPEC_URL”: “https://raw.githubusercontent.com/abhiaagarwal/peristera/refs/heads/main/fly-machines-gen/fixed_spec.json”, “API_KEY”: “<your_flyio_token_here>” } } } }
- **OPENAPI_SPEC_URL**:[指向Fly.io](http://xn--Fly-633ez79d.io) OpenAPI规范。
- **API_密钥**:[您的Fly.io](http://xn--Fly-jn4fy87g.io) API代币(替换 `<your_flyio_token_here>`).
- **API_AUTH_类型**:设置为 `Api-Key` 用于Fly.io的基于头部的身份验证(覆盖默认值 `Bearer`).
#### 3.测试
启动服务后,请参阅 JSON-RPC测试 有关列出资源和工具的说明的部分。
### 渲染示例

Render提供可以通过API管理的基础设施托管。提供的配置文件 `examples/render-claude_desktop_config.json` 演示如何使用最少的设置快速设置MCP生态系统。
#### 1.验证OpenAPI规范
检索Render OpenAPI规范:
BASH```
1curl https://api-docs.render.com/openapi/6140fb3daeae351056086186
确保响应是有效的OpenAPI文档。
2.为Render配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON``` 1 2 3 4 5 6 7 8 9 10 11 12 13{ “mcpServers”: { “render”: { “command”: “uvx”, “args”: [“mcp-openapi-proxy”], “env”: { “OPENAPI_SPEC_URL”: “https://api-docs.render.com/openapi/6140fb3daeae351056086186”, “TOOL_WHITELIST”: “/services,/maintenance”, “API_KEY”: “your_render_token_here” } } } }
#### 3.测试
使用渲染配置启动代理:
BASH```
1OPENAPI_SPEC_URL="https://api-docs.render.com/openapi/6140fb3daeae351056086186" TOOL_WHITELIST="/services,/maintenance" API_KEY="your_render_token_here" uvx mcp-openapi-proxy
然后参考 JSON-RPC测试 有关列出资源和工具的说明的部分。
松弛示例
Slack的API展示了使用JMESPath剥离不必要的令牌负载。从以下位置获取机器人令牌 Slack API文档.
1.验证OpenAPI规范
检索Slack OpenAPI规范:
BASH``` 1curl https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json
确保它是一个有效的OpenAPI JSON文档。
#### 2.为Slack配置mcp-openapi代理
更新您的配置:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"mcpServers": {
"slack": {
"command": "uvx",
"args": ["mcp-openapi-proxy"],
"env": {
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json",
"TOOL_WHITELIST": "/chat,/bots,/conversations,/reminders,/files,/users",
"API_KEY": "<your_slack_bot_token, starts with xoxb>",
"STRIP_PARAM": "token",
"TOOL_NAME_PREFIX": "slack_"
}
}
}
}
- OPENAPI_SPEC_URL:Slack的OpenAPI规范URL。
- TOOL_WHITELIST:将工具限制在有用的端点组(例如聊天、对话、用户)。
- API_密钥:您的Slack机器人令牌(例如。
xoxb-...,替换<your_slack_bot_token>). - STRIP_PARAM:从请求负载中删除令牌字段。
- 工具名称前缀:前言
slack_工具名称。
3.测试
启动服务后,请参阅 JSON-RPC测试 有关列出资源和工具的说明的部分。
GetZep示例
GetZep提供了一个免费的云API,用于内存管理和详细的端点。由于GetZep没有提供官方的OpenAPI规范,为了方便起见,该项目包含了一个托管在GitHub上的生成规范。用户可以类似地为任何REST API生成OpenAPI规范,并在本地引用它们(例如。 file:///path/to/spec.json).从获取API密钥 GetZep的文档.
1.验证OpenAPI规范
检索项目提供的GetZep OpenAPI规范:
BASH``` 1curl https://raw.githubusercontent.com/matthewhand/mcp-openapi-proxy/refs/heads/main/examples/getzep.swagger.json
确保它是一个有效的OpenAPI JSON文档。或者,生成自己的规范并使用 `file://` 引用本地文件的URL。
#### 2.为GetZep配置mcp-openapi代理
更新您的配置:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"mcpServers": {
"getzep": {
"command": "uvx",
"args": ["mcp-openapi-proxy"],
"env": {
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/matthewhand/mcp-openapi-proxy/refs/heads/main/examples/getzep.swagger.json",
"TOOL_WHITELIST": "/sessions",
"API_KEY": "<your_getzep_api_key>",
"API_AUTH_TYPE": "Api-Key",
"TOOL_NAME_PREFIX": "zep_"
}
}
}
}
- OPENAPI_SPEC_URL:指向项目提供的GetZep Swagger规范(或使用
file:///path/to/your/spec.json对于本地文件)。 - TOOL_WHITELIST:限制
/sessions端点。 - API_密钥:您的GetZep API密钥。
- API_AUTH_类型:用途
Api-Key用于基于报头的身份验证。 - 工具名称前缀:前言
zep_工具名称。
3.测试
启动服务后,请参阅 JSON-RPC测试 有关列出资源和工具的说明的部分。
病毒总数示例
此示例演示了:
- 使用YAML OpenAPI规范文件
- 使用自定义HTTP身份验证标头“x-apikey”
1.验证OpenAPI规范
检索Virustotal OpenAPI规范:
BASH``` 1curl https://raw.githubusercontent.com/matthewhand/mcp-openapi-proxy/refs/heads/main/examples/virustotal.openapi.yml
确保响应是有效的OpenAPI YAML文档。
#### 2.为Virustotal配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13{
"mcpServers": {
"virustotal": {
"command": "uvx",
"args": ["mcp-openapi-proxy"],
"env": {
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/matthewhand/mcp-openapi-proxy/refs/heads/main/examples/virustotal.openapi.yml",
"EXTRA_HEADERS": "x-apikey: ${VIRUSTOTAL_API_KEY}",
"OPENAPI_SPEC_FORMAT": "yaml"
}
}
}
}
配置要点:
- 默认情况下,代理需要JSON规范,并发送带有Bearer前缀的API密钥。
- 要使用YAML OpenAPI规范,请包括
OPENAPI_SPEC_FORMAT="yaml". - 注意:VirusTotal需要一个特殊的身份验证标头;EXTRA_HEADERS用于将API密钥传输为“x-apikey:${VIRUSTOTAL_API_key}”。
3.测试
使用Virustotal配置启动代理:
BASH``` 1OPENAPI_SPEC_URL=“https://raw.githubusercontent.com/matthewhand/mcp-openapi-proxy/refs/heads/main/examples/virustotal.openapi.yml” API_KEY=“your_virustotal_api_key” API_AUTH_HEADER=“x-apikey” API_AUTH_TYPE="" OPENAPI_SPEC_FORMAT=“yaml” uvx mcp-openapi-proxy
启动服务后,请参阅 JSON-RPC测试 有关列出资源和工具的说明的部分。
### 概念示例

Notion的API要求通过HTTP头指定特定的版本。此示例使用 `EXTRA_HEADERS` 环境变量包含所需的标头,并侧重于验证OpenAPI规范。
#### 1.验证OpenAPI规范
检索Notion OpenAPI规范:
BASH```
1curl https://storage.googleapis.com/versori-assets/public-specs/20240214/NotionAPI.yml
确保响应是有效的YAML文档。
2.为Notion配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16{ “mcpServers”: { “notion”: { “command”: “uvx”, “args”: [ “mcp-openapi-proxy” ], “env”: { “API_KEY”: “ntn_<your_key>”, “OPENAPI_SPEC_URL”: “https://storage.googleapis.com/versori-assets/public-specs/20240214/NotionAPI.yml”, “SERVER_URL_OVERRIDE”: “https://api.notion.com”, “EXTRA_HEADERS”: “Notion-Version: 2022-06-28” } } } }
#### 3.测试
使用Notion配置启动代理:
BASH```
1OPENAPI_SPEC_URL="https://storage.googleapis.com/versori-assets/public-specs/20240214/NotionAPI.yml" SERVER_URL_OVERRIDE="https://api.notion.com" EXTRA_HEADERS="Notion-Version: 2022-06-28" API_KEY="ntn_<your_key>" uvx mcp-openapi-proxy
启动服务后,请参阅 JSON-RPC测试 有关列出资源和工具的说明的部分。
Asana示例
Asana为管理工作区、任务、项目和用户提供了一组丰富的端点。集成测试演示了端点的使用,例如 GET /workspaces, GET /tasks,以及 GET /projects.
1.验证OpenAPI规范
检索Asana OpenAPI规范:
BASH``` 1curl https://raw.githubusercontent.com/Asana/openapi/refs/heads/master/defs/asana_oas.yaml
确保响应是有效的YAML(或JSON)文档。
#### 2.为Asana配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16{
"mcpServers": {
"asana": {
"command": "uvx",
"args": [
"mcp-openapi-proxy"
],
"env": {
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/Asana/openapi/refs/heads/master/defs/asana_oas.yaml",
"SERVER_URL_OVERRIDE": "https://app.asana.com/api/1.0",
"TOOL_WHITELIST": "/workspaces,/tasks,/projects,/users",
"API_KEY": "${ASANA_API_KEY}"
}
}
}
}
注意:大多数Asana API端点都需要身份验证。集 ASANA_API_KEY 在您的环境中或 .env 具有有效令牌的文件。
3.测试
使用以下方式启动服务:
BASH``` 1ASANA_API_KEY=“<your_asana_api_key>” OPENAPI_SPEC_URL=“https://raw.githubusercontent.com/Asana/openapi/refs/heads/master/defs/asana_oas.yaml” SERVER_URL_OVERRIDE=“https://app.asana.com/api/1.0” TOOL_WHITELIST=“/workspaces,/tasks,/projects,/users” uvx mcp-openapi-proxy
然后,您可以使用MCP生态系统列出和调用端点的工具,如 `/dcim/devices/` 和 `/ipam/ip-addresses/`.
### APIs.guru示例
APIs.guru为数千个公共API提供了OpenAPI定义目录。此示例显示了如何使用mcp-openapi代理将APIs.guru目录作为mcp工具公开。
#### 1.验证OpenAPI规范
检索APIs.guru OpenAPI规范:
BASH```
1curl https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/apis.guru/2.2.0/openapi.yaml
确保响应是有效的OpenAPI YAML文档。
2.为APIs.guru配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON``` 1 2 3 4 5 6 7 8 9 10 11{ “mcpServers”: { “apisguru”: { “command”: “uvx”, “args”: [“mcp-openapi-proxy”], “env”: { “OPENAPI_SPEC_URL”: “https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/apis.guru/2.2.0/openapi.yaml” } } } }
#### 3.测试
使用以下方式启动服务:
BASH```
1OPENAPI_SPEC_URL="https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/apis.guru/2.2.0/openapi.yaml" uvx mcp-openapi-proxy
然后,您可以使用MCP生态系统列出和调用以下工具 listAPIs, getMetrics,以及 getProviders 它们在APIs.guru目录中定义。
NetBox示例
NetBox是一个开源的IP地址管理(IPAM)和数据中心基础设施管理(DCIM)工具。此示例演示如何使用mcp-openapi-proxy将NetBox API公开为mcp工具。
1.验证OpenAPI规范
检索NetBox OpenAPI规范:
BASH``` 1curl https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/netbox.dev/3.4/openapi.yaml
确保响应是有效的OpenAPI YAML文档。
#### 2.为NetBox配置mcp-openapi代理
将以下配置添加到MCP生态系统设置中:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12{
"mcpServers": {
"netbox": {
"command": "uvx",
"args": ["mcp-openapi-proxy"],
"env": {
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/netbox.dev/3.4/openapi.yaml",
"API_KEY": "${NETBOX_API_KEY}"
}
}
}
}
注意:大多数NetBox API端点都需要身份验证。集 NETBOX_API_KEY 在您的环境中或 .env 具有有效令牌的文件。
3.测试
使用以下方式启动服务:
BASH``` 1OPENAPI_SPEC_URL=“https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/netbox.dev/3.4/openapi.yaml” API_KEY=“$NETBOX_API_KEY” uvx mcp-openapi-proxy
然后,您可以使用MCP生态系统列出和调用端点的工具,如 `/dcim/devices/` 和 `/ipam/ip-addresses/`.
### 方框API示例
您可以使用自己的开发人员令牌集成Box平台API,以便通过身份验证访问Box帐户。此示例演示如何将Box API端点公开为MCP工具。
#### 配置示例: `examples/box-claude_desktop_config.json`
JSON```
1
2
3
4{
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/box.com/2.0.0/openapi.yaml",
"API_KEY": "${BOX_API_KEY}"
}
- 将Box开发人员令牌设置为中的环境变量
.env:
1BOX_API_KEY=your_box_developer_token
- 或者使用单行命令运行代理:
BASH``` 1OPENAPI_SPEC_URL=“https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/box.com/2.0.0/openapi.yaml” API_KEY=“$BOX_API_KEY” uvx mcp-openapi-proxy
您现在可以使用MCP生态系统列出并调用Box API工具。有关集成测试,请参阅 `tests/integration/test_box_integration.py`.
### WolframAlpha API示例
您可以使用自己的应用程序ID集成WolframAlpha API进行身份验证访问。此示例演示如何将WolframAlpha API端点公开为MCP工具。
#### 配置示例: `examples/wolframalpha-claude_desktop_config.json`
JSON```
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
"mcpServers": {
"wolframalpha": {
"command": "uvx",
"args": [
"mcp-openapi-proxy"
],
"env": {
"OPENAPI_SPEC_URL": "https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/wolframalpha.com/v0.1/openapi.yaml",
"API_KEY": "${WOLFRAM_LLM_APP_ID}"
}
}
}
}
- 将WolframAlpha应用程序ID设置为环境变量
.env:
1WOLFRAM_LLM_APP_ID=your_wolfram_app_id
- 或者使用单行命令运行代理:
BASH``` 1OPENAPI_SPEC_URL=“https://raw.githubusercontent.com/APIs-guru/openapi-directory/refs/heads/main/APIs/wolframalpha.com/v0.1/openapi.yaml” API_KEY=“$WOLFRAM_LLM_APP_ID” uvx mcp-openapi-proxy
您现在可以使用MCP生态系统列出并调用WolframAlpha API工具。有关集成测试,请参阅 `tests/integration/test_wolframalpha_integration.py`.
## 故障排除
### JSON-RPC测试
对于替代测试,您可以通过JSON-RPC与MCP服务器交互。启动服务器后,粘贴以下初始化消息:
JSON```
1{"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
预期响应:
JSON``` 1{“jsonrpc”:“2.0”,“id”:0,“result”:{“protocolVersion”:“2024-11-05”,“capabilities”:{“experimental”:{},“prompts”:{“listChanged”:false},“resources”:{“subscribe”:false,“listChanged”:false},“tools”:{“listChanged”:false}},“serverInfo”:{“name”:“sqlite”,“version”:“0.1.0”}}}
然后粘贴这些后续消息:
JSON```
1
2
3{"method":"notifications/initialized","jsonrpc":"2.0"}
{"method":"resources/list","params":{},"jsonrpc":"2.0","id":1}
{"method":"tools/list","params":{},"jsonrpc":"2.0","id":2}
- 缺少OPENAPI_SPEC_URL: 确保它设置为有效的OpenAPI JSON URL或本地文件路径。
- 无效规范: 验证OpenAPI文档是否符合标准。
- 工具筛选问题: 检查
TOOL_WHITELIST匹配所需的端点。 - 身份验证错误: 确认
API_KEY和API_AUTH_TYPE是正确的。 - 登录中: 集
DEBUG=true以获取stderr的详细输出。 - 测试服务器: 直接运行:
BASH``` 1uvx mcp-openapi-proxy
## 许可证
MIT许可证