Public log

@mnemoverse/mcp-memory-server

Hosted long-term memory for AI agents over MCP. Write and read memories from Claude Code, Cursor, VS Code and ChatGPT; rating a recalled memory as helpful or misleading re-ranks what comes back next. OAuth sign-in or API key, free plan.

npm · fingerprint db356117bf1d99af37e91f7a · repository · RSS

11tools
3recorded versions
23dtracked
changed since 20 Oct

What changed

Changed between 20 October 2026 and 28 October 2026 (first seen 2026-10-28 12:57 UTC)

2 descriptions rewritten, 1 schema or annotation change with the description left byte-identical.

--- pinned/memory_feedback
+++ observed/memory_feedback
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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 lowers it so other memories out-rank it — nothing is erased and nothing decays with time. Use it after an answer that relied on or rejected memories from memory_read: pass the ids of those memories as memory_ids, with outcome 1 when they helped and -1 when they were wrong or stale. For memories read from a shared room, also pass that room's address as domain; your own memories need no domain. A read-only room member cannot rate the room's memories.",
+   "description": "Rate memories returned by memory_read to help improve future retrieval ranking. Pass their IDs as memory_ids and an outcome from -1 (unhelpful) to 1 (helpful). Records feedback and updates ranking signals: positive feedback raises a memory's ranking; negative feedback lowers it so other memories out-rank it — nothing is erased. Saved text is not changed or deleted. For memories read from a shared room, pass that room's address as domain; your own memories need no domain. A read-only room member cannot rate the room's memories.",
    "execution": {
      "taskSupport": "forbidden"
    },
--- pinned/memory_list_recent
+++ observed/memory_list_recent
  {
    "annotations": {
      "destructiveHint": false,
-   "description": "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. A page is also bounded by SIZE, so a page of long entries comes back shorter than `limit` and hands you a cursor for the rest — nothing is dropped, and following the cursor is how you get it. 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.",
+   "description": "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. A page is also bounded by SIZE, so a page of long entries comes back shorter than `limit` and hands you a cursor for the rest — nothing is dropped, and following the cursor is how you get it. 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, though it names the ones you have (`rooms_not_searched`).",
    "execution": {
      "taskSupport": "forbidden"
    },
+       },
+       "rooms_not_searched": {
+         "additionalProperties": false,
+         "description": "Present only on a call WITHOUT `domain`, when you have shared rooms or they could not be checked: rooms are separate stores that call did not search.",
+         "properties": {
+           "note": {
+             "description": "The same disclosure the text ends with.",
+             "type": "string"
+           },
+           "rooms": {
+             "description": "The live rooms this call did not search; present only when state is 'live'. A row missing room_id, address or role is omitted here and still named in `note`.",
+             "items": {
+               "additionalProperties": false,
+               "properties": {
+                 "address": {
+                   "description": "Domain address (xroom:<id>); pass as `domain` on read/write.",
+                   "type": "string"
+                 },
+                 "archived": {
+                   "description": "True if archived (owned rooms only).",
+                   "type": "boolean"
+                 },
+                 "name": {
+                   "description": "The room name.",
+                   "type": "string"
+                 },
+                 "role": {
+                   "description": "'owner' or 'member'.",
+                   "type": "string"
+                 },
+                 "room_id": {
+                   "description": "The room's id (room_...).",
+                   "type": "string"
+                 },
+                 "scope": {
+                   "description": "'read' or 'read_write'.",
+                   "type": "string"
+                 }
+               },
+               "required": [
+                 "room_id",
+                 "address",
+                 "role",
+                 "archived"
+               ],
+               "type": "object"
+             },
+             "type": "array"
+           },
+           "state": {
+             "description": "'live': the rooms listed can be read by passing an address as `domain`. 'archived-only': every room you have is archived and refuses reads. 'unknown': the room list could not be checked, so whether any room went unsearched is not known.",
+             "enum": [
+               "live",
+               "archived-only",
+               "unknown"
+             ],
+             "type": "string"
+           }
+         },
+         "required": [
+           "state",
+           "note"
+         ],
+         "type": "object"
        }
      },
      "required": [
--- pinned/memory_read
+++ observed/memory_read
  {
    "annotations": {
      "destructiveHint": false,
-         "description": "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.",
+         "description": "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, or in `rooms_not_searched`, which an answer without `domain` carries when you have rooms.",
          "type": "string"
        },
        "exclude_author": {
+       },
+       "rooms_not_searched": {
+         "additionalProperties": false,
+         "description": "Present only on a call WITHOUT `domain`, when you have shared rooms or they could not be checked: rooms are separate stores that call did not search.",
+         "properties": {
+           "note": {
+             "description": "The same disclosure the text ends with.",
+             "type": "string"
+           },
+           "rooms": {
+             "description": "The live rooms this call did not search; present only when state is 'live'. A row missing room_id, address or role is omitted here and still named in `note`.",
+             "items": {
+               "additionalProperties": false,
+               "properties": {
+                 "address": {
+                   "description": "Domain address (xroom:<id>); pass as `domain` on read/write.",
+                   "type": "string"
+                 },
+                 "archived": {
+                   "description": "True if archived (owned rooms only).",
+                   "type": "boolean"
+                 },
+                 "name": {
+                   "description": "The room name.",
+                   "type": "string"
+                 },
+                 "role": {
+                   "description": "'owner' or 'member'.",
+                   "type": "string"
+                 },
+                 "room_id": {
+                   "description": "The room's id (room_...).",
+                   "type": "string"
+                 },
+                 "scope": {
+                   "description": "'read' or 'read_write'.",
+                   "type": "string"
+                 }
+               },
+               "required": [
+                 "room_id",
+                 "address",
+                 "role",
+                 "archived"
+               ],
+               "type": "object"
+             },
+             "type": "array"
+           },
+           "state": {
+             "description": "'live': the rooms listed can be read by passing an address as `domain`. 'archived-only': every room you have is archived and refuses reads. 'unknown': the room list could not be checked, so whether any room went unsearched is not known.",
+             "enum": [
+               "live",
+               "archived-only",
+               "unknown"
+             ],
+             "type": "string"
+           }
+         },
+         "required": [
+           "state",
+           "note"
+         ],
+         "type": "object"
        }
      },
      "required": [

Changed 2026-10-13 14:09 UTC

11 schema or annotation changes with the description left byte-identical.

--- pinned/memory_create_room
+++ observed/memory_create_room
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "description": {
          "description": "Optional description of the room.",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "address": {
--- pinned/memory_feedback
+++ observed/memory_feedback
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "domain": {
          "description": "Only for memories read from a shared room: that room's address (xroom:...), exactly as you read it. Omit it for your own memories, which are rated by id alone.",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "avg_valence": {
--- pinned/memory_graph
+++ observed/memory_graph
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "depth": {
          "description": "Hops to expand from the seeds (1-3, default 1). At depth 2 or 3, if min_weight is omitted the engine floors edge weight at 0.05 at EVERY hop — including the first — so a hub concept cannot fan out across the whole store before limit applies; pass min_weight explicitly (0 included) to see every edge anyway.",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "edges": {
--- pinned/memory_invite_to_room
+++ observed/memory_invite_to_room
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "expires_in_days": {
          "description": "Days until the invite expires (default 7).",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "code": {
--- pinned/memory_join_room
+++ observed/memory_join_room
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "code": {
          "description": "The invite code (mnvr_...).",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "address": {
--- pinned/memory_list_recent
+++ observed/memory_list_recent
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "cursor": {
          "description": "Opaque cursor from a previous page's 'More older entries exist' line — continues the listing without skips or duplicates.",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "items": {
--- pinned/memory_list_rooms
+++ observed/memory_list_rooms
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {},
      "type": "object"
    },
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "rooms": {
--- pinned/memory_read
+++ observed/memory_read
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "diversity": {
          "description": "0 (default) returns the matches as ranked. Above 0, a match that is a near-copy of one already picked gives its slot to the next distinct memory (maximal marginal relevance); 1 lets similarity alone decide after the first pick. It changes which memories come back, not their scores, and applies only when there are more matches than top_k and top_k is below 200.",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "items": {
--- pinned/memory_stats
+++ observed/memory_stats
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {},
      "type": "object"
    },
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "avg_importance": {
--- pinned/memory_write
+++ observed/memory_write
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "concepts": {
          "description": "Key concepts for linking related memories (e.g. ['deploy', 'friday', 'staging'])",
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "importance": {
--- pinned/vault_list
+++ observed/vault_list
  {
    "annotations": {
      "destructiveHint": false,
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {},
      "type": "object"
    },
-     "$schema": "http://json-schema.org/draft-07/schema#",
      "additionalProperties": false,
      "properties": {
        "secrets": {

Current tools

Show all 11 tool fingerprints
memory_create_room
693e87d23cd70373
memory_feedback
3488ef5fadf99546
memory_graph
00b225b1a5e9f0b5
memory_invite_to_room
7134a91ef1bd96fd
memory_join_room
6342a533f5434ce1
memory_list_recent
1880a0e0cdb5376f
memory_list_rooms
083b6713d60f9d0b
memory_read
f9985ce0eba48e28
memory_stats
e07dbe8c432767b0
memory_write
f892fea691c7ca95
vault_list
f5fa9d45262e25f2

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your @mnemoverse/mcp-memory-server command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for @mnemoverse/mcp-memory-server

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/af8712125a7cc250.svg)](https://mcp-pin.gautamkhosla.com/servers/af8712125a7cc250.html)