@mnemoverse/mcp-memory-server 0.10.2 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Mnemoverse Memory
2
2
 
3
- **Persistent memory for AI agents over MCP.** Tell it a recalled memory helped or misled, and it re-ranks what comes back next. One key across Claude Code, Cursor, VS Code and ChatGPT.
3
+ **Persistent memory for AI agents over MCP.** Tell it a recalled memory helped or misled, and it re-ranks what comes back next. Shared rooms let several agents work from one memory. One key or OAuth across Claude Code, Cursor, VS Code and ChatGPT.
4
4
 
5
5
  `@mnemoverse/mcp-memory-server` is the MIT-licensed MCP server for the hosted Mnemoverse memory engine.
6
6
 
@@ -13,13 +13,13 @@
13
13
 
14
14
  ## What is Mnemoverse Memory?
15
15
 
16
- Mnemoverse is a hosted memory engine for AI agents, reached over the Model Context Protocol. Mnemoverse stores what your agents learn — decisions, preferences, lessons — and returns it in any connected tool, so one memory follows you across Claude Code, Cursor, VS Code and ChatGPT with a single API key. Mnemoverse re-ranks recall from outcomes: report that a recalled memory helped and a Rescorla-Wagner update on the prediction error raises it, report that it misled and it sinks — a different mechanism from similarity scoring, usable alongside it.
16
+ Mnemoverse is a hosted memory engine for AI agents, reached over the Model Context Protocol. Mnemoverse stores what your agents learn — decisions, preferences, lessons — and returns it in any connected tool, so one memory follows you across Claude Code, Cursor, VS Code and ChatGPT with one account: an API key in a local config, or an OAuth sign-in on the hosted endpoint. Mnemoverse re-ranks recall from outcomes: report that a recalled memory helped and a Rescorla-Wagner update on the prediction error raises it, report that it misled and it sinks — a different mechanism from similarity scoring, usable alongside it.
17
17
 
18
- **What is open source here, and what is not.** This repository, the MCP server, is MIT, and so is the Python SDK. The memory engine they talk to is a hosted service with a free tier; there is no self-hosted build of the engine.
18
+ **What is open source here, and what is not.** This repository, the MCP server, is MIT, and so is the Python SDK. The memory engine they talk to is a hosted service with a free tier. Self-hosting the engine is available on Enterprise plans by agreement, when security or compliance requirements call for it; by default we run it for you.
19
19
 
20
20
  ## How it compares
21
21
 
22
- Most agent memory today lives in one of three places. Per-tool instruction files — `CLAUDE.md`, `.cursorrules`, `AGENTS.md` — are versioned and readable, but each copy belongs to one repo and one tool, and nothing follows you to the next window. A vector store behind RAG retrieves by similarity, and similarity never changes because advice helped or misled. Local-first memory servers win on privacy and latency, and ask you to run and update the infrastructure yourself. Mnemoverse is the managed, cross-tool option in that landscape: nothing to deploy, one key everywhere, and ranking that moves with reported outcomes. If you need memory inside your own perimeter, a local-first server is the better choice — this one is hosted by design.
22
+ Most agent memory today lives in one of three places. Per-tool instruction files — `CLAUDE.md`, `.cursorrules`, `AGENTS.md` — are versioned and readable, but each copy belongs to one repo and one tool, and nothing follows you to the next window. A vector store behind RAG retrieves by similarity, and similarity never changes because advice helped or misled. Local-first memory servers win on privacy and latency, and ask you to run and update the infrastructure yourself. Mnemoverse is the managed, cross-tool option in that landscape: nothing to deploy, one account everywhere, and ranking that moves with reported outcomes. If you need memory inside your own perimeter, a local-first server is the better choice; this one is hosted by default, with Enterprise self-hosting by agreement.
23
23
 
24
24
  The consolidation stage of the engine — HDBSCAN clustering with Von Restorff protection, so distinctive memories are not absorbed into the average — is designed in and currently switched off on the hosted service; our docs say so rather than hide it.
25
25
 
@@ -27,9 +27,26 @@ The consolidation stage of the engine — HDBSCAN clustering with Von Restorff p
27
27
 
28
28
  ## Quick Start
29
29
 
30
+ ### No key: the hosted endpoint
31
+
32
+ If your client signs in over OAuth, you do not need a key at all. Create a free account at [console.mnemoverse.com](https://console.mnemoverse.com/sign-up?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server) (no credit card), then connect the hosted endpoint.
33
+
34
+ Claude Code:
35
+ ```bash
36
+ claude mcp add -s user --transport http mnemoverse https://mcp.mnemoverse.com/mcp
37
+ ```
38
+ Then run `/mcp` in a session, select `mnemoverse` and choose **Authenticate**.
39
+
40
+ Cursor, in `.cursor/mcp.json`:
41
+ ```json
42
+ { "mcpServers": { "mnemoverse": { "url": "https://mcp.mnemoverse.com/mcp" } } }
43
+ ```
44
+
45
+ Claude Desktop, Windsurf, VS Code and ChatGPT: [Remote MCP setup](https://mnemoverse.com/docs/api/remote-mcp-server). The local server below is the other path: it runs on your machine and reads an API key.
46
+
30
47
  ### 1. Get a free API key
31
48
 
32
- Sign up at [console.mnemoverse.com](https://console.mnemoverse.com?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server) — takes 30 seconds, no credit card.
49
+ Sign up at [console.mnemoverse.com](https://console.mnemoverse.com/sign-up?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server) — takes 30 seconds, no credit card.
33
50
 
34
51
  **Check the key before you put it in a config.** Both forms ask for the key at a masked prompt and never pass it as a command argument, so it lands neither in your shell history nor in the process list.
35
52
 
@@ -82,7 +99,7 @@ claude mcp add mnemoverse -s user -e MNEMOVERSE_API_KEY=mk_live_YOUR_KEY -e MNEM
82
99
 
83
100
  [![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=mnemoverse&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBtbmVtb3ZlcnNlL21jcC1tZW1vcnktc2VydmVyQGxhdGVzdCJdLCJlbnYiOnsiTU5FTU9WRVJTRV9BUElfS0VZIjoibWtfbGl2ZV9ZT1VSX0tFWSIsIk1ORU1PVkVSU0VfQVBJX1VSTCI6Imh0dHBzOi8vY29yZS5tbmVtb3ZlcnNlLmNvbS9hcGkvdjEifX0%3D)
84
101
 
85
- The install button carries the placeholder key `mk_live_YOUR_KEY`, not yours, so the shortest path is to skip the button: add the JSON below to `~/.cursor/mcp.json`, merging it with any servers already there, and put your own key in place. Get one at [console.mnemoverse.com](https://console.mnemoverse.com?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server). If you did click the button, edit the same key in the `mcp.json` it wrote; Cursor keeps MCP environment values in that file, not in a settings form. Until the key is real the server starts and lists its tools, but every tool call is refused.
102
+ The install button carries the placeholder key `mk_live_YOUR_KEY`, not yours, so the shortest path is to skip the button: add the JSON below to `~/.cursor/mcp.json`, merging it with any servers already there, and put your own key in place. Get one at [console.mnemoverse.com](https://console.mnemoverse.com/sign-up?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server). If you did click the button, edit the same key in the `mcp.json` it wrote; Cursor keeps MCP environment values in that file, not in a settings form. Until the key is real the server starts and lists its tools, but every tool call is refused.
86
103
 
87
104
  ```json
88
105
  {
@@ -272,11 +289,25 @@ If it doesn't remember: check that the client was fully restarted and the config
272
289
  | `memory_feedback` | Rate memories as helpful or not (improves future recall) |
273
290
  | `memory_stats` | Check how many memories stored, which domains exist |
274
291
  | `memory_create_room` | Create a shared memory room; its address works as a `domain` on write/read |
275
- | `memory_invite_to_room` | Mint a one-time invite (code + link) for a room you own |
292
+ | `memory_invite_to_room` | Mint an invite (code + link) for a room you own; single-use unless `max_uses` allows more |
276
293
  | `memory_join_room` | Join a shared room with an invite code (`mnvr_...`) |
277
294
  | `memory_list_rooms` | List rooms you own or joined, with each room's address to use as `domain` |
278
295
  | `vault_list` | List Vault secrets by alias and purpose — the secret value is never returned |
279
296
 
297
+ ### Prompts
298
+
299
+ Three named shortcuts for clients that show MCP prompts as commands (Claude Code as `/mcp__mnemoverse__<name>`). Each one only asks the model to use the tools above; none of them calls the API itself.
300
+
301
+ | Prompt | Arguments | What it asks for |
302
+ |------|------|-------------|
303
+ | `recall` | `topic` | Search memory for a topic with `memory_read` and summarize only what comes back |
304
+ | `save_insight` | `insight`, optional `domain` | Store an insight with `memory_write` and confirm what was stored |
305
+ | `what_do_you_know` | `subject` | A briefing from `memory_read` that flags what is not stored |
306
+
307
+ ### Resources
308
+
309
+ `memory://item/{memory_id}` opens one saved memory by its id (the `id:` line of a `memory_read` result) for clients that attach MCP resources. It returns the memory's `memory_id`, `content` and `domain` as JSON. It reads your own store only: a memory read from a shared room cannot be opened by id.
310
+
280
311
  ### Tool surface stability
281
312
 
282
313
  `tools/list` is frozen per released version, so a client can save the list it
@@ -288,11 +319,22 @@ saw and diff it against what the server serves today, by version.
288
319
  and what a tool returns, as the CHANGELOG rules state.
289
320
  - **Within a MINOR** (x.Y.0): tools and annotation fields may be added, never
290
321
  removed or renamed, and no declared annotation field disappears or flips
291
- silently. Every addition has a line in the CHANGELOG under that version.
292
- - **Removing or renaming a tool, or dropping or renaming a declared annotation
293
- field,** is announced one MINOR ahead: the tool stays, its description says
322
+ silently. Every addition has a line in the CHANGELOG under that version. A
323
+ MINOR may also add an output schema (`outputSchema`, with
324
+ `structuredContent` returned alongside the same text) to a tool that did
325
+ not have one; once declared, that schema's fields are add-only under this
326
+ same rule. Where this server's output schema deliberately differs from the
327
+ hosted connector's, the CHANGELOG entry says so; today that is
328
+ `memory_list_recent`'s `next_cursor`, optional here (absent when the
329
+ service sent a continuation token this client will not pass on) and
330
+ required there.
331
+ - **Removing or renaming a tool or a tool's input parameter, or dropping or
332
+ renaming a declared annotation field,** is announced one MINOR ahead: the
333
+ tool (or parameter) stays, its description says
294
334
  `deprecated since x.y, removed in x.z`, and the change lands only in the
295
- announced version, with its CHANGELOG line. A rename is announced by naming
335
+ announced version, with its CHANGELOG line. A renamed parameter is accepted
336
+ under both names until then (0.11: `memory_feedback`'s `atom_ids` became
337
+ `memory_ids`). A rename is announced by naming
296
338
  both the old and the new name; the version pair alone does not say what a
297
339
  client should look for. Because a MINOR may add a field but not remove one, a
298
340
  renamed annotation field is declared under both names until the announced
@@ -300,9 +342,11 @@ saw and diff it against what the server serves today, by version.
300
342
  - Any difference between two servers of the same version is a bug. Report it
301
343
  with both `tools/list` outputs.
302
344
 
303
- The list above is the 0.10 surface: ten tools, each declaring all four hints.
345
+ The list above is the 0.11 surface: ten tools, each declaring all four hints.
304
346
  The hosted connector at `mcp.mnemoverse.com/mcp` serves the same ten.
305
347
 
348
+ **If the hosted connector stops answering in a session.** A client can keep showing the connector as connected while every call in that session fails with "not connected". Reconnecting it on claude.ai does not revive a session that is already stuck; reconnect from inside the session instead (in Claude Code, `/mcp`, then sign in again). Meanwhile this local server, set up with an API key from the same account as in the Quick Start, reaches the same memory and does not depend on that session's sign-in.
349
+
306
350
  ## Use cases
307
351
 
308
352
  The pattern that pays off first is cross-tool continuity: a decision made while pairing in Claude Code is there when you open Cursor an hour later, and the preference you stated in VS Code holds in a ChatGPT session that evening. Teams use shared rooms the same way — one place where an agent's lessons about a codebase accumulate instead of being re-taught per seat. And because recall re-ranks from feedback, the memories that keep proving useful surface first, which matters once a store grows past what anyone curates by hand.
@@ -348,7 +392,7 @@ The retrieval model is published: [arXiv:2603.08965](https://arxiv.org/abs/2603.
348
392
  - [Cursor](https://mnemoverse.com/docs/api/cursor) · [VS Code](https://mnemoverse.com/docs/api/vs-code) · [Claude Code](https://mnemoverse.com/docs/api/claude) · [ChatGPT](https://mnemoverse.com/docs/api/chatgpt)
349
393
  - [Python SDK](https://mnemoverse.com/docs/api/python-sdk)
350
394
  - [API Reference](https://mnemoverse.com/docs/api/reference)
351
- - [Console (get API key)](https://console.mnemoverse.com?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server)
395
+ - [Console (get API key)](https://console.mnemoverse.com/sign-up?utm_source=npm&utm_medium=readme&utm_campaign=mcp-memory-server)
352
396
 
353
397
  **Background reading**
354
398
 
@@ -395,7 +439,7 @@ What each tool sends:
395
439
  | `memory_write` | the `content`, `concepts`, and `domain` you pass |
396
440
  | `memory_read` | the `query`, plus any filters: `domain`, `since`/`until`, `exclude_author`, `top_k`, `order_by` |
397
441
  | `memory_list_recent` | the feed filters: `domain`, `since`/`until`, `exclude_author`, `limit`, `cursor` |
398
- | `memory_feedback` | the `atom_ids` being rated and the `outcome` score |
442
+ | `memory_feedback` | the `memory_ids` being rated (sent to the API as `atom_ids`), the `outcome` score, and the `domain` when you pass one (a shared room's address) |
399
443
  | `memory_create_room` | the room `name` and `description` |
400
444
  | `memory_invite_to_room` | the `room_id`, invite `scope`, and expiry |
401
445
  | `memory_join_room` | the invite `code` |
package/dist/index.d.ts CHANGED
@@ -1,24 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- /**
4
- * Two renderers, and which one a value gets is a decision, not a style choice.
5
- *
6
- * `safeInline` (src/render.ts) SANITISES an untrusted display string for inline
7
- * rendering in tool output that a DIFFERENT principal's LLM will read (CN-032
8
- * anti-injection): strip to a conservative charset, collapse whitespace, cap
9
- * the length. The treatment `formatAuthorTag` applies to a server-stamped
10
- * author, and the defensive second pass the machine-shaped room fields
11
- * (address, room_id, role, scope — all charset-validated or enum-shaped in
12
- * core) get here. It is lossy on purpose, and everything it still renders is a
13
- * value the reader looks at and never has to retype or compare.
14
- *
15
- * `exactLiteral` / `domainPhrase` / `roomNamePhrase` (src/names.ts) print a
16
- * value as a JSON string literal, or refuse to print it. Domain names because
17
- * the engine matches them byte-for-byte, so the reader must be able to send
18
- * the exact bytes back. Room NAMES (0.8.1) because the sanitiser did not make
19
- * them harmless so much as it made them WRONG: "проект" echoed back as `""` on
20
- * create, "Zoë" as "Zo" inside quotes that claim to be the name. The literal
21
- * is one line with quotes, backslashes and invisibles escaped, so it is as
22
- * injection-safe as the sanitised spelling was — without the renaming.
23
- */
24
3
  export declare const server: McpServer;