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 (см. ниже)

Запуск

По умолчанию сервер работает как автономный удалённый сервер через 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.

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

  • MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.

View all MCP Connectors

Latest Blog Posts

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/mdegrasse/vcf-ops-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server