OpenAPI服务
该服务器通过语义搜索和高性能处理,促进对OpenAPI端点的可扩展发现和执行,克服了大规模规范处理的限制,实现了简化的API交互。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"any_openapi": {
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json",
"-e",
"MCP_API_PREFIX=finance",
"-e",
"GLOBAL_TOOL_PROMPT='Access to insights apis for ACME Financial Services abc.com .",
"buryhuang/mcp-server-any-openapi:latest"
],
"command": "docker"
},
"finance_openapi": {
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.finance.com/openapi.json",
"-e",
"API_REQUEST_BASE_URL=https://api.finance.staging.com",
"-e",
"MCP_API_PREFIX=finance",
"-e",
"GLOBAL_TOOL_PROMPT='Access to insights apis for ACME Financial Services abc.com .'",
"buryhuang/mcp-server-any-openapi:latest"
],
"command": "docker"
},
"healthcare_openapi": {
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.healthcare.com/openapi.json",
"-e",
"MCP_API_PREFIX=healthcare",
"-e",
"GLOBAL_TOOL_PROMPT='Access to insights apis for Healthcare API services efg.com .",
"buryhuang/mcp-server-any-openapi:latest"
],
"command": "docker"
}
}
}
该服务需要配置环境变量:MCP_API_PREFIX、OPENAPI_JSON_DOCS_URL
服务介绍
MCP Server: 可扩展的 OpenAPI 端点发现和 API 请求工具
TODO
- 该 Docker 镜像在没有预下载模型的情况下为 2GB。如果包含预下载的模型,大小则达到 3.76GB!! 太大了,希望有人能帮我减小它的体积。
TL'DR
我创建这个的原因:我想提供我的私有 API 服务,其 swagger openapi 文档大小为几百 KB。
- Claude MCP 在处理这种大小的文件时会直接报错
- 我尝试将结果转换为 YAML 格式,但仍然不够小并且有很多错误。失败了
- 我尝试提供一个 API 类别,然后让 MCP 客户端(Claude Desktop)按组获取 API 文档。还是太大了,失败了。
最终我找到了这个解决方案:
- 它使用内存中的语义搜索来通过自然语言(例如列出产品)查找相关的 API 端点
- 它以毫秒级的速度返回完整的端点文档(因为我设计它将每个端点作为一个块存储)
就这样,Claude 现在知道要调用哪个 API 了,并且还带有全部参数!
等等,我还必须在这个服务器上创建另一个工具来进行实际的 RESTful 请求,因为“fetch”服务器根本不起作用,而且我不想去调试为什么。
https://github.com/user-attachments/assets/484790d2-b5a7-475d-a64d-157e839ad9b0
技术亮点:
query -> [Embedding] -> FAISS TopK -> OpenAPI docs -> MCP Client (Claude Desktop)
MCP Client -> Construct OpenAPI Request -> Execute Request -> Return Response
功能
- 🧠 使用远程 openapi json 文件作为源,无需本地文件系统访问,API 更改时无需更新
- 🔍 使用优化后的 MiniLM-L3 模型进行语义搜索(43MB 对比原始 90MB)
- 🚀 基于 FastAPI 的服务器,支持异步
- 🧠 基于端点分块的 OpenAPI 规范(处理 100KB+ 文档),不丢失端点上下文
- ⚡ 内存中 FAISS 向量搜索实现即时端点发现
限制
- 不支持 linux/arm/v7(在 Transformer 库上构建失败)
- 🐢 如果不使用 Docker 镜像,冷启动会有惩罚(约 15 秒用于加载模型)
- [过时] 当前 Docker 镜像禁用了下载模型的功能。你依赖于 Hugging Face。当你加载 Claude Desktop 时,需要一些时间来下载模型。如果 Hugging Face 出现故障,你的服务器将无法启动。
- 最新的 Docker 镜像嵌入了预先下载好的模型。如果有问题,我会回退到旧版本。
多实例配置示例
这里是一个多实例配置的例子。我这样设计是为了更灵活地应用于多组 API:
{
"mcpServers": {
"finance_openapi": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.finance.com/openapi.json",
"-e",
"MCP_API_PREFIX=finance",
"buryhuang/mcp-server-any-openapi:latest"
]
},
"healthcare_openapi": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.healthcare.com/openapi.json",
"-e",
"MCP_API_PREFIX=healthcare",
"buryhuang/mcp-server-any-openapi:latest"
]
}
}
}
在此示例中:
- 服务器将自动从 OpenAPI 文档中提取基础 URL:
https://api.finance.com用于金融 APIhttps://api.healthcare.com用于医疗保健 API
- 你可以选择使用
API_REQUEST_BASE_URL环境变量覆盖基础 URL:
{
"mcpServers": {
"finance_openapi": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.finance.com/openapi.json",
"-e",
"API_REQUEST_BASE_URL=https://api.finance.staging.com",
"-e",
"MCP_API_PREFIX=finance",
"buryhuang/mcp-server-any-openapi:latest"
]
}
}
}
Claude Desktop 使用示例
Claude Desktop 项目提示:
You should get the api spec details from tools financial_api_request_schema
You task is use financial_make_request tool to make the requests to get response. You should follow the api spec to add authorization header:
Authorization: Bearer <xxxxxxxxx>
Note: The base URL will be returned in the api_request_schema response, you don't need to specify it manually.
在聊天中,你可以这样做:
Get prices for all stocks
安装
请注意,原文档中的代码块 #0, #1, #2, #3, 和 #4 被保留为占位符,具体的代码内容应根据实际情况填写。
通过 Smithery 安装
通过 Smithery 自动安装 Scalable OpenAPI Endpoint Discovery 和 API Request Tool for Claude Desktop:
npx -y @smithery/cli install @baryhuang/mcp-server-any-openapi --client claude
使用 pip
pip install mcp-server-any-openapi
配置
通过环境变量自定义:
OPENAPI_JSON_DOCS_URL: OpenAPI 规范 JSON 的 URL(默认为 https://api.staging.readymojo.com/openapi.json)MCP_API_PREFIX: 可自定义的工具命名空间(默认为 "any_openapi"):# 创建工具: custom_api_request_schema 和 custom_make_request docker run -e MCP_API_PREFIX=finance ...
可用工具
服务器提供以下工具(其中 {prefix} 由 MCP_API_PREFIX 决定):
{prefix}_api_request_schema
获取与您的意图匹配的 API 端点模式。返回端点详细信息,包括路径、方法、参数和响应格式。
输入模式:
{
"query": {
"type": "string",
"description": "Describe what you want to do with the API (e.g., 'Get user profile information', 'Create a new job posting')"
}
}
{prefix}_make_request
对于简化实现失败的复杂 API 可靠执行必不可少。提供:
输入模式:
{
"method": {
"type": "string",
"description": "HTTP method (GET, POST, PUT, DELETE, PATCH)",
"enum": ["GET", "POST", "PUT", "DELETE", "PATCH"]
},
"url": {
"type": "string",
"description": "Fully qualified API URL (e.g., https://api.example.com/users/123)"
},
"headers": {
"type": "object",
"description": "Request headers (optional)",
"additionalProperties": {
"type": "string"
}
},
"query_params": {
"type": "object",
"description": "Query parameters (optional)",
"additionalProperties": {
"type": "string"
}
},
"body": {
"type": "object",
"description": "Request body for POST, PUT, PATCH (optional)"
}
}
响应格式:
{
"status_code": 200,
"headers": {
"content-type": "application/json",
...
},
"body": {
// Response data
}
}
Docker 支持
多架构构建
官方镜像支持 3 个平台:
# Build and push using buildx
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 \
-t buryhuang/mcp-server-any-openapi:latest \
--push .
灵活的工具命名
通过 MCP_API_PREFIX 控制工具名称:
# Produces tools with "finance_api" prefix:
docker run -e MCP_API_PREFIX=finance_ ...
支持的平台
- linux/amd64
- linux/arm64
选项 1:使用预构建镜像(Docker Hub)
docker pull buryhuang/mcp-server-any-openapi:latest
选项 2:本地开发构建
docker build -t mcp-server-any-openapi .
运行容器
docker run \
-e OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json \
-e MCP_API_PREFIX=finance \
buryhuang/mcp-server-any-openapi:latest
关键组件
-
EndpointSearcher: 核心类,处理:
- OpenAPI 规范解析
- 语义搜索索引创建
- 端点文档格式化
- 自然语言查询处理
-
服务器实现:
- 异步 FastAPI 服务器
- MCP 协议支持
- 工具注册和调用处理
从源代码运行
python -m mcp_server_any_openapi
与 Claude Desktop 集成
在您的 Claude Desktop 设置中配置 MCP 服务器:
{
"mcpServers": {
"any_openapi": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OPENAPI_JSON_DOCS_URL=https://api.example.com/openapi.json",
"-e",
"MCP_API_PREFIX=finance",
"buryhuang/mcp-server-any-openapi:latest"
]
}
}
}
贡献
- 分叉仓库
- 创建你的功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开一个 Pull Request
许可证
本项目根据 LICENSE 文件中包含的条款进行许可。
实现说明
- 以端点为中心的处理:与难以处理大型规范的文档级分析不同,我们通过以下方式索引单个端点:
- 路径 + 方法作为唯一标识符
- 参数感知嵌入
- 响应模式上下文
- 优化的规范处理:通过以下方式处理高达 10MB(约 5,000 个端点)的 OpenAPI 规范:
- 模式组件的延迟加载
- 路径项的并行解析
- 选择性嵌入生成(省略冗余描述)