Skip to content

Changelog ​

This page covers the MCP memory server, which ships to npm as @mnemoverse/mcp-memory-server. The current release is 0.15.0, published 2026-10-06. The Python SDK ships to PyPI as mnemoverse, currently 0.5.0, and keeps its own changelog. The two version lines are independent.

The sections below cover the npm server, newest first. Each heading carries the day the version was published on npm; the GitHub releases carry the full notes. The project is pre-1.0, so a minor bump may change behaviour: 0.9.0 removes tools an integration may be calling, and 0.10.0 refuses two configurations that used to work. 0.8.0 is a minor bump too, but an additive one: it adds two parameters to a tool rather than changing one. Patch releases change text and diagnostics, not the shape of a tool.

0.15.0 (2026-10-06) ​

  • memory_read takes diversity (0 to 1, default 0): above 0, a near-copy of a match already picked gives its slot to the next distinct memory. See Diverse results.
  • The Devin Desktop (formerly Windsurf) install snippet names the file Devin reads, ~/.config/devin/mcp_config.json.
  • The write tool's description calls its gate what it is: a novelty check against the nearest memory in the same domain.
  • The README quick start ends with "Make it a habit": the agent calls memory tools in normal work only when its instructions say so.
  • Full notes on GitHub.

0.14.2 (2026-09-30) ​

  • The release notes for 0.14.2 are on GitHub.

0.14.1 (2026-09-29) ​

  • The release notes for 0.14.1 are on GitHub.

0.14.0 (2026-09-29) ​

  • The release notes for 0.14.0 are on GitHub.

0.13.1 (2026-09-28) ​

  • No change to the tools. The package is now published with provenance: a signed statement, which npm audit signatures checks, that GitHub Actions built this version from its release tag in the package's own repository. It reaches npm through trusted publishing, with no long-lived token. The README links the VS Code extension. The release notes are on GitHub.

0.13.0 (2026-09-27) ​

  • New tool, memory_graph: read the association links around the concepts you name, up to three hops, each with its weight, outcome valence and co-activation count. It is read-only, so a read-only sign-in on the hosted connector can call it too. The REST equivalent is POST /memory/graph.
  • memory_feedback takes its ids as memory_ids only. The old name atom_ids, deprecated since 0.11, is removed as announced: a call that sends it instead of memory_ids is refused and rates nothing.
  • The package now ships tools.json, its tool list per release, so a copy elsewhere can be generated from it instead of typed by hand. The release notes are on GitHub.

0.12.1 (2026-09-25) ​

  • A 403 for a missing scope is explained as what it is. When the engine refuses a call because the credential lacks a scope (a write with a read-only token, which is how the hosted connector refuses a write on this package's tools), the explanation now says the credential identified the account but does not carry a scope the call needs, names the refused scope from the engine's own words when the server runs on an API key, points at re-authorizing the connector when it runs on OAuth, and says reads are unaffected only when the refusal supports it. Before, such a refusal fell through to the generic sentence that guessed a room-membership problem and pointed at memory_list_rooms. A route the engine denies for having no scope policy gets its own diagnosis: a gap on the server side, not something a different credential fixes. Text only; no tool, parameter or result changes. Notes: GitHub.

0.12.0 (2026-09-25) ​

  • Every tool now returns structuredContent next to its text, not only the four that did in 0.11.0. memory_stats returns {memory_count, domains, episodes?, prototypes?, hebbian_edges?, avg_valence?, avg_importance?}; memory_create_room returns {room_id, address, name?}; memory_invite_to_room returns {share_message, join_url?, code?, scope?, room_address?, expires_at?}; memory_join_room returns {room_id, address, name?, scope?, already_member?, next_steps}; memory_list_rooms returns {rooms: [{room_id, name?, address, role, scope?, archived}]}; vault_list returns {secrets: [{alias, context, concepts}]}. The field names match the hosted connector's, so a client that reads structured results reads both servers the same way. A field the engine did not send is absent, never defaulted, and a row this server cannot read (a room without an id or a role, a secret without an alias or a context) is left out of the data and counted once on the server's stderr, while the text still shows it. Two more answers this server cannot read now come back as a tool error instead of a text-only reply: a stats body without a usable count or domain list, and a created or joined room without an id and an address.
  • The author tag on a memory_read or memory_list_recent result line prints the name as an exact quoted literal, [by "cursor"] or [by "Ольга" · external], the same way the domain hint already did. Before this, a Cyrillic, CJK or Arabic agent name was erased to nothing and the memory looked unauthored; a name too long to print exactly now says so instead of vanishing. The author field in structured results follows the same rule and carries the whole name.
  • The deprecated atom_ids name on memory_feedback stays accepted until 0.13, not 0.12 as 0.11.0 announced: this release came sooner than that announcement assumed, and a deprecated parameter is kept for one full minor version. Pass memory_ids; passing both names is still refused.
  • For another MCP server built on the shared entry point (@mnemoverse/mcp-memory-server/shared), the registration takes two optional dependencies: a wording object, so a hosted deployment can call itself "this connector" and explain a 401, 403 or per-minute 429 to a user who signs in with OAuth and never holds an API key, and a write-author hook, so a supplier can vouch for the person behind a write. The local server supplies neither, and its own descriptions, error text and requests do not change. The tool-result cap (96,000 characters) and the helper that applies it are exported from the same entry point.
  • A source comment that carried production event counts no longer ships in the package.

0.11.0 (2026-09-23) ​

  • The ten tools, the three prompts and the resource are exported as one function another MCP server registers (@mnemoverse/mcp-memory-server/shared), so the hosted connector can run this package's surface instead of its own copy. The local server itself is unchanged by the move.
  • memory_write, memory_read, memory_list_recent and memory_feedback declare an output schema and return structuredContent next to the same text as before: {stored, memory_id, reason?, importance?} for a write, {items: [{memory_id, content, domain, created_at?, author?}]} for a read, the same items plus next_cursor for the feed, and {updated_count, avg_valence?, coactivation_edges?} for a rating. A client that reads structured tool results gets values instead of parsing sentences; a field the engine did not send is absent, never defaulted. An answer this server cannot read (a stored write without an id, an item without content, a recent feed the engine has not deployed) now comes back as a tool error instead of a text-only reply.
  • memory_feedback takes an optional domain: pass a room's address to rate memories read from that room. The reply reports the average valence the engine returns after the rating. Its ids parameter is now memory_ids; atom_ids is still accepted on its own until 0.12, and passing both is refused.
  • memory_invite_to_room takes max_uses (1 to 1000). Without it an invite stays single-use, as before.
  • Three MCP prompts, recall, save_insight and what_do_you_know, and one resource, memory://item/{memory_id}, the same ones the hosted connector offers.
  • Field limits come from the engine's API contract instead of a copy typed here: top_k on memory_read accepts up to 500 instead of 50, domain on memory_write is capped at 100 characters and concepts at 256 items, and a value past a limit is refused with the field named.
  • memory_feedback is no longer marked destructive, and no tool is marked as reaching an open world. A client that asks before destructive tools no longer asks before every rating.
  • memory_list_recent no longer claims that more entries exist when the feed has ended.
  • Room guidance names memory_list_recent for catching up on what others wrote, and the README says what to do when the hosted connector stops answering in a session.

0.10.2 (2026-09-20) ​

  • A key that is still the placeholder from the install snippets is refused on your own machine, before any request is made. The message says nothing was sent and points at the console page where a real key is created. Values that are not recognisable as placeholders, including a truncated real key, still go to the API and get its own answer.
  • A 401 now uses the reason the API sends when it sends one (missing, placeholder, revoked, invalid or malformed key), so the agent reading the tool result learns which of those happened. The link in that answer is checked against console.mnemoverse.com over https before it is shown; anything else falls back to the standard wording.
  • The malformed-key guidance no longer blames spaces around the key. fetch trims a header value, so a padded key reaches the API intact. The sentence now names the causes that do occur: a different kind of token, a key cut short in the paste, or a key wrapped in quotes.
  • The README gained a key check you can run before pasting a key into any config, in bash and PowerShell. Both forms read the key at a masked prompt and never pass it as a command argument, so it lands in neither shell history nor the process list. A new llms-install.md in the repository, not part of the npm package, gives an AI agent the install steps.
  • No tool, parameter, annotation or default moved. If you are on 0.10.1 and your key is valid, behaviour is unchanged.

0.10.1 (2026-09-16) ​

  • The generated VS Code snippet stopped telling readers to commit an API key. It now leads with the extension's key-free browser sign-in, and the JSON example uses a prompted input (type: "promptString", password: true) referenced from env instead of a literal key. The VS Code deep link carries the same prompt rather than a baked-in value.
  • The Cursor snippet recommends the global ~/.cursor/mcp.json and says plainly not to use the project-level .cursor/mcp.json, which is committed with the repository. The text under the one-click button explains that the button installs a placeholder key and names the file Cursor wrote, so a reader who already clicked it can fix it.
  • All 11 open Dependabot alerts were closed, 4 high and 7 medium, all transitive or development-only. Only package-lock.json changed; declared dependency ranges did not.
  • The README was rewritten around what the product is, with one canonical install block and the other clients collapsed, and it now points at the plugins, the VS Code extension and the desktop bundle it never mentioned.
  • Nothing under src/ changed in this release, so tool behaviour is identical to 0.10.0.

0.10.0 (2026-09-15) ​

  • memory_list_recent bounds a page by size as well as by item count. Long entries, typical of shared rooms, used to be able to return one result of over 70,000 characters that a client would refuse to inline. The handler now assembles a page in small sub-requests, stops before a 40,000 character budget, and returns the cursor of the last complete batch, so the next call continues exactly where the page ended. limit is now documented as a ceiling rather than a page size.
  • Two configurations are now refused, which is the breaking part of this release. MNEMOVERSE_API_URL must address the API over https or the tool fails before sending anything; http://localhost, http://127.0.0.1 and http://[::1] stay allowed and are matched as exact hostnames. Credential-bearing requests no longer follow redirects, and a refused redirect is reported as such instead of looking like a dead network.
  • A timestamp that arrives without an offset is read as UTC, which is what the API means by it. Before this, the same stored entry showed a different clock time in every client timezone, and a different calendar day west of UTC.
  • memory_stats can no longer exceed the tool-result cap on an account with thousands of stores. The list of names is bounded rather than the message, and what was cut is counted and labelled, so a name you do not see is never presented as a name that does not exist.
  • memory_feedback reports what the service actually said. A count the service did not send is now reported as unknown rather than zero, a partial application says how many ids did not match and why, and a value that is not a plain non-negative integer is no longer printed as a count.
  • A field arriving with an unexpected type costs you that field instead of the whole call. Previously one numeric author tag on one item could replace an entire page of results with a JavaScript error. The end-of-feed line also tells "nothing older" apart from "the continuation token could not be displayed".

0.9.1 (2026-08-24) ​

  • A failed tool call tells the agent what to do instead of echoing the API's wire body. A bad key used to return the raw JSON error, which gave the model nothing to act on and often produced a wrong diagnosis about the network.
  • Status codes are told apart the way the API uses them, and a 429 reads the Retry-After header that already arrived on that response rather than guessing.
  • The two failures that never reach HTTP, an unset key and an unreachable host, get their own sentences rather than a shared transport message.
  • The recent feed degrades gracefully again against a deployment that does not serve the recent endpoint, by keying on the absence of an error code rather than on total silence.
  • Feedback re-ranks recall for real. The engine's read path used to apply its feedback and recency adjustments after ordering and truncation, so the advertised re-ranking never changed what came back. It now applies them before the cut (live in production since 2026-08-23), so a memory you rate up or down moves in the results, and the README says so again. Two earlier claims stayed withdrawn: unhelpful memories are out-ranked, not erased, and deletion has been administrative only since 0.9.0.

0.9.0 (2026-08-22) ​

  • Deletion left the agent-facing tool surface. The two deletion tools were removed entirely, including their registrations, handlers, schemas and every generated config, and deletion became an administrative operation on the REST API.
  • Migration: DELETE /memory/atoms/{id} and DELETE /memory/domain/{domain} are unaffected and remain the way to delete. From an MCP client, correct a wrong or stale memory by writing a fresh one with memory_write.
  • This is the one upgrade that can break an existing integration. Code that calls the removed tools fails against 0.9.0 and there is no compatibility shim.
  • Every remaining description and the server instructions now point at a corrective write. memory_stats says "before writing to it" where it used to speak of deletion.
  • A non-destructive way to correct a memory was planned here without a date. It shipped on the REST API on 2026-08-29: supersedes on POST /memory/write, include_history on the read surfaces, and GET /memory/atoms/{atom_id}/chain (API reference). At that date no tool in this package exposed it.

0.8.4 (2026-08-16) ​

  • A wrong API key now says so at startup, where a user looks. Once connected, one read-only stats call runs in the background; a 401 or 403 puts one sentence on stderr naming MNEMOVERSE_API_KEY, other HTTP failures get a softer note that says nothing about the key, and network errors stay silent so flaky wifi does not cry wolf. A valid key keeps startup quiet, and starting without a key still works as documented.
  • The claude mcp add snippets carry -s user. The CLI default registers a server for the current project directory only, so memory installed in one repository was silently absent in the next. Fixed in the generator, so the README and every channel snippet changed together.
  • The README stopped claiming that recall fades by recency: nothing about a stored memory decays over time or is deleted by age, and the engine's recency boost is a ranking nudge rather than decay. The re-ranking wording was finished in 0.9.1, once the engine applied its adjustments before the cut (mcp-memory-server#95).

0.8.3 (2026-08-14) ​

  • A refused write in a shared room prints the rule that applies to rooms. A restatement, such as a briefing or a status summary, does store in a room, because a room is a message bus; only a write the embedder cannot distinguish from one already present is refused. The personal-domain wording is unchanged.
  • The novelty score now carries the same caveat the hosted connector already carried. It is a first-generation metric: identical content scored about 0.08 in Russian against about 0.55 in English on the same threshold, so it was refused in one language and stored in the other. Editor's note, 2026-10-03: that was the first-generation metric. Since core#501 (2026-08-23) the gate refuses only a write the embedder cannot tell apart from one already stored in the same domain, the behaviour Getting started describes.
  • memory_feedback attributes its count to the service rather than asserting it, because under the asynchronous path that number is the count of ids submitted rather than applied, and the response does not say which mode ran.
  • The read paths that consult stats and rooms to explain an empty answer now carry a 4 second deadline. Without one, a single slow endpoint turned an instant empty read into a multi-minute stall.
  • The engines: >=18 promise is tested rather than asserted. A new job builds the package and drives a real MCP handshake through dist/index.js on Node 18.

0.8.2 (2026-08-13) ​

  • A dependency security pass cleared all 32 open Dependabot alerts, 7 high, 22 medium and 3 low. Every one was transitive through the MCP SDK; the package's own runtime dependencies are that SDK and zod, and neither was vulnerable.
  • The SDK floor was raised from ^1.12.1 to ^1.30.0, which is the release that admits the patched HTTP server line. Everything else floated up in the lockfile within ranges the SDK already declared, and no overrides were needed. npm audit reports zero.
  • Stated plainly: most of those alerts were in HTTP transport and OAuth code a stdio server never imports, so the vulnerable code shipped but was not loaded. The exception is fast-uri, which is loaded through schema validation and only ever sees local protocol messages.
  • No tool changed shape and no request changed a byte, verified against a byte-for-byte wire test with the full suite passing on the new SDK. The published file set is untouched.
  • The registry description of MNEMOVERSE_API_URL now says what the override is for: testing against a non-production environment.

0.8.1 (2026-08-09) ​

  • An honesty pass over every result line. An empty answer now describes what it covered instead of asserting that nothing exists, which is the difference between "your store is empty" and "this query, in this scope, matched nothing".
  • Shared rooms are no longer invisible in an unscoped read. Archived rooms are covered only where the defect bit hardest: when every room is archived, the answer says so and says what it means. In the mixed case the scope note still names only the readable rooms.
  • A casing slip in a domain name is told apart from an empty store, a since value in the future is named as such with the client's clock, and domain names are printed exactly or not at all rather than silently trimmed.
  • Read results dropped the relevance percentage, which read as a confidence score it was not, and carry their domain instead, so an unscoped search shows where each result came from.
  • Zero-result paths add read-only reads of /memory/rooms and /memory/stats so an empty answer can say what it did not cover. The request you asked for is unchanged; the extra reads cost rate budget, which is why they are disclosed here.
  • The repository gained a real test gate: the suite grew from 31 tests to 338, and CI runs it on every push across three timezones, because one fix in this release is invisible under UTC-only CI. It calls the tools and checks the wording, including a ban on withdrawn claims across the whole corpus.

0.8.0 (2026-08-06) ​

  • until and exclude_author were added to memory_list_recent, so a feed can be bounded on both ends and can leave out an author.
  • The project's own CHANGELOG.md begins its detailed entries one release later, at 0.8.1. For 0.8.0 and earlier its entries are reconstructed from the release commits and deliberately terse, and the record is the git history and the GitHub releases, so this entry and the ones below are correspondingly short.

Earlier releases ​

  • 0.7.0 (2026-08-04): temporal read parameters on memory_read (order_by: "recency", since and until, and exclude_author for shared rooms) and the memory_list_recent feed, with ids and dates rendered in results. It carried the unreleased 0.6.0 train, which added room discovery, vault_list, the server instructions the package had been shipping without, and a short getting-started note on a first read of an empty store instead of a bare "no results".
  • 0.5.0 (2026-07-10): the room tools, create, invite and join.
  • 0.4.2 (2026-07-04): README maintenance.
  • 0.4.1 (2026-06-28): memory_read surfaces the server-stamped author, and CI gained a release-sync drift check across public surfaces.
  • 0.4.0 (2026-06-25): the hosted remote endpoint was published to the MCP registry alongside npm.
  • 0.3.10 (2026-06-18): registry description shortened so the registry publish succeeds.
  • 0.3.8 (2026-06-17): the API key became optional at startup, for registries that deploy without one.
  • 0.3.7 (2026-06-16): the key check became lazy, so the server starts without a key.
  • 0.3.6 (2026-06-15): richer tool descriptions, zod declared as a dependency, line endings normalised.
  • 0.3.5 (2026-05-31): registry description fix.
  • 0.3.3 (2026-04-12): package metadata polish.
  • 0.3.2 (2026-04-12): npm and MCP registry publishing automated on tag push.
  • 0.3.1 (2026-04-12): README badges, a 30-second verification walkthrough, and a warning that MCP clients only read config at startup.
  • 0.3.0 (2026-04-12): the first release with the two deletion tools, memory_delete and memory_delete_domain (removed again in 0.9.0). Every distribution channel config generates from one source file with drift detection in CI, all tools moved to annotated registration, and read results are capped under the client result limit.
  • Four interim versions exist on npm without a GitHub release: 0.1.0 and 0.1.1 on 2026-04-10, 0.3.4 on 2026-05-31, and 0.3.9 on 2026-06-18.

Sources ​

Dates are the publication times of the GitHub releases, which is also where the tags live; where a version has no release, the date is the npm publish time from the registry metadata. The entries themselves come from those release notes and from CHANGELOG.md in the repository, which occasionally dates a version from the day its work merged rather than the day it was tagged. Python SDK versions and dates come from PyPI.