brain mcp over stdio only works for tools that can start a program on your own computer, like Claude Code. Claude on the web and in the phone app can only reach a server over HTTPS. Remote access gives each person a private address that Claude can reach, so they can search, read and save notes in their own brain from anywhere.123456789101112Claude (web, phone, Code) │ HTTPS, signed in through your identity edge ▼ Cloudflare Access runs the sign-in (OAuth) and signs each request │ ▼ brain mcp-router checks the signature, finds that person's port │ (holds no vault) ├─▶ brain mcp --http (alice) reads compiled/alice only │ saves to spool/alice only └─▶ brain mcp --http (bob) reads compiled/bob only saves to spool/bob only
brain mcp --http process is given exactly one
compiled vault and answers only to that person's email. The router never opens a vault.
Three separate checks stand between a request and a vault: the edge's list of allowed
emails, the router's route table, and the vault process's own pinned email. A wrong route
is refused, never served. See the deployment rule.https://mcp-acme.example.com/mcp). Everyone in the organization then
sees it. On other plans, each person adds the same address themselves.brain_capture will appear.| App | How to add it |
| Claude Code | claude mcp add --transport http brain <address>, then /mcp → brain → Authenticate. |
| Cursor | Add {"mcpServers": {"brain": {"url": "<address>"}}} to ~/.cursor/mcp.json, then click Needs login. |
| VS Code | In .vscode/mcp.json: {"servers": {"brain": {"type": "http", "url": "<address>"}}}, then Start. |
| ChatGPT | Turn on developer mode under Settings → Connectors → Advanced (plan-dependent), add a connector with the address and choose OAuth. |
brain mcp over stdio needs no
address and no sign-in (see brain mcp). It has the six read
tools only; saving notes needs the remote address.brain mcp (brain_search, brain_read, brain_links,
brain_graph, brain_recent, brain_facts), plus brain_capture, which saves a note
into your Inbox. Claude cannot edit or delete existing notes this way.https://mcp-<company>.<your domain>/mcp.brainkit[remote] installed on the brain box:1uv tool install 'brainkit[remote] @ git+https://github.com/joedanz/brainkit@<release tag>'
/usr/local/bin/brain. uv tool install puts the program in the installing user's own folder, so link it once (ln -s ~/.local/bin/brain /usr/local/bin/brain), or change ExecStart= in both unit files to the real path (which brain).mcp-acme.example.com) to
http://127.0.0.1:8900.https://claude.ai/api/mcp/auth_callback and
https://claude.com/api/mcp/auth_callback, and localhost and loopback allowed (for
Claude Code).https://<team>.cloudflareaccess.com)./etc/brain/mcp.env (no secrets in it):123BRAIN_MCP_ISSUER=https://<team>.cloudflareaccess.com BRAIN_MCP_JWKS_URL=https://<team>.cloudflareaccess.com/cdn-cgi/access/certs BRAIN_MCP_AUDIENCE=<the application's AUD tag>
alice here), a settings file /etc/brain/mcp.d/alice.env:12BRAIN_MCP_PORT=8901 BRAIN_MCP_EMAIL=alice@acme.com
1install -d -o brain -m 0700 /srv/brain/spool/alice
brain cycle must run as the same user that owns the spool (the unit's User=).
A spool the cycle can't read can't be emptied; the cycle prints a warning naming the
folder, and saved notes pile up until Claude says the queue is full.12install -m 644 deploy/brain-box/brain-mcp@.service /etc/systemd/system/ systemctl enable --now brain-mcp@alice
/etc/brain/mcp-routes.yaml maps each email to that person's port:1234version: 1 routes: alice@acme.com: 8901 bob@acme.com: 8902
12install -m 644 deploy/brain-box/brain-mcp-router.service /etc/systemd/system/ systemctl enable --now brain-mcp-router
--spool-root /srv/brain/spool to the brain cycle
line in your cron. Saved notes are filed into each person's Inbox on the next cycle.User= in both unit files for your install, and add an EnvironmentFile for your
embedding settings to the per-person unit if you
want semantic search.{"error": "<code>", "message": "..."}.| Code | Status | What it means |
unauthenticated | 401 | No signed identity, or it is expired or from the wrong place. Check BRAIN_MCP_ISSUER and BRAIN_MCP_AUDIENCE. |
no_identity | 403 | The request was signed but names no person (for example a service token). |
no_route | 403 | The email is not in the route table. Add it to mcp-routes.yaml. |
wrong_person | 403 | The router sent a request to someone else's process. Check the ports in the route table. |
rate_limited | 429 | Too many requests; retry after the Retry-After seconds. |
too_large | 413 | The request was over 1 MB. |
unsupported_encoding | 415 | Compressed request bodies are not accepted. |
method_not_allowed | 405 | Use POST. |
upstream_unavailable | 503 | That person's process is down or restarting. |
journalctl -u brain-mcp@<id> and
curl http://127.0.0.1:<port>/healthz. If saved notes never appear, check that the cycle
runs with --spool-root and look in /srv/brain/spool/<id>/.rejected/.