Operations
Deployment
froots runs as a single Docker container on Bitroot's Dokploy instance. The Dockerfile at the repo root is the whole build — Dokploy auto-deploys from main.
Environment (set in Dokploy → froots → Environment):
FROOTS_TOKENS=token1,token2 # comma-separated bearer allowlist
GEMINI_API_KEY=... # Nano Banana + analysis
OPENAI_API_KEY=... # gpt-image (optional)
Issuing & revoking tokens
Tokens are plain strings in FROOTS_TOKENS. Convention: froots_<person>_<random>.
echo "froots_alice_$(openssl rand -hex 12)"
Add it to the env var, redeploy (seconds), share it. Revoke by removing it. One token per person/app — never share tokens between consumers, or you lose the ability to revoke selectively.
Adding a new server to the fleet
- Create
src/servers/<name>.mjsexportingbuild<Name>Server()— anMcpServerwith your tools (copybit-graphics.mjsas the template). - Register it in
src/index.mjs: add toREGISTRY. - Document it:
docs/docs/servers/<name>.md+ add tosidebars.js. - Push to
main— Dokploy redeploys, and the endpoint is live at/mcp/<name>for every token holder.
Health
GET /health (no auth) returns { ok, servers } — wire it into uptime monitoring.