mcpField
M
mcp-graphql-enhanced

mcp-graphql-enhanced

ローカル
github.com/letoribo開発ツール6今日更新

mcp-graphql-enhanced について

mcp-graphql-enhancedは、大規模なスキーマを含むGraphQL APIをAIエージェントから利用するためのMCPサーバーです。対象を絞ったイントロスペクション、実行中のエンドポイント切り替え、複数エンドポイントへの連合クエリに対応します。

主な機能

  1. 01範囲を指定したスキーマのイントロスペクション
  2. 02実行時のエンドポイントとヘッダー変更
  3. 03複数エンドポイントへの連合クエリ
  4. 04STDIOとHTTPトランスポート
  5. 05GraphiQLブラウザーインターフェース
  6. 06デフォルトでミューテーション無効

活用シーン

  1. 01大規模なGraphQLスキーマから特定の型を調査
  2. 02複数のGraphQLエンドポイントをまとめてクエリ
  3. 03GraphiQLインターフェースでクエリをテスト

MCP 対応

MCPクライアントにGraphQLクエリとスキーマのイントロスペクションツールを提供します。STDIOとHTTP/JSON-RPCトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"letoribo-mcp-graphql-enhanced": {
"command": "npx",
"args": [
"-y",
"@letoribo/mcp-graphql-enhanced"
],
"env": {
"ENDPOINT": "<ENDPOINT>",
"HEADERS": "<HEADERS>",
"ALLOW_MUTATIONS": "<ALLOW_MUTATIONS>",
"NAME": "<NAME>",
"SCHEMA": "<SCHEMA>",
"MCP_PORT": "<MCP_PORT>",
"ENABLE_HTTP": "<ENABLE_HTTP>"
}
}
}
}
起動コマンドnpx -y @letoribo/mcp-graphql-enhanced
設定が必要な環境変数
ENDPOINTGraphQL endpoint(s). Supports comma-separated list for Multi-Node Architecture.
HEADERSJSON string containing headers for requests.
ALLOW_MUTATIONSEnable mutation operations (disabled by default).
NAMEName of the MCP server.
SCHEMAPath to a local GraphQL schema file or URL.
MCP_PORTPort for the HTTP/JSON-RPC server.
ENABLE_HTTPEnable HTTP transport: auto (default), true, or false.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@letoribo/mcp-graphql-enhanced4.15.4

ツール

2

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
querystringはいGraphQL クエリまたはミューテーション文字列。例:「query { guilds { id name }」。
headersstringいいえリクエストに追加する HTTP ヘッダーを JSON 文字列化したオブジェクト。
endpointstringいいえ実行前にエンドポイントを動的に切り替えるための、任意の GraphQL HTTP/HTTPS URL。
variablesstringいいえ変数を JSON 文字列化したオブジェクト。例:'{"id": "123"}'。

詳細

mcp-graphql-enhanced

Glama mcp-graphql-enhanced MCP serverSmithery Listednpm versionMCP RegistryAgent Trust Fabric

LLM と GraphQL API 間の実環境における相互運用性の問題を解決する、GraphQL 用の拡張 MCP(Model Context Protocol)サーバーです。

mcp-graphql のドロップイン置き換えです。動的ヘッダー、堅牢な変数解析を備え、破壊的変更はありません。

🎯 mcp-graphql-enhanced とは?

mcp-graphql-enhanced は、LLM エージェントのための主力として機能するよう設計された、高性能なフェデレーション GraphQL ゲートウェイです。大規模で複雑な GraphQL エコシステムと、AI アシスタントのコンテキスト制限のある環境とのギャップを埋めます。大きなスキーマ(GitHub やエンタープライズ級の Neo4j グラフなど)の負荷でクラッシュする、標準的な「すべてか、何もなしか」のイントロスペクションツールとは異なり、このサーバーでは、エージェントがデータをどのように認識し、操作するかをきめ細かく制御できます。

💡 なぜ必要なのでしょうか?

API のイントロスペクション中に<error>Tool result is too large</error>が表示されたことがあるなら、標準的な MCP 実装の限界にすでに達しています。mcp-graphql-enhanced がプロフェッショナルな環境で実用的な選択肢となる理由は次のとおりです。

1MB の上限を回避:スコープの決定をサーバーから呼び出し側に移します。一方的に「すべてか、何もなしか」のデータを出力する代わりに、typeNames と typeDepth パラメーターを使ってきめ細かく制御できます。

的確な制御:必要なノード(Repository、User、Message など)だけを選んでイントロスペクションできるため、コンテキストウィンドウをすっきり保ち、LLM の集中を維持できます。

万能性ではなく予測可能性:このツールが約束するのは「無制限」の処理能力ではなく、予測可能性です。エンタープライズシステムでは、グラフを的確にたどり、限界を超えた場合には予測可能な形で失敗するツールが必要です。スキーマが大きくなった途端に停止する「ブラックボックス」ではありません。

デモ:GitHub API に対する実環境の診断テストで、範囲を限定したイントロスペクションと一括イントロスペクションを比較しています。 🔗 診断ケーススタディ:範囲を限定したイントロスペクションと一括イントロスペクションの比較(共有チャット)

💬 コミュニティとサポート

ぜひ会話にご参加ください。このブリッジを Neo4j、Discord のデータグラフ、または GraphQL 全般と組み合わせて使う際の質問があれば、ぜひお越しください。

フィードバックの共有、問題の報告、ブリッジの新しい「拡張」機能の提案に最適な場所です。

✨ 主な機能強化

  • ✅ エンドポイントの動的切り替え — サーバーを再起動したり、セッションコンテキストを失ったりすることなく、ツール引数からその場でターゲットを切り替えられます。
  • ✅ GraphiQL IDE を標準搭載 — /(または /graphql、/graphiql)に、すぐにテストやイントロスペクションを実行できるよう、ヘッダーを事前設定したビジュアルプレイグラウンドを用意しています。
  • ✅ デュアルトランスポート — STDIO(ローカルの CLI/クライアントツール向け)と HTTP/JSON-RPC(外部/ブラウザクライアント向け)の両方をサポートします。
  • ✅ 動的ヘッダー — Authorization、X-API-Key などをツール引数から渡せます(設定の再起動は不要です)。
  • ✅ 堅牢な変数解析 — “Query variables must be a null or an object” エラーを修正します。
  • ✅ スマートなイントロスペクション — フィルター付きリクエスト(typeNames 経由)と再帰的な深度制御(typeDepth 経由)をサポートし、LLM のコンテキストノイズを最小限に抑え、スキーマ探索を最適化します。
  • ✅ MCP との完全な互換性 — Claude Desktop、Groq Desktop、Google Antigravity、Glama、Gemini CLI、Hermes Agent、および標準的な MCP クライアントで動作します。
  • ✅ デフォルトで安全 — 明示的に有効にしない限り、ミューテーションは無効です。
  • ✅ スキーマの動的進化 — Neo4j のように GraphQL 型をオンザフライで再生成するサーバー向けに、スマートな診断とギャップ分析を提供します。
  • ✅ 詳細な可観測性 — GraphQL 拡張機能から Cypher を自動的に抽出して整形します。

🔥 エンドポイントの動的切り替え

このブリッジを使うと、LLM やクライアントは、サーバーの再起動や設定変更を必要とせず、単一のセッション内で実行時に異なる GraphQL エンドポイントを動的にターゲットにできます。

query-graphql または introspect-schema にオプションの endpoint パラメーターを渡すだけです。

  • ダウンタイムゼロ:基盤となるスキーマを即座に切り替え、内部キャッシュをクリアします。
  • コンテキストの維持:MCP 接続を開いたまま、異なる環境間でクエリを切り替えます(たとえば、Discord の取り込みノードから Neo4j グラフデータベースへの切り替え)。

🚀 フェデレーション型マルチノードアーキテクチャ(v3.9.1 以降)

このサーバーはフェデレーション型 GraphQL ゲートウェイとして動作し、独立したノードを統合システムにまとめます。

  • 後方互換性:ENDPOINT に単一の URL を指定した場合、サーバーは従来どおりに動作します。
  • フェデレーション・イントロスペクション:すべてのエンドポイントを同時にスキャンし、グローバルな機能マップを構築します。
  • スマート集約:カンマ区切りの URL を複数指定すると、サーバーはクエリをブロードキャストし、オブジェクトレベルの汎用的なディープ重複排除を用いて結果を統合します。
  • 競合処理:ノード間で同じ型名に構造上の違いがある場合、それを識別して個別に公開します。
  • 無料プランの制限を回避:「Free Tier」のクラウドデータベース(Neo4j Aura など)のユーザーに最適です。複数の無料インスタンスにデータを分散し、このブリッジを使って単一の統合グラフとしてクエリを実行することで、エンティティ数の制限を実質的に回避できます。
実証実験:

エージェントが Discord の最新データと Neo4j の履歴情報を集約する、フェデレーション型クエリ合成の実例をご覧ください。 🔗 フェデレーション分析のライブデモ(共有チャット)

💡 ユースケース:WSL と Windows(PowerShell)をつなぐ

Windows 開発者によくある課題は、Windows Subsystem for Linux(WSL)とホスト OS 間のネットワーク分離です。この機能を使うと、この 2 つの環境を「統合された神経系」としてつなげられます。

Claude Desktop の設定例:

{
  "ENDPOINT": "http://DESKTOP-NAME.local:2311/graphql,http://127.0.0.1:4000/graphql"
}
  • ハイブリッドなエコシステム:Windows ネイティブのプロセス(PowerShell)と Linux ベースの環境(WSL)にまたがるデータをシームレスにクエリし、集約できます。

  • mDNS のサポート:.local アドレスを使用すると、ブリッジが WSL 環境内からホストマシンの IP アドレスを自動的に解決します。

  • 透過的な集約:AI アシスタントは、異なるオペレーティングシステムから同時にデータを取得していることを意識せず、統合された単一のスキーマを利用できます。

🔍 高度な可観測性と Cypher

このブリッジにより、LLM がグラフデータベースとどのようにやり取りするかを詳しく把握できます。

🕸️ Cypher の自動抽出

クエリ実行プランを返す GraphQL サーバー実装(@neo4j/graphql など)では、ブリッジが自動的に次の処理を行います。

  1. レスポンス内の extensions.cypher を検出します。
  2. 内部ヘッダー(CYPHER 5 や空の PARAMS など)を取り除き、出力をサニタイズします。
  3. AI が分析できるよう、整形済みの Cypher ブロックをツールの出力に直接挿入します。

Note: この機能を使用するには、レスポンスの extensions にデバッグ情報を含めるよう GraphQL サーバーを設定する必要があります。


🎨 ビジュアルコマンドセンター(GraphiQL)

標準的な MCP サーバーとは異なり、このサーバーは人間向けのビジュアルインターフェースを提供します。ENABLE_HTTP=true で実行すると、ブラウザーで高機能な GraphiQL IDE を開けます。

  • エンドポイント: http://localhost:6274/(または /graphql、/graphiql)
  • ヘッダーの同期: 環境に設定されているヘッダー(GitHub トークンなど)は、すぐにテストできるよう GraphiQL の「Headers」タブに自動で挿入されます。

💻 HTTP/デュアルトランスポート

このサーバーはデュアルトランスポートモードで動作し、標準の STDIO 通信(ほとんどの MCP クライアントで使用)と、ポート 6274 の HTTP JSON-RPC エンドポイントの両方をサポートします。

これにより、外部システム、Web アプリケーション、直接実行する curl コマンドから、ターミナル上のリアルタイムのリクエストログ([HTTP-RPC] ログ)を確認しながらサーバーのツールにアクセスできます。

エンドポイントメソッド説明
/graphiqlGET人間向けインターフェース:ビジュアル GraphQL IDE。
/mcpPOSTツール実行用のメイン JSON-RPC 2.0 エンドポイント。
/healthGET簡易ヘルスチェック。{ status: 'ok' } を返します。
ポートの競合(EADDRINUSE)の解決とポートの自動選択

サーバーのデフォルトポートは 6274 です。EADDRINUSE: address already in use :::6274 エラーが発生した場合(ローカル開発で古いプロセスが残っているときによく発生します)、サーバーは自動的に次の利用可能なポートを探します(最大 10 回試行し、複数のサーバーは起動しません)。

これにより、デフォルトポートが使用できない場合でもサーバーを正常に起動できます。デフォルトの 6274 で curl またはクライアントツールが失敗する場合は、必ずサーバーログで最終的に割り当てられたポートを確認してください(例:[HTTP] Started server on http://localhost:6275)。

特定のポートを強制的に使用する場合(外部ファイアウォールの設定を確実にする場合など)は、引き続き MCP_PORT 環境変数を明示的に設定できます。

MCP_PORT=8080 npx @letoribo/mcp-graphql-enhanced
HTTP エンドポイントのテスト

サーバーが実行中(例:npm run dev で起動中)であれば、curl を使ってエンドポイントをテストできます。

ヘルスチェックのテスト(サーバーがデフォルトのポート、または次に利用可能なポートで待ち受けている場合)
curl http://localhost:6274/health
JSON-RPC トランスポートのテスト
curl -X POST http://localhost:6274/mcp  \
-H "Content-Type: application/json"  \
-d '{
  "jsonrpc":"2.0",
  "method":"tools/list",
  "params":{},
  "id":1
}'

curl -X POST http://localhost:6274/mcp \
-H "Content-Type: application/json" \
-d '{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "introspect-schema",
    "arguments": {}
  },
  "id": 2
}'

curl -X POST http://localhost:6274/mcp \
-H "Content-Type: application/json" \
-d '{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "introspect-schema",
    "arguments": {
      "endpoint": "https://mcp-neo4j-discord.vercel.app/api/graphiql"
    }
  },
  "id": 3
}'

curl -X POST http://localhost:6274/mcp \
-H "Content-Type: application/json" \
-d '{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "introspect-schema",
    "arguments": {
      "typeNames": ["User", "Message"]
    }
  },
  "id": 4
}'

curl -X POST http://localhost:6274/mcp \
-H "Content-Type: application/json" \
-d '{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "introspect-schema",
    "arguments": {
      "typeNames": ["Message"],
      "typeDepth": 4
    }
  },
  "id": 5
}'

curl -X POST http://localhost:6274/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "query-graphql",
      "arguments": {
        "query": "{ guildChannels(guild_id: \"1312302100125843476\") { name id topic } }"
      }
    },
    "id": 6
  }'

# Executing query with dynamic endpoint switching
curl -X POST http://localhost:6274/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "query-graphql",
      "arguments": {
        "endpoint": "https://mcp-neo4j-discord.vercel.app/api/graphiql",
        "query": "{ getGuilds { name } }"
      }
    },
    "id": 7
  }'

# Targeted introspection with depth control and dynamic endpoint switching
curl -X POST http://localhost:6274/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "introspect-schema",
      "arguments": {
        "endpoint": "https://mcp-neo4j-discord.vercel.app/api/graphiql",
        "typeNames": ["Message"],
        "typeDepth": 1
      }
    },
    "id": 8
  }'

(6274 が使用中の場合はポート 6275 を使用)

curl -X POST http://localhost:6275/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"query-graphql","arguments":{"query":"query { __typename }"}},"id":1}'
🔍 公式の MCP Inspector を使って、実行中のサーバーをテストする:
npx @modelcontextprotocol/inspector \
  -e ENDPOINT=https://api.example.com/graphql \
  npx @letoribo/mcp-graphql-enhanced
環境変数

Note: バージョン 1.0.0 以降、コマンドライン引数は環境変数に置き換えられました。

環境変数説明デフォルト
ENDPOINTGraphQL エンドポイント。マルチノードアーキテクチャ用に、カンマ区切りのリストをサポートします。https://mcp-discord.vercel.app/api/graphiql
HEADERSリクエスト用ヘッダーを含む JSON 文字列{}
ALLOW_MUTATIONSミューテーション操作を有効にします(デフォルトでは無効)false
NAMEMCP サーバーの名前mcp-graphql-enhanced
SCHEMAローカルの GraphQL スキーマファイルまたは URL のパス-
MCP_PORTHTTP/JSON-RPC サーバーのポート。6274
ENABLE_HTTPHTTP トランスポートを有効にします:auto(デフォルト)、true、または falseauto
ENABLE_HTTP に関する注記:
  • auto(デフォルト):MCP Inspector で実行している場合にのみ、HTTP を自動的に有効にします。
  • true:HTTP サーバーを常に有効にします
  • false:HTTP サーバーを完全に無効にします
🚀 例
1. クイックスタート

デフォルトのエンドポイントを使った基本的な起動方法です。

npx @letoribo/mcp-graphql-enhanced
2. 設定と認証

API キーや Bearer トークンなどのカスタムヘッダーを指定して実行します。

ENDPOINT=https://api.example.com/graphql \
HEADERS='{"Authorization":"Bearer xyz"}' \
npx @letoribo/mcp-graphql-enhanced
3. 高度な連携

ローカルの .graphql ファイルの使用 API に直接クエリを送信せずにローカルスキーマを扱う場合に使用します。

ENDPOINT=http://localhost:3000/graphql \
SCHEMA=./schema.graphql \
npx @letoribo/mcp-graphql-enhanced

ミューテーション(書き込み)の有効化 ミューテーションはセキュリティ上の理由から、デフォルトでは無効になっています。有効にするには、次のようにします。

ENDPOINT=http://localhost:3000/graphql \
ALLOW_MUTATIONS=true \
npx @letoribo/mcp-graphql-enhanced

マルチノードアーキテクチャ(フェデレーション) 複数のソースのデータを集約し、統合された単一のグラフにまとめます。

ENDPOINT=https://mcp-discord.vercel.app/api/graphiql,https://mcp-neo4j-discord.vercel.app/api/graphiql \
npx @letoribo/mcp-graphql-enhanced
4. 環境のカスタマイズ

ポート設定と開発モード設定の例です。

# Change the HTTP port
MCP_PORT=8080 npx @letoribo/mcp-graphql-enhanced

# Test targeted introspection and explore the schema visually:
ENDPOINT=https://api.github.com/graphql \
HEADERS='{"Authorization":"Bearer YOUR_GITHUB_TOKEN"}' \
ENABLE_HTTP=true \
npx @letoribo/mcp-graphql-enhanced

# Then visit http://localhost:6274/graphiql
5. mcpgql での対話型起動(推奨)

環境変数を手動で設定せずに済ませたい場合は、npm で利用できる CLI ツールを使用します。 グローバルにインストールした場合(npm install -g @letoribo/mcpgql)、次のコマンドを実行するだけです。

mcpgql

また、グローバルにインストールせずに、次のコマンドで実行することもできます。

npx @letoribo/mcpgql@latest
  • ゼロ設定で起動:自動検出とテンプレートの初期化を行います。
  • 対話型の選択:複数のエンドポイントと権限を、その場で切り替えられます。
  • ブリッジモード:localhost:6274 での Federated Bridge のセットアップを自動的に処理します。
☁️ クラウドにデプロイ

このサーバーはコンテナ化されており、長時間のプロセス実行に最適化されています。

推奨ホスティング
プラットフォーム推奨 PORT備考
Railway8080Variables で PORT を設定し、Networking の ingress port を更新します。
Render10000Environment Variables で PORT を設定します。
Azure Container Apps8080Environment Variables で PORT と ENABLE_HTTP=true を設定し、同じポートを対象とする Ingress を有効にします。
Azure CLI によるクイックデプロイ
az containerapp up \
  --name mcp-graphql-enhanced \
  --resource-group mcp-graphql-rg \
  --image ghcr.io/letoribo/mcp-graphql-enhanced:latest \
  --ingress external \
  --target-port 8080 \
  --env-vars ENABLE_HTTP=true PORT=8080

Railway にデプロイ

重要:

  • ホスティング環境では、HTTP トランスポートレイヤーを確実に有効にするため、プラットフォームの設定で環境変数 ENABLE_HTTP=true を設定する必要があります。
  • 502 Bad Gateway エラーを避けるため、ホスティングプロバイダーのパブリックネットワーク設定で、PORT 環境変数に定義されたポートへトラフィックがルーティングされるようにしてください。
⚠️ クラウドでの同時利用と動的エンドポイント

mcp-graphql-enhanced はオプションの endpoint 引数を使って接続先エンドポイントを動的に切り替えられますが、ホスティング環境や共有環境(Render、Railway、Smithery など)で実行する場合は、状態の可変性に注意してください。

  • 状態の分離: endpoint 引数を指定すると、サーバーインスタンスのアクティブなグラフコンテキストが動的に更新されます。
  • クラウドでの同時リクエストに関するベストプラクティス: 複数のクライアント、エージェントセッション、自動化されたワーカーが同じクラウドインスタンスを共有する場合は、すべてのツール呼び出し(query-graphql と introspect-schema)で、必ず endpoint を明示的に渡してください。
  • コンテキストのずれを防ぐ: 共有環境で暗黙的にキャッシュされたエンドポイントに依存すると、別のセッションからの同時呼び出しによってアクティブなアップストリーム URL が予期せず切り替わり、競合状態が発生する可能性があります。
🌐 公開ライブゲートウェイ(ホスト型 SSE/HTTP ブリッジ)

ローカルで Node.js プロセスを実行せずにブリッジをすぐに試したい場合は、ホスト型クラウドエンドポイントをご利用ください。

Cloudflare Workers Vercel Deployment

プラットフォームエッジランタイム公開 MCP エンドポイント
Cloudflare WorkersWorkers V8(グローバルエッジ)mcp-graphql-enhanced.letoribo.workers.dev/mcp
VercelNode.js サーバーレスmcp-graphql-enhanced.vercel.app/mcp

注: 公開ゲートウェイは共有環境で稼働します。リクエストを分離するため、ツールの呼び出し時には明示的に endpoint と headers を指定してください。

🖥️ Claude Desktop の設定例

シンプルさを重視する場合は npx パッケージ、再現性と分離を重視する場合は Docker イメージを使って、Claude Desktop を GraphQL API に接続できます。

✅ オプション 1:npx を使用
{
  "mcpServers": {
    "mcp-graphql-enhanced": {
      "command": "npx",
      "args": ["@letoribo/mcp-graphql-enhanced"],
      "env": {
        "ENDPOINT": "https://your-api.com/graphql"
      }
    }
  }
}
🐳 オプション 2:Docker を使用(自動プルに対応)
{
  "mcpServers": {
    "mcp-graphql-enhanced": {
      "command": "sh",
      "args": [
        "-c",
        "docker run --rm -i -e ENDPOINT=$ENDPOINT -e HEADERS=$HEADERS -e ALLOW_MUTATIONS=$ALLOW_MUTATIONS ghcr.io/letoribo/mcp-graphql-enhanced:main"
      ],
      "env": {
        "ENDPOINT": "https://your-api.com/graphql",
        "HEADERS": "{\"Authorization\": \"Bearer YOUR_TOKEN\"}",
        "ALLOW_MUTATIONS": "false"
      }
    }
  }
}
🧪 オプション 3:ローカルビルドで node を使用(開発用)

リポジトリをクローンしてプロジェクトをビルドした場合(npm run build → dist/ に出力):

{
  "mcpServers": {
    "mcp-graphql-enhanced": {
      "command": "node",
      "args": ["dist/index.js"],
      "env": {
        "ENDPOINT": "https://your-api.com/graphql",
        "ALLOW_MUTATIONS": "true"
      }
    }
  }
}

🖥️ ライブプレイグラウンドとの連携(mcp-graphiql)

Claude Desktop または Antigravity で生成された GraphQL クエリが、リアルタイムに GraphiQL プレイグラウンドへ自動入力されたら便利だと思いませんか?

@letoribo/mcp-graphql-enhanced は、mcp-graphiql への HTTP/SSE ブリッジを提供します。AI エージェントが query-graphql を呼び出すと、ペイロードがアクティブな GraphiQL タブに即座にストリーミングされます。また、エンドポイントを切り替えると introspect-schema がホットリロードを行い、Docs エクスプローラーをリアルタイムで更新します。

リソース

  • graphql-schema:サーバーは GraphQL スキーマをリソースとして公開し、クライアントがアクセスできるようにします。スキーマはローカルのスキーマファイル、URL でホストされたスキーマファイル、またはイントロスペクションクエリに基づくものです。

利用可能なツール

サーバーは、次の2つの主要なツールを提供します。

  1. introspect-schema:GraphQL スキーマまたはその一部を取得します。グラフ構造を把握するため、最初に使用してください。
  • 引数:
    • typeNames (任意、配列):イントロスペクトする特定の型のリスト(例:["User", "Message"])。グラフの関連部分のみを返すことで、不要な情報を減らします。
    • typeDepth (任意、数値):ネストされたフィールドの再帰レベルを制御します(デフォルト:2)。

      注: typeDepth は、対象を絞り込むために typeNames が指定されている場合のみ機能します。

    • endpoint (任意、文字列):イントロスペクションを実行する前に、実行時に動的に切り替える対象の GraphQL HTTP/HTTPS URL。
    • headers (任意、文字列):カスタム HTTP ヘッダーを指定する JSON 文字列(例:'{"Authorization": "Bearer token"}')。
  • 注: フィルター付きのイントロスペクションは、稼働中の GraphQL エンドポイントにクエリする場合のみ利用できます。
  1. query-graphql:エンドポイントに対して GraphQL クエリを実行します。ALLOW_MUTATIONS を true に設定しない限り、デフォルトではミューテーションは無効です。
  • 引数:
    • query (必須、文字列):GraphQL クエリまたはミューテーション文字列。
    • variables (任意、文字列):変数を指定する JSON 文字列。
    • endpoint (任意、文字列):クエリを実行する前に、実行時に動的に切り替える対象の GraphQL HTTP/HTTPS URL。
    • headers (任意、文字列):カスタム HTTP ヘッダーを指定する JSON 文字列(例:'{"Authorization": "Bearer token"}')。

💡 注:動的ヘッダーと静的 env 以前は、認証トークンを起動時に設定の「env」ブロック内へ静的にハードコードする必要がありました(例:claude_desktop_config.json 内)。

query-graphql と introspect-schema に直接 headers 引数を追加したことで、完全に動的な制御が可能になりました:

  • シークレットはターミナルで管理:プライベートなトークン(GitHub PAT や Bearer キーなど)を Claude のプロンプトや静的な設定に直接入力する必要はありません。「ENABLE_HTTP」:「true」を設定し、cURL コマンドやローカルスクリプトをターミナルで直接実行して、そこでヘッダーを渡すだけです。実行時に渡されたヘッダーは、設定ファイル内の静的なトークンより優先されます。そうしないと、チャットで生のシークレットトークンを共有したことを Claude に笑われるかもしれません!
  • 実行時の切り替え:MCP サーバーを再起動せずに、実行時にリクエストごと、またはエンドポイントごとに異なる認証ヘッダーを動的に挿入できます。

セキュリティに関する考慮事項

意図しないデータ変更を防ぐため、ミューテーションはデフォルトで無効になっています。本番環境では、HEADERS と SCHEMA の入力を必ず検証してください。可能な場合は HTTPS エンドポイントと有効期間の短いトークンを使用してください。

独自のサーバー向けにカスタマイズする

これは、完全なイントロスペクションを可能にし、ユーザーが(ミューテーションを含め)自由に操作できるようにする、非常に汎用的な実装です。より具体的な実装が必要な場合は、独自の MCP を作成し、クライアントが特定のクエリフィールドや変数のみを入力できるようにツール呼び出しを制限することをおすすめします。こちらを参考にしてください。


コントリビューターに関する注記

このプロジェクトでは Claude Code は使用されていません。カスタム MCP アーキテクチャによって Claude が共著者になった経緯に興味があれば、お気軽にお尋ねください!

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。