
ckanthony/openapi-mcp!openapi-mcp logo
直接从Swagger/OpenAPI规范文件生成MCP工具定义。
OpenAPI-MCP是一个Docker化的MCP服务器,它读取swagger.json或openapi.yaml文件并生成相应的模型上下文协议(MCP)工具集。这允许像Cursor这样的MCP兼容客户端与标准OpenAPI规范描述的API进行交互。现在,只需提供API的OpenAPI/Swagger规范,即可让AI代理访问任何API,无需额外编码。
亲自运行演示:运行Weatherbit示例(分步指南)
!demo
header、query、path、cookie)。
--api-key)、环境变量(--api-key-env)或本地规范旁的.env文件加载API密钥。--include-tag、--exclude-tag、--include-op、--exclude-op)。REQUEST_HEADERS环境变量传递自定义头(如额外认证、追踪)。运行此工具的推荐方式是通过Docker。
您可以使用Docker Hub上提供的预构建镜像。
bashdocker pull ckanthony/openapi-mcp:latest
docker run示例操作,将openapi-mcp:latest替换为ckanthony/openapi-mcp:latest。本地构建Docker镜像:
bash# 导航到仓库根目录 cd openapi-mcp # 构建Docker镜像(可自定义标签,如openapi-mcp:latest) docker build -t openapi-mcp:latest .
运行容器: 运行容器时需要提供OpenAPI规范和必要的API密钥配置。
示例1:使用本地规范文件和.env文件:
./my-api),包含openapi.json或swagger.yaml。.env文件(如./my-api/.env),内容为API_KEY=your_actual_key(如果--api-key-env标志不同,替换API_KEY)。bashdocker run -p 8080:8080 --rm \ -v $(pwd)/my-api:/app/spec \ --env-file $(pwd)/my-api/.env \ openapi-mcp:latest \ --spec /app/spec/openapi.json \ --api-key-env API_KEY \ --api-key-name X-API-Key \ --api-key-loc header
(根据需要调整--spec、--api-key-env、--api-key-name、--api-key-loc和-p。)
示例2:使用远程规范URL和直接环境变量:
bashdocker run -p 8080:8080 --rm \ -e SOME_API_KEY="your_actual_key" \ openapi-mcp:latest \ --spec [***] \ --api-key-env SOME_API_KEY \ --api-key-name api_key \ --api-key-loc header
关键Docker Run选项:
-p <host_port>:8080:将主机端口映射到容器的默认端口8080。--rm:容器退出时自动删除。-v <host_path>:<container_path>:将包含规范的本地目录挂载到容器中。使用绝对路径或$(pwd)/...。常用容器路径:/app/spec。--env-file <path_to_host_env_file>:从本地文件加载环境变量(如API密钥等)。路径为主机上的路径。-e <VAR_NAME>="<value>":直接传递单个环境变量。openapi-mcp:latest:本地构建的镜像名称。--spec ...:必填。容器内规范文件的路径(如/app/spec/openapi.json)或公共URL。--port 8080:(可选)更改服务器监听的内部端口(必须与-p中的容器端口匹配)。--api-key-env、--api-key-name、--api-key-loc:如果目标API需要API密钥,则为必填项。docker run --rm openapi-mcp:latest --help查看所有命令行选项。)本仓库包含使用Weatherbit API的示例。以下是使用公共Docker镜像运行它的方法:
查找OpenAPI规范(可选知识):
许多公共API提供OpenAPI/Swagger规范。发现它们的好资源是APIs.guru。本示例中使用的Weatherbit规范(weatherbitio-swagger.json)来源于此。
获取Weatherbit API密钥:
克隆本仓库: 需要仓库中的示例文件。
bashgit clone [***] cd openapi-mcp
准备环境文件:
cd example/weathercp .env.example .env.env文件,将YOUR_WEATHERBIT_API_KEY_HERE替换为从Weatherbit获取的实际API密钥。运行Docker容器:
从openapi-mcp根目录(包含example文件夹的目录)运行以下命令:
bashdocker run -p 8080:8080 --rm \ -v $(pwd)/example/weather:/app/spec \ --env-file $(pwd)/example/weather/.env \ ckanthony/openapi-mcp:latest \ --spec /app/spec/weatherbitio-swagger.json \ --api-key-env API_KEY \ --api-key-name key \ --api-key-loc query
-v $(pwd)/example/weather:/app/spec:将本地example/weather目录(包含规范和.env文件)挂载到容器内的/app/spec。--env-file $(pwd)/example/weather/.env:告诉Docker从.env文件加载环境变量(特别是API_KEY)。ckanthony/openapi-mcp:latest:使用公共Docker镜像。--spec /app/spec/weatherbitio-swagger.json:指向容器内的规范文件。--api-key-*标志配置工具如何注入API密钥(从API_KEY环境变量读取,命名为key,放置在query字符串中)。访问MCP服务器:
MCP服务器现在应运行并可通过http://localhost:8080供兼容客户端访问。
使用Docker Compose(示例):
example/目录中提供了docker-compose.yml文件,演示使用本地构建镜像运行Weatherbit API示例。
准备环境文件:将example/weather/.env.example复制到example/weather/.env并添加实际的Weatherbit API密钥:
dotenv# example/weather/.env API_KEY=YOUR_ACTUAL_WEATHERBIT_KEY
使用Docker Compose运行:导航到example目录并运行:
bashcd example # 基于../Dockerfile本地构建镜像 # 不使用公共Docker Hub镜像 docker-compose up --build
--build:强制Docker Compose在启动服务前使用项目根目录的Dockerfile构建镜像。example/docker-compose.yml,构建镜像,挂载./weather,读取./weather/.env,并使用指定的命令行参数启动openapi-mcp容器。http://localhost:8080可用。停止服务:在运行Compose的终端按Ctrl+C,或在另一个终端的example目录中运行docker-compose down。
openapi-mcp命令接受以下标志:
| 标志 | 描述 | 类型 | 默认值 |
|---|---|---|---|
--spec | 必填。OpenAPI规范文件的路径或URL。 | string | (无) |
--port | MCP服务器运行端口。 | int | 8080 |
--api-key | 直接提供API密钥值(为安全起见,建议使用--api-key-env或.env文件)。 | string | (无) |
--api-key-env | 包含API密钥的环境变量名称。如果规范是本地的,也会检查规范目录中的.env文件。 | string | (无) |
--api-key-name | 使用密钥时必填。API密钥参数的名称(头、查询、路径或Cookie名称)。 | string | (无) |
--api-key-loc | 使用密钥时必填。API密钥位置:header、query、path或cookie。 | string | (无) |
--include-tag | 要包含的标签(可重复)。如果使用包含标志,仅公开包含的项目。 | string slice | (无) |
--exclude-tag | 要排除的标签(可重复)。排除在包含之后应用。 | string slice | (无) |
--include-op | 要包含的操作ID(可重复)。 | string slice | (无) |
--exclude-op | 要排除的操作ID(可重复)。 | string slice | (无) |
--base-url | 手动覆盖从规范中检测到的目标API服务器基础URL。 | string | (无) |
--name | 生成的MCP工具集的默认名称(如果规范没有标题则使用)。 | string | "OpenAPI-MCP Tools" |
--desc | 生成的MCP工具集的默认描述(如果规范没有描述则使用)。 | string | "从OpenAPI规范生成的工具" |
注意:通过运行工具的--help标志可获取此列表(例如docker run --rm ckanthony/openapi-mcp:latest --help)。
REQUEST_HEADERS:将此环境变量设置为JSON字符串(例如'{"X-Custom": "Value"}'),以向所有发往目标API的请求添加自定义头。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务