将任何 OpenAPI 3.x API 快速转换为强大的、适合代理使用的 MCP 工具服务器!
openapi-mcp 将任何 OpenAPI 3.x 规范转换为强大的、适合 AI 使用的 MCP(模型上下文协议)工具服务器。在几秒钟内,它会验证您的 OpenAPI 规范,为每个操作生成 MCP 工具,并通过标准 I/O 或 HTTP 提供服务,具有结构化且机器可读的输出。
validate 命令用于关键问题(缺少 operationIds、模式错误)lint 命令用于最佳实践(摘要、描述、标签、参数建议)openapi-mcp 设计用于无缝集成到 AI 编码代理、LLMs 和自动化工具中,其独特功能使其区别于其他 API 到工具转换器:
OutputFormat 和 OutputType 字段,以便一致解析describe 工具提供所有操作的完整、机器可读文档# 克隆仓库
git clone <repo-url>
cd openapi-mcp
# 构建二进制文件
make
# 这将创建:
# - bin/openapi-mcp (主工具)
# - bin/mcp-client (交互式客户端)
# 基本使用(标准 I/O 模式)
bin/openapi-mcp examples/fastly-openapi-mcp.yaml
# 使用 API 密钥
API_KEY=your_api_key bin/openapi-mcp examples/fastly-openapi-mcp.yaml
# 作为 HTTP 服务器
bin/openapi-mcp --http=:8080 examples/fastly-openapi-mcp.yaml
# 覆盖基础 URL
bin/openapi-mcp --base-url=https://api.example.com examples/fastly-openapi-mcp.yaml
# 启动客户端(通过标准 I/O 连接到 openapi-mcp)
bin/mcp-client bin/openapi-mcp examples/fastly-openapi-mcp.yaml
# 客户端命令
mcp> list # 列出可用工具
mcp> schema <tool-name> # 显示工具模式
mcp> call <tool-name> {arg1: value1} # 使用参数调用工具
mcp> describe # 获取完整 API 文档
openapi-mcp 支持通过命令行标志、环境变量或 HTTP 头的所有标准 OpenAPI 认证方法:
# API 密钥认证
bin/openapi-mcp --api-key=your_api_key examples/fastly-openapi-mcp.yaml
# 或使用环境变量
API_KEY=your_api_key bin/openapi-mcp examples/fastly-openapi-mcp.yaml
# Bearer 令牌 / OAuth2
bin/openapi-mcp --bearer-token=your_token examples/fastly-openapi-mcp.yaml
# 或使用环境变量
BEARER_TOKEN=your_token bin/openapi-mcp examples/fastly-openapi-mcp.yaml
# 基本认证
bin/openapi-mcp --basic-auth=username:password examples/fastly-openapi-mcp.yaml
# 或使用环境变量
BASIC_AUTH=username:password bin/openapi-mcp examples/fastly-openapi-mcp.yaml
当使用 HTTP 模式(--http=:8080)时,您可以通过 HTTP 请求中的头提供认证:
# 通过头传递 API 密钥
curl -H "X-API-Key: your_api_key" http://localhost:8080/mcp -d '...'
curl -H "Api-Key: your_api_key" http://localhost:8080/mcp -d '...'
# Bearer 令牌
curl -H "Authorization: Bearer your_token" http://localhost:8080/mcp -d '...'
# 基本认证
curl -H "Authorization: Basic base64_credentials" http://localhost:8080/mcp -d '...'
支持的认证头:
X-API-Key 或 Api-Key - 用于 API 密钥认证Authorization: Bearer <token> - 用于 OAuth2/Bearer 令牌认证Authorization: Basic <credentials> - 用于基本认证认证会自动应用于您 OpenAPI 规范中定义的适当端点。HTTP 头认证在整个请求期间优先于环境变量。
当使用 HTTP 模式时,openapi-mcp 默认提供一个基于 StreamableHTTP 的 MCP 服务器。对于正在构建 HTTP 客户端的开发者,该包提供了方便的 URL 辅助函数:
import "github.com/jedisct1/openapi-mcp/pkg/openapi2mcp"
// 获取 Streamable HTTP 端点 URL
streamableURL := openapi2mcp.GetStreamableHTTPURL(":8080", "/mcp")
// 返回: "http://localhost:8080/mcp"
// 对于 SSE 模式(当使用 --http-transport=sse 时),您可以使用:
sseURL := openapi2mcp.GetSSEURL(":8080", "/mcp")
// 返回: "http://localhost:8080/mcp/sse"
messageURL := openapi2mcp.GetMessageURL(":8080", "/mcp", sessionID)
// 返回: "http://localhost:8080/mcp/message?sessionId=<sessionID>"
StreamableHTTP 客户端连接流程:
示例使用 curl:
# 第一步:初始化会话
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26"}}'
# 响应将包含 Mcp-Session-Id 头
# 第二步:发送 JSON-RPC 请求
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: <session-id>" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# 第三步:监听通知
curl -N http://localhost:8080/mcp \
-H "Mcp-Session-Id: <session-id>"
SSE 客户端连接流程(当使用 --http-transport=sse 时):
endpoint 事件示例使用 curl(SSE 模式):
# 第一步:连接到 SSE 端点(保持连接打开)
curl -N http://localhost:8080/mcp/sse
# 输出:event: endpoint
# data: /mcp/message?sessionId=<session-id>
# 第二步:发送 JSON-RPC 请求(在另一个终端)
curl -X POST http://localhost:8080/mcp/message?sessionId=<session-id> \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
您可以轻松地将 openapi-mcp 与支持 MCP 工具的 AI 代码编辑器集成,例如 Roo Code:
{
"fastly": {
"command": "/opt/bin/openapi-mcp",
"args": [
"-api-key",
"YOUR_API_KEY",
"/opt/etc/openapi/fastly-openapi-mcp.yaml"
]
}
}
将此配置添加到编辑器的 MCP 工具配置中,以向 AI 助手提供直接访问 API 的权限。助手可以发现并使用 API 操作而无需额外设置。
openapi-mcp 包含强大的 OpenAPI 验证和检查功能,帮助您改进 API 规范:
# 验证 OpenAPI 规范并检查关键问题
bin/openapi-mcp validate examples/fastly-openapi-mcp.yaml
# 综合检查,提供详细建议
bin/openapi-mcp lint examples/fastly-openapi-mcp.yaml
# 启动 HTTP 验证服务
bin/openapi-mcp --http=:8080 validate
# 启动 HTTP 检查服务
bin/openapi-mcp --http=:8080 lint
validate 命令执行必要的检查:
operationId 字段(生成 MCP 工具所需)lint 命令提供综合分析,带有建议:
两个命令在发现问题时都会返回非零状态码,非常适合 CI/CD 管道。
验证和检查命令都可以作为 HTTP 服务运行,使用 --http 标志,允许您通过 REST API 验证 OpenAPI 规范。请注意,这些端点仅在使用 validate 或 lint 命令时可用,而不是在正常 MCP 服务器操作期间:
# 启动验证 HTTP 服务
bin/openapi-mcp --http=:8080 validate
# 启动检查 HTTP 服务
bin/openapi-mcp --http=:8080 lint
API 端点:
POST /validate - 验证 OpenAPI 规范的关键问题POST /lint - 综合检查,提供详细建议GET /health - 健康检查端点请求格式:
{
"openapi_spec": "openapi: 3.0.0\ninfo:\n title: My API\n version: 1.0.0\npaths: {}"
}
响应格式:
{
"success": false,
"error_count": 1,
"warning_count": 2,
"issues": [
{
"type": "error",
"message": "操作缺少 operationId",
"suggestion": "添加 operationId 字段",
"operation": "GET_/users",
"path": "/users",
"method": "GET"
}
],
"summary": "OpenAPI 检查完成,存在问题:1 个错误,2 个警告。"
}
示例使用:
curl -X POST http://localhost:8080/lint \
-H "Content-Type: application/json" \
-d '{"openapi_spec": "..."}'
bin/openapi-mcp --dry-run examples/fastly-openapi-mcp.yaml
bin/openapi-mcp --doc=tools.md examples/fastly-openapi-mcp.yaml
bin/openapi-mcp filter --tag=admin examples/fastly-openapi-mcp.yaml
bin/openapi-mcp filter --include-desc-regex="user|account" examples/fastly-openapi-mcp.yaml
bin/openapi-mcp filter --exclude-desc-regex="deprecated" examples/fastly-openapi-mcp.yaml
bin/openapi-mcp filter --function-list-file=funcs.txt examples/fastly-openapi-mcp.yaml
您可以使用 --function-list-file=funcs.txt 限制输出仅为 operationId 在给定文件中列出的操作(每行一个)。此过滤器在标签和描述过滤器之后应用。
bin/openapi-mcp --summary --dry-run examples/fastly-openapi-mcp.yaml
bin/openapi-mcp --doc=tools.md --post-hook-cmd='jq . | tee /tmp/filtered.json' examples/fastly-openapi-mcp.yaml
bin/openapi-mcp --no-confirm-dangerous examples/fastly-openapi-mcp.yaml
|