Nhost について
Nhost MCP サービスは、Nhost プロジェクトの GraphQL API を MCP サーバーとして公開し、エージェント的なインターフェースを追加します。Nhost 上でアプリを構築する開発者向けで、既存の権限の範囲内でユーザーが AI アシスタントから自分のデータを扱えます。
主な機能
- 01GraphQL スキーマを取得する get-schema ツール
- 02読み取り専用クエリを実行する graphql-query ツール
- 03作成・更新・削除を行う graphql-mutation ツール
- 04PKCE を用いた OAuth2 認証
- 05JWT クレームに基づく行レベル・列レベルの権限
- 06enforce-role 設定によるロール制限
活用シーン
- 01エンドユーザーが AI アシスタントから自分のプロジェクトデータを照会
- 02AI 向けに読み取り専用の専用ロールを作成
- 03Nhost Run へのデプロイと Claude Desktop からの接続
MCP 対応
本サービスは MCP サーバーであり、MCP クライアントに対して Nhost プロジェクトの GraphQL データを照会・変更するための 3 つのツールを公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e MCP_GRAPHQL_ENDPOINT -e MCP_AUTH_URL docker.io/nhost/mcp:0.3.0MCP_GRAPHQL_ENDPOINTGraphQL endpoint of the Nhost project the server exposes, e.g. http://hasura-service:8080/v1/graphqlMCP_AUTH_URLシークレットNhost Auth URL used as the OAuth2 authorization server, e.g. https://SUBDOMAIN.auth.REGION.nhost.run/v1ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Nhost MCP サービス
Nhost MCP サービスは、あらゆる Nhost プロジェクトにエージェント型インターフェースを追加します。プロジェクトの GraphQL API を MCP(Model Context Protocol) サーバーとして公開し、Claude、Cursor などの AI アシスタントや、MCP に対応したクライアントがデータを照会・変更できるようにします。
Nhost で開発している場合、このサービスを使うと、カスタムの統合コードを用意することなく、ユーザーが AI アシスタントを通じてプロジェクトのデータを操作できます。プロジェクトと並行してデプロイすれば、MCP に対応したクライアントが接続し、既存の Nhost Auth 設定を使ってユーザーに代わって認証を行い、定義済みの権限の範囲内でデータを扱えます。
仕組み
MCP サーバーは、AI アシスタントと Nhost プロジェクトの GraphQL API の間に位置します。アシスタントから呼び出せる次の 3 つのツールを提供します。
get-schema- GraphQL スキーマをイントロスペクションし、アシスタントがデータモデルを理解できるようにします。利用可能な操作の概要、または指定したクエリ/ミューテーションの完全な SDL を返します。graphql-query- プロジェクトに対して読み取り専用の GraphQL クエリを実行します。graphql-mutation- データの作成、更新、削除を行う GraphQL ミューテーションを実行します。
起動時にサーバーは GraphQL エンドポイントからスキーマの概要を取得し、MCP の指示に含めます。これにより、追加の設定なしで AI アシスタントはデータモデルをすぐに把握できます。
OAuth2 による認証
MCP サービスは Nhost Auth と連携し、MCP 認証仕様に準拠した OAuth2 認可サーバーとして機能します。これにより、OAuth2 に対応した MCP クライアントは、Nhost プロジェクトで自動的に認証できます。
フローは次のとおりです。
- MCP クライアントは、MCP サーバーから
/.well-known/oauth-protected-resourceを取得して、認証要件を検出します。 - クライアントはユーザーを Nhost Auth の認可エンドポイントにリダイレクトし、ログインさせます(PKCE を使用した認可コードフロー)。
- 認証後、クライアントは認可コードを JWT アクセストークンと交換します。
- 以降のすべての MCP リクエストには、Bearer トークンとして JWT が含まれます。
- MCP サーバーは JWKS を使って JWT の署名を検証し、発行者と有効期限を確認したうえで、すべての GraphQL リクエストにトークンを転送します。
- GraphQL サービスは JWT のクレームに基づいて行レベルおよび列レベルの権限を適用するため、AI アシスタントは認証済みユーザーに許可されたデータのみアクセスできます。
重要!CIMD を有効にする必要があります。
特定のロールの強制
--enforce-role フラグを指定すると、x-hasura-default-role クレームが指定したロールと一致するトークンのみを MCP サーバーが受け付けるように制限できます。デフォルトロールが異なるリクエストには、403 Forbidden レスポンスが返されます。
たとえば、--enforce-role=user_mcp を設定すると、デフォルトロールが user_mcp のトークンのみが受け付けられます。そのロールに制限付きの権限(たとえば、特定のテーブルに対する読み取り専用権限)を設定している場合、AI アシスタントに適用される権限もそれに制限されます。
これにより、次のことができます。
- AI アクセス用に、制限付き権限を持つ専用ロール(例:
user_mcp)を作成できます。 - AI アシスタントにはデータの読み取りを許可し、変更は許可しないようにできます。
- アシスタントに表示するテーブルや列を制限できます。
- 用途ごとに異なるロール設定で、複数の MCP インスタンスを実行できます。
設定
すべてのフラグは環境変数で設定できます。
| フラグ | 環境変数 | 説明 |
|---|---|---|
--listen-addr | MCP_LISTEN_ADDR | HTTP リッスンアドレス(デフォルト::3000) |
--debug | MCP_DEBUG | デバッグログを有効にします |
--log-format-text | MCP_LOG_FORMAT_TEXT | ログを JSON ではなくプレーンテキスト形式にします |
--graphql-endpoint | MCP_GRAPHQL_ENDPOINT | GraphQL エンドポイント URL(必須) |
--mcp-instructions | MCP_INSTRUCTIONS | サーバーレベルの MCP 指示 |
--query-instructions | MCP_QUERY_INSTRUCTIONS | graphql-query ツールの指示 |
--mutation-instructions | MCP_MUTATION_INSTRUCTIONS | graphql-mutation ツールの指示 |
--schema-instructions | MCP_SCHEMA_INSTRUCTIONS | get-schema ツールの指示 |
--auth-url | MCP_AUTH_URL | OAuth2 認可サーバー URL(必須) |
--realm | MCP_REALM | WWW-Authenticate ヘッダーのレルム |
--enforce-role | MCP_ENFORCE_ROLE | JWT のデフォルト Hasura ロールがこの値と一致するよう強制します |
--browser-html | MCP_BROWSER_HTML | ブラウザーがサービス URL にアクセスしたときに配信する HTML コンテンツ |
Nhost へのデプロイ
Nhost Run にデプロイするには、以下のワンクリックインストールリンクを使用できます。
必要に応じて編集してください。MCP_AUTH_URL に正しいサブドメインとリージョンを設定し(独自ドメインを使用している場合はそのドメインを設定)、MCP_REALM に MCP サービスで使用する URL を設定してください。また、必要に応じて MCP_INSTRUCTIONS を変更し、MCP_ENFORCE_ROLE を変更または削除してください。
注:サービスの最新バージョンを使用していることを確認するため、リリースページを確認してください。
または、プロジェクトディレクトリに 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 の設定では次のようにします。
- 「カスタマイズ」→「コネクタ」に移動します
+をクリックし、任意の名前と、MCP サーバーが配置されている URL(例:https://mcp.acme.com)を入力します- 「追加」をクリックします
- 接続すると、OAuth2 クライアントを認可するため、OAuth2 の同意ページにリダイレクトされます
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。