Skip to main content
Glama

vcf-ops-mcp

MCP-сервер, который является обёрткой над REST API suite-api VCF Operations (vROps) и предоставляет ресурсы, метрики и оповещения в виде инструментов MCP, чтобы LLM-клиент мог напрямую запрашивать наблюдаемую инфраструктуру.

Настройка

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env   # then fill in your VCF Operations details

Требуемая конфигурация (через .env или фактические переменные окружения):

Переменная

Описание

VCFOPS_BASE_URL

Базовый URL экземпляра VCF Operations, например https://ops.example.com

VCFOPS_USERNAME

Пользователь для аутентификации

VCFOPS_PASSWORD

Пароль этого пользователя

VCFOPS_AUTH_SOURCE

Имя источника аутентификации (по умолчанию LOCAL)

VCFOPS_VERIFY_SSL

Установите false, чтобы пропустить проверку TLS для самоподписанных лабораторных экземпляров

VCFOPS_TIMEOUT

Тайм-аут запроса в секундах (по умолчанию 30)

Сервер при первом использовании получает токен из /suite-api/api/auth/token/acquire, кэширует его и прозрачно запрашивает снова, когда срок его действия близок к истечению либо он отклонён с кодом 401.

Конфигурация транспорта/аутентификации (также через .env или фактические переменные окружения):

Переменная

Описание

VCFOPS_MCP_TRANSPORT

streamable-http (по умолчанию) или stdio

VCFOPS_MCP_HOST

Хост для привязки в режиме streamable-http (по умолчанию 127.0.0.1)

VCFOPS_MCP_PORT

Порт для привязки в режиме streamable-http (по умолчанию 8000)

VCFOPS_MCP_BEARER_TOKEN

Требуется для streamable-http. Клиенты должны отправлять Authorization: Bearer <value>

VCFOPS_MCP_ALLOWED_HOSTS

Разделённый запятыми список разрешённых заголовков Host для защиты от DNS-rebinding (см. ниже)

Related MCP server: VMware-Monitor

Запуск

По умолчанию сервер работает как автономный удалённый сервер через streamable-http, привязанный к 127.0.0.1:8000, и требует bearer-токен при каждом запросе:

export VCFOPS_MCP_BEARER_TOKEN="$(openssl rand -hex 32)"
vcf-ops-mcp
# or
python -m vcf_ops_mcp

GET /healthz не требует аутентификации (проверка живости балансировщиком/оркестратором); всё остальное требует bearer-токен. 127.0.0.1 слушает только локально — чтобы достучаться до него с другого хоста, укажите VCFOPS_MCP_HOST=0.0.0.0 (или запустите за обратным прокси) и убедитесь, что между сетью и учётными данными, способными запрашивать всё ваше наблюдаемое окружение, находится только bearer-токен. Относитесь к нему как к любому другому секрету и предпочитайте терминирование TLS (например, на реверс-прокси) перед ним, а не передачу открытым текстом по HTTP через недоверенную сеть.

Когда VCFOPS_MCP_HOST не равен 127.0.0.1/localhost, собственная защита FastMCP от DNS-rebinding (проверка заголовка Host входящего запроса по списку разрешений) по умолчанию не имеет в этом списке ни одной записи, поскольку он автоматически настраивается только для loopback-хоста. Если параметр не задан, проверка заголовка Host не выполняется, и ваш единственный барьер — bearer-токен. В доверенной сети это нормально, но на общей или недоверенной сети задайте VCFOPS_MCP_ALLOWED_HOSTS: перечислите через запятую имена хостов/IP:port, через которые клиенты реально подключаются, — для эшелонированной защиты.

Укажите MCP-клиенту на этот сервер как на streamable-http-сервер, например в Claude Code:

claude mcp add --transport http vcf-operations http://<host>:8000/mcp \
  --header "Authorization: Bearer <your-token>"

Запуск через stdio

Для локального использования, когда MCP-клиент сам запускает сервер как подпроцесс (без необходимости открывать доступ из сети), установите VCFOPS_MCP_TRANSPORT=stdio — в этом режиме bearer-токен не требуется. Пример конфигурации Claude Desktop:

{
  "mcpServers": {
    "vcf-operations": {
      "command": "/absolute/path/to/.venv/bin/vcf-ops-mcp",
      "env": {
        "VCFOPS_MCP_TRANSPORT": "stdio",
        "VCFOPS_BASE_URL": "https://ops.example.com",
        "VCFOPS_USERNAME": "admin",
        "VCFOPS_PASSWORD": "changeme"
      }
    }
  }
}

Инструменты

Ресурсы

  • list_resources — поиск наблюдаемых объектов по имени/типу адаптера/типу ресурса/состоянию

  • get_resource — полное описание одного ресурса

  • get_resource_properties — собранные свойства конфигурации

  • get_resource_relationships — родительские/дочерние объекты

Метрики

  • list_metric_keys — доступные statKeys для пары адаптер/тип ресурса

  • get_latest_stats — последние значения метрик для ресурса

  • query_stats — исторические временные ряды по ресурсам, с агрегацией (rollup)/интервалом

Оповещения

  • list_alerts — активные/все оповещения, возможно ограниченные ресурсом или критичностью

  • get_alert — полное описание одного оповещения

  • list_alert_definitions — определения правил, стоящих за оповещениями

Тестирование

pip install -e ".[dev]"
pytest

Тесты имитируют HTTP API VCF Operations с помощью respx — живой экземпляр не требуется.

Примечания

  • Зафиксировано ограничение mcp<2.0.0: в ветке 2.x MCP Python SDK класс FastMCP переименован в MCPServer и перенесён в mcp.server.mcpserver. Этот проект ориентируется на хорошо зарекомендовавший себя API версии 1.x — mcp.server.fastmcp.FastMCP.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    AI-powered VMware vCenter/ESXi monitoring and operations. 20 MCP tools for inventory queries, health monitoring, VM lifecycle management, fast provisioning (Linked Clone, OVA, template deploy), snapshot management, and datastore browsing. Supports vSphere 6.5–8.0. Works with local models via Ollama/LM Studio.
    44
    270 PyPI
    74
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Read-only VMware vCenter/ESXi monitoring. 8 MCP tools for VM inventory, host status, datastore capacity, cluster info, alarms, events, and VM details. Code-level enforced safety — no destructive operations exist in the codebase. Supports vSphere 6.5–8.0. Works with local models via Ollama/LM Studio.
    32
    491 PyPI
    15
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Exposes two MCP tools (discover and execute) that enable agents to query an OpenAPI schema via natural language and execute matched API operations.
    2
    -