byteforge-aegis-mcp
byteforge-aegis-mcp
Только для чтения MCP-сервер для административного API ByteForge Aegis, развернутый как контейнер за nginx с аутентификацией Gatekeeper.
Почему
Агентам, работающим с Aegis и интеграциями арендаторов, постоянно требуется отвечать на вопрос «что на самом деле настроено в продакшене?» — установлен ли URL вебхука, включен ли allow_self_registration, какие сайты существуют, существует ли этот пользователь. До появления этого сервера на этот вопрос отвечали с помощью самодельных curl-запросов с мастер-ключом API, или не отвечали вовсе — однажды запрос на предоставление арендатора был подписан частично на основе предположения, потому что конфигурацию сайта нельзя было прочитать.
Related MCP server: readonly-mcp-akamai
Только для чтения по построению
Каждый инструмент соответствует GET. Клиент Aegis, который здесь обернут, также предоставляет create_site, update_site, delete_site, delete_user и другие — ни один из них здесь недоступен, и добавлять их не следует. Ценность этого сервера в том, что его можно передать агенту без возможности изменить состояние продакшена. Мутирующий сервер, если он когда-либо понадобится, должен быть в отдельном и отдельно авторизованном развертывании.
Инструменты
Инструмент | Что отвечает |
| Какая сборка активна ( |
| Все арендаторы на экземпляре, с секретами |
| Полная конфигурация одного сайта, по UUID или домену |
| Все пользователи на сайте |
| Один пользователь на сайте, по email (без учета регистра) |
aegis_get_site и aegis_list_users принимают как домен, так и UUID. Административный API обращается к сайтам только по UUID (utils/identifiers.py resolve_site отклоняет не-UUID), поэтому домен сначала разрешается через публичный поиск by-domain — вызывающие почти всегда знают домен, а не UUID.
Секреты в ответах
Чтение сайтов включает полные значения tenant_api_key, webhook_secret и mailgun_api_key. Это был осознанный выбор @jmazzahacks вместо возврата булевых значений о наличии. Следствие: все, что здесь прочитано, попадает в транскрипт вызывающего агента, поэтому ответы не следует вставлять в тикеты или другие общие поверхности. AEGIS_MASTER_API_KEY охватывает все сайты на экземпляре.
Конфигурация
Переменная | Назначение |
| Экземпляр Aegis для чтения (например, |
| Мастер-ключ. Охватывает все сайты |
|
|
| Адрес привязки. FastMCP читает их специально |
См. example.env.
Локальная разработка
uv venv --python 3.13 .venv
source .venv/bin/activate
uv pip install -r requirements.txt
AEGIS_API_URL=https://aegis.example.com \
AEGIS_MASTER_API_KEY=... \
MCP_TRANSPORT=stdio \
python aegis_mcp_server.pyВиртуальное окружение находится в .venv/, а не в корне репозитория, как в соседних репозиториях Aegis — uv venv отказывается создавать его в непустой директории.
Чтобы протестировать его по сети так, как он развернут:
MCP_TRANSPORT=streamable-http FASTMCP_HOST=127.0.0.1 FASTMCP_PORT=8931 \
AEGIS_API_URL=... AEGIS_MASTER_API_KEY=... python aegis_mcp_server.py &
curl -s -X POST http://127.0.0.1:8931/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'tools/list, который успешно выполняется без предшествующего initialize, является сигналом того, что включен режим без сохранения состояния.
Сборка и публикация
./build-publish.sh # or --no-cacheПубликует ghcr.io/jmazzahacks/byteforge-aegis-mcp:<n> и :latest, затем обновляет VERSION. VERSION находится в .gitignore и полностью управляется скриптом — никогда не редактируйте его вручную.
В отличие от byteforge-aegis, этот образ не встраивает VERSION в себя, поэтому порядок записи после сборки в скрипте здесь корректен. Если когда-либо будет добавлена конечная точка версии, запись должна быть перемещена до docker build, иначе каждый образ будет сообщать версию на одну позади.
Развертывание
Работает за зонтичным виртуальным хостом mcp.<domain> с аутентификацией Gatekeeper auth_request. См. nginx-mcp-aegis.conf для блока location. Контейнер не публикует порт хоста — nginx обращается к нему по имени контейнера в общей сети Docker, что важно, поскольку мастер-ключ делает прямое раскрытие неприемлемым.
Транспорт
streamable-http с stateless_http=True. Не SSE: когда долгоживущий SSE GET Claude Code умирает, он переподключается без повторного запуска initialize, сервер сначала видит tools/call, и возникающий -32602 блокирует клиента до ручной перезагрузки /mcp. Stateless streamable-http не имеет состояния на сессию, которое можно было бы потерять, поэтому такой сбой структурно невозможен.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
- IrisOAuthbio.irishealth
Read-only health context MCP server for Iris users.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Read-only MCP for AI usage profiles, leaderboards, stats, and docs; no writes or private data.
Related MCP Servers
AlicenseAqualityDmaintenanceRead-only MCP server that allows AI assistants to query and monitor KVM Fleet devices, audit logs, and console sessions through the official REST API.52 npm1MIT- AlicenseAqualityDmaintenanceRead-only MCP server for Akamai CDN that enables searching properties, browsing EdgeWorker code, querying DNS zones, inspecting network lists, and translating error codes via natural language.1632 PyPI1MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server that provides tools to list and read devices, MDM servers, blueprints, configurations, apps, packages, users, and other resources from Apple Business Manager and Apple School Manager.MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server to inspect allowlisted Docker containers, systemd services, JSONL logs, and HTTP health endpoints without arbitrary shell access.MIT