使用MCP(模型上下文协议)服务器将自然语言查询转换为GraphQL查询,该服务器可以无缝集成到AI助手如Claude Desktop和Cursor中。

Text-to-GraphQL MCP服务器使用LangGraph构建的AI代理将自然语言描述转换为有效的GraphQL查询。它在人类语言和GraphQL API之间提供了一个桥梁,使数据库和API交互对开发人员和非技术人员都更加直观。
UV是一个快速的Python包安装器和解析器。首先安装它:
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
找到你的UV安装路径:
# 找到UV安装的位置
which uv
# 常见位置:
# macOS/Linux: ~/.local/bin/uv
# Windows: %APPDATA%\uv\bin\uv.exe
重要: 你需要UV路径来配置MCP。典型的路径是macOS/Linux上的
~/.local/bin,这对应于/Users/yourusername/.local/bin(用你的实际用户名替换yourusername)。
# 克隆仓库
git clone https://github.com/Arize-ai/text-to-graphql-mcp.git
cd text-to-graphql-mcp
# 安装依赖项(UV自动创建虚拟环境)
uv sync
# 测试安装
uv run text-to-graphql-mcp --help
注意:
uv run模式自动处理虚拟环境,使得MCP配置比传统的pip安装更干净、可靠。
从PyPI安装(当发布时):
pip install text-to-graphql-mcp
开发设置:
# 为项目贡献
uv sync --dev
添加到你的.cursor/mcp.json:
{
"text-to-graphql": {
"command": "uv",
"args": [
"--directory",
"/path/to/text-to-graphql-mcp",
"run",
"text-to-graphql-mcp"
],
"env": {
"PATH": "/path/to/uv/bin:/usr/bin:/bin",
"OPENAI_API_KEY": "your_openai_api_key_here",
"GRAPHQL_ENDPOINT": "https://your-graphql-api.com/graphql",
"GRAPHQL_API_KEY": "your_api_key_here",
"GRAPHQL_AUTH_TYPE": "bearer"
}
}
}
重要设置说明:
- 将
/path/to/text-to-graphql-mcp替换为你克隆的仓库的实际路径- 将
/path/to/uv/bin替换为你的实际UV安装路径(通常在macOS上为/Users/yourusername/.local/bin)PATH环境变量是必需的,以便MCP客户端能够找到uv命令
添加到你的Claude Desktop MCP配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"text-to-graphql": {
"command": "uv",
"args": [
"--directory",
"/path/to/text-to-graphql-mcp",
"run",
"text-to-graphql-mcp"
],
"env": {
"PATH": "/path/to/uv/bin:/usr/bin:/bin",
"OPENAI_API_KEY": "your_openai_api_key_here",
"GRAPHQL_ENDPOINT": "https://your-graphql-api.com/graphql",
"GRAPHQL_API_KEY": "your_api_key_here",
"GRAPHQL_AUTH_TYPE": "bearer"
}
}
}
}
设置说明:
- 找到你的UV路径: 在终端运行
which uv(通常为/Users/yourusername/.local/bin/uv)- 设置PATH: 使用包含
uv的目录(例如/Users/yourusername/.local/bin)- 替换路径: 更新
--directory参数和PATH环境变量的实际路径- 添加你的API密钥: 将占位符值替换为你的实际API密钥
# 查找你的UV安装
which uv
# 不同操作系统的常见路径:
# macOS: /Users/yourusername/.local/bin/uv
# Linux: /home/yourusername/.local/bin/uv
# Windows: C:\Users\yourusername\AppData\Roaming\uv\bin\uv.exe
# 对于MCP配置,使用目录路径:
# macOS: /Users/yourusername/.local/bin
# Linux: /home/yourusername/.local/bin
# Windows: C:\Users\yourusername\AppData\Roaming\uv\bin
如果你更喜欢使用.env文件(适用于本地开发):
# 必需
OPENAI_API_KEY=your_openai_api_key_here
GRAPHQL_ENDPOINT=https://your-graphql-api.com/graphql
GRAPHQL_API_KEY=your_api_key_here
# 可选 - 认证方式(bearer|apikey|direct)
GRAPHQL_AUTH_TYPE=bearer
# 可选 - 模型设置
MODEL_NAME=gpt-4o
MODEL_TEMPERATURE=0
然后使用简化的MCP配置(仍然需要PATH):
{
"text-to-graphql": {
"command": "uv",
"args": [
"--directory",
"/path/to/text-to-graphql-mcp",
"run",
"text-to-graphql-mcp"
],
"env": {
"PATH": "/path/to/uv/bin:/usr/bin:/bin"
}
}
}
# 直接运行服务器进行测试
text-to-graphql-mcp
# 或者作为模块运行
python -m text_to_graphql_mcp.mcp_server
generate_graphql_query将自然语言转换为GraphQL查询。
输入: "获取所有用户及其姓名和电子邮件"
输出: query { users { id name email } }
validate_graphql_query根据加载的模式验证GraphQL查询。
execute_graphql_query执行GraphQL查询并返回格式化的结果。
get_query_history检索当前会话中所有查询的历史记录。
get_query_examples获取示例查询以了解系统的功能。
自然语言输入:
"显示我过去一周的所有博客文章及其作者和评论数量"
生成的GraphQL:
query {
posts(where: { createdAt: { gte: "2024-06-05T00:00:00Z" } }) {
id
title
content
createdAt
author {
id
name
email
}
comments {
id
}
_count {
comments
}
}
}
💡 关键概念: 当使用Docker与MCP客户端(Claude/Cursor)一起使用时,环境变量是在容器启动时(
docker run)设置的,而不是在MCP客户端配置中设置。MCP客户端只是连接到已经运行的容器。
# 克隆仓库
git clone https://github.com/Arize-ai/text-to-graphql-mcp.git
cd text-to-graphql-mcp
# 构建Docker镜像
docker build -t text-to-graphql-mcp .
docker run -d \
--name text-to-graphql-mcp \
-p 8000:8000 \
-e OPENAI_API_KEY="your_openai_api_key_here" \
-e GRAPHQL_ENDPOINT="https://your-graphql-api.com/graphql" \
-e GRAPHQL_API_KEY="your_api_key_here" \
-e GRAPHQL_AUTH_TYPE="bearer" \
-e MODEL_NAME="gpt-4o" \
text-to-graphql-mcp
创建一个.env文件:
OPENAI_API_KEY=your_openai_api_key_here
GRAPHQL_ENDPOINT=https://your-graphql-api.com/graphql
GRAPHQL_API_KEY=your_api_key_here
GRAPHQL_AUTH_TYPE=bearer
MODEL_NAME=gpt-4o
MODEL_TEMPERATURE=0
运行容器:
docker run -d \
--name text-to-graphql-mcp \
-p 8000:8000 \
--env-file .env \
text-to-graphql-mcp
创建一个docker-compose.yml文件:
version: '3.8'
services:
text-to-graphql-mcp:
build: .
container_name: text-to-graphql-mcp
ports:
- "8000:8000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- GRAPHQL_ENDPOINT=${GRAPHQL_ENDPOINT}
- GRAPHQL_API_KEY=${GRAPHQL_API_KEY}
- GRAPHQL_AUTH_TYPE=${GRAPHQL_AUTH_TYPE:-bearer}
- MODEL_NAME=${MODEL_NAME:-gpt-4o}
- MODEL_TEMPERATURE=${MODEL_TEMPERATURE:-0}
- API_HOST=0.0.0.0 # 重要:绑定到容器中的所有接口
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
然后运行:
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
当你在Docker中运行MCP服务器时,你需要使用docker exec与容器通信:
重要: 环境变量(OPENAI_API_KEY, GRAPHQL_ENDPOINT等)必须在你第一次运行容器时使用上述方法之一设置。下面的MCP客户端配置仅连接到已运行的容器。
# 示例:确保容器正在运行并带有你的环境变量
docker run -d \
--name text-to-graphql-mcp \
-p 8000:8000 \
--env-file .env \
text-to-graphql-mcp
# 验证容器是否正在运行
docker ps | grep text-to-graphql-mcp
添加到.cursor/mcp.json:
{
"text-to-graphql": {
"command": "docker",
"args": [
"exec",
"-i",
"text-to-graphql-mcp",
"uv",
"run",
"python",
"-m",
"src.text_to_graphql_mcp.mcp_server"
]
}
}
添加到你的Claude Desktop配置:
{
"mcpServers": {
"text-to-graphql": {
"command": "docker",
"args": [
"exec",
"-i",
"text-to-graphql-mcp",
"uv",
"run",
"python",
"-m",
"src.text_to_graphql_mcp.mcp_server"
]
}
}
}
注意: MCP客户端配置不需要环境变量,因为它们连接到已经设置了这些变量的容器。如果你重启容器,请确保再次包含环境变量。
系统使用由LangGraph构建的多代理架构:
| 变量 | 描述 | 默认值 |
|---|---|---|
OPENAI_API_KEY | OpenAI API密钥用于LLM操作 | 必需 |
GRAPHQL_ENDPOINT | GraphQL API端点URL | 必需 |
GRAPHQL_API_KEY | 你的GraphQL服务的API密钥 | 必需 |
GRAPHQL_AUTH_TYPE | 认证方法:bearer,apikey或direct | bearer |
GRAPHQL_HEADERS | 自定义头部作为JSON(覆盖自动认证) | {} |
MODEL_NAME | 要使用的OpenAI模型 | gpt-4o |
MODEL_TEMPERATURE | 模型响应的温度 | 0 |
API_HOST | 服务器主机地址 | 127.0.0.1 |
API_PORT | 服务器端口 | 8000 |
RECURSION_LIMIT | 代理工作流的最大递归 | 10 |
bearer(默认): 使用Authorization: Bearer <token> - 大多数GraphQL API的标准apikey: 使用X-API-Key: <key> - 一些API如Arize使用direct: 使用Authorization: <token> - 直接令牌,没有Bearer前缀GRAPHQL_HEADERS以覆盖任何自定义认证格式GitHub GraphQL API:
GRAPHQL_ENDPOINT=https://api.github.com/graphql
GRAPHQL_API_KEY=ghp_your_github_personal_access_token
GRAPHQL_AUTH_TYPE=bearer
Shopify GraphQL API:
GRAPHQL_ENDPOINT=https://your-shop.myshopify.com/admin/api/2023-10/graphql.json
GRAPHQL_API_KEY=your_shopify_access_token
GRAPHQL_AUTH_TYPE=bearer
Arize GraphQL API:
GRAPHQL_ENDPOINT=https://app.arize.com/graphql
GRAPHQL_API_KEY=your_arize_developer_api_key
# Arize的认证类型自动检测
Hasura:
GRAPHQL_ENDPOINT=https://your-app.hasura.app/v1/graphql
GRAPHQL_HEADERS={"x-hasura-admin-secret": "your_admin_secret"}
想快速构建更好的AI代理吗?查看**Arize Phoenix** - 一个专门为LLM应用和代理设计的开源可观察性平台。Phoenix提供了:
Phoenix与LangChain和LangGraph(此项目使用)无缝集成,可以帮助你:
开始使用Phoenix:
pip install arize-phoenix
phoenix serve
访问docs.arize.com/phoenix以获得关于代理可观察性和开发最佳实践的全面指南。