Skip to main content
Glama
mnemoverse

Mnemoverse Memory

@mnemoverse/mcp-memory-server

npm version npm downloads MCP Registry License: MIT Research: SLoD arXiv Glama quality

Hosted memory for AI agents that learns which facts matter. Feedback re-ranks recall — a Rescorla-Wagner update on the prediction error, not a similarity score — so what helped rises and what misled sinks, with a bounded recency tie-breaker for fresh memories. The engine also ships consolidation (HDBSCAN clustering, with Von Restorff protection so distinctive memories survive compression). One API key works across Claude, Cursor, VS Code, ChatGPT, and any MCP client.

Memory that persists across sessions, projects, and tools — and improves with use. Hosted, so there's no infrastructure to run, and not locked to a single cloud.

⭐ If Mnemoverse saves you from re-explaining context to your agents, star the repo. It helps other builders find it.

Quick Start

1. Get a free API key

Sign up at console.mnemoverse.com — takes 30 seconds, no credit card.

2. Connect to your AI tool

Claude Code — add via CLI:

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

Cursor — click to install, or add to .cursor/mcp.json:

Add to Cursor

{
  "mcpServers": {
    "mnemoverse": {
      "command": "npx",
      "args": [
        "-y",
        "@mnemoverse/mcp-memory-server@latest"
      ],
      "env": {
        "MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY",
        "MNEMOVERSE_API_URL": "https://core.mnemoverse.com/api/v1"
      }
    }
  }
}

VS Code — add to .vscode/mcp.json (note: VS Code uses servers, not mcpServers):

{
  "servers": {
    "mnemoverse": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@mnemoverse/mcp-memory-server@latest"
      ],
      "env": {
        "MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY",
        "MNEMOVERSE_API_URL": "https://core.mnemoverse.com/api/v1"
      }
    }
  }
}

Windsurf — add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "mnemoverse": {
      "command": "npx",
      "args": [
        "-y",
        "@mnemoverse/mcp-memory-server@latest"
      ],
      "env": {
        "MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY",
        "MNEMOVERSE_API_URL": "https://core.mnemoverse.com/api/v1"
      }
    }
  }
}

More MCP clients — same server, different config file:

Zed — add to ~/.config/zed/settings.json (Zed uses context_servers, and "source": "custom" is required):

{
  "context_servers": {
    "mnemoverse": {
      "source": "custom",
      "command": "npx",
      "args": [
        "-y",
        "@mnemoverse/mcp-memory-server@latest"
      ],
      "env": {
        "MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY",
        "MNEMOVERSE_API_URL": "https://core.mnemoverse.com/api/v1"
      }
    }
  }
}

JetBrains (AI Assistant) — Settings → Tools → AI Assistant → Model Context Protocol (MCP), then paste:

{
  "mcpServers": {
    "mnemoverse": {
      "command": "npx",
      "args": [
        "-y",
        "@mnemoverse/mcp-memory-server@latest"
      ],
      "env": {
        "MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY",
        "MNEMOVERSE_API_URL": "https://core.mnemoverse.com/api/v1"
      }
    }
  }
}

ClineMCP Servers → Configure (or edit cline_mcp_settings.json). Cline reads env values literally, so paste your real key — not a ${VAR} reference:

{
  "mcpServers": {
    "mnemoverse": {
      "command": "npx",
      "args": [
        "-y",
        "@mnemoverse/mcp-memory-server@latest"
      ],
      "env": {
        "MNEMOVERSE_API_KEY": "mk_live_YOUR_KEY",
        "MNEMOVERSE_API_URL": "https://core.mnemoverse.com/api/v1"
      }
    }
  }
}

Continue — add ~/.continue/mcpServers/mnemoverse.yaml (Continue uses YAML):

mcpServers:
  - name: mnemoverse
    command: npx
    args:
      - "-y"
      - "@mnemoverse/mcp-memory-server@latest"
    env:
      MNEMOVERSE_API_KEY: "mk_live_YOUR_KEY"
      MNEMOVERSE_API_URL: "https://core.mnemoverse.com/api/v1"

Why @latest? Bare npx @mnemoverse/mcp-memory-server is cached indefinitely by npm and stops re-checking the registry. The @latest suffix forces a metadata lookup on every Claude Code / Cursor / VS Code session start (~100-300ms), so you always pick up new releases.

⚠️ Restart your AI client after editing the config. MCP servers are only picked up on client startup.

3. Try it — 30 seconds to verify it works

Paste this in your AI chat:

"Remember that my favourite TypeScript framework is Hono, and please call memory_write to save it."

Your agent should call memory_write and confirm the memory was stored.

Then open a new chat / new session (this is the whole point — memory survives restarts), and ask:

"What's my favourite TypeScript framework?"

Your agent should call memory_read, find the entry, and answer "Hono". If it does — you're wired up. Write whatever you want next.

If it doesn't remember: check that the client was fully restarted and the config has your real mk_live_... key, not the placeholder.

Related MCP server: memmd-mcp

Tools

Tool

What it does

memory_write

Store a memory — insight, preference, lesson learned

memory_read

Search memories by natural language query (optional recency ordering, time bounds, author exclusion)

memory_list_recent

List newest memories first — no query; since/until bounds (inclusive) + cursor paging

memory_feedback

Rate memories as helpful or not (improves future recall)

memory_stats

Check how many memories stored, which domains exist

memory_create_room

Create a shared memory room; its address works as a domain on write/read

memory_invite_to_room

Mint a one-time invite (code + link) for a room you own

memory_join_room

Join a shared room with an invite code (mnvr_...)

memory_list_rooms

List rooms you own or joined, with each room's address to use as domain

vault_list

List Vault secrets by alias and purpose — the secret value is never returned

Ideas: What to Remember

  • User preferences: "I use dark mode", "I prefer Tailwind over CSS modules"

  • Project context: "This project uses PostgreSQL + Prisma", "Deploy to Railway"

  • Lessons learned: "Always run tests before push on this repo"

  • Decisions made: "We chose REST over GraphQL because of caching simplicity"

  • People & roles: "Alice is the designer, Bob owns the API"

  • Past mistakes: "Don't deploy on Fridays — learned this the hard way"

Universal Memory

The same API key works across all tools. Write a memory in Claude Code — read it in Cursor. Learn something in VS Code — your GPT Custom Action knows it too.

                    ┌── Claude Code (this MCP server)
                    ├── Cursor (this MCP server)
   Mnemoverse API ──├── VS Code (this MCP server)
   (one memory)     ├── GPT (Custom Actions)
                    ├── Python SDK (pip install mnemoverse)
                    └── REST API (curl)

Configuration

Env Variable

Required

Default

MNEMOVERSE_API_KEY

For every tool call — the server starts and lists its tools without one

MNEMOVERSE_API_URL

No

https://core.mnemoverse.com/api/v1

Setup and reference

Background reading

Project

Privacy Policy

This server sends to the Mnemoverse API (core.mnemoverse.com), authenticated with your API key, what a tool call carries — and nothing else it can see. It does not read your AI client's conversation history, your local files, or anything you don't pass to a memory_* / vault_* tool. Stored memories live under your account; Mnemoverse never sells them and never shares them on its own. The one sharing path is the one you create yourself: inviting someone to a shared room grants their assistant access to that room's memories, bounded by the invite's scope.

What each tool sends:

Tool

Data sent

memory_write

the content, concepts, and domain you pass

memory_read

the query, plus any filters: domain, since/until, exclude_author, top_k, order_by

memory_list_recent

the feed filters: domain, since/until, exclude_author, limit, cursor

memory_feedback

the atom_ids being rated and the outcome score

memory_create_room

the room name and description

memory_invite_to_room

the room_id, invite scope, and expiry

memory_join_room

the invite code

memory_stats / memory_list_rooms / vault_list

no request body — authenticated GETs

One thing goes out that you did not explicitly request: since 0.8.1, when a search or feed comes back empty, the server sends one or two authenticated read-only GET probes (/memory/rooms and/or /memory/stats) so the empty answer can say what it did not cover. The probes carry your API key and nothing else, change no stored state, and are disclosed in the CHANGELOG.

Privacy Policy

https://mnemoverse.com/privacy

Retention & deletion

correct a wrong or stale memory by writing a fresh one; deletion is an administrative operation on the REST API, not exposed through this MCP server

Contact

hello@mnemoverse.com

License

MIT © Mnemoverse

Available Tools

10 tools
memory_create_roomAInspect

Create a SHARED memory room — a space OTHER people's assistants can read, and write too when their invite granted read_write (the default scope), across Claude/ChatGPT/Cursor. Use when the user wants to share context or collaborate with someone else (e.g. 'make a room for me and Olya'). Returns the room's address; pass that address as the domain on memory_write/memory_read to use it. To bring someone in, call memory_invite_to_room next.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRoom name, unique within your account (e.g. 'me-and-olya').
descriptionNoOptional description of the room.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a write operation (readOnlyHint false) but the description adds valuable behavioral context: other people's assistants can read/write, the default scope is read_write, and the tool returns an address usable as a domain. This goes beyond what annotations alone provide, though it omits potential errors (e.g., if the room name already exists).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the main purpose, then usage context, return value, and next step. Each sentence adds useful information, though the phrasing is slightly dense with multiple clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description explains what the tool returns and how to use it. It also covers cross-assistant sharing and the invitation workflow. It lacks discussion of failure cases or authorization requirements, but given the tool's simplicity and good annotations, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full parameter descriptions with 100% coverage, so the description does not need to add much. It does not repeat or enrich the parameter meaning beyond what's already in the schema, and the only extra info (returned address) is about output rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a SHARED memory room, with a specific verb 'Create' and a resource ('memory room'). It distinguishes itself from sibling tools like memory_write and memory_invite_to_room by focusing on the room creation aspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool: 'Use when the user wants to share context or collaborate with someone else' and provides a concrete example. It also mentions the next step ('call memory_invite_to_room next') and how to use the returned address with memory_write/memory_read, offering clear context and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_feedbackA
Destructive
Inspect

Report whether memories returned by memory_read were actually helpful. This is a learning signal, not a log: positive feedback raises a memory's ranking so it surfaces faster next time (across all of the user's tools), negative feedback lets it fade. Call it right after you act on (or reject) recalled memories, passing the ids from the memory_read results. NOTE: this reaches your own domains only — it takes no domain argument, so rating a memory that lives in a shared room silently does nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
outcomeYesHow helpful was this? 1.0 = very helpful, 0 = neutral, -1.0 = harmful/wrong
atom_idsYesIDs of memories to give feedback on (from memory_read results)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behavioral traits beyond the annotations: it explains the learning-signal mechanism ('positive feedback raises a memory's ranking... negative feedback lets it fade'), specifies scope ('across all of the user's tools'), and highlights the silent failure for shared domains. This adds significant context that the raw annotations (destructiveHint, openWorldHint) do not convey, and it does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (three sentences) and well-structured: it opens with the core purpose, then explains the mechanism and timing, and finishes with an important caveat. Every sentence carries essential information with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description covers all critical aspects: what it does, when to call it, the effect on memory ranking, the scope, and a failure mode. No output schema is present, so not describing return values is acceptable. The description is complete for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes both parameters with clear meanings and ranges (outcome from -1 to 1, atom_ids as array of strings). The description adds value by clarifying that atom_ids come from 'memory_read results' and by connecting the outcome values to the ranking effect ('positive feedback raises... negative feedback lets it fade'). While this is modest, it enhances the schema's information for a high-coverage case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Report whether memories returned by memory_read were actually helpful.' It uses a specific verb ('report'), a specific resource ('memories'), and a clear context ('returned by memory_read'). This distinguishes it from sibling tools like memory_write (writing), memory_read (reading), and memory_delete (deleting).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: 'Call it right after you act on (or reject) recalled memories.' It also clarifies what the tool is not ('not a log') and includes a caveat about when it won't work ('rating a memory that lives in a shared room silently does nothing'), effectively serving as a when-not-to-use warning. This is strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_invite_to_roomAInspect

Mint a one-time invite for a room you own and get a ready-to-forward message. The user sends that message to the person they want to add (any messenger); the recipient opens the link or tells THEIR assistant the code to join. Use after memory_create_room, or whenever the user says 'invite ' to an existing room.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoRole the invitee gets — 'read' or 'read_write' (default read_write).
room_idYesThe room's id (room_...), from memory_create_room.
expires_in_daysNoDays until the invite expires (default 7).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds behavioral context: the invite is one-time, produces a ready-to-forward message, and involves third-party sharing (messenger, link or code). No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences, each adding value: action, user flow, usage context. Front-loaded with the core verb and resource, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately hints at return value ('ready-to-forward message'). The tool's complexity is low, and the description covers the essential workflow. Could be improved by explicitly stating the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema; it mentions 'room you own' which aligns with room_id but provides no additional detail on scope or expires_in_days. Schema descriptions are adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it mints a one-time invite for a room, with a specific verb 'mint' and resource 'invite'. It distinguishes from sibling tools like memory_create_room and memory_join_room by focusing on the invite creation action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: 'Use after memory_create_room, or whenever the user says invite <someone>.' While it doesn't list explicit exclusions, the context is clear and associates with specific user scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_join_roomA
Idempotent
Inspect

Join a shared memory room using an invite code (starts with 'mnvr_'). Use when the user pastes an invite code or says something like 'join room with code ...'. After joining, use the returned address as the domain on memory_write/memory_read to read and write the shared room.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe invite code (mnvr_...).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds behavioral context: the returned address should be used as the domain for memory_write/memory_read. No contradictions. The description enhances understanding beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a distinct purpose: stating the function, providing usage triggers, and outlining post-action steps. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no output schema), the description covers the necessary context: what the tool does, when to use it, and what to do with the result. Annotations cover safety traits. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single parameter 'code' with full description and constraints (including the 'mnvr_' prefix). The description repeats this and adds usage context, but does not add meaningful new semantics beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('join') and the resource ('shared memory room'), with the target condition ('using an invite code'). It distinguishes from sibling tools like memory_create_room (create vs join) and memory_invite_to_room (invite others vs join).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides usage triggers: 'when the user pastes an invite code or says something like join room with code ...'. It also gives post-join guidance. It does not explicitly state when not to use, but the positive use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_list_recentA
Read-onlyIdempotent
Inspect

List the NEWEST memories first — no search query needed. Semantic search answers 'what do I know about X'; this answers 'what happened lately': resuming work after a break, catching up on a shared room ('any new messages?'), or reviewing what was saved recently. Pass since (your last-seen time) to get only what's new, and page through older entries with the returned cursor. Complete by construction WITHIN ONE SCOPE — nothing is skipped there, unlike a semantic search. To catch up on a shared room you MUST pass its address as domain: rooms are separate stores and an unscoped call never covers them.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (default: 20). Newest first.
sinceNoOnly entries created at/after this ISO-8601 instant (naive = UTC) — your novelty watermark.
untilNoOnly entries created at/before this ISO-8601 instant (inclusive). Pair with `since` to read a closed window — 'what happened on Monday' — instead of paging back from now.
cursorNoOpaque cursor from a previous page's 'More older entries exist' line — continues the listing without skips or duplicates.
domainNoRestrict to one domain. REQUIRED to read a shared room — pass its address ('xroom:room_01ABC'), because rooms are separate stores that an unscoped feed does NOT cover. Omit only when you mean your own domains. Room addresses come from memory_list_rooms.
exclude_authorNoDrop entries written by this author PRINCIPAL. ⚠️ NOT USABLE FROM HERE YET — the principal is never shown in these results, so there is no value you can get through this tool; a guess like 'me' filters nothing, silently. Same caveat as on memory_read.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld/idempotent annotations, the description reveals useful behaviors: ordering (newest first), the existence of an opaque cursor for paging, the completeness guarantee within one scope, and that room domains are separate stores not covered by an unscoped call. This adds significant context the annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the first states the core purpose, then a useful contrast with semantic search, followed by concrete usage hints for since/cursor, completeness, and domain requirements. It is compact (roughly 70 words) and front-loaded with the most important info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (6 params, no output schema), the description covers the key usage patterns: resuming work, catching up on rooms, using since/cursor, and domain scoping. It does not describe the return shape or fields, which would have been helpful since no output schema exists, but the context provided is largely sufficient for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning for `since` (last-seen time to get only new), `cursor` (page through older entries), and `domain` (required for shared rooms), elevating it above baseline. It does not comment on `limit`, `until`, or `exclude_author`, but those are already well-described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'List the NEWEST memories first'. It explicitly contrasts with semantic search ('this answers what happened lately') and clarifies no query is needed, distinguishing it clearly from sibling tools like memory_read and memory_list_rooms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers concrete use cases (resuming work, catching up on a shared room) and directly contrasts with semantic search. It also gives a hard rule: pass `domain` to cover rooms. However, it does not explicitly state when NOT to use this tool (e.g., for exact lookup vs memory_read), so it falls just short of perfect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_list_roomsA
Read-onlyIdempotent
Inspect

List the shared memory rooms you can use — the ones you OWN plus the ones you've JOINED — each with the address to pass as domain on memory_write / memory_read. Use this to RE-FIND a room in a new session (e.g. 'what rooms do I have?', 'resume the room with Olya') instead of having to create or re-join it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds meaningful context beyond annotations: the distinction between owned and joined rooms, and that returned addresses are meant to be passed as the 'domain' parameter. This is more than a minimal read operation, so a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, includes an example, and every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple list operation with good annotations and no output schema. The description covers purpose, scope, the relationship to sibling tools, and a concrete use case, making it complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100%, so the baseline is 4 per the rubric. The description references the 'domain' address output, which indirectly explains why no parameters are needed, but doesn't need to add anything beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb+resource: 'List the shared memory rooms you can use' and specifies scope (OWN + JOINED). It distinguishes from siblings by noting the rooms' addresses are for memory_write/memory_read and that this replaces create/re-join.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit use case is provided: 'Use this to RE-FIND a room in a new session' with an alternative explicitly named ('instead of having to create or re-join it'). This clearly guides when to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_readA
Read-onlyIdempotent
Inspect

Search your long-term memory before answering anything that may have come up before — user preferences, past decisions, project setup, people, or earlier context. This memory is shared: it persists across sessions and across every AI tool the user has connected (Claude, ChatGPT, Cursor, VS Code). ALWAYS check here first when you're unsure whether you already know something; no need to call it for general world knowledge you already hold. Returns matches ranked by relevance (or newest-first with order_by: 'recency'); each result carries an id you can pass to memory_feedback. A wrong or stale memory is corrected by writing a fresh one with memory_write, not by deleting it.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language description of what you're looking for, e.g. 'database choice for the API' or 'user's preferred testing framework'.
sinceNoOnly memories created at/after this ISO-8601 instant (naive = UTC) — e.g. your last-seen watermark in a shared room.
top_kNoRequested number of results (default: 5). ⚠️ Not a hard cap: association expansion can return MORE than this, and the relevance floor can return fewer — raising it does not reliably widen the result set. For a complete, exactly-bounded listing use memory_list_recent instead.
untilNoOnly memories created at/before this ISO-8601 instant.
domainNoRestrict the search to one domain namespace (e.g. 'project:acme'). Omitting it searches your OWN domains — it does NOT include shared rooms, which are separate stores: to search a room, pass its address here (e.g. 'xroom:room_01ABC'). Find room addresses with memory_list_rooms.
order_byNo'relevance' (default) = ranking order. 'recency' = the matched set re-sorted newest-first. For a complete newest-first feed with no search at all, use memory_list_recent instead.
exclude_authorNoDrop memories written by this author PRINCIPAL — the server-side identity. ⚠️ NOT USABLE FROM HERE YET: the principal is not shown in these results, so there is no value you can obtain through this tool, and a guess like 'me' silently matches nothing and filters nothing. Only pass it if your system knows the exact principal from elsewhere (e.g. the REST API). A self-exclusion shortcut is planned.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: memory is shared across sessions and tools, results are ranked by relevance or recency, and each result carries an id for feedback. It also clarifies that corrections are done via memory_write, not deletion. The only minor gap is not describing the exact return format, but given the annotations and the description's richness, a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose. It's a bit long but every sentence earns its place, covering usage guidance, behavioral notes, and parameter caveats. The use of bold for 'ALWAYS' and warnings like '⚠️' helps highlight key points. It's slightly verbose but not wasteful, so a 4 is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, shared memory, multiple siblings), the description is remarkably complete. It covers when to use, when not to, alternatives, parameter caveats, and behavioral traits. The output schema is absent, but the description mentions that results carry an id for feedback, which is sufficient. No critical information is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds value by explaining the top_k caveat (not a hard cap, can return more or fewer), the domain parameter's behavior (own domains vs shared rooms), and the exclude_author warning (not usable from here). This goes beyond the schema's basic descriptions, providing critical usage nuances. A 4 is justified because it adds meaningful semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching long-term memory for prior context, preferences, decisions, etc. It distinguishes itself from siblings by explicitly mentioning memory_list_recent and memory_feedback, and by noting that it searches own domains vs shared rooms. The verb 'search' and resource 'long-term memory' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool: 'ALWAYS check here first when you're unsure whether you already know something' and when not to: 'no need to call it for general world knowledge you already hold.' It also names alternatives: memory_list_recent for complete bounded listings, memory_feedback for feedback, memory_write for corrections, and memory_list_rooms for room addresses. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_statsA
Read-onlyIdempotent
Inspect

Get an overview of the stored memory: total count, episodes vs consolidated prototypes, number of learned associations, the list of domains, and average quality scores. This memory is shared across all AI tools the user has connected to Mnemoverse. Use it to orient yourself, to confirm the exact domain name before writing to it, or when the user asks what you remember. Read-only — changes nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, non-destructive. The description adds important behavioral context: the memory is shared across all connected AI tools, and the tool confirms domain names before writing (a scoping warning). However, it doesn't disclose the return format or whether it might be slow, but the sharedness and read-only confirmation are valuable additions beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler. The first sentence front-loads the core functionality with specifics, the second adds the shared-memory context, and the third gives usage guidance. Every sentence carries weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and a clear list of returned statistics, the description is nearly complete for an agent to call correctly. It lacks explicit mention of the output format (e.g., JSON shape), but the list of stats makes it inferable. The shared-memory note and read-only reassurance add confidentiality. Minor gap: it doesn't mention that this might return a lot of data or that it's a summary, but that's minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description's job is to clarify what the result covers. The description enumerates exactly what statistics are returned (count, episodes vs prototypes, learned associations, domains, average quality). Since there are no parameters to document, this is a high baseline: it fully sets expectations for the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get an overview') and resource (stored memory: total count, episodes vs consolidated prototypes, learned associations, domains, average quality scores). It distinguishes from siblings by positioning itself as the orientation/overview tool, distinct from memory_list_recent or memory_read. The purpose is immediately clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use it: 'Use it to orient yourself, to confirm the exact domain name before writing to it, or when the user asks what you remember.' It also implicitly excludes it as a tool for reading specific memories (that would be memory_read) and for recent lists. This is clear, action-oriented guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_writeAInspect

Store a long-term memory that persists across sessions AND across every AI tool the user has connected to Mnemoverse (Claude, ChatGPT, Cursor, VS Code) — write once, recall everywhere. Call this PROACTIVELY the moment the user states a preference, makes a decision, or you learn a durable fact (people, roles, project setup, a lesson). Don't wait to be asked. Never store passwords, API keys, payment data, MFA codes, government IDs, or health records; skip transient chatter that only matters this turn. Behavior: an importance gate may filter low-value writes, so the result tells you whether the memory was stored or filtered. Write content as a self-contained statement that still makes sense when recalled out of context.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoNamespace to organize memories (e.g. 'engineering', 'user:alice', 'project:acme')
contentYesThe memory to store as a self-contained statement, e.g. 'User prefers TypeScript strict mode' or 'Decided to deploy the API on Cloudflare Workers (2026-06)'.
conceptsNoKey concepts for linking related memories (e.g. ['deploy', 'friday', 'staging'])

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover readOnlyHint=false, openWorldHint=true, etc., but the description adds crucial behavioral detail: 'an importance gate may filter low-value writes, so the result tells you whether the memory was stored or filtered.' It also sets content standards (self-contained statement) and security boundaries, going well beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than typical but every sentence carries meaningful instruction: proactive triggers, prohibited content, behavior note, and content formatting. It is front-loaded with the core purpose and uses a clear 'Behavior:' section. Slightly verbose, but no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no output schema, the description sufficiently covers return behavior ('result tells you whether the memory was stored or filtered') and usage constraints. It addresses cross-session/cross-tool persistence, importance filtering, and content quality—making the description complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are described. The description adds semantic guidance on how to format `content` ('self-contained statement that still makes sense when recalled out of context'), which supplements the schema examples. This extra nuance improves parameter understanding beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Store a long-term memory that persists across sessions AND across every AI tool.' It distinguishes from siblings by emphasizing cross-tool persistence and proactive recall, which sets it apart from memory_read or memory_list_recent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance is provided: 'Call this PROACTIVELY the moment the user states a preference, makes a decision, or you learn a durable fact.' It also lists exclusions ('Never store passwords... skip transient chatter') and instructs not to wait to be asked, giving clear context for when to use this vs. other memory tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vault_listA
Read-onlyIdempotent
Inspect

List the secrets stored in your Mnemoverse Vault — by ALIAS and purpose only; the secret VALUE is never returned or shown to you, and no tool on this server returns it. Use this to check WHICH secrets the user has stored and under what alias (e.g. the user says 'do I have a GitHub token saved?'). Only YOUR account's secrets are listed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. Description adds critical non-obvious behavior: 'the secret VALUE is never returned or shown to you, and no tool on this server returns it'. This system-wide guarantee goes well beyond annotations and prevents false expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action ('List the secrets'), then immediately specifying critical constraints and usage. Every clause adds information; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only list tool without output schema, the description fully covers purpose, return content (alias and purpose), non-return (value), account scoping, and a usage example. No meaningful gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has 0 parameters, so schema coverage is 100% and there is nothing to document. Baseline for 0-param tools is 4. The description adds value by explaining the implicit scope of the list (your own account) and the output shape (alias and purpose), which compensates for lack of parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List the secrets stored in your Mnemoverse Vault' with specific verb and resource, and distinguishes from sibling memory_* tools by namespace (Vault vs memory). Adds clarity that it returns only aliases and purposes, not values, which fully defines the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit use case: 'Use this to check WHICH secrets the user has stored and under what alias (e.g. the user says 'do I have a GitHub token saved?')'. It also clarifies scope ('Only YOUR account's secrets are listed'). Lacks explicit when-not-to-use or alternative tool mention, but no direct sibling exists, so clear context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.9.0
    • Removedmemory_delete
    • Removedmemory_delete_domain
  2. 2 tool updatesv0.8.1
    • Changedmemory_list_recent3 fields changed
      • changedInput schema / properties / domain / description
        Previous value: -"Restrict to one domain (e.g. a shared room address 'xroom:...'); omit for all your domains."New value: +"Restrict to one domain. REQUIRED to read a shared room — pass its address ('xroom:room_01ABC'), because rooms are separate stores that an unscoped feed does NOT cover. Omit only when you mean your own domains. Room addresses come from memory_list_rooms."
      • addedInput schema / properties / exclude_author
        Added value: +{
        +  "description": "Drop entries written by this author PRINCIPAL. ⚠️ NOT USABLE FROM HERE YET — the principal is never shown in these results, so there is no value you can get through this tool; a guess like 'me' filters nothing, silently. Same caveat as on memory_read.",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • addedInput schema / properties / until
        Added value: +{
        +  "description": "Only entries created at/before this ISO-8601 instant (inclusive). Pair with `since` to read a closed window — 'what happened on Monday' — instead of paging back from now.",
        +  "type": "string"
        +}
    • Changedmemory_read3 fields changed
      • changedInput schema / properties / domain / description
        Previous value: -"Restrict the search to one domain namespace (e.g. 'project:acme'); omit to search across all domains."New value: +"Restrict the search to one domain namespace (e.g. 'project:acme'). Omitting it searches your OWN domains — it does NOT include shared rooms, which are separate stores: to search a room, pass its address here (e.g. 'xroom:room_01ABC'). Find room addresses with memory_list_rooms."
      • changedInput schema / properties / exclude_author / description
        Previous value: -"Drop memories written by this author PRINCIPAL (the server-side identity, not shown in these results). Useful when your system knows principals (e.g. via the REST API); a self-exclusion shortcut is planned server-side."New value: +"Drop memories written by this author PRINCIPAL — the server-side identity. ⚠️ NOT USABLE FROM HERE YET: the principal is not shown in these results, so there is no value you can obtain through this tool, and a guess like 'me' silently matches nothing and filters nothing. Only pass it if your system knows the exact principal from elsewhere (e.g. the REST API). A self-exclusion shortcut is planned."
      • changedInput schema / properties / top_k / description
        Previous value: -"Max results to return (default: 5)"New value: +"Requested number of results (default: 5). ⚠️ Not a hard cap: association expansion can return MORE than this, and the relevance floor can return fewer — raising it does not reliably widen the result set. For a complete, exactly-bounded listing use memory_list_recent instead."
  3. 4 tool updatesv0.7.0
    • Addedmemory_list_recent
    • Addedmemory_list_rooms
    • Changedmemory_read4 fields changed
      • addedInput schema / properties / exclude_author
        Added value: +{
        +  "description": "Drop memories written by this author PRINCIPAL (the server-side identity, not shown in these results). Useful when your system knows principals (e.g. via the REST API); a self-exclusion shortcut is planned server-side.",
        +  "maxLength": 200,
        +  "type": "string"
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "description": "'relevance' (default) = ranking order. 'recency' = the matched set re-sorted newest-first. For a complete newest-first feed with no search at all, use memory_list_recent instead.",
        +  "enum": [
        +    "relevance",
        +    "recency"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / since
        Added value: +{
        +  "description": "Only memories created at/after this ISO-8601 instant (naive = UTC) — e.g. your last-seen watermark in a shared room.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • addedInput schema / properties / until
        Added value: +{
        +  "description": "Only memories created at/before this ISO-8601 instant.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
    • Addedvault_list
  4. 3 tool updatesv0.5.0
    • Addedmemory_create_room
    • Addedmemory_invite_to_room
    • Addedmemory_join_room
  5. 6 tool updatesv0.3.7
    • First observedmemory_delete
    • First observedmemory_delete_domain
    • First observedmemory_feedback
    • First observedmemory_read
    • First observedmemory_stats
    • First observedmemory_write

TDQS

A4.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: create/join/invite for rooms, read/write/delete/feedback for memories, stats for overview. No overlap between tools.

Naming Consistency5/5

All tools follow a consistent 'memory_verb' pattern with descriptive nouns (e.g., create_room, delete_domain). No mixing of conventions.

Tool Count5/5

9 tools cover the full memory and room management lifecycle without being excessive. Each tool serves a necessary, distinct function.

Completeness5/5

CRUD operations for memories (write, read, delete, delete_domain) plus room management (create, invite, join) and feedback/stats. No obvious gaps for the stated purpose.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Persistent memory API for AI agents — store, recall, and inject semantically-searchable context across sessions. EU-hosted, GDPR-compliant. Supports Claude, Cursor, Cline, and any MCP-compatible client.
    4
    2
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A shared memory layer for AI agents — one memory.md synced across Claude Desktop, Cursor, Claude Code, OpenAI Codex, and any MCP client.
    4
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Persistent memory for AI coding agents that stores and recalls preferences, decisions, and conventions via semantic similarity, with zero cloud dependencies and plug-and-play MCP integration for Claude Code.
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mnemoverse/mcp-memory-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server