Context7
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Description from the maker (original English)
Persistent memory for AI agents: one brain shared across Claude, Cursor, Codex and more.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
https://mcp.brainmemory.ai/mcpRun this in your terminal
claude mcp add --transport http brain https://mcp.brainmemory.ai/mcpPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"brain": {
"url": "https://mcp.brainmemory.ai/mcp"
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"brain": {
"type": "http",
"url": "https://mcp.brainmemory.ai/mcp"
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
https://mcp.brainmemory.ai/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
We have not read this server’s tool list yet; we check endpoints in rotation.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The publisher (brainmemory.ai) is not the repo owner (omelas-tech); someone else may have listed it
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
Not checked yet; we check endpoints in rotation
Not checked yet; we check endpoints in rotation
Not checked yet; we read the tool list when we check the endpoint
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 0 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.
The GitHub repo last changed –, and the latest version (0.4.0) reached the registry 24 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
In the same category: Context7, Codebase Memory, Exa
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
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.
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:
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 under CONNECTOR_STATE_DIR (systemd StateDirectory; Firebase refresh tokens encrypted at rest via CONNECTOR_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):
① unauthenticated MCP call → 401 + WWW-Authenticate (RFC 9728)
② discovery → AS metadata (RFC 8414), PKCE S256 ③ Dynamic Client Registration (RFC 7591) ④ authorize → code (iss + state validated, RFC 9207) ⑤ token → audience-bound Bearer (PKCE verified, RFC 8707) ⑥ MCP initialize + tools/list → [brain_recall, brain_status, brain_use, brain_memorize, brain_pin, brain_unpin, brain_forget, brain_verify] (official SDK) ⑦ brain_recall(query) → the brain's REAL scored results (relevance + decayed strength + spreading activation), 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.)
npm install
npm test # end-to-end Phase 1 proof npm start # serve MCP on http://localhost:8788
| Tool | Kind | Description |
|---|---|---|
brain_recall | read (readOnlyHint) | Ranked recall for a query, scored by the brain engine. |
brain_status | read (readOnlyHint) | Memory count + last-updated for the user's brain, and the account's brains with the one in use marked active. |
brain_use | write (idempotentHint) | Switch which of the account's brains the connector serves, by name or id. Remembered across sessions; copies nothing between brains. |
brain_memorize | write (destructiveHint) | Store the explicit content provided (never the conversation); immediately recallable. |
brain_pin / brain_unpin | write (destructiveHint, idempotentHint) | Move a memory into or out of the always-present tier. |
brain_forget | write (destructiveHint) | Archive a memory (recoverable — moved to _archived/, not hard-deleted). |
brain_verify | write (destructiveHint) | List memories pending verification; approve them, or reject them into the archive. |
Writes reuse the deterministic CLIs (memorize.js / pin.js / unpin.js / forget.js) and then syncBack() to brain-cloud.
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:
| Situation | identity.status | What you see |
|---|---|---|
| Account has no brain in Brain Cloud | no-cloud-brain | A note (in brain_status, and in brain_recall when it finds nothing) telling you this account is empty — most likely you signed in with the wrong Google account, or you're brand new. |
| Account has exactly one brain | ok | Nothing — the common, unambiguous case. |
| Account has several brains | multiple-brains | A note naming the brain in use. brain_status lists them all; brain_use switches, and the choice (kept with the OAuth state, per user) holds for later sessions. A chosen brain that is later deleted falls back to the oldest. |
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.
Two layers — both real now:
src/oauth.ts): authorize / token / register / metadata, PKCE S256, RFC 8707 audience binding, RFC 9207 iss. Tokens mint into src/auth.ts's store; the /mcp guard validates them (incl. audience).src/firebase.ts): /authorize bounces 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, checking aud/iss/ exp — so it needs only the public project config, no service-account key. The verified uid maps 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.
cp .env.example .env # fill in FIREBASE_API_KEY / AUTH_DOMAIN / PROJECT_ID
npm start # http://localhost:8788
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.)
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):
{brainID}.tar.gz from BRAIN_CLOUD_API_URL (default https://api.brainmemory.ai) using their Firebase ID token (brain-cloud's middleware accepts it directly), then tar xzf into brainDir. Refreshed at each login.brainDir → $DEV_LOCAL_BRAIN (your live ~/.brain), so your machine serves your real brain through the connector.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.
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_* is set) — Google sign-in. The store credential is the Firebase ID token, renewed from the Firebase refresh token.brain-store user add); the store decides who the user is. Requires BRAIN_CLOUD_API_URL to 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./authorize sends 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. Needs OIDC_ISSUER, OIDC_CLIENT_ID and an explicit BRAIN_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 answers 503 and 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.
brain-cloud/docs/connector-architecture.md §7.