mcpField
U
universal-connector-mcp

universal-connector-mcp

本地服务
github.com/TeodorMCP开发工具414 周前更新

关于 universal-connector-mcp

universal-connector-mcp 让 AI Agent 发现并调用由 OpenAPI、GraphQL、gRPC 或 SOAP 规范描述的 API。它通过统一操作模型、请求防护、响应筛选和工作流执行,用一个 MCP 服务连接多个 API。

主要功能

  1. 01支持 OpenAPI、GraphQL、gRPC 和 SOAP
  2. 02搜索目录并加载 API
  3. 03搜索和执行操作
  4. 04串联及并行工作流
  5. 05响应筛选与缓存
  6. 06出站请求限制及审计日志

适用场景

  1. 01从目录查找并连接 API
  2. 02调用不同协议的 API 操作
  3. 03执行有依赖或并行的 API 请求
  4. 04向 Agent 返回选定的响应字段

MCP 相关

它提供 MCP 工具,用于发现和加载 API 规范、搜索及查看操作、执行单步或多步调用,以及查看出站调用审计日志。API 请求会经过主机限制及其他已配置的安全检查。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"teodormcp-universal-connector": {
"command": "uvx",
"args": [
"universal-connector-mcp"
],
"env": {
"UCMCP_ALLOWED_HOSTS": "<UCMCP_ALLOWED_HOSTS>",
"UCMCP_APIS_CONFIG": "<UCMCP_APIS_CONFIG>",
"UCMCP_CACHE_TTL": "<UCMCP_CACHE_TTL>",
"UCMCP_BLOCK_PRIVATE_IPS": "<UCMCP_BLOCK_PRIVATE_IPS>",
"GITHUB_TOKEN": "<GITHUB_TOKEN>"
}
}
}
}
启动命令uvx universal-connector-mcp
需要配置的环境变量
UCMCP_ALLOWED_HOSTSComma-separated extra hosts allowed for outbound calls (spec hosts are allowed automatically).
UCMCP_APIS_CONFIGPath to a YAML file of APIs to preload at startup.
UCMCP_CACHE_TTLTTL in seconds for caching read-only responses (default 60, 0 disables).
UCMCP_BLOCK_PRIVATE_IPSBlock outbound calls to private/loopback/link-local/cloud-metadata IPs (SSRF protection). Default true.
GITHUB_TOKEN密钥Example credential convention: <API_NAME>_TOKEN / <API_NAME>_API_KEY are injected for the API loaded under that name.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiuniversal-connector-mcp0.2.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

通用 API 连接器 MCP

通用 API 连接器——任意 API,一个 MCP 服务。

任意 API,一个 MCP 服务。

不必再为每项服务安装新的 MCP 服务:将这个服务指向任意 OpenAPI/Swagger、GraphQL、
gRPC 或 SOAP 规范,或者从内置的 2500+ 个公共 API 目录中选择一个,然后你的 AI Agent
就能调用它。更安全、步骤更少、消耗的令牌也更少。

CI PyPI Python 许可证:MIT

添加到 Cursor

安装 · 元工具 · API 目录 · 示例 · 配置 · 安全

实时演示:Agent 在一个会话中发现、加载并调用 API

为什么还要做一个?

大多数“通用 API” MCP 服务只支持 REST/OpenAPI。本项目围绕三大差异化优势构建:

  1. 真正通用——采用标准化的 Operation 模型,并支持可插拔的规范适配器(OpenAPI、GraphQL、gRPC、SOAP)。工具和执行器无需关心操作所使用的协议。
  2. 安全优先/本地优先——直接应对 AgentBaiting / FakeGit 活动等供应链攻击。出站请求仅允许访问白名单中的目标,机密信息绝不会写入日志,响应大小设有限制,且每次调用都会记录审计日志。不执行任意代码、不下载二进制文件、不进行遥测。
  3. 专为提高上下文效率而构建——字段级响应筛选、链式和并行执行,以及响应缓存,让完整工作流只需一次工具调用,且响应保持精简。

工作原理

一个连接器,支持所有协议

Agent 像浏览文件系统一样探索 API,而不是一次加载数百个工具(对于 Stripe 这类大型 API,这会撑爆上下文窗口)。它会搜索操作、查看所需操作,然后执行它们。

架构(点击展开)
flowchart TD
    Agent["AI Agent"] -->|"MCP stdio"| Server["FastMCP Server"]
    Server --> Tools["Meta-tools"]
    Tools --> Registry["Operation Registry (normalized)"]
    Adapters["Spec Adapters"] --> Registry
    Tools --> Guard["Security Guard"]
    Guard --> Executor["Protocol Executors"]
    Executor --> Auth["Auth Manager"]
    Executor --> UpstreamAPI["Upstream API"]

元工具

工具用途
search_catalog查找可直接加载的公共 API(精选列表 + APIs.guru 目录,含 2500+ 个规范)
load_api从规范 URL/文件注册 API(自动检测协议)
list_apis列出已加载的 API
search_operations在已加载的 API 中模糊搜索操作
get_operation获取某个操作的完整参数/响应架构
execute调用操作(应用身份验证和安全防护);extract 只返回你指定的字段
execute_chained一次调用中按顺序运行一系列操作,并在步骤间传递结果;嵌套列表会并行运行
execute_graph运行操作依赖图;根据 ${id.path} 引用推断执行顺序,并自动并行运行彼此独立的节点
unload_api移除已加载的 API
audit_log最近的出站调用(方法、主机、路径、状态)

为什么步骤更少,Token 也更少

步骤更少,Token 也更少

按 API 拆分的 MCP 服务每次调用都需要一次工具往返,每次都会将完整的 JSON 负载写入 Agent 的上下文;而本服务可以将整个工作流整合起来:

  • extract - execute(..., extract=["items.*.name", "total_count"]) 只返回指定字段,而不是数千字节的响应。* 会遍历数组中的所有项。
  • 链式调用 - execute_chained 通过 ${save_as.path} 引用将步骤结果传入后续参数:一次工具调用即可完成,无需调用 N 次。
  • 并行组 - 嵌套列表中的步骤会并发运行,因此“查询三个 API 并合并结果”仍只需一次调用:
execute_chained(steps=[
  [
    {"operation_id": "github.repos_get", "params": {"owner": "o", "repo": "r"},
     "save_as": "gh", "extract": ["stargazers_count"]},
    {"operation_id": "open_meteo.get_v1_forecast", "params": {"latitude": 52.5, "longitude": 13.4},
     "save_as": "weather", "extract": ["current_weather.temperature"]}
  ],
  {"operation_id": "github.issues_list_for_repo",
   "params": {"owner": "o", "repo": "r"}, "extract": ["*.title"]}
])
  • 响应缓存 - 成功的 GET / 查询结果会缓存 UCMCP_CACHE_TTL 秒(默认值为 60),因此重复查询即时完成且无需额外开销;传入 fresh: true 可跳过缓存。成功的修改操作会使该 API 的缓存读取失效。

内置 API 目录

无需费力查找规范 URL。search_catalog 会搜索两个来源:

  1. 精选列表,包含已验证的免费 / 热门 API:GitHub、GitLab、Stripe、OpenAI、Wikipedia、Open-Meteo(天气,无需密钥)、国家 / 地区 GraphQL API、httpbin 和 Swagger Petstore。条目包含可用的规范 URL、基础 URL 覆盖项和身份验证提示(例如“可选的 GITHUB_TOKEN”)。
  2. APIs.guru 目录,包含 2,500 多个由社区索引的 OpenAPI 规范(Google、AWS、Microsoft、Twilio、NASA 等),每个会话仅获取一次,然后在本地搜索。
search_catalog(query="weather forecast")
  -> [{"name": "open_meteo", "spec": "https://...forecast.yml", "base_url": "https://api.open-meteo.com", ...}]
load_api(spec="https://...forecast.yml", name="open_meteo", base_url="https://api.open-meteo.com")
execute(operation_id="open_meteo.get_v1_forecast", params={"latitude": 52.52, "longitude": 13.41, "hourly": "temperature_2m"})

目录仅用于发现:它会返回规范 URL,但不会自行加载或执行任何内容,因此安全防护仍适用于从中加载的所有内容。

安装

该服务可通过 uvx 在任何 MCP 宿主中运行,无需手动安装;系统会自动从 PyPI 获取软件包(添加 [all] 以支持 GraphQL / gRPC / SOAP):

{
  "mcpServers": {
    "universal-connector": {
      "command": "uvx",
      "args": ["universal-connector-mcp"],
      "env": { "UCMCP_ALLOWED_HOSTS": "api.github.com" }
    }
  }
}

从源代码安装(开发):运行 pip install -e ".[all,dev]",并改用 "command": "universal-connector-mcp"。可选扩展:graphql、grpc、soap、keyring、all、dev;核心安装仅支持 OpenAPI / REST。

Cursor

添加到 Cursor

点击上方徽章即可一键添加,或者将 JSON 配置块添加到项目中的 .cursor/mcp.json(与团队共享)或 ~/.cursor/mcp.json(个人配置,适用于所有项目)。完整凭据配置示例请参阅 examples/mcp.json。

Claude Desktop

将相同的 mcpServers 配置块添加到 claude_desktop_config.json(Settings > Developer > Edit Config)。

Claude Code
claude mcp add universal-connector -- uvx universal-connector-mcp
VS Code(Copilot)

在 .vscode/mcp.json 的 "servers" 下添加该服务:

{
  "servers": {
    "universal-connector": { "command": "uvx", "args": ["universal-connector-mcp"] }
  }
}
Windsurf / Cline / 其他

所有主流 MCP 宿主都接受上文所示的相同 mcpServers 配置块,请将其添加到各自的配置文件中(~/.codeium/windsurf/mcp_config.json、Cline 的 MCP 设置等)。

为用户安装此服务的 AI Agent:请遵循 llms-install.md。

预加载 API

将 UCMCP_APIS_CONFIG 指向一个 YAML 文件,即可在启动时自动加载 API,详见 examples/apis.example.yaml。

在聊天中管理 API

管理 API 时无需编辑配置文件,只需告诉你的 Agent:

  • “连接 Stripe API”——Agent 会在目录中找到它并加载。
  • “已连接哪些 API?”——list_apis 会显示这些 API。
  • “忘掉 GitHub”——unload_api 会将其移除(也会从记忆状态中移除)。

当 API 需要凭据时,load_api 会准确告知 Agent 需要设置哪个环境变量(例如 STRIPE_API_KEY)以及该变量是否已配置;Agent 会转达可直接复制粘贴的说明——你只需将变量添加到 MCP 配置的 env 块中,然后重启。绝不会在聊天中输入密钥。

会话持久化

服务会在 UCMCP_STATE_FILE 中记住你加载过的 API(仅保存其规范位置,不会保存凭据或响应数据),并在下次启动时自动恢复,让 Agent 可以从上次中断的地方继续。设置 UCMCP_STATE_FILE=off 可禁用此功能。

支持的协议

协议规范来源说明
OpenAPI / SwaggerOpenAPI 3.x 或 Swagger 2.0(JSON/YAML)、URL/文件/原始内容核心安装。解析本地 $ref,支持所有 HTTP 方法。
GraphQLIntrospection JSON 或 SDLpip install '.[graphql]'。自动生成选择集;execute 接受 fields 覆盖项。
gRPC服务端反射(grpc://host:port)pip install '.[grpc]'。支持一元-一元方法;必须在服务端启用反射。
SOAPWSDL(URL/文件/原始内容)pip install '.[soap]'。每个操作使用一个 body 对象参数。

每个已加载的操作都会获得一个以 <api>.<operation> 命名空间限定的 ID(例如 github.repos_get)。

会话示例

更多演练示例(天气、带身份验证的 GitHub、GraphQL、并行多 API 工作流、内部 API):docs/EXAMPLES.md

search_catalog(query="github")
load_api(spec="https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json", name="github")
search_operations(query="list repositories for user", api="github")
get_operation(operation_id="github.repos_list_for_user")
execute(operation_id="github.repos_list_for_user", params={"username": "torvalds"},
        extract=["*.name", "*.stargazers_count"])

使用字段选择的 GraphQL:

load_api(spec="https://countries.trevorblades.com/", protocol="graphql", name="countries")
execute(operation_id="countries.country", params={"code": "US", "fields": "name capital currency"})

链式调用(将一个结果传入下一个操作;将步骤放入嵌套列表中即可并行运行):

execute_chained(steps=[
  {"operation_id": "github.repos_list_for_user", "params": {"username": "torvalds"}, "save_as": "repos"},
  {"operation_id": "github.repos_get", "params": {"owner": "torvalds", "repo": "${repos.data.0.name}"},
   "extract": ["description", "stargazers_count"]}
])

配置

所有设置均为以 UCMCP_ 为前缀的环境变量:

变量默认值说明
UCMCP_ALLOWED_HOSTS(空)允许用于出站调用的额外主机,以逗号分隔。添加 . 前缀可匹配后缀。
UCMCP_DENIED_HOSTS(空)始终禁止访问的主机,以逗号分隔(优先级高于允许列表)。
UCMCP_ALLOW_ALL_HOSTSfalse完全禁用允许列表(不推荐)。不会禁用对私有 IP 的拦截。
UCMCP_BLOCK_PRIVATE_IPStrue拦截解析到私有/环回/链路本地/云元数据 IP 的出站调用(SSRF 防护)。
UCMCP_MAX_REDIRECTS5最多跟随的 HTTP 重定向次数;每次跳转都会重新进行安全检查。
UCMCP_MAX_RESPONSE_BYTES100000返回给 Agent 的响应正文大小上限。
UCMCP_HTTP_TIMEOUT30每次请求的超时时间(秒)。
UCMCP_MAX_RETRIES2遇到暂时性 HTTP 故障(429/502/503/504)时的重试次数。
UCMCP_CACHE_TTL60成功的 GET/查询响应缓存时长(秒)(设为 0 可禁用)。
UCMCP_AUDIT_ENABLEDtrue切换审计日志记录。
UCMCP_AUDIT_FILE(无)将审计条目追加到此文件(JSON 行)。
UCMCP_USE_KEYRINGfalse同时从操作系统密钥环中解析密钥。
UCMCP_APIS_CONFIG(无)用于在启动时预加载 API 的 YAML 文件路径。
UCMCP_STATE_FILE~/.universal-connector-mcp/state.json在重启期间记住已加载 API 的位置(仅保存规范位置,不会保存密钥或数据)。设为 off 可禁用。

凭据会按照约定从 <API_NAME>_TOKEN、<API_NAME>_API_KEY、<API_NAME>_CLIENT_ID / <API_NAME>_CLIENT_SECRET(OAuth2 客户端凭据)等变量中查找。

开发

pip install -e ".[all,dev]"
pytest          # run the test suite
ruff check .    # lint

测试套件(60 多项测试)和 lint 会在每次推送时,于 Ubuntu 和 Windows 上使用 Python 3.10 和 3.12 在 CI 中运行(见 .github/workflows/ci.yml);标记 v* 会通过可信发布构建并发布到 PyPI(见 .github/workflows/release.yml)。

欢迎贡献,详情请参阅 CONTRIBUTING.md。安全问题请通过私密报告渠道提交。

发布流程已自动化:标记 v* 会通过可信发布发布到 PyPI(见 docs/RELEASING.md)。

安全模型

  • 出站允许列表 - 默认情况下,只能访问已明确加载的规范所对应的主机。可通过 UCMCP_ALLOWED_HOSTS / UCMCP_DENIED_HOSTS 扩展或限制访问范围。
  • SSRF 防护 - 会阻止解析到私有、环回、链路本地、保留或云元数据地址的请求(包括规范获取、GraphQL 内省和 SOAP 导入)。每次重定向都会重新验证。只有在 UCMCP_ALLOWED_HOSTS 中明确添加条目,才能访问内部地址。
  • 密钥处理 - 凭据来自环境变量或操作系统密钥环,仅在请求时注入,并会从审计日志和错误中删去。
  • 响应上限 - 响应会截断至可配置的字节数上限,以保护上下文窗口。
  • 审计日志 - 记录每次出站调用的方法、主机、路径和状态(绝不记录密钥或正文)。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。