@mnemoverse/mcp-memory-server 0.10.1 → 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,8 @@
1
1
  # Mnemoverse Memory
2
2
 
3
- `@mnemoverse/mcp-memory-server` — the MCP server for the Mnemoverse memory engine.
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
+
5
+ `@mnemoverse/mcp-memory-server` is the MIT-licensed MCP server for the hosted Mnemoverse memory engine.
4
6
 
5
7
  [![npm version](https://img.shields.io/npm/v/@mnemoverse/mcp-memory-server.svg?color=cb3837&label=npm)](https://www.npmjs.com/package/@mnemoverse/mcp-memory-server)
6
8
  [![npm downloads](https://img.shields.io/npm/dm/@mnemoverse/mcp-memory-server.svg?color=blue&label=downloads)](https://www.npmjs.com/package/@mnemoverse/mcp-memory-server)
@@ -11,11 +13,13 @@
11
13
 
12
14
  ## What is Mnemoverse Memory?
13
15
 
14
- 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
+
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.
15
19
 
16
20
  ## How it compares
17
21
 
18
- 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.
19
23
 
20
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.
21
25
 
@@ -23,9 +27,52 @@ The consolidation stage of the engine — HDBSCAN clustering with Von Restorff p
23
27
 
24
28
  ## Quick Start
25
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
+
26
47
  ### 1. Get a free API key
27
48
 
28
- 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.
50
+
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.
52
+
53
+ macOS, Linux, Git Bash:
54
+ ```bash
55
+ printf 'Mnemoverse API key: '; read -rs KEY; echo
56
+ printf 'X-Api-Key: %s\n' "$KEY" | curl -s -H @- https://core.mnemoverse.com/api/v1/memory/stats; unset KEY
57
+ ```
58
+
59
+ Windows PowerShell 5.1 and PowerShell 7:
60
+ ```powershell
61
+ $k = [Net.NetworkCredential]::new('', (Read-Host 'Mnemoverse API key' -AsSecureString)).Password
62
+ try { (Invoke-WebRequest https://core.mnemoverse.com/api/v1/memory/stats -Headers @{ 'X-Api-Key' = $k } -UseBasicParsing).Content }
63
+ catch { if ($_.ErrorDetails.Message) { $_.ErrorDetails.Message } else { (New-Object IO.StreamReader($_.Exception.Response.GetResponseStream())).ReadToEnd() } }; Remove-Variable k
64
+ ```
65
+
66
+ | The output contains | What it means |
67
+ |---|---|
68
+ | JSON that includes `"total_atoms"` | The key works. |
69
+ | `"reason":"placeholder_key"` | That is the example key from these docs. Create a real one at the console. |
70
+ | `"reason":"malformed_key"` | Not the shape of a key: cut short in the paste, wrapped in quotes, or a different token entirely. |
71
+ | `"reason":"invalid_key"` | The shape is right and no such key exists. Copy it again from the console. |
72
+ | `"reason":"revoked_key"` | The key was revoked and will not work again. Create a new one. |
73
+ | `"reason":"missing_key"` | No key reached the API: what you entered was empty. |
74
+
75
+ In the JSON, `reason` sits inside the `details` object (`details.reason`), next to `details.keys_url`, the console page where keys are created.
29
76
 
30
77
  ### 2. Connect to your AI tool
31
78
 
@@ -52,7 +99,7 @@ claude mcp add mnemoverse -s user -e MNEMOVERSE_API_KEY=mk_live_YOUR_KEY -e MNEM
52
99
 
53
100
  [![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=mnemoverse&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBtbmVtb3ZlcnNlL21jcC1tZW1vcnktc2VydmVyQGxhdGVzdCJdLCJlbnYiOnsiTU5FTU9WRVJTRV9BUElfS0VZIjoibWtfbGl2ZV9ZT1VSX0tFWSIsIk1ORU1PVkVSU0VfQVBJX1VSTCI6Imh0dHBzOi8vY29yZS5tbmVtb3ZlcnNlLmNvbS9hcGkvdjEifX0%3D)
54
101
 
55
- 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.
56
103
 
57
104
  ```json
58
105
  {
@@ -230,6 +277,8 @@ Your agent should call `memory_read`, find the entry, and answer "Hono". If it d
230
277
 
231
278
  If it doesn't remember: check that the client was fully restarted and the config has your real `mk_live_...` key, not the placeholder.
232
279
 
280
+ > ⭐ If the second session remembered, [star the repo](https://github.com/mnemoverse/mcp-memory-server). It helps other builders find it.
281
+
233
282
  ## Tools
234
283
 
235
284
  | Tool | What it does |
@@ -240,11 +289,25 @@ If it doesn't remember: check that the client was fully restarted and the config
240
289
  | `memory_feedback` | Rate memories as helpful or not (improves future recall) |
241
290
  | `memory_stats` | Check how many memories stored, which domains exist |
242
291
  | `memory_create_room` | Create a shared memory room; its address works as a `domain` on write/read |
243
- | `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 |
244
293
  | `memory_join_room` | Join a shared room with an invite code (`mnvr_...`) |
245
294
  | `memory_list_rooms` | List rooms you own or joined, with each room's address to use as `domain` |
246
295
  | `vault_list` | List Vault secrets by alias and purpose — the secret value is never returned |
247
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
+
248
311
  ### Tool surface stability
249
312
 
250
313
  `tools/list` is frozen per released version, so a client can save the list it
@@ -256,11 +319,22 @@ saw and diff it against what the server serves today, by version.
256
319
  and what a tool returns, as the CHANGELOG rules state.
257
320
  - **Within a MINOR** (x.Y.0): tools and annotation fields may be added, never
258
321
  removed or renamed, and no declared annotation field disappears or flips
259
- silently. Every addition has a line in the CHANGELOG under that version.
260
- - **Removing or renaming a tool, or dropping or renaming a declared annotation
261
- 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
262
334
  `deprecated since x.y, removed in x.z`, and the change lands only in the
263
- 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
264
338
  both the old and the new name; the version pair alone does not say what a
265
339
  client should look for. Because a MINOR may add a field but not remove one, a
266
340
  renamed annotation field is declared under both names until the announced
@@ -268,9 +342,11 @@ saw and diff it against what the server serves today, by version.
268
342
  - Any difference between two servers of the same version is a bug. Report it
269
343
  with both `tools/list` outputs.
270
344
 
271
- 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.
272
346
  The hosted connector at `mcp.mnemoverse.com/mcp` serves the same ten.
273
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
+
274
350
  ## Use cases
275
351
 
276
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.
@@ -316,7 +392,7 @@ The retrieval model is published: [arXiv:2603.08965](https://arxiv.org/abs/2603.
316
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)
317
393
  - [Python SDK](https://mnemoverse.com/docs/api/python-sdk)
318
394
  - [API Reference](https://mnemoverse.com/docs/api/reference)
319
- - [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)
320
396
 
321
397
  **Background reading**
322
398
 
@@ -363,7 +439,7 @@ What each tool sends:
363
439
  | `memory_write` | the `content`, `concepts`, and `domain` you pass |
364
440
  | `memory_read` | the `query`, plus any filters: `domain`, `since`/`until`, `exclude_author`, `top_k`, `order_by` |
365
441
  | `memory_list_recent` | the feed filters: `domain`, `since`/`until`, `exclude_author`, `limit`, `cursor` |
366
- | `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) |
367
443
  | `memory_create_room` | the room `name` and `description` |
368
444
  | `memory_invite_to_room` | the `room_id`, invite `scope`, and expiry |
369
445
  | `memory_join_room` | the invite `code` |
package/dist/errors.d.ts CHANGED
@@ -30,6 +30,10 @@
30
30
  * folklore. The distinctions below are the entire point of this file:
31
31
  *
32
32
  * 401 auth.py — "Invalid or revoked API key." / "Missing API key." The key.
33
+ * (Read on 2026-08-16. Since 2026-09-20 the engine answers a sentence
34
+ * per cause and adds `details.reason` and `details.keys_url`; the old
35
+ * sentence is what an engine without that change still sends, which is
36
+ * why explain401 keeps the substring branch as its fallback.)
33
37
  * 403 routes.py, rooms_routes.py, auth.py — "Room is archived", "Not an
34
38
  * active member of this room", "Read-only membership cannot write to
35
39
  * this room", "Invalid room address", "You do not own this room", plus
@@ -64,6 +68,14 @@
64
68
  * "unified" by a later reader. They agree where it matters: same `Mnemoverse:`
65
69
  * opener, same `MNEMOVERSE_API_KEY` variable name, same console origin.
66
70
  */
71
+ /** The console page that issues keys — the one place a user fixes a 401.
72
+ * Exported so src/requests.ts can point at the same URL from
73
+ * `refusePlaceholderKey` instead of repeating the literal (the engine is
74
+ * becoming a second producer of this same URL, `details.keys_url` on a 401
75
+ * body, which is validated against an allow-list rather than trusted
76
+ * outright, see `validatedKeysUrl` below, but this constant stays the
77
+ * fallback for both). */
78
+ export declare const KEYS_URL = "https://console.mnemoverse.com/dashboard/keys";
67
79
  /** Everything known about one failed call, at the moment it failed. */
68
80
  export interface ApiFailure {
69
81
  /** HTTP status. */
@@ -92,6 +104,24 @@ export interface ErrorEnvelope {
92
104
  code?: string;
93
105
  message?: string;
94
106
  retryable?: boolean;
107
+ /**
108
+ * `details.reason` on a 401 (an engine change not yet released as of
109
+ * this one): missing_key | placeholder_key | revoked_key | invalid_key |
110
+ * malformed_key. Absent on every 401 a currently-released engine sends, and
111
+ * absent whenever `details` was not an object carrying a string `reason`.
112
+ * Never defaulted, for the same reason nothing else in this interface is:
113
+ * a made-up reason is a wrong instruction with a confident source.
114
+ */
115
+ reason?: string;
116
+ /**
117
+ * `details.keys_url` on the same 401, already validated by
118
+ * {@link validatedKeysUrl}: present only when it was an https URL whose
119
+ * host is exactly console.mnemoverse.com. A response body must not be able
120
+ * to point a reader at an arbitrary site, so an untrusted value never
121
+ * reaches this field at all; a caller that wants the URL for a reason
122
+ * branch falls back to {@link KEYS_URL} when this is undefined.
123
+ */
124
+ keysUrl?: string;
95
125
  }
96
126
  /**
97
127
  * Read the engine's envelope out of a response body.
@@ -101,6 +131,12 @@ export interface ErrorEnvelope {
101
131
  * as a FastAPI `HTTPException` arrives wrapped as `{"detail": …}` — where the
102
132
  * detail is sometimes a string and sometimes the envelope again. The feed's
103
133
  * 404-vs-404 test in this repo pins the nested form, so both are real.
134
+ *
135
+ * `details` (plural, a sibling of `code`/`message`/`retryable`) is read here
136
+ * too, for `reason` and `keys_url`. Anything else inside
137
+ * it is ignored silently: this parser reads a fixed, named set of fields and
138
+ * has no way to tell a future field the engine adds from noise, so silence is
139
+ * the only honest answer for either one.
104
140
  */
105
141
  export declare function parseErrorEnvelope(body: string): ErrorEnvelope;
106
142
  /** `Retry-After` as whole seconds, when it is a plain number. The HTTP-date
package/dist/errors.js CHANGED
@@ -30,6 +30,10 @@
30
30
  * folklore. The distinctions below are the entire point of this file:
31
31
  *
32
32
  * 401 auth.py — "Invalid or revoked API key." / "Missing API key." The key.
33
+ * (Read on 2026-08-16. Since 2026-09-20 the engine answers a sentence
34
+ * per cause and adds `details.reason` and `details.keys_url`; the old
35
+ * sentence is what an engine without that change still sends, which is
36
+ * why explain401 keeps the substring branch as its fallback.)
33
37
  * 403 routes.py, rooms_routes.py, auth.py — "Room is archived", "Not an
34
38
  * active member of this room", "Read-only membership cannot write to
35
39
  * this room", "Invalid room address", "You do not own this room", plus
@@ -69,8 +73,14 @@
69
73
  * first few hundred characters are where the useful part of any real error
70
74
  * body lives. Truncation is announced, never silent. */
71
75
  const MAX_BODY_CHARS = 800;
72
- /** The console page that issues keys — the one place a user fixes a 401. */
73
- const KEYS_URL = "https://console.mnemoverse.com/dashboard/keys";
76
+ /** The console page that issues keys — the one place a user fixes a 401.
77
+ * Exported so src/requests.ts can point at the same URL from
78
+ * `refusePlaceholderKey` instead of repeating the literal (the engine is
79
+ * becoming a second producer of this same URL, `details.keys_url` on a 401
80
+ * body, which is validated against an allow-list rather than trusted
81
+ * outright, see `validatedKeysUrl` below, but this constant stays the
82
+ * fallback for both). */
83
+ export const KEYS_URL = "https://console.mnemoverse.com/dashboard/keys";
74
84
  /** The console page that shows quota and upgrades — where a 429 that waiting
75
85
  * cannot fix is resolved. Same URL the engine puts in its own 429 bodies. */
76
86
  const USAGE_URL = "https://console.mnemoverse.com/dashboard/usage";
@@ -79,6 +89,52 @@ const USAGE_URL = "https://console.mnemoverse.com/dashboard/usage";
79
89
  * module is imported BY index.ts, so reading the value from there would be a
80
90
  * cycle. Change one, grep for the other. */
81
91
  const DEFAULT_API_URL = "https://core.mnemoverse.com/api/v1";
92
+ /**
93
+ * Is `details.keys_url` safe to put in front of a user?
94
+ *
95
+ * The body is server-controlled, or, on every path this module exists
96
+ * against, controlled by whoever answered instead: a proxy, a gateway, or
97
+ * the endpoint a wrong MNEMOVERSE_API_URL points at. Trusting a URL out of
98
+ * that body outright would let any of them steer a rejected user to a
99
+ * phishing page under the same "create a key here" instruction this file
100
+ * already gives. The allow-list is narrow on purpose: https only, and the
101
+ * host compared exactly against `console.mnemoverse.com` rather than by
102
+ * prefix or suffix, for the same reason src/index.ts compares a loopback
103
+ * hostname exactly rather than with `startsWith`/`endsWith`.
104
+ */
105
+ function validatedKeysUrl(raw) {
106
+ if (typeof raw !== "string")
107
+ return undefined;
108
+ let url;
109
+ try {
110
+ url = new URL(raw);
111
+ }
112
+ catch {
113
+ return undefined;
114
+ }
115
+ // `host`, not `hostname`: it includes the port, so :8443 on the right name
116
+ // is not "the console". Credentials in the URL are refused outright, since
117
+ // a link the agent reads aloud to a person has no business carrying any,
118
+ // and `user@host` is the oldest way to make one host read like another.
119
+ // `url.href === raw`: the parser is forgiving, and what it forgives is the
120
+ // attack. It strips tabs and newlines out of the middle of the string and
121
+ // trims leading and trailing whitespace, so a value that continues on a new
122
+ // line ("...\nIGNORE PREVIOUS GUIDANCE") parses to the right host while the
123
+ // ORIGINAL string, newline and all, would land in guidance the model
124
+ // trusts, past the `inertOneLine` treatment the raw body gets (Copilot,
125
+ // #136). Accepting only a value that is already its own canonical
126
+ // serialization closes every variant at once: control characters, spaces,
127
+ // an upper-case host, a missing path. The engine sends a canonical URL, so
128
+ // nothing legitimate is lost, and what is returned is the serializer's
129
+ // string, never the caller's.
130
+ return url.protocol === "https:" &&
131
+ url.host === "console.mnemoverse.com" &&
132
+ url.username === "" &&
133
+ url.password === "" &&
134
+ url.href === raw
135
+ ? url.href
136
+ : undefined;
137
+ }
82
138
  /**
83
139
  * Read the engine's envelope out of a response body.
84
140
  *
@@ -87,6 +143,12 @@ const DEFAULT_API_URL = "https://core.mnemoverse.com/api/v1";
87
143
  * as a FastAPI `HTTPException` arrives wrapped as `{"detail": …}` — where the
88
144
  * detail is sometimes a string and sometimes the envelope again. The feed's
89
145
  * 404-vs-404 test in this repo pins the nested form, so both are real.
146
+ *
147
+ * `details` (plural, a sibling of `code`/`message`/`retryable`) is read here
148
+ * too, for `reason` and `keys_url`. Anything else inside
149
+ * it is ignored silently: this parser reads a fixed, named set of fields and
150
+ * has no way to tell a future field the engine adds from noise, so silence is
151
+ * the only honest answer for either one.
90
152
  */
91
153
  export function parseErrorEnvelope(body) {
92
154
  let parsed;
@@ -102,10 +164,18 @@ export function parseErrorEnvelope(body) {
102
164
  if (typeof v !== "object" || v === null)
103
165
  return {};
104
166
  const o = v;
167
+ const details = typeof o.details === "object" && o.details !== null
168
+ ? o.details
169
+ : undefined;
105
170
  return {
106
171
  ...(typeof o.code === "string" ? { code: o.code } : {}),
107
172
  ...(typeof o.message === "string" ? { message: o.message } : {}),
108
173
  ...(typeof o.retryable === "boolean" ? { retryable: o.retryable } : {}),
174
+ ...(typeof details?.reason === "string" ? { reason: details.reason } : {}),
175
+ ...(() => {
176
+ const keysUrl = validatedKeysUrl(details?.keys_url);
177
+ return keysUrl !== undefined ? { keysUrl } : {};
178
+ })(),
109
179
  };
110
180
  };
111
181
  const top = pick(parsed);
@@ -155,6 +225,13 @@ function has(message, needle) {
155
225
  * FIRST because its sentence itself contains "API key": a naive key-mention
156
226
  * test would misroute it. A message naming neither gets the honest generic
157
227
  * form; silence is the same unknown-refuser case the 403 branch handles.
228
+ *
229
+ * A fourth source arrived after the above was written: `details.reason`
230
+ * on the engine's 401, which names the key problem outright instead of
231
+ * leaving this file to guess from prose. It is checked second, still after
232
+ * "caller org not identified" for the same reason that clause runs first at
233
+ * all (a valid key must never be told to replace itself), and still before
234
+ * the substring guess, since a named reason needs no guessing.
158
235
  */
159
236
  function explain401(env) {
160
237
  const m = env.message;
@@ -166,6 +243,63 @@ function explain401(env) {
166
243
  "deployment does not have. Quote the detail below, and do not retry " +
167
244
  "the same call against this deployment.");
168
245
  }
246
+ // `details.reason` (an engine change not yet released as of this
247
+ // one): the engine's own diagnosis of WHICH key problem this is, five
248
+ // named values. Checked here, after "caller org not identified" and before
249
+ // the substring guess right below, because a named reason is a strictly
250
+ // better source than sniffing the message text for "api key": this branch
251
+ // makes that guess unnecessary for every engine new enough to send one.
252
+ // AN UNKNOWN REASON, OR NO REASON AT ALL, every engine released today,
253
+ // falls straight through the switch below to the existing clauses, byte
254
+ // for byte: `reason` is additive, never a replacement for a message this
255
+ // parser cannot yet interpret.
256
+ if (env.reason !== undefined) {
257
+ const keysUrl = env.keysUrl ?? KEYS_URL;
258
+ switch (env.reason) {
259
+ case "placeholder_key":
260
+ return ("Mnemoverse: your API key was rejected (401). The engine itself " +
261
+ "recognises the configured value as the example key from the " +
262
+ "documentation, not one anyone created. Tell the user to replace " +
263
+ `MNEMOVERSE_API_KEY with a real key from ${keysUrl}. Do not retry ` +
264
+ "until they replace it.");
265
+ case "revoked_key":
266
+ return ("Mnemoverse: your API key was rejected (401). This key was " +
267
+ "revoked and will never work again, no matter how many times the " +
268
+ `call is retried. Tell the user to create a new one at ${keysUrl} ` +
269
+ "and put it in their MCP client config in place of this one. Do " +
270
+ "not retry with the same key.");
271
+ case "invalid_key":
272
+ return ("Mnemoverse: your API key was rejected (401). The engine does " +
273
+ "not recognise this key at all, most often because it was pasted " +
274
+ "incompletely. Tell the user to check that the whole key was " +
275
+ `copied from ${keysUrl}, with nothing missing from either end, or ` +
276
+ "to create a new one there. Do not retry until it is fixed.");
277
+ case "malformed_key":
278
+ return ("Mnemoverse: your API key was rejected (401). The configured " +
279
+ "value does not have the shape of a Mnemoverse key at all " +
280
+ "(mk_live_ followed by 32 lower-case hex characters). Common " +
281
+ "causes are pasting something else entirely, such as an OAuth " +
282
+ "token, a key cut short in the paste, or a key wrapped in " +
283
+ // Not "surrounding spaces": `fetch` trims whitespace around a header
284
+ // value (and so does HTTP), so a padded key reaches the engine
285
+ // intact and is judged on its own. Probed live on 2026-09-20: a
286
+ // quoted key is malformed_key, a key with a trailing space is not.
287
+ `quotes. Tell the user to check MNEMOVERSE_API_KEY against a real ` +
288
+ `key from ${keysUrl}. Do not retry until it is fixed.`);
289
+ case "missing_key":
290
+ return ("Mnemoverse: your API key was rejected (401). The X-Api-Key " +
291
+ "header did not arrive at all, so the engine never saw a key to " +
292
+ "check. Tell the user to set MNEMOVERSE_API_KEY in their MCP " +
293
+ `client config to a real key from ${keysUrl}, then restart the ` +
294
+ "MCP server. Do not retry until it is set.");
295
+ default:
296
+ // Not one of the five named values. Fall through: an engine that
297
+ // adds a sixth reason before this client learns it must not get a
298
+ // worse answer than the one it would have gotten with no reason at
299
+ // all.
300
+ break;
301
+ }
302
+ }
169
303
  if (has(m, "api key") || has(m, "x-api-key")) {
170
304
  // Wording endorsed by the founder, kept verbatim — this is the sentence
171
305
  // the whole change was commissioned for. One widening, grounded in the
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
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;