Changelog
This page covers the MCP memory server, which ships to npm as @mnemoverse/mcp-memory-server. The current release is 0.10.2, published 2026-09-20. The Python SDK ships to PyPI as mnemoverse, currently 0.3.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.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.comover https before it is shown; anything else falls back to the standard wording. - The malformed-key guidance no longer blames spaces around the key.
fetchtrims 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.mdin 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 fromenvinstead 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.jsonand 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.jsonchanged; 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_recentbounds 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.limitis 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_URLmust address the API over https or the tool fails before sending anything;http://localhost,http://127.0.0.1andhttp://[::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_statscan 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_feedbackreports 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-Afterheader 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}andDELETE /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 withmemory_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_statssays "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:
supersedesonPOST /memory/write,include_historyon the read surfaces, andGET /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 addsnippets 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.
memory_feedbackattributes 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: >=18promise is tested rather than asserted. A new job builds the package and drives a real MCP handshake throughdist/index.json 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.1to^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 auditreports 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_URLnow 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
sincevalue 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/roomsand/memory/statsso 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)
untilandexclude_authorwere added tomemory_list_recent, so a feed can be bounded on both ends and can leave out an author.- The project's own
CHANGELOG.mdbegins 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",sinceanduntil, andexclude_authorfor shared rooms) and thememory_list_recentfeed, 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_readsurfaces 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,
zoddeclared 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_deleteandmemory_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.