Labsco
MCP SERVER

Mnemos

by arhuman

Local, citable memory for a coding agent — indexes your docs, notes and code, and answers with the exact file, section and line range.

Agent Memory
Summary
Answers that carry a line range, and writes that are gated separately.

Citations are the whole design: retrieval returns the file, the section and the lines, so a claim is checkable rather than plausible. The permission model is unusually careful for a memory tool — reads are open, writes need one flag, deletes and moves need another, and anything written is secret-scanned first. One documented gap to know: moving a file does not rewrite inbound markdown links to the old path, it logs a warning.

What it is

A single cgo-free Go binary that indexes plain-Markdown folders — ADRs, design docs, runbooks, notes, source — and serves them over MCP so an agent searches your own knowledge instead of guessing. Every answer lands on a `file#section` and a line range you can open. No vector database, no Python or Node service, and nothing leaves the machine.

What you get
  • Ranked, filtered retrieval with citations attached — `mnemos.search`
  • A precise chunk read by `chunk_id`, or a whole document by `uri`, optionally pulling in its one-hop link neighbours — `mnemos.read`
  • Top results returned as LLM-ready context blocks addressed `uri:start-end` — `mnemos.context`
  • A document's link graph: outbound links and inbound backlinks, with dangling targets marked `resolved: false` — `mnemos.related`
  • The knowledge tree walked on disk with index metadata attached and an `indexed` flag, so files you have not indexed yet are still visible — `mnemos.list`
  • Writes behind an explicit gate (`allow_write = true`): a note written into memory at an auto-named or explicit path, and an existing `.txt`/`.md` converted into a structured document — both secret-scanned before they are written — `mnemos.remember`, `mnemos.okfy`
  • Deletes and moves behind a second gate (`allow_delete = true`), with a directory move carrying its whole subtree and preserving each document's collection — `mnemos.forget`, `mnemos.move`
  • A watcher that reindexes incrementally on change and drops deleted files — `mnemos watch . --collection myproject`
  • Optional Claude Code hooks: a `SessionStart` matcher that injects the working set and re-injects it after compaction, and a `UserPromptSubmit` matcher that fires on recall cues like "as we decided" and injects the top 3 search hits
Requirements

Go 1.25+ to build; `make install` puts one binary in `$GOBIN`, or `make build` keeps it in `./bin/mnemos` and off your `$PATH`. No account, no key, no external service. Register it with an **absolute** `--config` path — `claude mcp add mnemos -- mnemos serve --config /abs/path/to/project/.mnemos/mnemos.toml` — because Claude Code does not guarantee the working directory it spawns the server in; a bare `mnemos serve` only finds your data by luck, and fails with a clear error rather than returning empty results. The default build is lexical-only; semantic search is an optional build plus `mnemos models install all-MiniLM-L6-v2` and `use_vectors = true`. The prompt-cue hook needs `jq`.

Setup effort

Build from source — clone the repository and build it, then point your client at the binary