Memory your agent can trust — every answer carries its source; when it doesn't know, it says so. Hermetic, local, MCP.
git clone https://github.com/menot-you/n-memory{
"mcpServers": {
"n-memory": {
"command": "n-memory"
}
}
}MCP Servers overview
<div align="center">
<img src="assets/hero.png" alt="ₙMEMORY — hermetic, local memory for coding agents, one that never lies to you" width="900">
[](LICENSE)
[](https://codeberg.org/nott/n-memory)

[](https://codecov.io/gh/menot-you/n-memory)






</div>
> 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.**
nMEMORY is a single-file memory store your agent talks to over MCP (stdio). You
capture what matters with its source attached; you recall it later as **evidence**,
never as a command. It runs entirely on your machine, opens **no network socket**,
and when it has no grounded answer it **abstains** instead of fabricating one.
## Demo

*Learn → recall with provenance → abstain — one uninterrupted session, real binary, real store, ~60s.* Full quality: [assets/demo.mp4](assets/demo.mp4).
### The three acts
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](assets/demo-script.md).
---
## Why I built my own
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."*
<p align="center"><img src="assets/comparison.png" alt="memory for agents, two philosophies — nMEMORY: abstains when it has nothing, provenance mandatory, one file on your disk, zero network sockets, returns evidence never instructions; typical memory layer: always answers something, provenance optional, their cloud, API calls per recall, output goes straight into the prompt" width="620"></p>
## The one rule: grounded, or it abstains
<p align="center"><img src="assets/one-rule.png" alt="retrieve → evidence in the store? → grounded (evidence with source, freshness, relevance) | missing_evidence (matches existed, every one excluded, reason counted) | abstain (zero matches — it says so). Three honest outcomes; recall never invents a fourth." width="820"></p>
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:
```json
{ "outcome": "abstain",
"reason": "no stored capsule matched any of the 2 query term(s); abstaining instead of fabricating" }
```
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 or falsified), and **abstain** (nothing matched).
Recall never invents a fourth.
## Four things that make it different
- **Provenance is mandatory.** Nothing enters without a `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.
- **Advisory, never authority.** Everything memory returns is wrapped as `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.
- **Hermetic by construction.** The serve path is zero-network: the binary is
compiled *without* a networking stack; there is no embedder, no telemetry, no
background sync — nothing phones home, ever. Your memory leaves your disk only
when *you* move it: `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.
- **Local and yours.** One SQLite file you own, on your machine. No server, no
account, no daemon. Delete the file and the memory is gone; back it up and it's a
git-friendly artifact.
<p align="center"><img src="assets/architecture.png" alt="your coding agent → MCP stdio → nmemory (single Rust binary, 21 tools) → memory.sqlite3 (one file, on your disk); runs entirely on your machine — no sockets, no telemetry, no embedder, nothing phones home; compiled without a networking stack, verify: strace shows zero socket() calls" width="820"></p>
## Quickstart
One line — fetches the latest release binary for your platform, or falls back to a
source build when none is published:
```sh
curl -fsSL https://no.tt/install | sh
```
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`](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`):
```sh
cargo build --release
```
Register it with your agent, from the crate directory (path-agnostic — works wherever
you cloned it):
```sh
claude mcp add nmemory -- "$(pwd)/target/release/nmemory" --project my-project
```
`--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.
Or as a standard MCP config block (works in any MCP client):
```json
{
"mcpServers": {
"nmemory": {
"command": "nmemory",
"args": ["--project", "my-project"]
}
}
}
```
Also on the official MCP registry as `io.github.menot-you/n-memory`, with `.mcpb`
bundles attached to every release for one-click installs.
First capture and recall (your agent does this over MCP; shown here as intent):
```
ingest → content + source + anchor → stored, deduped by content hash
retrieve → your caller-expanded search terms → grounded evidence, or an honest abstain
```
## Tools
21 tools over MCP stdio. The ones you'll use every day:
- **memory_ingest** — capture with a birth certificate: no source + anchor, no storage.
- **memory_retrieve** — recall as evidence: grounded, missing_evidence, or an honest abstain.
- **memory_digest** — session-start projection: what you know, what's ready, what's blocked.
- **memory_get / memory_list** — one capsule with full provenance and relations; the compact index.
- **memory_relate** — declared edges: supersedes, derived_from, witnesses, blocks, and `falsifies` (a disproven fact stops grounding recall, but the evidence stays).
- **memory_forget** — tombstones with audit, never silent deletion.
The rest of the set: **memory_import** (CLAUDE.md/AGENTS.md, born tainted), **memory_extract** (propose candidates, stores nothing), **memory_classify**, **memory_alias** (teach recall synonyms), **memory_vector** (caller-fed embeddings, dormant until used), **memory_consolidate** (deterministic dedup/merge plan), **memory_outcome**, **memory_preference**, **memory_merge**, **memory_export** (deterministic, hash-chained), **memory_bootstrap**, **memory_session_start / memory_session_finish**, **memory_visual**.
### One store, two machines (SSH)
The store is single-host; access doesn't have to be. On a second machine,
register the remote binary as the MCP command — stdio rides SSH, the binary
stays hermetic, your VPN does transport and auth:
```sh
claude mcp add nmemory -- ssh <user>@<host> /path/to/nmemory --project <your-project>
```
One store, both machines live on the same memory. Details, requirements, and
failure modes: [`RUNBOOK.md`](RUNBOOK.md).
Prefer each machine keeping its *own* store? Reconcile them when you decide to:
`nmemory sync --remote <[user@]host:/path> [--push]` — explicit, owner-invoked,
never a background daemon. Operating guide: [`RUNBOOK.md`](RUNBOOK.md).
## Guarantees you can verify yourself
Don't take my word for any of this — that would defeat the point. Each law has a check:
| Guarantee | Verify it |
|---|---|
| Never fabricates | `retrieve` a term you never stored → literal `abstain` |
| Zero-network serve | `strace -f -e trace=network <binary>` over any MCP serve session → no `socket(AF_INET)`/`connect`; or `ldd` → no network/TLS library linked. (`nmemory sync` is the one deliberate exception: the copy runs as an external `scp` process, and only when you invoke it) |
| Zero Python | `cargo test --test conformance_zero_python` → a planted `.py` (even extensionlWhat people ask about n-memory
What is menot-you/n-memory?
+
menot-you/n-memory is mcp servers for the Claude AI ecosystem. Memory your agent can trust — every answer carries its source; when it doesn't know, it says so. Hermetic, local, MCP. It has 3 GitHub stars and was last updated today.
How do I install n-memory?
+
You can install n-memory by cloning the repository (https://github.com/menot-you/n-memory) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is menot-you/n-memory safe to use?
+
menot-you/n-memory has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains menot-you/n-memory?
+
menot-you/n-memory is maintained by menot-you. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to n-memory?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy n-memory to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/menot-you-n-memory)<a href="https://claudewave.com/repo/menot-you-n-memory"><img src="https://claudewave.com/api/badge/menot-you-n-memory" alt="Featured on ClaudeWave: menot-you/n-memory" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface