关于 mcp-graphql-bridge
mcp-graphql-bridge 是面向希望通过 Claude Code 使用 GraphQL API 的团队的 MCP 服务。它检查 schema 并为查询和变更生成工具,也提供类型浏览和通用执行工具。
主要功能
- 01根据 GraphQL schema 生成工具
- 02提供查询和变更字段
- 03浏览 GraphQL 类型详情
- 04限制工具数量并排除变更
- 05支持 schema 快照和实时检查
适用场景
- 01让 Claude Code 查询 API
- 02向 Agent 提供指定的 GraphQL 变更
- 03使用禁用了 introspection 的 schema
MCP 相关
该服务将 GraphQL 查询和变更作为 MCP 工具,并提供 `execute_graphql` 与 `get_type_details`。它支持 stdio 或 HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y mcp-graphql-bridgeGRAPHQL_API_URLGraphQL endpoint URL used for executing queries and mutations. Defaults to the public Countries API.GRAPHQL_INTROSPECTION_URLGraphQL endpoint URL used for schema introspection. Defaults to GRAPHQL_API_URL.GRAPHQL_TOKEN密钥Bearer token for authenticating query and mutation execution.GRAPHQL_INTROSPECTION_TOKEN密钥Bearer token for schema introspection. Defaults to GRAPHQL_TOKEN.GRAPHQL_MAX_TOOLSMaximum number of generated query and mutation tools. Defaults to 128.GRAPHQL_INCLUDE_MUTATIONSSet to false to disable mutation tools and mutation execution. Defaults to true.GRAPHQL_MAX_RETRIESRetries for transient upstream responses. Defaults to 0.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
2收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| query | string | 是 | 包含选择集的完整 GraphQL 查询或变更操作字符串 |
| variables | object | 否 | 操作的变量 |
| bearer_token | string | 否 | 用于对此请求进行身份验证的 Bearer 令牌(覆盖 GRAPHQL_TOKEN) |
| custom_headers | object | 否 | 以键值对形式提供的其他请求标头,例如 {"X-Tenant-ID": "abc"} |
详细介绍
mcp-graphql-bridge
一个通用的 MCP(Model Context Protocol)服务,可将任意 GraphQL API 接入 Claude Code。它会内省你的 GraphQL 架构,并将每个查询和变更都作为独立工具公开,让 Claude 能够直接与你的 API 交互。
工作原理
启动时,服务会:
- 在工作目录中查找
schema-introspection.json文件(速度快,无需网络请求) - 如果找不到,则对
GRAPHQL_INTROSPECTION_URL执行实时内省 - 为每个查询注册一个工具(
query__<name>),并为每个变更注册一个工具(mutation__<name>) - 始终注册一个通用的
execute_graphql备用工具和一个get_type_details浏览工具
要求
- Node.js >= 20
设置
步骤 1:安装
选项 A:从 npm 安装(推荐)
npm install -g mcp-graphql-bridge
选项 B:克隆并从源代码构建
git clone https://github.com/murilojrpereira/mcp-graphql-bridge.git
cd mcp-graphql-bridge
npm install
npm run build
步骤 2:配置环境变量
| 变量 | 必需 | 描述 |
|---|---|---|
GRAPHQL_API_URL | 否 | 查询和变更使用的端点。如果未设置,默认使用公共演示 API(countries.trevorblades.com);实际使用时请替换为你自己的端点。 |
GRAPHQL_INTROSPECTION_URL | 否 | 架构内省使用的端点。如果未设置,默认使用 GRAPHQL_API_URL。 |
GRAPHQL_TOKEN | 否 | GraphQL 身份验证所需的 Bearer 令牌(用于执行查询/变更)。公共 API 无需设置。 |
GRAPHQL_INTROSPECTION_TOKEN | 否 | 架构内省所需的 Bearer 令牌;如果内省所需凭据与执行操作所需凭据不同(例如使用独立的架构注册表),则需要设置。如果未设置,默认使用 GRAPHQL_TOKEN。 |
MCP_AUTH_TOKEN | 否 | 当 MCP_TRANSPORT=http 时,托管的 /mcp HTTP 端点所需的 Bearer 令牌 |
GRAPHQL_MAX_TOOLS | 否 | 要注册的查询/变更工具数量上限。截断时优先保留查询。默认值为 128。 |
GRAPHQL_INCLUDE_MUTATIONS | 否 | 设置为 false 可完全排除所有变更字段,用于只读部署。默认值为 true。 |
GRAPHQL_MAX_RETRIES | 否 | 对 429/502/503/504 响应的重试次数(0–5);如果存在 Retry-After,则会遵循该值。默认值为 0(禁用)。 |
对于包含数百个字段的架构(GitHub 的 GraphQL API 有 284 个根字段——32 个查询、252
个变更),GRAPHQL_MAX_TOOLS 和 GRAPHQL_INCLUDE_MUTATIONS 可确保注册数量有上限且可预测。
如果上限导致架构被截断,stderr 会准确记录已注册与可用的查询/变更数量。
无需任何配置即可试用此服务——未设置任何变量时,它会连接到上述公共演示 API 并记录相关信息。完整的令牌模型,以及为什么 GraphQL 端点是为每个部署固定设置而不是作为每次请求的参数,请参阅
docs/architecture.md。
你可以在项目根目录的 .env 文件中设置这些变量:
GRAPHQL_API_URL=https://your-api.example.com/graphql
GRAPHQL_INTROSPECTION_URL=https://your-api.example.com/graphql
GRAPHQL_TOKEN=your-bearer-token
也可以通过 claude mcp add 命令直接传入(见下文)。
步骤 3:(可选)预生成架构快照
默认情况下,服务会在启动时实时内省你的架构——无需文件;如果 API 拒绝完整深度的请求,它会自动改用较浅的查询深度重试(有些 API,尤其是由 CDN 提供服务的 API,会限制查询深度)。只有在生产环境中完全禁用了 API 内省,或你希望加快启动速度时,才使用此步骤:
curl -s -X POST https://your-api.example.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-bearer-token" \
-d '{"query":"{ __schema { queryType { fields { name description args { name description defaultValue type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } } mutationType { fields { name description args { name description defaultValue type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } } } }"}' \
> schema-introspection.json
如果 API 因深度/复杂度限制错误而拒绝此请求,请减少 ofType { ... } 的嵌套层数(每一层会解析一个额外的 NonNull/List 包装器——大多数实际类型需要 2-3 层;只有像 [[Int!]!]! 这样的双重包装列表才需要更多层)。
添加到 Claude Code
选项 A:用户范围(仅供你使用)
如果通过 npm 安装:
claude mcp add --transport stdio \
--env GRAPHQL_API_URL=https://your-api.example.com/graphql \
--env GRAPHQL_INTROSPECTION_URL=https://your-api.example.com/graphql \
--env GRAPHQL_TOKEN=your-bearer-token \
graphql-bridge -- mcp-graphql-bridge
如果从源代码克隆:
claude mcp add --transport stdio \
--env GRAPHQL_API_URL=https://your-api.example.com/graphql \
--env GRAPHQL_INTROSPECTION_URL=https://your-api.example.com/graphql \
--env GRAPHQL_TOKEN=your-bearer-token \
graphql-bridge -- node /absolute/path/to/mcp-graphql-bridge/dist/index.js
重要: 请务必使用
mcp-graphql-bridge/dist/index.js(编译后的输出),而不是mcp-graphql-bridge/index.js。必须先使用npm run build构建 TypeScript 源代码,入口点位于dist/文件夹中。
选项 B:项目范围(通过 .mcp.json 与团队共享)
claude mcp add --transport stdio --scope project \
--env GRAPHQL_API_URL=https://your-api.example.com/graphql \
--env GRAPHQL_INTROSPECTION_URL=https://your-api.example.com/graphql \
--env GRAPHQL_TOKEN=your-bearer-token \
graphql-bridge -- mcp-graphql-bridge
注意: 请使用绝对路径。所有
--env和--transport标志都必须放在服务名称之前。
验证连接
claude mcp list
然后在 Claude Code 会话中运行 /mcp,查看可用的服务和工具。
MCP Registry
此服务已发布到官方 MCP Registry,名称为
io.github.murilojrpereira/mcp-graphql-bridge,因此浏览该注册表的 MCP 客户端可以发现并从中安装此服务。
示例
以下是两个完整的演示流程——先介绍一个无需配置的小型公共架构,再介绍一个需要身份验证和工具数量限制的大型企业级架构。
示例 1:Countries API(小型架构,无需身份验证)
这是零配置的默认用法——除了服务本身,无需安装或配置其他内容。
-
添加服务,无需设置任何环境变量:
claude mcp add --transport stdio graphql-countries -- mcp-graphql-bridge -
重启 Claude Code(或运行
/mcp,确认graphql-countries已连接)。你应该会看到query__country、query__countries和query__continents等工具。 -
向 Claude 提问:
使用 graphql-countries,查找代码为 "BR" 的国家,然后列出其所属大洲的其他国家。
Claude 会调用
query__country({ code: "BR", __fields: "{ name continent { code name } }" }), 然后调用query__continent或query__countries({ __fields: "{ name }" }),并根据返回结果进行筛选。 -
尝试使用无效代码,查看错误透传:
查找代码为 "ZZZ" 的国家。
返回 GraphQL API 自身的错误文本——桥接服务会直接传递错误,而不是将其隐藏。
示例 2:GitHub GraphQL API(大型架构,身份验证 + 工具限制)
GitHub 的 GraphQL API 有 284 个根字段(32 个查询、252 个变更)——远超 GRAPHQL_MAX_TOOLS 默认值 128;而且每个请求都需要令牌,包括内省(与允许部分匿名读取的 GitHub REST API 不同)。
-
添加服务,并将其限定为只读访问:
export GH_TOKEN=ghp_your_personal_access_token # or: source a gitignored .env file first claude mcp add --transport stdio graphql-github \ --env GRAPHQL_API_URL=https://api.github.com/graphql \ --env GRAPHQL_INTROSPECTION_URL=https://api.github.com/graphql \ --env GRAPHQL_TOKEN=$GH_TOKEN \ --env GRAPHQL_INCLUDE_MUTATIONS=false \ graphql-bridge -- mcp-graphql-bridgeGRAPHQL_INCLUDE_MUTATIONS=false会注册全部 32 个(只读)查询,不注册任何变更——远低于上限;与向 AI Agent 暴露全部 252 个写入操作相比,这也是更安全且更有意义的默认设置。 -
向 Claude 提问:
使用 graphql-github,查找 facebook/react 仓库,并告诉我它的星标数量。
Claude 会调用
query__repository({ owner: "facebook", name: "react", __fields: "{ name stargazerCount }" })。 -
若还要使用变更操作,请移除
GRAPHQL_INCLUDE_MUTATIONS=false并提高上限 (GRAPHQL_MAX_TOOLS=400),同时注意,这将开放对 GitHub 账户的写入访问权限,具体范围取决于令牌拥有的权限。
可用工具
| 工具 | 描述 |
|---|---|
query__<name> | 每个 GraphQL 查询字段对应一个工具 |
mutation__<name> | 每个 GraphQL 变更字段对应一个工具 |
execute_graphql | 通用备用工具——运行任意查询或变更(当 GRAPHQL_INCLUDE_MUTATIONS=false 时会拒绝变更) |
get_type_details | 查看特定 GraphQL 类型的字段 |
所有按操作提供的工具都接受一个特殊的 __fields 参数,可用于提供自定义 GraphQL 选择集(例如 { id name status })。如果省略,则只返回标量字段。
单次调用身份验证覆盖:每个工具(包括 execute_graphql)也接受 bearer_token
和 custom_headers 参数。若提供这些参数,它们仅对该次请求覆盖 GRAPHQL_TOKEN/无身份验证配置,让 Claude 无需重启服务即可按调用切换凭据。
安全性
- 每次部署的目标 API 都是固定的,不能作为单次请求参数传入。 单独的工具调用可以覆盖凭据(
bearer_token、custom_headers),但不能更改目标主机——GRAPHQL_API_URL在部署时设置一次。允许调用者将共享服务重定向到任意目标,会形成服务器端请求伪造(SSRF)攻击原语;此设计从根本上杜绝了这种情况。 - 在配置中设置的密钥和单次调用的密钥,会在每个响应发送给调用 LLM 前进行脱敏。
GRAPHQL_INCLUDE_MUTATIONS=false会在注册时排除所有变更字段,实现真正的只读部署——这是 GraphQL 类型系统本身已编码的重要信任边界,而不是仅依赖令牌权限范围。此限制也适用于execute_graphql:它会解析查询,并在此标志关闭时拒绝任何变更,而不仅仅是省略便捷的mutation__*工具、却让通用备用工具仍能执行任意操作。MCP_AUTH_TOKEN为面向公共网络的部署保护 HTTP 传输的/mcp端点;请求大小上限为 10MB。
完整的设计依据请参阅 docs/architecture.md,如需报告漏洞,请参阅 SECURITY.md。
Docker
构建镜像
docker build -t mcp-graphql-bridge .
通过 Docker 添加到 Claude Code
claude mcp add --transport stdio \
--env GRAPHQL_API_URL=https://your-api.example.com/graphql \
--env GRAPHQL_INTROSPECTION_URL=https://your-api.example.com/graphql \
--env GRAPHQL_TOKEN=your-bearer-token \
graphql-bridge -- docker run -i --rm \
-e GRAPHQL_API_URL -e GRAPHQL_INTROSPECTION_URL -e GRAPHQL_TOKEN \
mcp-graphql-bridge
注意: 必须使用
-i标志(不使用-t)——它会保持 stdin 打开,以供 MCP stdio 协议使用。
HTTP 部署
如需托管式 MCP 访问,请运行 HTTP 传输,而非 stdio:
docker build -f Dockerfile.http -t mcp-graphql-bridge-http .
docker run --rm -p 8080:8080 \
-e GRAPHQL_API_URL=https://your-api.example.com/graphql \
-e GRAPHQL_INTROSPECTION_URL=https://your-api.example.com/graphql \
-e GRAPHQL_TOKEN=your-bearer-token \
mcp-graphql-bridge-http
/health 提供运行状况检查;MCP 请求由 /mcp 处理。
对于面向公共网络的部署,请设置 MCP_AUTH_TOKEN,并将客户端配置为向 /mcp 发送 Authorization: Bearer <token>。
有关 AWS、Cloudflare 及其他容器托管选项,请参阅 docs/deployment.md。
开发
npm run dev # watch mode: rebuilds and restarts on file changes
npm run build # one-off TypeScript compile
npm start # run the compiled server
有关贡献指南和维护者发布流程,请参阅 CONTRIBUTING.md。
故障排除
错误:Cannot find module '.../index.js'
如果看到类似以下错误:
Error: Cannot find module '/path/to/mcp-graphql-bridge/index.js'
你指向了错误的文件。必须先编译 TypeScript 源码,入口文件位于 dist/ 文件夹中:
正确路径: /path/to/mcp-graphql-bridge/dist/index.js
错误路径: /path/to/mcp-graphql-bridge/index.js
修复方法:
- 确保已运行
npm run build(此命令会创建dist/文件夹) - 更新 MCP 配置,使用以
/dist/index.js结尾的完整路径
Schema introspection fails
如果服务已启动,但显示“Schema introspection failed”,你的 GraphQL API 可能在生产环境中禁用了内省。请使用 Setup 的第 3 步中的 curl 命令,预先生成 schema-introspection.json 文件。
Claude Code 中未显示工具
- 运行
claude mcp list,确认已注册服务 - 在 Claude Code 会话中运行
/mcp,查看可用工具 - 检查 GraphQL API 的环境变量是否设置正确(
GRAPHQL_API_URL、GRAPHQL_INTROSPECTION_URL、GRAPHQL_TOKEN)——这些变量均为可选项,默认使用公共演示 API。因此,如果配置了自己的 API 后仍未显示工具,请检查其凭据和端点 URL
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。