Skip to main content
Glama
murilojrpereira

mcp-graphql-bridge

mcp-graphql-bridge

npm version CI License: MIT Node.js >= 18

一个通用的 MCP (Model Context Protocol) 服务器,用于将任何 GraphQL API 连接到 Claude Code。它会对您的 GraphQL 模式进行内省,并将每个查询和变更公开为单独的工具,让 Claude 可以直接与您的 API 进行交互。

工作原理

启动时,服务器将:

  1. 在工作目录中查找 schema-introspection.json 文件(速度快,无网络调用)

  2. 如果未找到,则针对 GRAPHQL_INTROSPECTION_URL 运行实时内省

  3. 为每个查询注册一个工具 (query__<name>),为每个变更注册一个工具 (mutation__<name>)

  4. 始终注册一个通用的 execute_graphql 后备工具和一个 get_type_details 探索工具

Related MCP server: GraphQL MCP Server

要求

  • Node.js >= 18

设置

第 1 步:安装

选项 A:从 npm 安装(推荐)

npm install -g mcp-graphql-bridge

选项 B:克隆并从源码构建

git clone https://github.com/murilopereira/mcp-graphql-bridge.git
cd mcp-graphql-bridge
npm install
npm run build

第 2 步:配置环境变量

变量

必需

描述

GRAPHQL_API_URL

是

用于查询和变更的端点

GRAPHQL_INTROSPECTION_URL

是

用于模式内省的端点(可以与上述相同)

GRAPHQL_TOKEN

是

用于身份验证的 Bearer 令牌

您可以在项目根目录的 .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 在生产环境中禁用了内省,或者您想要更快的启动时间时,才使用此步骤:

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 } } } } } type { 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 } } } } } type { kind name ofType { kind name ofType { kind name } } } } } } }"}' \
  > schema-introspection.json

添加到 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。TypeScript 源码必须先使用 npm run build 构建,入口点位于 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 以查看可用的服务器和工具。

可用工具

工具

描述

query__<name>

每个 GraphQL 查询字段对应一个工具

mutation__<name>

每个 GraphQL 变更字段对应一个工具

execute_graphql

通用后备工具——运行任何查询或变更

get_type_details

探索特定 GraphQL 类型的字段

所有针对操作的工具都接受一个特殊的 __fields 参数,您可以在其中提供自定义的 GraphQL 选择集(例如 { id name status })。如果省略,则仅返回标量字段。

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 协议使用。

开发

npm run dev   # watch mode: rebuilds and restarts on file changes
npm run build # one-off TypeScript compile
npm start     # run the compiled server

故障排除

错误:找不到模块 '.../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

修复方法:

  1. 确保您运行了 npm run build(创建 dist/ 文件夹)

  2. 更新您的 MCP 配置,使用以 /dist/index.js 结尾的完整路径

模式内省失败

如果服务器启动但显示“Schema introspection failed”,则您的 GraphQL API 可能在生产环境中禁用了内省。请使用设置第 3 步中的 curl 命令预生成 schema-introspection.json 文件。

工具未在 Claude Code 中显示

  1. 运行 claude mcp list 以验证服务器是否已注册

  2. 在 Claude Code 会话中运行 /mcp 以查看可用工具

  3. 检查是否设置了所有必需的环境变量 (GRAPHQL_API_URL, GRAPHQL_INTROSPECTION_URL, GRAPHQL_TOKEN)

Available Tools

2 tools
execute_graphqlA

Execute any GraphQL query or mutation against the API. Use this when no specific tool exists for your operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesFull GraphQL query or mutation string including selection set
variablesNoVariables for the operation
bearer_tokenNoBearer token to authenticate this request (overrides GRAPHQL_TOKEN)
custom_headersNoAdditional request headers as key-value pairs, e.g. {"X-Tenant-ID": "abc"}

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavioral traits. It does not mention potential side effects of mutations, authentication requirements (beyond parameter hints), rate limits, or error handling. The description is too minimal to convey safe usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences pack purpose and usage guidelines with zero waste, frontloading the key action and fallback use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description does not explain return format, errors, or the fact that the endpoint is pre-configured. Despite the complexity of a generic GraphQL executor, the description is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all 4 parameters have descriptions). The description adds no additional parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute any GraphQL query or mutation against the API', specifying the verb and resource. It distinguishes itself from sibling 'get_type_details' by being a generic executor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this when no specific tool exists for your operation', providing clear when-to-use guidance. No exclusions, but the instruction is direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_type_detailsB

Get fields of a specific GraphQL type to know what to put in __fields

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNameYesGraphQL type name, e.g. 'Repository', 'User', 'Issue'

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose all behavioral traits. It indicates a read operation, but does not mention error handling (e.g., invalid type name), response structure, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no extraneous text. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool's simplicity, the description omits output details. The agent does not know whether the response returns field names, types, or full schema; this is critical given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single parameter with a clear description and examples. The tool description adds no extra meaning beyond prompting usage of '__fields'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets fields of a specific GraphQL type and its purpose in GraphQL introspection. However, it does not differentiate from sibling tool execute_graphql, which may also retrieve type information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'to know what to put in __fields' implies a use case, but there is no explicit guidance on when to use this tool versus execute_graphql, nor any when-not-to-use advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv2.1.0
    • Changedexecute_graphql2 fields changed
      • addedInput schema / properties / bearer_token
        Added value: +{
        +  "description": "Bearer token to authenticate this request (overrides GRAPHQL_TOKEN)",
        +  "type": "string"
        +}
      • addedInput schema / properties / custom_headers
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Additional request headers as key-value pairs, e.g. {\"X-Tenant-ID\": \"abc\"}",
        +  "type": "object"
        +}
    • Changedget_type_details1 field changed
      • changedInput schema / properties / typeName / description
        Previous value: -"GraphQL type name, e.g. 'Machine', 'WorkOrder', 'Shift'"New value: +"GraphQL type name, e.g. 'Repository', 'User', 'Issue'"
  2. 2 tool updatesv1.0.1
    • First observedexecute_graphql
    • First observedget_type_details

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation5/5

The two tools serve clearly distinct purposes: executing GraphQL operations vs. retrieving type metadata. No overlap in functionality.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern using snake_case (execute_graphql, get_type_details), making the intent clear and predictable.

Tool Count4/5

For a GraphQL bridge, two tools is minimal but still covers the essential operations of executing queries and exploring types. Slightly under-scoped but reasonable.

Completeness4/5

The tool surface covers core GraphQL operations (any query/mutation) and type introspection. Minor gaps exist (e.g., no dedicated tool for listing mutations), but the generic execute tool and type details suffice for agents familiar with GraphQL.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    A MCP server that exposes GraphQL schema information to LLMs like Claude. This server allows an LLM to explore and understand large GraphQL schemas through a set of specialized tools, without needing to load the whole schema into the context
    23 npm
    46
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables LLMs to interact with GraphQL APIs by providing schema introspection and query execution capabilities.
    889 npm
    3
    MIT