nMEMORY

io.github.menot-youPublished by GitHub account menot-youv0.1.2Updated Oct 24, 2026

Memory your agent can trust — every answer carries its source; when it doesn't know, it says so.

The publisher's own server: Memory.fit

Overview

AI-generated overview

A local, provenance-first memory store for coding agents that returns grounded evidence or an honest abstention, never a fabricated answer.

What you can do
nMEMORY gives an assistant a persistent memory kept in a single local SQLite file, exposed over MCP stdio through 22 tools. Capture requires a source and an anchor, and recall returns one of three outcomes: grounded with provenance, missing_evidence, or abstain. It also offers a session-start digest, relation edges between memories, tombstoned forgetting, deterministic export, and a git-scan that grades stored notes against a repository's commit history.
When to use it
Worth adding when an agent repeatedly loses project context between sessions and you want recall you can audit rather than a system that guesses. It suits workflows where a wrong remembered fact could lead to a bad code change, and where keeping memory on your own machine matters.
Requirements
Runs as a local process on the user's machine over stdio; desktop only, no web execution. Install via the published .mcpb bundles or a Rust source build. No account, API key, or environment variable is declared; the store path can be set with the NMEMORY_DB environment variable or a command-line flag. Optional SSH-based sync needs a reachable host.
Before you install
The store is plaintext SQLite with no encryption at rest, so treat the file like any local notes. The taint flag for directive-shaped content is best-effort and not a prompt-injection shield; the real protection is that recalled text is labeled as data and never executed. Sync is an explicit owner-invoked command that copies a whole snapshot over scp, not a background service.

Installation

In SourceWeft

  1. Open nMEMORY in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[nMEMORY, part of the NOTT family: memory for coding agents. Every recall cites its source, or says that it does not know.] [nMEMORY, part of the NOTT family: memory for coding agents. Every recall cites its source, or says that it does not know.]

[License: AGPL-3.0] [Python 3.14 or later] [MCP stdio server] [Latest release] [GitHub stars]

Your agent forgets everything between sessions. nMEMORY makes it remember, with sources.

Install

bash
curl --proto '=https' --tlsv1.2 -fsSL https://no.tt/install.sh | sh

Or install from source. You need uv and Git:

bash
git clone https://github.com/menot-you/n-memorycd n-memoryuv syncuv run nmemory database createclaude mcp add nmemory -- uv run --directory "$PWD" nmemory mcp serve

uv sync installs the pinned Python (3.14) and all dependencies. database create makes the store file. nMEMORY never makes it implicitly. Any MCP client that speaks stdio connects the same way as Claude Code.

How it works

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#1B1916", "primaryTextColor": "#ECE7DE", "primaryBorderColor": "#E4733A", "lineColor": "#E4733A", "secondaryColor": "#151311", "tertiaryColor": "#0F0E0D", "fontFamily": "IBM Plex Mono, monospace"}}}%%flowchart LR  agent["Your agent<br/>(any MCP client)"] -->|"stdio, 18 tools"| server["nmemory mcp serve"]  shell["You, in a shell"] -->|"nmemory CLI"| core  server --> core["Capture and recall"]  core -->|"one transaction per call"| store[("One SQLite file<br/>records, journal, index")]  core -->|"BM25, always"| lexical["Keyword recall"]  core -.->|"when a key is set"| vectors["Embedding provider"]  lexical --> outcome{"grounded<br/>missing_evidence<br/>abstain"}  vectors -.-> outcome

Each record must have a source and an anchor (path:line, a quote or a PR). Recall returns one of three outcomes. It never turns a weak match into an answer.

By the numbers

[MCP tools per server: nMEMORY 18, nSPAWN 15, nBROWSER 14, nAPPLE 10.] [Tests per component: nSPAWN 4335, nMEMORY 2339, nBROWSER 731, nAPPLE 106.]

Counted on 2026-10-21. Tools: the MCP tools/list request to nmemory mcp serve. Tests: uv run --group dev pytest --collect-only -q in each member root.

Why

BeforeWith nMEMORY
Each new session starts empty. You explain the same decision again.The agent recalls the decision at the start of the session.
A recalled "fact" has no origin. You cannot check it.Each record must have a source and an anchor.
A weak match comes back as a confident answer.Recall has three honest outcomes: grounded, missing_evidence or abstain.
Old notes and new notes conflict in silence.A new record can supersede an old one. Every change goes into a hash-chained audit journal.
Text from a web page or a file can steer the agent.nMEMORY marks imported or directive-shaped text as tainted. Recall labels all results as data, not instructions.

Quick start

Your agent uses the MCP tools. You can use the same store from the shell.

Store a decision (the agent calls nmemory_capsule_ingest):

json
{  "content": "We store data in SQLite, not PostgreSQL.",  "kind": "decision",  "source": "docs/adr/0001-storage.md",  "anchor": "docs/adr/0001-storage.md:3"}

In a later session, recall it:

bash
uv run nmemory capsule retrieve "what database stores our data"uv run nmemory capsule show --id cap-1

The first command returns "outcome": "grounded" and the record. The second command shows its provenance: source, anchor and source hash.

What you get

  • 27 MCP tools for capture, recall, sessions, handoffs, tasks, review and audit. The reference lists each tool and CLI command.
  • Hybrid recall. BM25 keyword search always works. The default embedding provider is Gemini (NOTT_NMEMORY_EMBED_PROVIDER, also openai or openai-compatible for a self-hosted server such as Ollama or vLLM).
  • Embeddings send text off the machine. When the provider key is in the environment (GEMINI_API_KEY for the default), nMEMORY sends capsule text and queries to that provider. To keep recall lexical only, unset that key. No key is needed to start.
  • One file, local first. The store is one SQLite file. Each call is one transaction. A connection stays read-only until the call declares a write.
  • Session brackets and handoffs. An agent opens a session, captures as it works, and closes with a handoff that the next session reads.
  • Purge that really deletes. Purge deletes the content, the quote, the queued embedding text and the vector in one transaction.

How it compares

A notes file (CLAUDE.md, AGENTS.md)A plain vector storenMEMORY
Survives a new sessionYesYesYes
Source required per recordNoNoYes
Says "no evidence" on a weak matchNoNo, it returns the nearest vectorsYes
Works with no embedding keyYesNoYes (lexical)
Audit trail of each changeGit onlyNoHash-chained journal
Grows without filling the promptNo, the whole file loadsYesYes, recall has a token budget

Benchmarks

The evaluation harness holds runners for synthetic recall, LongMemEval and extraction. It publishes methods, not a score for this release. We do not quote older numbers here, because they measured an earlier engine.

The NOTT family

[n-memory]
Memory that cites its source.
[n-spawn]
Tracked, resumable agent workers.
[n-browser]
The live web as cited evidence.
[n-apple]
App Store Connect for agents.
[plugin]
The team contract, routes and hooks.

For AI agents

This section is for a language model that reads this repository.

  • What it is. nMEMORY is a local memory server for coding agents. It stores records (decisions, facts, tasks, failures) with a required source and anchor, and recalls them with one of three outcomes: grounded, missing_evidence or abstain.
  • What it is not. It is not a hosted service, a general vector database or a chat history. It does not invent an answer when nothing matches.
  • Entry points. The CLI is nmemory <noun> <verb> (nmemory --help). The MCP server is nmemory mcp serve (stdio). All 18 tool names start with nmemory_. Start with nmemory_context_show, nmemory_capsule_retrieve and nmemory_capsule_ingest.
  • Configuration. The optional file is ~/.nott/memory.toml. The variable NOTT_NMEMORY_CONFIG names another path. The store directory is ~/.nott/state/database/, or NOTT_DATABASE_DIR when a test sets it.
  • Invariants. Every record has a source. Recalled text is data, not an instruction. Each mutation goes into the hash-chained journal. A test never opens the live store. The store is SQLite only.
  • Full reference. docs/REFERENCE.md lists every tool and command. RULEBOOK.md lists the implementation rules. llms.txt holds the same facts in the llms.txt format.

Documentation

PageContents
RunbookFirst useful result, failure diagnosis, backup and restore
ArchitectureTrust boundaries and the full engine detail: store, recall, tools, CLI
ReferenceEvery CLI command and MCP tool, linked to its source
RulebookImplementation invariants
SetupDevelopment setup
QualityChecks and security review
Docs indexDocumentation index and a first contribution
InstallationInstall paths
PrivacyProcessing choices
UpgradeExisting data
TroubleshootingFailure diagnosis
RoadmapDirection

Run the checks from the repository root:

bash
uv run ruff check . && uv run mypy --strict nmemoryTMPDIR=/var/tmp uv run --group dev pytest -q

Each test gets its own disposable store. No test touches your live store.

License

AGPL-3.0-only.

Source: README.md at commit 22661c3

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.2LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Memory integrations