byteforge-aegis-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@byteforge-aegis-mcplist all sites"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
byteforge-aegis-mcp
A read-only MCP server over the ByteForge Aegis admin API, deployed as a container behind nginx with Gatekeeper auth.
Why
Agents working on Aegis and on tenant integrations repeatedly need to answer
"what is actually configured in production?" — is the webhook URL set, is
allow_self_registration on, which sites exist, does this user exist. Before
this server that question was answered with hand-rolled curls carrying the
master API key, or not answered at all — a tenant provisioning request was
once signed off partly on assertion, because the site config could not be
read back.
Related MCP server: readonly-mcp-akamai
Read-only by construction
Every tool maps to a GET. The Aegis client this wraps also exposes
create_site, update_site, delete_site, delete_user and friends — none
are reachable here, and none should be added. The value of this server is
that it can be handed to an agent with no possibility of changing production
state. A mutating server, if ever wanted, belongs in a separate and
separately-authorized deployment.
Tools
Tool | What it answers |
| Which build is live ( |
| Every tenant on the instance, with secrets |
| One site's full config, by UUID or domain |
| All users on a site |
| One user on a site, by email (case-insensitive) |
aegis_get_site and aegis_list_users accept a domain as well as a UUID.
The admin API addresses sites by UUID only (utils/identifiers.py
resolve_site rejects non-UUIDs), so a domain is resolved through the public
by-domain lookup first — callers almost always know the domain, not the
UUID.
Secrets in responses
Site reads include tenant_api_key, webhook_secret and mailgun_api_key
in full. This was a deliberate choice by @jmazzahacks over returning presence
booleans. The consequence: anything read here lands in the calling agent's
transcript, so responses should not be pasted into tickets or other shared
surfaces. AEGIS_MASTER_API_KEY spans every site on the instance.
Configuration
Variable | Purpose |
| Aegis instance to read (e.g. |
| Master key. Spans every site |
|
|
| Bind address. FastMCP reads these specifically |
See example.env.
Local development
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.pyThe venv lives in .venv/ rather than at the repo root as the sibling Aegis
repos do — uv venv refuses to create one in a non-empty directory.
To exercise it over the wire the way it is deployed:
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"}'A tools/list that succeeds without a preceding initialize is the
signal that stateless mode is on.
Build and publish
./build-publish.sh # or --no-cachePublishes ghcr.io/jmazzahacks/byteforge-aegis-mcp:<n> and :latest, then
advances VERSION. VERSION is gitignored and owned entirely by the script —
never edit it by hand.
Unlike byteforge-aegis, this image does not bake VERSION into itself,
so the script's write-after-build ordering is correct here. If a version
endpoint is ever added, the write must move to before docker build or
every image will report one version behind.
Deployment
Runs behind an mcp.<domain> umbrella vhost with Gatekeeper
auth_request auth. See nginx-mcp-aegis.conf for the location block. The
container publishes no host port — nginx reaches it by container name on the
shared docker network, which matters because the master key makes direct
exposure unacceptable.
Transport
streamable-http with stateless_http=True. Not SSE: when Claude Code's
long-lived SSE GET dies it reconnects without re-running initialize, the
server sees tools/call first, and the resulting -32602 wedges the client
until a manual /mcp reload. Stateless streamable-http has no per-session
state to lose, so that failure is structurally impossible.
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 Servers
AlicenseAqualityCmaintenanceRead-only MCP server that allows AI assistants to query and monitor KVM Fleet devices, audit logs, and console sessions through the official REST API.5141MIT- 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.161MIT
- Alicense-qualityCmaintenanceA 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
- Alicense-qualityCmaintenanceRead-only MCP server for Odoo.sh exposing builds, environments, logs, and system status via Web API and SSH without any write capabilities.MIT
Related MCP Connectors
Read-only Dant3 MCP for public rooms, agents, jobs and provisional machine onboarding.
Hosted MCP server for agent governance: MCP config audits, injection scans, scope-policy checks.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
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/jmazzahacks/byteforge-aegis-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server