Skip to main content
Glama
sentania-labs

vcf-ops-mcp

Sentania VCF Ops MCP (неофициальный)

vcf-ops-mcp — это контейнеризированный MCP-сервер, по умолчанию доступный только для чтения, с небольшим административным интерфейсом для VCF Operations. Текущий MVP предоставляет реализованные чтения инвентаря, метрик, оповещений, определений отчётов, целей и навыков через аутентифицированный Streamable HTTP. Каждый вызов инструмента MCP проходит через долговечный аудит-диспетчер.

Это неофициальный проект для личной лаборатории. Это не продукт Broadcom или VMware.

Запуск тестового набора

Требуется Python 3.12 или новее.

python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip hatchling
.venv/bin/python -m pip install -e '.[test]'
.venv/bin/pytest tests/
./tools/generate_agents_md.sh --check
./tools/consensus-check.py --self-test

Уровень live-appliance пропускается, если не предоставлены его явные переменные-ограничители. Обычные тесты используют только синтетические ответы VCF Ops.

Related MCP server: afc-mcp

Сборка и запуск контейнера локально

Сервис создаёт свой секрет подписи сеансов и связку ключей учётных данных на томе /keys при первом запуске. Ручной SESSION_SECRET не требуется.

docker build -t vcf-ops-mcp:local .
docker volume create vcf-ops-mcp-data
docker volume create vcf-ops-mcp-keys
docker volume create vcf-ops-mcp-audit
docker run --name vcf-ops-mcp --rm \
  --read-only \
  --user 10001:10001 \
  --security-opt no-new-privileges \
  --cap-drop ALL \
  -p 8000:8000 \
  -e PUBLIC_BASE_URL=http://localhost:8000 \
  -v vcf-ops-mcp-data:/data \
  -v vcf-ops-mcp-keys:/keys \
  -v vcf-ops-mcp-audit:/audit \
  vcf-ops-mcp:local

В другом терминале:

curl --fail http://localhost:8000/healthz

Готовый ответ — HTTP 200 и сообщает о всех четырёх зависимостях как истинных: audit_writable, configuration_ready, session_secret_persistent и mcp_ready. Недоступная зависимость аудита, конфигурации, ключа или MCP оставляет процесс диагностируемым, но возвращает HTTP 503.

Лабораторное развёртывание владеет своим пином образа и процедурой обновления. Справочный deploy/compose.yml сохраняет внешнюю сеть docker-slots и те же три постоянных тома, но этот репозиторий не развёртывает его. Секреты времени выполнения никогда не передаются через CI или окружение compose.

Первый вход администратора

Одобренный путь начальной загрузки использует файл пароля, предоставленный оператором. Сервис запускается здоровым и без него, но административная панель остаётся недоступной, пока файл не существует. Пароль должен содержать не менее 16 байт. Он хешируется с помощью scrypt в базу данных времени выполнения, и файл начальной загрузки удаляется, когда первый вход инициализирует учётную запись. Если удаление не удаётся, более поздний вход повторяет очистку без изменения сохранённого пароля администратора.

Для локального контейнера создайте файл, не помещая пароль в историю оболочки или аргументы процесса:

docker exec -it vcf-ops-mcp sh
umask 077
python -c 'import getpass,pathlib; pathlib.Path("/keys/admin_bootstrap_password").write_text(getpass.getpass("New admin password: "))'
exit

Для слота docker.int lab-admin выполняет ту же одноразовую операцию через обычный административный канал хоста внутри запущенного контейнера vcf-ops-mcp-web. Ключ развёртывания не может и не должен выполнять её, потому что его список разрешённых принудительных команд намеренно исключает exec. Путь к файлу и режим те же. CI никогда не получает пароль начальной загрузки.

Откройте http://localhost:8000/admin/login, войдите как admin, затем:

  1. Зарегистрируйте цель VCF Ops. Новые цели всегда read_only. Производственный FQDN распознаётся на стороне сервера и никогда не может быть переключён на действия в этом MVP.

  2. Выберите требуемые реализованные области чтения и одну или несколько зарегистрированных целей, затем создайте ключ API MCP. Открытый текст ключа отображается один раз. Хранится только его SHA-256 дайджест.

  3. Настройте MCP-клиент с URL Streamable HTTP http://localhost:8000/mcp/ и заголовком Authorization: Bearer <displayed-key>.

  4. Используйте list_targets для обнаружения разрешённых идентификаторов целей, затем вызовите инструмент чтения. Аргументы адаптера VCF передаются в объекте arguments этого инструмента.

  5. Просмотрите /admin/audit, чтобы увидеть попытки и терминальные записи, доступные только для добавления.

Производство использует https://vcf-ops-mcp.int.sentania.net, что сохраняет cookie сеанса администратора Secure. Локальный HTTP включён только тогда, когда PUBLIC_BASE_URL явно использует http://.

Постоянные данные и восстановление

Три корня томов имеют отдельные задачи:

Путь тома

Содержимое

/data

База данных SQLite времени выполнения с хешем администратора, метаданными целей, зашифрованными конвертами учётных данных и дайджестами ключей API

/keys

Сгенерированный секрет сеанса, ключ дайджеста аргументов аудита, версионированная связка ключей AES-256-GCM и одноразовый файл начальной загрузки администратора

/audit

Журнал аудита SQLite, доступный только для добавления

Резервируйте /data, /keys и /audit как отдельные защищённые артефакты. Потеря /keys при наличии зашифрованных записей целей намеренно невосстановима. Сервер отказывается перегенерировать связку ключей учётных данных поверх существующего шифротекста. Не используйте docker compose down -v для установленного развёртывания.

Если процесс умирает после фиксации попытки аудита, но до его терминальной записи, следующий запуск добавляет outcome_unknown. Он никогда не переписывает попытку и не выдумывает успешный результат.

Границы MVP

Реализовано:

  • Автоматическая долговечная генерация SESSION_SECRET, с явным переопределением окружения, сохранённым для прямого запуска процесса.

  • Долговечная зашифрованная конфигурация целей, вход администратора начальной загрузки, создание и отзыв ограниченных ключей API, регистрация целей и просмотр аудита.

  • Аутентифицированный Streamable HTTP с реализованными адаптерами чтения, обнаружением целей и обоими инструментами навыков, а также ресурсами/подсказками навыков. Содержимое навыков через ресурсы и подсказки требует той же возможности read:skills, что и инструменты навыков; без неё доступно только конкретное обнаружение ресурсов.

  • Позиция целей только для чтения, списки разрешений целей для ключей API, реализованные области по умолчанию запрещены, жёсткая блокировка производственных целей, проекция и ограничения ответов, а также долговечный аудит каждого инструмента.

Намеренно отложено:

  • Все выполнение действий, ключи с возможностью действий, запуски отчётов, plan/apply и асинхронный опрос задач. Они остаются за человеческим шлюзом Phase 2.

  • Редактирование целей и ротация учётных данных в интерфейсе.

  • Загрузка завершённых отчётов, потому что на устройстве разработки нет завершённых отчётов без предварительного выполнения мутации отчёта.

  • Внешнее воздействие, NSX, автоматизация VCFA, инструменты прямого vCenter и очистка PII.

  • Обнаружение источников аутентификации, отличных от LOCAL. Более ранний произвольный FQDN-запрос был удалён, потому что это была граница SSRF, а не безопасный механизм обнаружения.

См. docs/SPEC.md, принятые записи в docs/decisions и docs/read-plane.md для полного контракта и измеренных поведений VCF Ops.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server for searching and aggregating logs from VMware Aria Operations for Logs (formerly vRealize Log Insight). Enables querying log events, aggregating with spike detection, and retrieving alert information.
    7
    191 PyPI
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to Aruba Fabric Composer inventory, network state, and VMware vCenter/vSphere visibility through MCP tools over streamable HTTP.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Provides read-only, governance-audited operations for OLVM and oVirt 4.5 engines, enabling inventory, health, capacity, and diagnosis queries over MCP and CLI with audit logging and budget guards.
    17
    MIT