nutanix-mcp
nutanix-mcp
Мультитенантный мост Streamable HTTP поверх nutanix/ntnx-api-mcp-server — официального MCP-сервера Nutanix для API Prism Central v4 — создан для того, чтобы шлюз WYRE conduit мог передавать учетные данные Nutanix для каждого арендатора в виде HTTP-заголовков.
Фиксация исходной версии: Сервер Nutanix является технической предварительной версией, зафиксированной здесь на теге
v0.8(Apache-2.0). См. Обновление фиксации исходной версии.
Зачем
Вышестоящий сервер работает только через stdio (nutanix-mcp serve-stdio — единственный режим обслуживания) и считывает учетные данные Prism Central из переменных окружения при запуске процесса — один арендатор на процесс. Наш шлюз является мультитенантным: каждый запрос содержит учетные данные вызывающей организации в виде HTTP-заголовков, и контейнер поставщика должен преобразовать эти заголовки в формат, понятный вышестоящему серверу.
Поскольку у вышестоящего сервера нет HTTP-режима для проксирования, этот мост удерживает сессию MCP-клиента через stdio для каждого дочернего процесса арендатора и повторно обслуживает её через Streamable HTTP:
Слушает порт
:8080сPOST /mcpиGET /health.Каждый запрос
/mcpпроверяется на наличие заголовков учетных данныхX-Nutanix-Pc-*и при их отсутствии возвращает 401. Отсутствующие/недействительные учетные данные никогда не передаются в окружение — это привело бы к утечке между арендаторами.Лениво порождает один дочерний процесс
nutanix-mcp serve-stdioна каждый набор учетных данных (ключом является хеш), устанавливая соответствующие переменные окруженияPC_*, и подключает к нему MCP-клиента через stdio.Обслуживает обе эры протокола на
/mcpчерезcreateMcpHandler(factory, { legacy: 'stateless' })из SDK v2 — клиенты с рукопожатиемinitialize2025-го года (текущий шлюз conduit) и современные клиенты с конвертом 2026-07-28.tools/listиtools/callделегируются дочерней сессии арендатора.Удаляет бездействующие дочерние процессы через 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).
Только чтение в v1 — осознанное решение
Каждый дочерний процесс запускается с READ_ONLY_MODE=true (также значение по умолчанию вышестоящего сервера): вышестоящий сервер отклоняет все операции, не являющиеся GET, до того, как они достигнут Prism Central. Версия v1 этого моста поставляется в режиме только чтения как осознанное решение для всего парка. Поддержка записи будет представлять собой проверенное, версионированное изменение credentialsToChildEnv() в src/credentials.ts, а не переключение конфигурации.
Контракт учетных данных
Шлюз передает следующие заголовки в каждом запросе /mcp; мост отображает их в окружение дочернего процесса вышестоящего сервера. Конфигурация поставщика conduit должна точно соответствовать этой таблице.
Заголовок | Переменная окружения дочернего процесса | Обязательно | Примечания |
|
| да | IP-адрес или FQDN Prism Central |
|
| нет | По умолчанию вышестоящего сервера |
|
| с паролем | Пара для базовой аутентификации |
|
| с именем пользователя | Пара для базовой аутентификации |
|
| альтернатива | Отправляется в PC как заголовок запроса |
|
| нет |
|
Правило валидности: присутствует pcHost И (присутствует apiKey ИЛИ присутствуют username+password). В противном случае → HTTP 401 с телом ошибки JSON-RPC.
READ_ONLY_MODE=true дополнительно принудительно устанавливается для каждого дочернего процесса (см. выше).
Артефакты спецификации API (встроены во время сборки)
Вышестоящий сервер строит свою поверхность инструментов на основе YAML-артефактов спецификации API, а не на живом PC. nutanix-mcp init загружает их — и без учетных данных PC он работает в режиме latest_release через публичный API пространства имен developers.nutanix.com (доступ к PC не требуется; подтверждено эмпирически: 20 пространств имен). Сборка Docker запускает init один раз и встраивает артефакты в образ по пути /opt/nutanix-mcp/artifacts, доступный только для чтения всем дочерним процессам арендаторов. Последствия:
tools/listи инструменты обнаружения работают без доступного PC — только вызовы{namespace}_executeобращаются к Prism Central.Версии артефактов — это последняя публичная версия на момент сборки образа, а не точные версии PC арендатора (режим
pc_compatibleвышестоящего сервера потребовал бы доступа к живому PC при порождении). Для поверхности только чтения v1 это правильный компромисс: общие артефакты, быстрое порождение арендаторов.
Конфигурация
Переменная окружения | По умолчанию | Примечания |
|
| Публичный порт прослушивания. |
|
| Каталог вышестоящего сервера (venv + артефакты). |
|
| Консольный скрипт вышестоящего сервера, который порождает мост. |
|
| Встроенные YAML-артефакты спецификации API. |
|
| Каталог для записи файлов журналов вышестоящего сервера для каждого процесса. |
|
| Таймаут бездействия арендатора (60 мин). |
|
| Максимальное время ожидания ответа дочернего процесса на рукопожатие 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Обновление фиксации исходной версии
Исходная версия зафиксирована на проверенном теге v0.8 в Dockerfile (NUTANIX_MCP_REF) — никогда не main (рекомендации NSA по MCP / базовый уровень безопасности парка). Чтобы обновить:
Проверьте различия исходной версии между текущей фиксацией и новым тегом (поверхность инструментов, обработка учетных данных, семантика
READ_ONLY_MODE).Измените
NUTANIX_MCP_REFвDockerfileи тег в этом README.Выполните
docker buildлокально — тесты на этапе сборки проверяют, что точка входа venv запускается и поверхность инструментов stdio всё ещё отвечает (обновите ожидаемое количество инструментов, если изменились пространства имен).Оформите как PR с типом
feat:/fix:, чтобы semantic-release создал версию.
Лицензия
Apache-2.0. Включенный ntnx-api-mcp-server распространяется под лицензией Apache-2.0 от Nutanix.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Multi-tenant FastMCP server for Charles Schwab brokerage data, monetized via DPYC Tollbooth
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
A paid remote MCP for Skybridge, built to return verdicts, receipts, usage logs, and audit-ready JSO
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wyre-technology/nutanix-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server