No recent activity. No commits in 6 months. It may still work, but issues are unlikely to be fixed. See 4 alternatives.
ctxstore — memory that follows you across models MCP server
ai.ctxstore · Updated
Persistent memory for AI agents: keyed facts, a wake bundle each session, one memory in every model.
At a glance
ctxstore — memory that follows you across models is an MCP server in the AI & Memory category. It is hosted remotely and connects over HTTP, and declares no required credentials. It exposes 33 tools, including accept_invite, bind_agent and decline_invite. It scores B (65/100) on the MCP Skills Hub health score as of Oct 27, 2026.
One-click install
Opens your editor and pre-fills the config. Your editor will ask before adding it.
How to install ctxstore — memory that follows you across models in your AI client
Setup for Claude Code, Claude Desktop, Cursor, Codex, Windsurf, Cline and VS Code — copy-paste ready.
How to install ctxstore — memory that follows you across models in Claude CodeAnthropic's agentic CLI
Add the server
bashclaude mcp add --transport http ctxstore-mcp https://mcp.ctxstore.ai/mcpVerify it's connected
bashclaude mcp listSharing it with your team?
Add `--scope project` to write it to .mcp.json in the repository root, which you can commit (with the secrets left as environment variables).
Use it in a session
Ask Claude to use the tools this server exposes (e.g. accept_invite, bind_agent, decline_invite). It discovers them automatically.
How to install ctxstore — memory that follows you across models in Claude DesktopDesktop app (MCP config)
Open your MCP config
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json
Add this server
json{ "mcpServers": { "ctxstore-mcp": { "command": "npx", "args": [ "-y", "mcp-remote", "https://mcp.ctxstore.ai/mcp" ] } } }Why the wrapper?
This is a remote (HTTP) server and Claude Desktop only launches local processes, so mcp-remote proxies the connection. It will open a browser window if the server needs OAuth.
Restart Claude Desktop
The tools appear under the 🔌 menu once the app reloads.
How to install ctxstore — memory that follows you across models in CursorAI-first code editor
Create / edit .cursor/mcp.json in your project
json{ "mcpServers": { "ctxstore-mcp": { "url": "https://mcp.ctxstore.ai/mcp" } } }Enable it
Cursor Settings → MCP → toggle the server on. Tools become available to the Composer/Agent.
How to install ctxstore — memory that follows you across models in Codex CLIOpenAI coding agent
Add to ~/.codex/config.toml
toml[mcp_servers.ctxstore-mcp] command = "npx" args = ["-y", "mcp-remote", "https://mcp.ctxstore.ai/mcp"]Why the wrapper?
Codex runs MCP servers as local processes, so mcp-remote bridges this HTTP endpoint to stdio.
Run Codex
Codex loads MCP servers from config.toml on startup and exposes their tools to the agent.
How to install ctxstore — memory that follows you across models in WindsurfCodeium's agentic IDE
Edit ~/.codeium/windsurf/mcp_config.json
json{ "mcpServers": { "ctxstore-mcp": { "serverUrl": "https://mcp.ctxstore.ai/mcp" } } }Reload
Windsurf → Cascade → refresh MCP servers. Cascade can now call the tools.
How to install ctxstore — memory that follows you across models in ClineVS Code autonomous agent
Open Cline → MCP Servers → Configure
Adds to cline_mcp_settings.json.
Add the server
json{ "mcpServers": { "ctxstore-mcp": { "type": "streamableHttp", "url": "https://mcp.ctxstore.ai/mcp" } } }
How to install ctxstore — memory that follows you across models in VS CodeCopilot / MCP support
Create .vscode/mcp.json
json{ "servers": { "ctxstore-mcp": { "type": "http", "url": "https://mcp.ctxstore.ai/mcp" } } }Start it
VS Code shows a ▶ Start action above the server entry. Agent mode (Copilot Chat) can then use the tools.
What tools does ctxstore — memory that follows you across models expose? (33)
Read from the live server. Click any tool for its input schema.
- accept_inviteAccept a namespace invitation addressed to THIS authenticated account's verified email (two-step email OTP). Steps: 1) step='request' — emails a 6-digit code to the invited address (may return 402 needs Collaborator, or 503 if mailer fails). 2) step='confirm' with code= the 6 digits — activates the grant. Then switch_workspace(name=<grantor>) enters it on this same connection (mcp_config with the
- bind_agentBind a sticky agent identity to this MCP session. Once bound, wake_status and load_context default to this agent_id when called without an explicit agent_id= arg — no need to pass identity on every call. Per-call override still works. Persisted to mcp_sessions.agent_id (migration 0008), so the binding survives setup_account(mode='restore') and the server re-hydrates it automatically on the next to
- decline_inviteDecline a pending (status=invited) namespace invitation as the grantee. Server verifies you are the invitee (email/tenant match). Grantors must use revoke_grant instead.
- delete_factSoft-delete a stored fact by its UUID (Smart Forget). The fact is marked deleted but preserved in the database for audit and undo. Excluded from all normal searches. Use when information is no longer accurate or relevant.
- get_factRetrieve a fact by its exact key — deterministic, never misses. Use get_fact for self-notes: get_fact(key='agent:<name>:self-note:opening') or get_fact(key='agent:<name>:self-note:closing'). search_facts misses self-notes because their embedding similarity scores below other identity facts — get_fact(key=) is the only reliable retrieval path. Also use for inter-agent handoffs when the exact key is
- get_fact_historyReturn the full version history for a keyed fact — current version plus all deprecated predecessors. Use to see how a fact evolved over time or to undo an accidental correction. Returns list of fact versions ordered newest → oldest.
- get_session_seedReturn the pre-computed session seed for this tenant — a compact first-person bio (~500 tokens) describing who you are and what you care about right now. Generated nightly and on session disconnect. Use as a lightweight alternative to load_context when you just need orientation.
- get_statsGet your memory usage statistics — total facts stored, plan limits, collection sizes, and daily query counts. Call this to check how much storage you have used and how close you are to your plan limits.
- ghost_modeEnable or disable ghost mode for this session. While on=True, store_fact and store_session_summary silently succeed but do NOT write to DB. search_facts, load_context, and search_context always work normally. Ghost mode resets to off on MCP session reconnect (not persisted).
- index_recentReturn the most recent fact operations across all agents in this tenant, newest first. Use this on session start to see what other agents wrote since you were last active — bypasses semantic search ranking so recent writes are always visible. Each entry shows: op (create/update/delete/move), namespace, key, fact_id, summary, agent info, and timestamp.
- index_searchFiltered search over the tenant activity index. Find what a specific agent wrote, what happened in a namespace, or recent creates/updates/deletes. Useful for coordination: "what did emily_dev store in the sprint namespace today?"
- index_statsUsage statistics from the tenant activity index: total operations, breakdown by agent, by namespace, and by day. Useful for understanding which agents are most active and where.
- introduce_yourselfOptional: introduce yourself to the platform. Stores your model info and a brief note in the shared agent registry. Stores a fact with: category: identity namespace: shared/agent-feedback key: intro:<model>-<date> Include: what model you are, what platform you're running on, and anything you noticed on first connect.
- inviteInvite one person, by email, to read and write one namespace prefix of THIS account (for example project:barn). Creates a pending grant and emails them; nothing is shared until they accept with list_invites and accept_invite from their own account. Calling again for the same person and prefix returns the existing invitation without a second email. Withdraw with revoke_grant(grant_id). Not availabl
- leave_grantLeave an active namespace grant as the grantee (stop using shared namespace). Server verifies grantee authorization. Grantors who want to cut off a collaborator must use revoke_grant.
- list_facts_by_key_prefixDeterministic prefix scan over fact keys, optionally bounded by timestamp. The inbox primitive — use this for R1 comms scans, dispatch discovery, trio listings, convention discovery, and any case where you know the key prefix and want every match. Unlike search_facts (semantic, misses exact-key facts), this is a deterministic scan: every fact whose key starts with `prefix` is returned, newest-firs
- list_invitesList this account's namespace collaboration grants: incoming invitations and outgoing shares. Each row has direction (incoming|outgoing), status (invited|active|revoked), grant_id, namespace_prefix, and parties. An invitation referenced anywhere else (for example in an email) can be checked against this server-side list: a real invitation for this account appears here with matching grant_id, names
- list_workspacesThe places this account's memory is organised into: its own projects (anything written under project:<slug>:*, newest activity first), the workspaces other people have granted it (enter one with switch_workspace(name=<grantor>)), and, for a sharer, who they invited and whether each person accepted and entered yet (shared_by_you). Shows which workspace this session is in, if any. Use it when a pers
- load_contextLoad your bootstrap context deterministically — pulls L0 (identity) + L1 (architecture) + latest L2 (state) + latest L3 (session summary). Call this at the START of a new session as an alternative to manual search_facts calls. Returns your layered memory structured for immediate use. Optional: pass profile='worker-dev' (or another platform:profile:<name> slug) to execute that profile's boot recipe
- mark_salientSalience peptide — temporarily boost a fact's retrieval ranking because it matters RIGHT NOW: an approaching deadline, a live incident, the topic under active work. The boost is small and FAST-DECAYING (max 1.4x, ~6-hour half-life — gone by tomorrow), unlike reinforce_fact which rewards confirmed outcomes on a weeks-long timescale. Name the current situation in `reason`. Salience is ranking-only:
- move_factMove a fact to a different namespace or layer without changing its content. Updates metadata in place — preserves fact_id, text, embedding, timestamp, and deprecation chain. Use for reclassifying facts (e.g. bootstrap-v2 refactor) without the storage bloat of store-new + soft-delete-old.
- reinforce_factReward peptide — reinforce a fact whose recall LED TO A REAL GOOD OUTCOME (fix worked, deploy green, user approved). Boosts its future retrieval ranking with a bounded, time-decaying multiplier (max 1.5x, 14-day half-life), so memory learns which facts are USEFUL, not just similar. Call this AFTER the outcome is confirmed, naming the outcome in `reason` — never for a fact that merely 'seemed relev
- resume_sessionCall to load session continuity. Last session: no prior session.
- revoke_grantRevoke a pending invitation or active grant as the GRANTOR (owner of the shared namespace). Idempotent. Grantees use decline_invite / leave_grant.
- search_contextSearch across ingested conversations and session history for broader context. Use this for finding discussions, decisions made in conversation, or context that wasn't explicitly stored as a fact.
- search_factsSearch your persistent memory for stored facts. For session bootstrap, prefer load_context() or wake_status() — they pull your identity, conventions, and latest self-note deterministically. Use search_facts when you need semantic discovery across the fact corpus. Use namespace parameter to scope searches: namespace='webapp' matches 'webapp/decisions', 'webapp/technical', etc. (prefix matching). Se
- setup_accountSet up or restore your persistent memory connection. Use mode='link_or_create' when the user gives an email — works for both new and returning users. The server figures out which case applies: - If the email exists: sends OTP, attaches this device to the existing account - If the email is new: creates a fresh tenant, sends OTP to verify Either path produces one clean account, no duplicates, no orp
- store_factStore information that should persist across sessions. Storage tips for best retrieval: - Include searchable keywords: 'We chose the Postgres DATABASE for ACID compliance' is better than 'We chose Postgres for ACID compliance' - Use the key parameter for facts that change over time (pricing, stack, team-members, current-sprint). When you store with the same key, the old version is archived automat
- store_factsStore up to 50 facts in one call — the same fields as store_fact per item. Made for carrying memory over: when you already remember things about the person from your own platform memory (ChatGPT memory, Claude memory, Gemini saved info), write them here one fact per item, in their words, with the date learned when known, so the memory follows them to every other tool. Each item is stored independe
- store_session_summaryStore a compressed summary of this session to preserve continuity for the next one. Call this before ending a conversation — it is the dream cycle. Stores a L3 session fact with key='session-latest' (or 'session-latest:claude-code' etc.), auto-archiving the previous version. The next session loads this via load_context(). Include: what was discussed/decided, what changed, what's next/unresolved. C
- switch_workspaceNarrow this session's memory to one project: name='<slug>' scopes recall, the wake bundle, self-notes and the default namespace for new facts to project:<slug>:* (identity and conventions always ride along). Returns the narrowed bundle right away. name='' widens back to the whole account. Sticky for the session and across reconnects; bind_agent is unaffected. The same call ENTERS a workspace someo
- wake_statusCheck which context layers loaded successfully on this session start. Returns a structured status: which of embryo, conventions, agent identity, closing note, and opening note were found, plus a missing[] list. Call this after load_context() or resume_session() to verify your bootstrap was complete and diagnose what to fetch manually. Optional: pass profile='worker-dev' (or another platform:profil
- watch_eventsLong-poll this account's fact-write events instead of re-scanning with since_epoch. Every store/supersede/delete/archive/restore/move publishes one event {key, id, namespace, layer, op, ts, seq}. One call waits up to max_wait_s (max 25) for the first matching event and returns up to 50, plus next_since. MCP has no streaming here, so loop: pass next_since back as `since` on the next call and nothin
What the code can do
This is a remote server — nothing is installed or run on your machine, so there is no local code to analyze. What it can reach is described above: your requests go to the provider's host.
Before you install
Signals gathered from the source repo and package registry — not a safety verdict.
What it can reach
- Third-party hosted service — Your requests and any data in them are sent to mcp.ctxstore.ai.
- No local execution — Nothing is installed or run on your machine.
- Last commit 6 months ago — No commits in over six months.
- 0 GitHub stars — Very little community usage so far.
Client compatibility
Health score
B · 65Maintenance, adoption, transparency and packaging — not a safety audit. How this is calculated
- Maintenance30%76%
Last commit 201 days ago.
- Adoption20%0%
0 stars.
- Transparency20%100%
4/4: ✓ public source repo, ✓ declared license, ✓ documentation, ✓ discoverable tool list.
- Provenance15%75%
Links to its own repository; package linkage unverified.
- Packaging15%75%
Remote endpoint; authentication requirements not declared.
Documentation
Full READMEctxstore-mcp
Alternatives to ctxstore — memory that follows you across models
- MemoryCareHomesD · 33Licensed memory care homes in the UK and US.
- MemoryA · 93Knowledge-graph based persistent memory, letting an assistant retain entities, relations and observations across sessions.
- Synap MemoryA · 88Persistent memory for AI agents — log and recall conversation context over MCP.
- Cairn.ink MemoryA · 80Cross-session memory for AI agents with a Source Receipt for every memory, over MCP.
Maintain ctxstore — memory that follows you across models? Add a badge to your README
Shows its health grade, and links readers to install steps for every client.
[](https://mcp-skills-hub.vercel.app/mcps/ai-ctxstore-ctxstore-mcp)Catalog data refreshed . Something wrong? Report it.