Skip to content

Claude Code

For AI Agents

Machine-readable docs: mnemoverse/llms.txt (works in all sandboxes)

Give Claude persistent memory. One command — it never forgets again.

Claude Code — add via CLI:

bash
claude mcp add mnemoverse -s user \
  -e MNEMOVERSE_API_KEY=mk_live_YOUR_KEY \
  -e MNEMOVERSE_API_URL=https://core.mnemoverse.com/api/v1 \
  -- npx -y @mnemoverse/mcp-memory-server@latest

That's it. Claude Code now has long-term memory across all sessions.

Get your API key at console.mnemoverse.com (free tier, no credit card).

Prefer no API key? Connect over one-click OAuth instead — the connector URL is https://mcp.mnemoverse.com/mcp; sign in with your browser, nothing to paste.

Using the Claude apps, not the CLI?

Claude Desktop, claude.ai (web), and mobile set up differently — see Claude Desktop, Web & Mobile.

Try It

Claude may never recall what it saved — unless you tell it to

Without a standing instruction, Claude answers from its own context (and Claude Code keeps its own CLAUDE.md notes) instead of checking Mnemoverse — so recall quietly goes unused. Fix it with one line: Make Your Agent Use Memory. Writing is the opposite case and needs no fix: the server's own instructions tell Claude to save durable facts, preferences and decisions proactively, without waiting to be asked.

With that in place, the point is one memory across tools. In Claude Code:

"Remember: staging deploys go through make deploy-staging, never Railway directly."

Later, in Cursor or ChatGPT — a different tool, even days later:

"How do I deploy staging here?"

It recalls the rule, because the memory lives in Mnemoverse, not in any single tool. (A single-tool "it remembers" demo wouldn't prove much — the tool's own memory could do that; cross-tool recall is what needs Mnemoverse.)

If this setup saved you time, a GitHub star helps the next builder find it.

Tools

The MCP server registers 10 tools in total: the 5 core memory tools below, four Beta shared-room tools (covered in their own section), and vault_list, which returns the names (aliases) of stored secrets — never the secret values themselves.

memory_write — Store a memory

When Claude learns something worth keeping — a preference, a lesson, a decision — it stores it.

You: "I prefer Tailwind over CSS modules"
Claude: [calls memory_write]
    content: "User prefers Tailwind CSS over CSS modules for styling"
    concepts: ["tailwind", "css", "styling", "preferences"]
→ Stored (importance: 0.82)
NameTypeRequiredDescription
contentstringYesWhat to remember (1-10,000 chars)
conceptsstring[]NoKey concepts for linking memories (up to 256 items)
domainstringNoNamespace: "engineering", "user:alice"

memory_read — Recall memories

Before starting a task, Claude checks what it already knows.

You: "Set up the database"
Claude: [calls memory_read]
    query: "database setup preferences and history"
→ 1. Project uses PostgreSQL 15 + Prisma ORM (postgresql, prisma) @"engineering" · 2026-07-14 09:31Z
     id: 550e8400-e29b-41d4-a716-446655440000
  2. Always run migrations with --create-only first (migrations, prisma) @"lessons" [by cursor] · 2026-06-02 18:05Z
     id: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
  3. DB hosted on Supabase, connection string in .env.local (supabase, env) · 2026-05-21 11:47Z
     id: 6ba7b811-9dad-11d1-80b4-00c04fd430c8
NameTypeRequiredDescription
querystringYesNatural language search (1-5,000 chars)
top_kintegerNoRequested number of results (default: 5, max: 50). Not a hard cap: association expansion can return more, and the relevance floor can return fewer
domainstringNoFilter by namespace
order_bystringNo"relevance" (default) or "recency" — newest first
since / untilstringNoISO-8601 bounds on creation time (naive = UTC)
exclude_authorstringNoSkip entries whose author principal equals this value — the "only what others wrote" read in a room. It matches the principal, not the agent name shown in results, so an agent name will silently match nothing (max 200 chars)

memory_list_recent — Catch up on what's new

The newest memories first, no search query — for resuming after a break or checking a shared room for fresh entries.

You: "Anything new in the team room since yesterday?"
Claude: [calls memory_list_recent]
    domain: "xroom:acme-team"
    since: "2026-08-03T00:00:00Z"
→ 1. [2026-08-04 09:12Z] Staging moved to Fly.io — Railway config retired [by bob/claude]
  2. [2026-08-03 16:40Z] Design review moved to Thursdays [by alice/cursor]
  (end of feed — nothing older)
NameTypeRequiredDescription
domainstringNoOne domain (e.g. a room's xroom:... address); omit for all
sincestringNoOnly entries at/after this ISO-8601 instant — your "last seen" watermark
untilstringNoOnly entries at/before this instant. Pair with since for a closed window
exclude_authorstringNoSkip one author principal — same value and same caveat as on memory_read
limitintegerNoPage size (default: 20, max: 100)
cursorstringNoOpaque cursor from the previous page — continues without skips

memory_feedback — Rate memories

After using a memory, Claude reports whether it helped. Good memories surface faster next time.

Claude: [calls memory_feedback]
    atom_ids: ["550e8400-..."]
    outcome: 1.0  // Very helpful!
→ Feedback recorded for 1 memory.
NameTypeRequiredDescription
atom_idsstring[]YesMemory IDs from read results
outcomenumberYes-1.0 (harmful) to 1.0 (very helpful)

memory_stats — Check status

Claude: [calls memory_stats]
→ Memories: 1,250 (500 episodes, 450 prototypes)
  Associations: 8,500 Hebbian edges
  Domains: engineering, user:alice, project:acme
  Avg quality: valence 0.65, importance 0.72

Shared rooms (Beta)

Beyond your private memory, Claude can share a memory pool with other people's assistants through a room. Four Beta tools — memory_create_room, memory_invite_to_room (which mints a share code, mnvr_..., single-use through the local server), memory_join_room, and memory_list_rooms — let Claude spin up a room, invite someone, join one, and re-find the ones you already have: it returns each room's name and its xroom:<room_id> address, which is exactly the value to pass as domain on memory_write / memory_read. The hosted remote connector can request a higher use limit. Members then read and write the shared pool by passing domain: "xroom:<room_id>" on memory_write / memory_read. See Join a shared room for the full owner-and-joiner flow.

What to Remember

CategoryExample
Preferences"User prefers dark mode", "Always use pnpm, not npm"
Project context"This repo uses PostgreSQL + Prisma", "Deploy target is Railway"
Lessons learned"Never deploy on Fridays", "Run tests before push"
Decisions"Chose REST over GraphQL for caching simplicity"
People"Alice owns the design system", "Bob reviews all API changes"
Patterns"Exponential backoff fixed timeout issues in this service"

Universal Memory

Same API key, same memories — across all tools.

text
                    ┌── Claude Code ← you are here
                    ├── Claude Desktop / web / mobile
   Mnemoverse API ──├── Cursor / VS Code / Windsurf
   (one memory)     ├── ChatGPT
                    └── Python SDK / REST

Write a memory in Claude Code → ChatGPT reads it. Learn something in Cursor → Claude Code recalls it.

Configuration

VariableRequiredDefault
MNEMOVERSE_API_KEYYes
MNEMOVERSE_API_URLNohttps://core.mnemoverse.com/api/v1

MNEMOVERSE_API_URL is the REST backend the local server talks to — it is not an MCP endpoint; never paste it into a connector-URL field. A remote MCP connector uses https://mcp.mnemoverse.com/mcp (Remote MCP Server).

Source & Distribution

npm versionMCP Registry

The MCP server is also listed on the Official MCP Registry. Source on GitHub under MIT.