将 OpenAPI 规范动态转换为 MCP (Model Context Protocol) 工具。
- 🔧 动态转换: 只需配置 OpenAPI 文档 URL,自动将每个 API endpoint 转换为 MCP 工具
- 📝 完整支持: 支持 OpenAPI 3.x 规范,包括路径参数、查询参数、请求体等
- 🚀 简单易用: 通过 CLI 或配置文件快速启动
- 🔌 MCP 兼容: 完全兼容 MCP 协议,可在 Claude Desktop 等 MCP 客户端中使用
- 🎯 按需模式: 针对大型 OpenAPI 文档,提供按需发现和调用 API 的模式
# 推荐使用 npx,无需安装
npx api2mcp --url https://petstore3.swagger.io/api/v3/openapi.json
# 或全局安装
npm install -g api2mcp
# 或
pnpm add -g api2mcp# 克隆仓库
git clone https://github.com/shenjingnan/api2mcp.git
cd api2mcp
# 安装依赖
pnpm install
# 构建
pnpm build无需安装,直接使用 npx 运行:
# 基本使用
npx api2mcp --url https://petstore3.swagger.io/api/v3/openapi.json
# 指定基础 URL
npx api2mcp --url ./openapi.json --base-url https://api.example.com
# 带认证头
npx api2mcp --url https://api.example.com/openapi.json --headers '{"Authorization":"Bearer xxx"}'
# 带工具前缀
npx api2mcp --url https://api.example.com/openapi.json --prefix myapi
# 调试模式
npx api2mcp --url https://api.example.com/openapi.json --debug如果需要全局安装:
# 使用 pnpm 全局安装
pnpm add -g api2mcp
# 或使用 npm 全局安装
npm install -g api2mcp
# 然后直接运行
api2mcp --url https://petstore3.swagger.io/api/v3/openapi.json| 参数 | 简写 | 说明 |
|---|---|---|
--url |
-u |
OpenAPI 文档 URL 或本地文件路径 |
--base-url |
-b |
API 基础 URL (覆盖 OpenAPI servers) |
--timeout |
-t |
请求超时时间 (毫秒) |
--headers |
-h |
自定义请求头 (JSON 字符串) |
--prefix |
-p |
工具名前缀 |
--mode |
-m |
工作模式:default(默认)或 ondemand(按需) |
--debug |
-d |
启用调试模式 |
--fixed-params |
-f |
固定参数 (JSON 字符串或 key=value 格式),这些参数会注入到每个 API 请求中,但不会暴露给 LLM |
支持以下配置文件名:
api2mcp.jsonapi2mcp.config.json.api2mcp.json
配置文件示例:
{
"openapiUrl": "https://api.example.com/openapi.json",
"baseUrl": "https://api.example.com",
"timeout": 30000,
"headers": {
"Authorization": "Bearer your-token"
},
"toolPrefix": "myapi",
"mode": "default"
}api2mcp 支持两种工作模式:
将所有 API 直接转换为 MCP 工具。适合 API 数量较少的场景。
npx api2mcp --url https://api.example.com/openapi.json --mode default当 OpenAPI 文档包含大量端点(如数百或数千个)时,按需模式提供更好的体验:
- 减少上下文占用: 不会预先注册所有工具,节省 LLM 上下文空间
- 按需发现: LLM 可以搜索和浏览可用的 API
- 直接执行: 找到需要的 API 后直接调用
npx api2mcp --url https://api.example.com/openapi.json --mode ondemand| 工具名 | 功能 |
|---|---|
api_list |
分页浏览所有 API,支持按标签过滤 |
api_search |
模糊搜索 API(名称、摘要、描述、路径) |
api_detail |
获取 API 的详细信息和参数 Schema |
api_execute |
直接执行 API 调用 |
用户: 我需要查询用户信息
LLM 调用流程:
1. api_search(query="user") → 找到相关 API
2. api_detail(id="get_user") → 查看参数要求
3. api_execute(operationId="get_user", parameters={userId: 123}) → 执行调用
- OpenAPI 文档包含 100+ 个端点
- API 数量众多但通常只需要少数几个
- 希望减少 MCP 客户端的加载时间
| 环境变量 | 说明 |
|---|---|
OPENAPI_URL |
OpenAPI 文档 URL |
API_BASE_URL |
API 基础 URL |
API_TIMEOUT |
请求超时时间 (毫秒) |
API_HEADERS |
自定义请求头 (JSON 字符串) |
API_FIXED_PARAMS |
固定参数 (JSON 字符串或 key=value 格式),这些参数会注入到每个 API 请求中,但不会暴露给 LLM |
DEBUG |
启用调试模式 |
固定参数是一种特殊的参数,会在每次 API 请求中自动注入,但不会暴露给 LLM。适用于 API 密钥、Token 等敏感信息。
通过外部配置传入固定参数:
- CLI:
--fixed-params 'key=YOUR_API_KEY'或--fixed-params '{"key":"YOUR_API_KEY"}' - 环境变量:
API_FIXED_PARAMS='key=YOUR_API_KEY'或API_FIXED_PARAMS='{"key":"YOUR_API_KEY"}' - 配置文件:
"fixedParams": {"key": "YOUR_API_KEY"}
完整示例参见
examples/amap-geo-assistant/和examples/caiyun-weather/。
在 Claude Desktop 配置文件中添加:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"api2mcp": {
"command": "npx",
"args": ["-y", "api2mcp", "--url", "https://api.example.com/openapi.json"]
}
}
}注意: 使用
-y参数可以自动确认 npx 的安装提示,避免交互式确认。
当 API 需要认证密钥等敏感参数时,推荐使用 MCP 客户端的 env 字段通过环境变量传递,而非 --fixed-params CLI 参数。这样可以避免密钥以明文形式出现在进程参数中(进程参数可通过 ps 等命令被其他用户查看)。
{
"mcpServers": {
"my-api": {
"command": "npx",
"args": [
"-y",
"api2mcp",
"--url",
"https://api.example.com/openapi.json"
],
"env": {
"API_FIXED_PARAMS": "appKey=YOUR_APP_KEY"
}
}
}
}API_FIXED_PARAMS 支持 key=value 格式(推荐,更简洁)或 JSON 字符串格式,其中的键值对会作为固定参数注入到每个 API 请求中。这些参数对 LLM 不可见,适合传递 API 密钥、token 等敏感信息。
配置加载优先级 (从高到低):
- CLI 参数
- 环境变量
- 配置文件
# 安装依赖
pnpm install
# 开发模式 (监听文件变化)
pnpm dev
# 构建
pnpm build
# 类型检查
pnpm typecheck- TypeScript
- Node.js (>=18)
- @modelcontextprotocol/sdk - MCP 协议实现
- @apidevtools/swagger-parser - OpenAPI 解析
- zod - Schema 定义
- commander - CLI 框架
MIT