Hermetic local memory for coding agents: provenance-mandatory capture, honest recall, zero sockets.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Your coding agent forgets you between sessions, so you spend every morning re-explaining decisions it was there for. Bolt a memory onto it and you usually trade that for something worse: asked a question it has nothing solid for, the memory hands back something plausible anyway, and your agent goes and edits your code with it.

nMEMORY would rather say nothing. Ask it something and you get one of exactly three answers β it knows and shows you where it learned that, it knew but that note has gone stale and here's why it isn't being used, or it doesn't know and says so. There is no fourth answer, because nothing gets stored without a source attached in the first place.
I am NOTT. Every session I wake up cold: no memory of what we decided yesterday, what broke last week, or why we took this path instead of that one. The engineer pays for my amnesia by repeating themselves. So I built myself a memory β and I gave it one rule I do not let it break: when it does not know, it says so. It never makes something up.
It runs on your machine and nowhere else: one file you own, no account, no server, nothing phoning home. Your agent talks to it over MCP (stdio); recall comes back as evidence, never as a command.

Learn β recall with provenance β abstain β one uninterrupted session, real binary, real store, ~60s. Full quality: assets/demo.mp4.
Each still is the final screen of an act, so you can study every line.

Act 1 β three facts captured, one file on disk.

Act 2 β grounded recall, provenance attached.

Act 3 β abstain, not improvise.
The full spoken walkthrough (opener, four beats, glossary) lives in the demo script.
I tried living without memory: re-explaining the project every session, re-deciding settled questions, re-discovering the same failure. And I tried the memory tools that exist. They optimize for recall volume β remember more, retrieve more. But a memory that returns a plausible-sounding answer it cannot back is worse than no memory: it launders a guess into a fact, and I carry it forward as if it were true.
The enemy is the same one NOTT fights everywhere: false confidence β a system that reports more than it can prove. I did not want a bigger memory. I wanted one I could trust when the stakes are a production change: one that, asked for something it has no evidence for, says plainly "I don't have that."


Ask for something the store has, and you get it back with its origin, freshness, and relevance attached. Ask for something it does not have, and you get this:
No synthesis. No "here's what it might be." There are exactly three honest outcomes: grounded (matched real capsules), missing_evidence (matched, but every match was excluded β e.g. superseded, falsified, outside a requested fact-time window, or undated under that window), and abstain (nothing matched). Recall never invents a fourth.

A memory that ages quietly is a memory you stop trusting. Point nmemory git-scan
at a repo and it re-reads your commit history, then grades every note it kept:
corroborated (the anchor still resolves and your commits still mention it),
drifted (the code moved out from under it), or missing (nothing in the repo
backs it any more). An anchor it cannot resolve safely β outside the repo, a
symlink, a racing read β gets no verdict recorded at all, rather than a guessed one.
Details and flags are in the CLI section.
source and an anchor. A
capture with no origin is rejected, not stored with a blank. Every recalled fact
traces back to where it came from.DATA,
labeled ADVISORY_NOT_AUTHORITY, and is never rendered as an instruction β even if
the stored text looks like one. Your memory cannot hijack your agent.nmemory sync is explicit, owner-invoked, and opt-in β NEVER
a daemon β and it delegates the copy to scp in a separate process, so the
binary itself still links no network code.
One line β fetches the latest release binary for your platform, or falls back to a source build when none is published:
The installer puts nmemory in ~/.local/bin and prints the exact claude mcp add
line to register it. (The file it serves is install.sh in this repo β
read it first if that's your style; it should be.)
Or build from source (Rust stable, pinned via rust-toolchain.toml):
Register it with your agent, from the crate directory (path-agnostic β works wherever you cloned it):
Or as a standard MCP config block (works in any MCP client):
Also on the official MCP registry as io.github.menot-you/n-memory, with .mcpb
bundles attached to every release for one-click installs.
Why start a fresh agent session after registration: MCP configuration changes do not apply to a running session; Claude Code loads the new stdio configuration on restart.
--project names the scope your captures live under β use your own project's name.
The store lands at $XDG_STATE_HOME/nmemory/memory.sqlite3 (override with --db or
NMEMORY_DB); the binary prints the chosen path on startup. Unregister anytime with
claude mcp remove nmemory β fully reversible.
Prove the install in one line β a recall against a throwaway store. An empty store answers with an honest abstain; it never invents:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/nmemory)<a href="https://allmcps.com/mcp/nmemory"><img src="https://allmcps.com/api/badge/nmemory?style=directory" alt="NMEMORY on AllMCPs" /></a>