Advanced Hasura GraphQL MCP Server
一个模型上下文协议服务器,它使 AI 代理能够通过自然语言与 Hasura GraphQL 端点进行动态交互,支持模式发现、数据查询/操作和聚合。
README
高级 Hasura GraphQL MCP 服务器
版本: 1.1.0
此模型上下文协议 (MCP) 服务器为 AI 代理(如 Cursor 或 Claude Desktop 中的代理)提供了一个高级接口,用于与 Hasura GraphQL 端点进行交互。 它使代理能够发现 API 结构、执行只读查询和变更(谨慎使用)、预览数据、执行聚合以及检查服务健康状况。
此服务器通过允许 LLM 根据自然语言请求动态利用您的 Hasura API 来增强 LLM 的能力。
功能
此服务器公开以下 MCP 功能:
资源:
- Hasura GraphQL Schema (
hasura:/schema)- 提供通过标准内省获得的完整 GraphQL 模式定义。
- MIME 类型:
application/json - 代理可以读取此资源以了解 API 的完整结构,包括类型、字段、参数、指令等。
工具:
-
run_graphql_query- 描述: 对 Hasura 端点执行只读 GraphQL 查询。 当没有可用的特定工具时,使用此工具来获取数据。 确保查询不会修改数据。 示例:
query { users { id name } } - 输入:
{ query: string, variables?: object } - 注意: 执行基本检查以防止执行以
mutation开头的字符串。 主要依赖于查询本身是只读的。
- 描述: 对 Hasura 端点执行只读 GraphQL 查询。 当没有可用的特定工具时,使用此工具来获取数据。 确保查询不会修改数据。 示例:
-
run_graphql_mutation- 描述: 执行 GraphQL 变更以插入、更新或删除数据。 谨慎使用,确保操作是预期且安全的。 依赖于为提供的 Admin Secret 或默认角色配置的 Hasura 权限。 示例:
mutation { insert_users_one(object: {name: "Test"}) { id } } - 输入:
{ mutation: string, variables?: object } - 安全: 允许 Hasura 角色允许的任何变更。 确保配置了适当的 Hasura 权限。
- 描述: 执行 GraphQL 变更以插入、更新或删除数据。 谨慎使用,确保操作是预期且安全的。 依赖于为提供的 Admin Secret 或默认角色配置的 Hasura 权限。 示例:
-
list_tables- 描述: 列出 Hasura 管理的可用数据表(或集合),按模式组织,带有描述,基于内省启发式(查找具有“id”字段的对象类型,排除内部/聚合类型)。 用于发现可用的数据源。
- 输入:
{ schemaName?: string }(可选的模式名称,如果可能,尝试从字段描述中推断,概念上默认为“public”)
-
describe_table- 描述: 显示特定表的结构,包括其所有列(字段)及其 GraphQL 类型和描述。
- 输入:
{ tableName: string, schemaName?: string }
-
list_root_fields- 描述: 列出 GraphQL 模式中可用的顶级查询、变更或订阅字段。 用于了解操作的主要入口点。
- 输入:
{ fieldType?: 'QUERY' | 'MUTATION' | 'SUBSCRIPTION' }(可选过滤器)
-
describe_graphql_type- 描述: 使用模式内省提供有关特定 GraphQL 类型(对象、输入、标量、枚举、接口、联合)的详细信息。 对于理解如何构建涉及特定类型的查询或变更至关重要。
- 输入:
{ typeName: string }(区分大小写的类型名称)
-
preview_table_data- 描述: 从指定的表中获取有限的行样本(默认为 5)以预览其数据结构和内容。 自动选择常见的标量和枚举字段。
- 输入:
{ tableName: string, limit?: number }
-
aggregate_data- 描述: 对指定的表执行简单的聚合(计数、总和、平均值、最小值、最大值),可以选择应用 Hasura “where”过滤器。 使用“list_tables”查找表名。 对于非计数聚合,需要“field”。
- 输入:
{ tableName: string, aggregateFunction: 'count'|'sum'|'avg'|'min'|'max', field?: string, filter?: object }
-
health_check- 描述: 检查配置的 Hasura GraphQL 端点是否可访问并响应基本的 GraphQL 查询 (
{ __typename })。 如果已知,可以选择检查特定的 HTTP 健康端点 URL。 - 输入:
{ healthEndpointUrl?: string }(可选的特定健康 URL)
- 描述: 检查配置的 Hasura GraphQL 端点是否可访问并响应基本的 GraphQL 查询 (
要求
- Node.js (建议 v18 或更高版本,如果指定,请检查
.nvmrc或package.json engines) pnpm(或npm/yarn,相应地调整命令)- 访问正在运行的 Hasura GraphQL 端点。
- (可选但推荐)用于特权访问的 Hasura Admin Secret,或正确配置的默认角色权限。
设置和安装
- 克隆存储库(如果适用):
# git clone <repository_url> # cd mcp-hasura-advanced - 安装依赖项:
pnpm install - 构建服务器:
这会将 TypeScript 代码编译到pnpm run builddist目录中。
运行服务器
从您的终端执行编译后的脚本,提供 Hasura 端点 URL,并可选择提供 admin secret:
# 使用 pnpm start 脚本(在 package.json 中定义)
pnpm start <HASURA_GRAPHQL_ENDPOINT> [ADMIN_SECRET]
# 或直接使用 Node
node dist/index.js <HASURA_GRAPHQL_ENDPOINT> [ADMIN_SECRET]
示例:
pnpm start https://my-hasura.cloud/v1/graphql mysecretkey123
或
node dist/index.js https://my-hasura.cloud/v1/graphql mysecretkey123
如果不需要 admin secret(使用默认角色权限):
pnpm start https://my-hasura.cloud/v1/graphql
服务器将启动,尝试初始模式内省,连接到 STDIO 传输,并将状态消息记录到 stderr。 它侦听 stdin 上的 MCP JSON-RPC 请求,并将响应发送到 stdout。
与 MCP 客户端(例如,Cursor、Claude Desktop)一起使用
要将此服务器连接到像 Cursor 这样的 MCP 客户端:
- 查找绝对路径:
- Node 可执行文件:在您的终端中运行
which node。 - 服务器脚本:导航到
mcp-hasura-advanced目录并运行pwd。 将/dist/index.js附加到结果。 - 项目目录:
pwd的输出。
- Node 可执行文件:在您的终端中运行
- 配置客户端: 打开客户端的配置文件(例如,Cursor 的
settings.json,Claude Desktop 的claude_desktop_config.json)。 - 添加服务器条目: 在适当的键下添加一个条目(例如,Cursor 的
cursor.customMcpServers数组,Claude Desktop 的mcpServers对象)。
Cursor settings.json 示例:
{
// ... 其他设置 ...
"cursor.customMcpServers": [
// ... 其他服务器 ...
{
"name": "My Advanced Hasura Server", // Cursor UI 中显示的名称
"command": "/path/to/your/node", // <<< 来自 'which node' 的绝对路径
"args": [
"/absolute/path/to/mcp-hasura-advanced/dist/index.js", // <<< 编译脚本的绝对路径
"https://YOUR_HASURA_ENDPOINT.com/v1/graphql", // <<< 您的端点
"YOUR_ADMIN_SECRET" // <<< 您的 secret (如果不需要 secret,请删除)
],
// 可选但推荐,用于模块解析一致性:
"cwd": "/absolute/path/to/mcp-hasura-advanced" // <<< 项目根目录的绝对路径
}
]
}
Claude Desktop claude_desktop_config.json 示例:
{
"mcpServers": {
// ... 其他服务器 ...
"hasura-advanced": { // Claude 内部使用的键
"command": "/path/to/your/node", // <<< 来自 'which node' 的绝对路径
"args": [
"/absolute/path/to/mcp-hasura-advanced/dist/index.js", // <<< 编译脚本的绝对路径
"https://YOUR_HASURA_ENDPOINT.com/v1/graphql", // <<< 您的端点
"YOUR_ADMIN_SECRET" // <<< 您的 secret (如果不需要 secret,请删除)
],
// 可选:
// "cwd": "/absolute/path/to/mcp-hasura-advanced"
}
}
}
- 替换占位符: 使用您的实际值更新所有占位符(
/path/to/...、https://YOUR...、YOUR_ADMIN_SECRET)。 - 重启/重新加载客户端: 保存配置并重启或重新加载您的 MCP 客户端应用程序。
- 选择服务器: 在客户端的 UI 中选择“My Advanced Hasura Server”(或您指定的名称)。
- 交互: 在客户端的聊天中使用自然语言提示来利用服务器的工具(例如,“使用 Hasura 服务器列出表”、“描述 'users' 表”、“预览 'orders' 表中的数据”、“使用 Hasura 服务器运行查询
{ products { name price } }”)。
开发
- 在开发模式下运行: 使用
pnpm run dev <ENDPOINT> [SECRET]直接使用ts-node运行服务器以加快迭代速度(无需构建步骤)。 - 测试: 通过手动运行服务器 (
pnpm start ...) 并将 JSON-RPC 请求通过管道传输到其stdin来测试单个工具。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。