A deleted keypath comes back by setting a new value at the same path, and a deleted project comes back by creating one with the same id, with the history intact in both cases. The two save paths are split on purpose and each says what it is not for: memstate_remember takes text with several facts in it and does the structuring, while memstate_set is only for a single short value at a keypath you already know. Reads can be pinned to a point in the past through at_revision, so what an agent saw at the time is reconstructable rather than overwritten by what is true now.
A versioned memory store addressed by project and keypath, with semantic search across the contents and full history behind every value.
- memstate_remember, the preferred save path: markdown, task summaries or any text goes in, and the server extracts keypaths, builds structured memories, and handles conflict detection and versioning itself.
- memstate_set for the other case — one keypath to one short value, for a port number, a status flag or a version string.
- memstate_search, which finds memories by meaning rather than by exact keypath, filtered by category, keypath_prefix, limit, and whether superseded versions are included.
- memstate_get, which lists projects, browses a project tree, or returns the content at a keypath, with at_revision to read the past and content_limit to cap what comes back.
- memstate_history, returning every version at a keypath so a previous value can be audited or recovered.
- Soft deletion at two scopes: memstate_delete writes a tombstone at a keypath, optionally recursive over a subtree, and memstate_delete_project tombstones every memory in a project and hides it from listings.
MEMSTATE_API_KEY, and a project_id for anything beyond listing the projects themselves.
One command plus a key — claude mcp add memstate npx @memstate/mcp -e MEMSTATE_API_KEY=YOUR_API_KEY_HERE, then supply credentials
