Skip to main content
Glama
WYRE-AI
by WYRE-AI

nutanix-mcp

マルチテナント対応のStreamable HTTPブリッジ — nutanix/ntnx-api-mcp-server(Nutanix公式のPrism Central v4 API MCPサーバー)上に構築。WYRE conduitゲートウェイがテナントごとのNutanix認証情報をHTTPヘッダーとして転送できるようにします。

アップストリーム固定: Nutanixのサーバーはテクニカルプレビューであり、ここではタグ v0.8(Apache-2.0)に固定されています。アップストリーム固定の更新を参照。

なぜ

アップストリームサーバーはstdioのみ(nutanix-mcp serve-stdio が唯一のサーバーモード)であり、Prism Centralの認証情報をプロセス起動時に環境変数から読み取ります — プロセスごとにシングルテナントです。当ゲートウェイはマルチテナントです。各リクエストは呼び出し元の組織の認証情報をHTTPヘッダーとして運び、ベンダーコンテナはそれらのヘッダーをアップストリームが理解できるものに変換する必要があります。

アップストリームにはプロキシ先のHTTPモードがないため、このブリッジは各テナント子プロセスに対してstdio経由のMCPクライアントセッションを保持し、それをStreamable HTTP経由で再提供します。

  1. :8080 でリッスンし、POST /mcp と GET /health を処理します。

  2. すべての /mcp リクエストを X-Nutanix-Pc-* 認証情報ヘッダーで401ゲートします(以下参照)。認証情報がない、または無効な場合、環境認証情報にフォールスルーすることはありません — それはテナント間の漏洩になります。

  3. 認証情報タプルごとに(ハッシュでキー付け)1つの nutanix-mcp serve-stdio 子プロセスを遅延生成し、テナントの PC_* 環境変数を設定し、stdio経由でMCPクライアントを接続します。

  4. v2 SDKの createMcpHandler(factory, { legacy: 'stateless' }) を使用して、/mcp で両方のプロトコル時代を提供します — 2025年代の initialize ハンドシェイククライアント(現在のconduitゲートウェイ)と、最新の2026-07-28エンベロープクライアント。tools/list と tools/call はテナントの子セッションに委任します。

  5. アイドル状態の子プロセスを60分後に削除します(IDLE_EVICT_MS)。

ツール名はそのまま通過します。アップストリームの24のツール — 20の {namespace}_execute ツール(aiops, clustermgmt, datapolicies, dataprotection, files, iam, licensing, lifecycle, microseg, monitoring, multidomain, networking, objects, opsmgmt, prism, security, storage, tenancy, vmm, volumes)に加えて、4つのディスカバリツール(listOperations, getOperationSchema, getCodeSample, getOperationPermissions)。

Related MCP server: nutanix-mcp

v1では読み取り専用 — 意図的

すべての子プロセスは READ_ONLY_MODE=true で生成されます(アップストリームのデフォルトでもあります)。アップストリームは、Prism Centralに到達する前にすべての非GET操作を拒否します。このブリッジのv1は、意図的なフリート決定として読み取り専用で出荷されます。書き込みサポートは、src/credentials.ts の credentialsToChildEnv() に対するレビュー済みのバージョン管理された変更となります — 設定の切り替えではありません。

認証情報契約

ゲートウェイはすべての /mcp リクエストでこれらのヘッダーを転送します。ブリッジはそれらをアップストリーム子プロセスの環境にマッピングします。conduitのベンダー設定はこの表と完全に一致している必要があります。

ヘッダー

子環境変数

必須

備考

X-Nutanix-Pc-Host

PC_HOST

はい

Prism CentralのIPまたはFQDN

X-Nutanix-Pc-Port

PC_PORT

いいえ

アップストリームのデフォルト 9440。アップストリームの癖: 9440以外のポートは https:// ではなく http:// を使用します

X-Nutanix-Pc-Username

PC_USERNAME

パスワードと一緒

Basic認証ペア

X-Nutanix-Pc-Password

PC_PASSWORD

ユーザー名と一緒

Basic認証ペア

X-Nutanix-Pc-Api-Key

PC_API_KEY

代替

PCに X-ntnx-api-key リクエストヘッダーとして送信されます。両方が設定されている場合、アップストリームはBasic認証よりもこれを優先します

X-Nutanix-Pc-Insecure

PC_INSECURE

いいえ

"true"/"false" — TLS検証をスキップ(デフォルト false)

有効性ルール: pcHost が存在し、かつ(apiKey が存在するか、username+password が存在する)。それ以外 → HTTP 401 とJSON-RPCエラーボディ。

READ_ONLY_MODE=true はすべての子プロセスに追加で強制されます(上記参照)。

API仕様アーティファクト(ビルド時に組み込み)

アップストリームは、ライブPCからではなく、YAML API仕様アーティファクトからツールサーフェスを構築します。nutanix-mcp init がそれらをダウンロードします — そしてPC認証情報なしで、公開 developers.nutanix.com 名前空間APIに対して latest_release モードで実行されます(PCアクセス不要。経験的に確認済み: 20の名前空間)。Dockerビルドは init を1回実行し、アーティファクトを /opt/nutanix-mcp/artifacts にイメージに組み込み、すべてのテナント子プロセスで読み取り専用で共有します。結果:

  • tools/list とディスカバリツールは到達可能なPCがなくても動作します — {namespace}_execute 呼び出しのみがPrism Centralにアクセスします。

  • アーティファクトのバージョンは、イメージビルド時点の最新の公開リリースであり、テナントPCの正確なバージョンではありません(アップストリームの pc_compatible モードでは、生成時にライブPCアクセスが必要になります)。読み取り専用のv1サーフェスでは、これは適切なトレードオフです: 共有アーティファクト、高速なテナント生成。

設定

環境変数

デフォルト

備考

PORT

8080

公開リスンポート。

NUTANIX_MCP_DIR

/opt/nutanix-mcp

アップストリームチェックアウト(venv + アーティファクト)。

NUTANIX_MCP_BIN

$NUTANIX_MCP_DIR/.venv/bin/nutanix-mcp

ブリッジが生成するアップストリームコンソールスクリプト。

ARTIFACTS_DIR

$NUTANIX_MCP_DIR/artifacts

組み込みのYAML API仕様アーティファクト。

CHILD_LOG_DIR

/tmp/nutanix-mcp-logs

アップストリームのプロセスごとのログファイル用書き込み可能ディレクトリ。

IDLE_EVICT_MS

3600000

アイドルテナントタイムアウト(60分)。

SPAWN_TIMEOUT_MS

60000

子プロセスがMCPハンドシェイクに応答する最大待機時間。

ローカル開発

# 1. Get the upstream at the pinned tag with a venv + artifacts
git clone --branch v0.8 --depth 1 https://github.com/nutanix/ntnx-api-mcp-server ../ntnx-api-mcp-server
cd ../ntnx-api-mcp-server
uv venv .venv && uv pip install .
ARTIFACTS_DIR=$PWD/artifacts .venv/bin/nutanix-mcp init   # no PC creds needed
cd -

# 2. Build and run the bridge against it
npm ci && npm run build && npm test
NUTANIX_MCP_DIR=../ntnx-api-mcp-server node dist/index.js

# 3. Smoke it
curl -s localhost:8080/health
curl -s localhost:8080/mcp -X POST \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -H 'X-Nutanix-Pc-Host: pc.example.com' -H 'X-Nutanix-Pc-Api-Key: fake' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"dev","version":"0"}}}'

またはイメージをビルド(すべてを組み込み、stdioスモークテストも含まれ、serve-stdio が tools/list に応答できない場合はビルドが失敗します):

docker build --platform linux/amd64 -t ghcr.io/wyre-technology/nutanix-mcp:dev .
docker run --rm -p 8080:8080 ghcr.io/wyre-technology/nutanix-mcp:dev

アップストリーム固定の更新

アップストリームは Dockerfile 内のレビュー済みタグ v0.8(NUTANIX_MCP_REF)に固定されています — main は使用しません(NSA MCPガイダンス / フリートセキュリティベースライン)。更新するには:

  1. 現在の固定と新しいタグの間のアップストリームの差分をレビューします(ツールサーフェス、認証情報処理、READ_ONLY_MODE のセマンティクス)。

  2. Dockerfile の NUTANIX_MCP_REF とこのREADMEのタグを変更します。

  3. ローカルで docker build を実行します — ビルド時のスモークテストでvenvエントリポイントが実行され、stdioツールサーフェスがまだ応答することを確認します(名前空間が変更された場合は期待されるツール数を更新します)。

  4. feat:/fix: PRとしてランディングし、semantic-releaseがバージョンをカットするようにします。

ライセンス

Apache-2.0。バンドルされている ntnx-api-mcp-server はNutanixによるApache-2.0です。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Multitenant Streamable HTTP wrapper for SentinelOne's purple-mcp. Enables MSPs to expose SentinelOne threat detection and response capabilities to AI assistants across multiple tenants.
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Nutanix Prism Central v4 REST API, enabling AI agents to list and inspect VMs, control VM power state, list clusters, read alerts, and list subnets.
    8
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Bridges stdio Model Context Protocol (MCP) servers to MCP Streamable HTTP behind a single gateway, enabling multi-tenant, multi-user deployment with per-tenant environment variables via HTTP headers.
    MIT