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

nutanix-mcp

多租户流式HTTP桥接,基于 nutanix/ntnx-api-mcp-server——Nutanix 官方的 Prism Central v4 API MCP 服务器——构建,使得 WYRE 通道网关能够将每个租户的 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. 按凭证元组(通过哈希键控)延迟生成一个 nutanix-mcp serve-stdio 子进程,设置租户的 PC_* 环境变量,并通过 stdio 连接一个 MCP 客户端到该子进程。

  4. 通过 v2 SDK 的 createMcpHandler(factory, { legacy: 'stateless' }) 在 /mcp 上服务于两个协议时代——2025 年的 initialize 握手客户端(今天的通道网关)和现代 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 生成(也是上游默认设置):上游在所有非 GET 操作到达 Prism Central 之前就拒绝它们。此桥接器的 v1 作为有意的车队决策提供只读功能。写入支持将是经过审查、版本化的对 src/credentials.ts 中 credentialsToChildEnv() 的更改——而不是一个配置开关。

凭证契约

网关在每个 /mcp 请求中转发这些头;桥接器将它们映射到上游子进程的环境变量中。通道的供应商配置必须与此表完全匹配。

头字段

子进程环境变量

必需

说明

X-Nutanix-Pc-Host

PC_HOST

是

Prism Central IP 或 FQDN

X-Nutanix-Pc-Port

PC_PORT

否

上游默认 9440。上游异常:任何非 9440 的端口都会使其使用 http:// 而非 https://

X-Nutanix-Pc-Username

PC_USERNAME

与密码一起

基本认证对

X-Nutanix-Pc-Password

PC_PASSWORD

与用户名一起

基本认证对

X-Nutanix-Pc-Api-Key

PC_API_KEY

替代方案

作为 X-ntnx-api-key 请求头发送到 PC;当两者都设置时,上游优先使用它而不是基本认证

X-Nutanix-Pc-Insecure

PC_INSECURE

否

"true"/"false"——跳过 TLS 验证(默认为 false)

有效性规则: 必须提供 pcHost 并且(提供 apiKey 或提供 username+password)。否则 → HTTP 401 并附带 JSON-RPC 错误体。

READ_ONLY_MODE=true 额外强制应用于每个子进程(见上文)。

API 规范工件(构建时烘焙)

上游从 YAML API 规范工件中构建其工具表面,而非从实时 PC 中。nutanix-mcp init 下载它们——并且无需 PC 凭证,它就会以 latest_release 模式针对公共的 developers.nutanix.com 命名空间 API 运行(无需 PC 访问;经验验证:20 个命名空间)。Docker 构建运行一次 init 并将工件烘焙到镜像中的 /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 提交,以便语义发布切出版本。

许可证

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