Documentation
Admin over MCP
The backend-admin-mcp outlet exposes every admin command as a Model
Context Protocol tool over streamable HTTP, so an AI assistant administers
the instance through the same engine as the SSH console: one tool per
command (about a hundred), input schemas derived from each command's typed
input, results as structured JSON. Authorization is identical to the other
outlets — the engine authorizes every command individually against
per-resource ACLs; privileged commands require system admin.
Enabling and pinning
/backends enable admin-mcp /server settings set admin.mcp.vhost mcp.example.org
The vhost lives in the server settings registry and
applies at the next restart; once served it is published, the HTTPS listener
binds it, and ACME issues its certificate. --backend-admin-mcp-vhost /
EVERLOCK_BACKEND_ADMIN_MCP_VHOST provide the bootstrap value; the setting
wins. The endpoint is /mcp on that host.
Authentication
MCP shares the HTTP surfaces' authentication; the natural credential for client configuration files is a Bearer API key:
Authorization: Bearer evapi_<key_id>.<secret>
Keys are minted with /users apikey create <login> [alias] [expires_days],
shown once, stored as an Argon2id hash. First-boot bootstrap prints a key
next to the generated admin password, so a fresh instance is administrable
over MCP immediately.
Transport
Public hosts serve MCP over HTTPS exclusively. Local hosts — .local
names, localhost, private IP addresses — are also served over plain HTTP,
so a LAN instance works with an mDNS-announced mcp.local name and no
certificate setup. On that path the key crosses the local network segment
in the clear: the deliberate trade-off for trusted home networks.
Client configuration
Any MCP client that speaks streamable HTTP works. For Claude Code:
claude mcp add everlock --transport http https://mcp.example.org/mcp \ --header "Authorization: Bearer evapi_…"
Tool names derive from command paths: /users apikey create becomes
users_apikey_create.