mcpField
N
Nhost

Nhost

本地服务
docs.nhost.io数据库9.4k今天更新

关于 Nhost

Nhost MCP 服务为 Nhost 项目提供 agentic 接口,将项目的 GraphQL API 暴露为 MCP 服务器。它面向基于 Nhost 构建应用的开发者,让用户通过 AI 助手访问自己的数据,且访问范围受权限限制。

主要功能

  1. 01get-schema 工具用于读取 GraphQL 结构
  2. 02graphql-query 工具执行只读查询
  3. 03graphql-mutation 工具执行增删改操作
  4. 04基于 OAuth2 和 PKCE 的身份验证
  5. 05依据 JWT 声明执行行级与列级权限
  6. 06可通过 --enforce-role 限制访问角色

适用场景

  1. 01让终端用户通过 AI 助手查询自己的项目数据
  2. 02为 AI 助手创建只读的专用角色
  3. 03在 Nhost Run 上部署并连接 Claude Desktop

MCP 相关

该服务是 MCP 服务器,向 MCP 客户端暴露三个工具,用于查询和修改 Nhost 项目的 GraphQL 数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nhost": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_GRAPHQL_ENDPOINT",
"-e",
"MCP_AUTH_URL",
"docker.io/nhost/mcp:0.3.0"
],
"env": {
"MCP_GRAPHQL_ENDPOINT": "<MCP_GRAPHQL_ENDPOINT>",
"MCP_AUTH_URL": "<MCP_AUTH_URL>"
}
}
}
}
启动命令docker run -i --rm -e MCP_GRAPHQL_ENDPOINT -e MCP_AUTH_URL docker.io/nhost/mcp:0.3.0
需要配置的环境变量
MCP_GRAPHQL_ENDPOINTGraphQL endpoint of the Nhost project the server exposes, e.g. http://hasura-service:8080/v1/graphql
MCP_AUTH_URL密钥Nhost Auth URL used as the OAuth2 authorization server, e.g. https://SUBDOMAIN.auth.REGION.nhost.run/v1

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocidocker.io/nhost/mcp:0.3.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Nhost MCP 服务

Nhost MCP 服务为任何 Nhost 项目添加 Agent 式接口。它将项目的 GraphQL API 公开为 MCP(模型上下文协议)服务,使 Claude、Cursor 等 AI 助手或任何兼容 MCP 的客户端都能查询和修改数据。

如果你基于 Nhost 构建,此服务可让用户通过 AI 助手与项目数据交互,无需编写自定义集成代码。将其与项目一同部署后,任何兼容 MCP 的客户端都能连接,并通过现有的 Nhost Auth 设置代表用户进行身份验证,在已定义的权限范围内处理数据。

工作原理

MCP 服务位于 AI 助手与 Nhost 项目的 GraphQL API 之间。它提供了三个可供助手调用的工具:

  • get-schema - 检查 GraphQL 架构,让助手了解数据模型。返回可用操作的摘要,或特定查询/变更的完整 SDL。
  • graphql-query - 对项目执行只读 GraphQL 查询。
  • graphql-mutation - 执行 GraphQL 变更,以创建、更新或删除数据。

启动时,服务会从 GraphQL 端点获取架构摘要,并将其纳入 MCP 指令,让 AI 助手无需额外配置即可立即了解数据模型。

使用 OAuth2 进行身份验证

MCP 服务集成了 Nhost Auth,将其用作 OAuth2 授权服务,并遵循 MCP 授权规范。这意味着任何支持 OAuth2 的 MCP 客户端都能自动通过 Nhost 项目进行身份验证。

流程如下:

  1. MCP 客户端通过从 MCP 服务获取 /.well-known/oauth-protected-resource 来发现身份验证要求。
  2. 客户端将用户重定向到 Nhost Auth 授权端点进行登录(使用 PKCE 的授权码流程)。
  3. 身份验证完成后,客户端将授权码交换为 JWT 访问令牌。
  4. 后续所有 MCP 请求都会将 JWT 作为 Bearer 令牌携带。
  5. MCP 服务通过 JWKS 验证 JWT 签名,检查颁发者和过期时间,然后在每个 GraphQL 请求中转发该令牌。
  6. GraphQL 服务会根据 JWT 的声明强制执行行级和列级权限,因此 AI 助手只能访问已通过身份验证的用户有权查看的数据。

重要!需要启用 CIMD。

强制指定角色

--enforce-role 标志会限制 MCP 服务仅接受 x-hasura-default-role 声明与指定角色匹配的令牌。默认角色不同的请求会收到 403 Forbidden 响应。

例如,设置 --enforce-role=user_mcp 意味着只接受默认角色为 user_mcp 的令牌。如果你已为该角色配置了受限权限(例如,仅允许读取某些表),AI 助手就只能使用这些权限。

这样你可以:

  • 创建一个专用角色(例如 user_mcp),并为 AI 访问设置受限权限。
  • 允许 AI 助手读取数据,但禁止修改数据。
  • 限制助手可见的表或列。
  • 针对不同用例,以不同的角色配置运行多个 MCP 实例。

配置

所有标志都可以通过环境变量设置。

标志环境变量描述
--listen-addrMCP_LISTEN_ADDRHTTP 监听地址(默认值::3000)
--debugMCP_DEBUG启用调试日志
--log-format-textMCP_LOG_FORMAT_TEXT将日志格式设为纯文本,而不是 JSON
--graphql-endpointMCP_GRAPHQL_ENDPOINTGraphQL 端点 URL(必填)
--mcp-instructionsMCP_INSTRUCTIONS服务级 MCP 指令
--query-instructionsMCP_QUERY_INSTRUCTIONSgraphql-query 工具的指令
--mutation-instructionsMCP_MUTATION_INSTRUCTIONSgraphql-mutation 工具的指令
--schema-instructionsMCP_SCHEMA_INSTRUCTIONSget-schema 工具的指令
--auth-urlMCP_AUTH_URLOAuth2 授权服务 URL(必填)
--realmMCP_REALMWWW-Authenticate 标头的 Realm
--enforce-roleMCP_ENFORCE_ROLE强制要求 JWT 的默认 Hasura 角色与此值匹配
--browser-htmlMCP_BROWSER_HTML浏览器访问服务 URL 时提供的 HTML 内容

部署到 Nhost

要部署到 Nhost Run,可以使用下面的一键安装链接:

https://app.nhost.io/run-one-click-install?config=eyJuYW1lIjoibWNwIiwiaW1hZ2UiOnsiaW1hZ2UiOiJuaG9zdC9tY3A6MC4xLjAiLCJwdWxsQ3JlZGVudGlhbHMiOm51bGx9LCJjb21tYW5kIjpbIm1jcCJdLCJyZXNvdXJjZXMiOnsiY29tcHV0ZSI6eyJjcHUiOjEyNSwibWVtb3J5IjoyNTZ9LCJzdG9yYWdlIjpbXSwicmVwbGljYXMiOjEsImF1dG9zY2FsZXIiOm51bGx9LCJlbnZpcm9ubWVudCI6W3sibmFtZSI6Ik1DUF9BVVRIX1VSTCIsInZhbHVlIjoiaHR0cHM6Ly9TVUJET01BSU4uYXV0aC5SRUdJT04ubmhvc3QucnVuL3YxIn0seyJuYW1lIjoiTUNQX1JFQUxNIiwidmFsdWUiOiJodHRwczovL21jcC5hY21lLmNvbSJ9LHsibmFtZSI6Ik1DUF9HUkFQSFFMX0VORFBPSU5UIiwidmFsdWUiOiJodHRwOi8vaGFzdXJhLXNlcnZpY2U6ODA4MC92MS9ncmFwaHFsIn0seyJuYW1lIjoiTUNQX0lOU1RSVUNUSU9OUyIsInZhbHVlIjoiVGhlc2UgYXJlIHNvbWUgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyIE1DUCBzZXJ2ZXIuIn0seyJuYW1lIjoiTUNQX0VORk9SQ0VfUk9MRSIsInZhbHVlIjoidXNlcl9tY3AifV0sInBvcnRzIjpbeyJwb3J0IjozMDAwLCJ0eXBlIjoiaHR0cCIsInB1Ymxpc2giOnRydWV9XSwiaGVhbHRoQ2hlY2siOm51bGx9

并根据需要进行编辑。请确保在 MCP_AUTH_URL 中设置正确的子域名和区域(如果使用自定义域名,则设置为自定义域名),将 MCP_REALM 设为 MCP 服务将使用的 URL,根据需要更改 MCP_INSTRUCTIONS,并更改或移除 MCP_ENFORCE_ROLE。

注意:请查看 releases 页面,并确保使用最新版本的服务。

或者,将 run-mcp.toml 添加到项目目录:

name = 'mcp'
command = ['mcp']

[image]
image = 'nhost/mcp:0.1.0'

[[environment]]
name = 'MCP_AUTH_URL'
value = 'https://local.auth.local.nhost.run/v1'

[[environment]]
name = 'MCP_REALM'
value = 'https://myapp.example.com'

[[environment]]
name = 'MCP_GRAPHQL_ENDPOINT'
value = 'http://hasura-service:8080/v1/graphql'

[[environment]]
name = 'MCP_INSTRUCTIONS'
value = 'This MCP server interacts with my application'

[[environment]]
name = 'MCP_ENFORCE_ROLE'
value = 'user_mcp'

[[ports]]
port = 3000
type = 'http'
publish = true

[resources]
replicas = 1

[resources.compute]
cpu = 125
memory = 256

然后按常规方式部署项目。MCP 服务将在已发布的端口上提供服务,任何兼容 MCP 的客户端都可以连接。

你也可以在本地尝试:

nhost up --run-service run-mcp.toml

连接 MCP 客户端

将 MCP 客户端指向服务 URL。例如,在 Claude Desktop 的配置中:

  1. 前往“自定义” -> “连接器”
  2. 点击 +,输入任意名称以及 MCP 服务所在的 URL,例如 https://mcp.acme.com
  3. 点击“添加”
  4. 连接后,你将被重定向到 Oauth2 的同意页面,以授权 Oauth2 客户端。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。