Brain Memory
ai.brainmemoryPublished by brainmemory.aiOfficial publisherv0.5.1Updated Nov 7, 2026
Persistent memory for AI agents: one brain shared across Claude, Cursor, Codex and more.
Overview
Remote MCP server giving AI assistants a persistent, scored memory brain shared across Claude, Cursor, Codex and other clients.
- What you can do
- Recall ranked memories for a query, scored by the brain engine
- Check memory count, last update and which of the account's brains is active
- Store explicit content as new memories, and pin or unpin them into an always-present tier
- Archive memories and review pending ones by approving or rejecting them
- Switch which brain of the account the connector serves
- When to use it
- Useful when you want an assistant to remember facts, notes or decisions across sessions and across different MCP clients, rather than starting from scratch each conversation. It suits users who already keep a brain in Brain Cloud and want the same memories available in Claude web, desktop or mobile.
- Requirements
- A remote endpoint reached over streamable HTTP; no local package. Sign-in is OAuth 2.1 with a Google (Firebase) account, and the brain must belong to that same account. The account needs a brain in Brain Cloud, or an empty one is created.
Installation
In SourceWeft
- Open Brain Memory in the dashboard and add it to a workspace.
- Connect the required credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/ai.brainmemory%2Fbrain/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"mcpServers": {
"brain-memory": {
"type": "http",
"url": "https://mcp.brainmemory.ai/mcp"
}
}
}README
brain-connector
The Brain Memory Claude connector — a remote MCP server that exposes the brain's
scored recall to Claude (web / desktop / iOS / Cowork). Built with the official
@modelcontextprotocol/sdk per Anthropic's
build-mcp-server guidance. Design rationale lives in
brain-cloud/docs/connector-architecture.md.
It lives in this repo (not the npm package — excluded from package.json files, like
website/) so it reuses the real recall engine in ../src directly. One brain, one
engine, two faces.
Status: 🟢 LIVE IN PRODUCTION — Phase 1 + 2 (read + write)
Deployed at https://mcp.brainmemory.ai/mcp (Node service on the VPS beside brain-cloud;
systemd + nginx + certbot — see deploy/). Added at claude.ai and verified on Claude web +
iPhone. Tools: brain_recall, brain_status (read) + brain_memorize, brain_pin,
brain_unpin, brain_forget, brain_verify (write — writes sync back to brain-cloud; hosts gate
them behind confirmation) + brain_use (switch between the account's brains).
Two things to know in production:
- One brain ↔ one Google account — the connector serves the brain of whatever Firebase (Google) identity signs in, so the brain must be pushed to that brain-cloud account. See Identity & accounts below for how the connector now surfaces a wrong / empty / multi-brain account instead of silently serving a phantom brain.
- Sessions renew silently for ~a month — access tokens live 1 h, but the token endpoint issues
rotating refresh tokens (OAuth 2.1: single-use, family-revoked on reuse) with a sliding
30-day window (
CONNECTOR_REFRESH_TTL_MS), so an active user never sees the login page. Each refresh also renews the Firebase credential server-side (securetoken API, from the refresh token captured at login) — so sync-back and TTL re-pulls keep working far past the old ~1 h Firebase ID-token window. Grants + the DCR client registry persist underCONNECTOR_STATE_DIR(systemdStateDirectory; Firebase refresh tokens encrypted at rest viaCONNECTOR_STATE_KEY, our tokens stored hashed), so deploys/restarts no longer log users out. Local CLI memories (brain cloud push) reach an active session automatically via a TTL re-pull (CONNECTOR_REPULL_TTL_MS, default 120s) — it re-pulls only when the cloud checksum changed and never over an unsynced local write.
npm test typechecks and proves the whole path end-to-end in one server — the
complete OAuth 2.1 handshake through to real scored recall (token request is form-urlencoded,
matching real clients):
How recall stays identical to the CLI
The engine bridge (src/engine.ts) runs the repo's bin/recall.js with BRAIN_DIR
pointed at the authenticated user's brain working copy — so the connector's scoring is
byte-for-byte the CLI's, with zero reimplementation. (BRAIN_DIR is the same override
the CLI ships.)
Run / test
Tools
Writes reuse the deterministic CLIs (memorize.js / pin.js / unpin.js / forget.js) and then
syncBack() to brain-cloud.
Identity & accounts
One brain ↔ one Google account. The connector has no idea which laptop you're on — it serves the
brain belonging to whatever Firebase (Google) identity completes the sign-in. The verified uid maps
deterministically to a brain user (resolveBrainUserId), and that user's canonical brain is pulled
from brain-cloud: the brain the user chose with brain_use, or else the account's oldest. So the
rule is simple: connect with the same Google account your CLI's brain cloud syncs to, and use
the same brain (brain cloud brains shows which one the CLI is linked to).
To keep that rule from failing silently, ensureUserBrain returns an identity signal that the
tools surface to you:
This is guidance, not enforcement — a genuinely new user with no brain yet still gets a usable
empty brain. Account-linking (letting one Google identity span several brains at once) is
deliberately deferred; choosing one brain at a time is brain_use.
Auth
Two layers — both real now:
- OAuth 2.1 between Claude and the connector (
src/oauth.ts): authorize / token / register / metadata, PKCE S256, RFC 8707 audience binding, RFC 9207iss. Tokens mint intosrc/auth.ts's store; the/mcpguard validates them (incl. audience). - Who is the human (
src/firebase.ts):/authorizebounces the user through Firebase login (the same project brain-cloud uses). The connector verifies the ID token server-side and secret-free — RS256 against Google's public certs, checkingaud/iss/exp— so it needs only the public project config, no service-account key. The verifieduidmaps to the brain user, then the OAuth code is minted.
If FIREBASE_* env is not set, /authorize falls back to a fixed dev user
(STUB:FIREBASE) so the headless test runs without a browser.
See the Firebase login work (demo)
Signing in through /authorize shows the branded consent/login page and, on success, resolves
your verified firebase_uid → brain_user_id → brain_dir — which is how the connector picks
whose brain to serve. (localhost is an authorized Firebase domain by default, so popup sign-in
works locally.)
Per-user store (src/store.ts)
ensureUserBrain({ userId, brainDir, idToken }) populates the user's brain working copy from a
pluggable provider, then the engine recalls over it. Providers (via CONNECTOR_STORE, else
inferred):
brain-cloud(production) — pulls the user's{brainID}.tar.gzfromBRAIN_CLOUD_API_URL(defaulthttps://api.brainmemory.ai) using their Firebase ID token (brain-cloud's middleware accepts it directly), thentar xzfintobrainDir. Refreshed at each login.local(dev) — symlinksbrainDir→$DEV_LOCAL_BRAIN(your live~/.brain), so your machine serves your real brain through the connector.none— assume pre-provisioned (tests).
Always graceful: if the brain is still missing, it empty-inits a valid (recall-safe) brain.
The brain-cloud provider speaks the store contract, so it works
against any store that implements it, including a self-hosted
brain-store. Sync-back is conditional (If-Match): if another
device pushed first, the connector discards its working copy, starts again from the store's
brain, re-applies the write and pushes again, so nobody's memories are overwritten.
Identity providers (src/identity.ts)
Who is logging in, and what the connector presents to the store for them, sits behind one
interface. Select with CONNECTOR_IDP:
-
firebase(the default whenFIREBASE_*is set) — Google sign-in. The store credential is the Firebase ID token, renewed from the Firebase refresh token. -
static— for a self-hosted store. The sign-in page takes the token the store's operator issued (brain-store user add); the store decides who the user is. RequiresBRAIN_CLOUD_API_URLto be set explicitly, so a token can never be sent to the hosted default by accident. Rotating or removing the user at the store ends their sessions at the next silent renewal. -
oidc— for a self-hosted store that accepts your organisation's OpenID Connect issuer (Entra, Google Workspace, Keycloak, Okta)./authorizesends the browser to the issuer (authorization code + PKCE + nonce) and the issuer returns it to/oidc/callback. The ID token is the store credential, renewed from the issuer's refresh token. NeedsOIDC_ISSUER,OIDC_CLIENT_IDand an explicitBRAIN_CLOUD_API_URL. Token verification is the store's own (store/lib/oidc.js), so the two can never disagree about what a valid token is. An issuer outage answers503and keeps the login; a revocation ends it.
With no provider configured the connector refuses to start in production. When the reverse
proxy is not on loopback (another container, say), name it with CONNECTOR_TRUST_PROXY, for
example uniquelocal; true is refused.
Next
- Account-linking — let one user span several brains at once (recall across them), rather than serving one chosen brain at a time. See Identity & accounts.
- Directory submission — remaining manual steps (test account, MCPB packaging, launch post); see
the submission checklist in
brain-cloud/docs/connector-architecture.md§7.
Source: connector/README.md at commit 0bc6371
Tools
0Version history
2- v0.5.1LatestNov 7, 2026
- v0.4.0Oct 13, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts