一个强类型化的 TypeScript 模型上下文协议(MCP)服务器,通过 Claude AI 提供对任何 GraphQL API 的无缝访问。
graphql-mcp/
├── src/
│ └── graphql-mcp-server.ts # 主服务实现(TypeScript)
├── dist/ # 编译后的 JavaScript(自动生成)
├── docs/
│ ├── GETTING_STARTED.md # 设置和使用指南
│ ├── PROJECT_STATUS.md # 当前项目状态
│ └── TECHNICAL.md # 技术文档
├── .env.development # 环境变量
├── .env.sample # 环境变量模板样本
├── claude_desktop_sample_config.json # Claude Desktop 配置样本
├── package.json # 项目依赖
├── tsconfig.json # TypeScript 配置
├── run-graphql-mcp.sh # 运行服务的脚本
└── README.md # 该文件
# 全局安装
npm install -g graphql-mcp
# 运行服务
graphql-mcp-server
# 克隆仓库
git clone https://github.com/ctkadvisors/graphql-mcp.git
cd graphql-mcp
# 安装依赖
npm install
# 运行服务
npm start
复制样本环境文件并更新您的 GraphQL API 细节:
cp .env.sample .env.development
编辑 .env.development 文件,添加您的 GraphQL API 端点和可选的 API 密钥。
首先编译 TypeScript 代码:
npm install
npm run build
然后运行服务:
node dist/graphql-mcp-server.js
或者使用提供的脚本一次性编译和运行:
./run-graphql-mcp.sh
将此服务添加到您的 Claude Desktop 配置中:
使用样本配置作为模板:
cp claude_desktop_sample_config.json ~/Library/Application\ Support/Claude/claude_desktop_config.json
编辑配置并更新路径指向您的安装:
{
"mcpServers": {
"graphql": {
"command": "node",
"args": ["/绝对路径到/dist/graphql-mcp-server.js"],
"env": {
"GRAPHQL_API_ENDPOINT": "https://您的-graphql-api.com/graphql",
"GRAPHQL_API_KEY": "需要的-api-key",
"WHITELISTED_QUERIES": "[\"countries\",\"continent\",\"languages\"]"
}
}
}
}
重启 Claude Desktop 以连接到服务器
您现在应该在 Claude Desktop 中看到可用的 GraphQL 操作!
出于安全或性能原因,您可能希望限制哪些 GraphQL 操作(查询和变更)暴露给 Claude。有两种方法来控制访问:
"env": {
"GRAPHQL_API_ENDPOINT": "https://示例-graphql-api.com/graphql",
"ENABLE_MUTATIONS": "true"
}
"env": {
"GRAPHQL_API_ENDPOINT": "https://示例-graphql-api.com/graphql",
"ENABLE_MUTATIONS": "true",
"WHITELISTED_QUERIES": "[\"countries\",\"continent\",\"languages\"]",
"WHITELISTED_MUTATIONS": "[\"createUser\",\"updateProfile\"]"
}
白名单可以采用两种格式:
"[\"query1\",\"query2\"]""query1,query2,query3"重要:白名单值必须是字符串,而不是实际的 JSON 数组对象。环境变量总是以字符串形式传递,因此您需要像上面那样正确转义 JSON 字符串中的引号。
Claude Desktop 配置中的正确格式示例:
"graphql-api": {
"command": "node",
"args": [
"/Users/用户名/Projects/graphql-mcp/dist/graphql-mcp-server.js"
],
"env": {
"GRAPHQL_API_ENDPOINT": "https://示例-graphql-api.com/graphql",
"NODE_ENV": "development",
"DEBUG": "true",
"ENABLE_MUTATIONS": "true",
"WHITELISTED_QUERIES": "[\"getUser\",\"getProducts\",\"getOrders\"]",
"WHITELISTED_MUTATIONS": "[\"createOrder\",\"updateProfile\"]"
}
}
避免的常见错误:
// 错误 - 不会工作!
"WHITELISTED_QUERIES": ["getUser", "getProducts"],
"WHITELISTED_MUTATIONS": ["createOrder", "updateProfile"]
// 正确
"WHITELISTED_QUERIES": "[\"getUser\",\"getProducts\"]",
"WHITELISTED_MUTATIONS": "[\"createOrder\",\"updateProfile\"]"
如果未提供特定操作类型的白名单,则该类型的 GraphQL 模式中的所有操作都将可用。
一旦连接到 Claude Desktop,您可以使用如下命令:
查看来自 countries 的结果 from graphql (本地){}
或者带有参数:
查看来自 country 的结果 from graphql (本地){
"code": "US"
}
对于变更,工具前面有 mutation_ 前缀以区分它们与查询:
查看来自 mutation_createUser 的结果 from graphql (本地){
"name": "John Doe",
"email": "john.doe@example.com"
}
或者一个更复杂的变更:
查看来自 mutation_updateProduct 的结果 from graphql (本地){
"id": "prod-123",
"input": {
"name": "更新的产品名称",
"price": 29.99,
"description": "这是一个更新的产品描述"
}
}
变更遵循与查询相同的模式,但允许您修改 GraphQL API 中的数据。
更多详细信息,请参阅:
要更改服务器:
src/graphql-mcp-server.tsnpm run buildnode dist/graphql-mcp-server.js要将此包发布到 npm:
# 确保已登录到 npm
npm login
# 构建项目
npm run build
# 发布到 npm
npm publish
该包将包括 dist 目录中的预构建 JavaScript 文件,使其无需额外构建步骤即可使用。
该项目根据商业源许可证 1.1(BSL 1.1)许可,允许:
商业用途,包括向他人提供此软件作为服务,需要从 CTK Advisors 获取商业许可证。更多信息,请联系我们或查看完整的 LICENSE 文件。
BSL 许可证旨在平衡开源可用性和可持续商业发展,为所有人提供免费的非商业用途访问,同时保护我们长期支持和增强软件的能力。