Persistent, local-first memory for AI coding agents. Remember, recall and forget across sessions.
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted β your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx mindtrail
MCP client config
{
"mcpServers": {
"mindtrail": {
"command": "uvx",
"args": [
"mindtrail"
]
}
}
}Leave a trail your AI agents can follow.
Persistent, local-first memory for coding agents over MCP. Tell your agent something once, and every future session remembers it.
Install Β· Day to day Β· How it works Β· Benchmarks Β· Docs
Every new agent session starts from zero. You explain your conventions again, re-state your preferences, and re-describe decisions you made last week. Mindtrail gives your agents a shared, long-term memory through the Model Context Protocol, so what one session learns, every later session (in any tool) can recall.
uv there is
nothing to install first.We tested it with real Claude Code sessions. In one session the user mentions a project fact in passing ("FYI, this project uses pnpm"). A fresh session later gets a task that depends on it ("how do I add lodash?"). The agent is never told to use Mindtrail.
| stored the fact on its own | applied it in a later session | |
|---|---|---|
| Claude Code without Mindtrail | β | 0/12 |
Claude Code with mindtrail[semantic] | 36/36 | 36/36 |
Without memory, the agent answers from habit every time: npm install lodash, a commit
message in the wrong format, port 5432 instead of your 5433. With Mindtrail it checks first
and gets your project's answer. This is a small test (12 facts run three times, one model,
an empty repository), not a measure of task success on large codebases.
Method, raw results and how to reproduce.
Mindtrail needs Python 3.11+. The fastest route is uv: uvx
downloads and runs Mindtrail on demand, so you only add it to your client. The first time the
server starts, it downloads the embedding model (~210 MB) in the background.
claude mcp add mindtrail --scope user -- uvx --from "mindtrail[semantic]" mindtrail serve
--scope user makes Mindtrail available in every project. Check it with claude mcp list.
Add this to the client's MCP config (in Claude Desktop: Settings β Developer β Edit Config):
{
"mcpServers": {
"mindtrail": {
"command": "uvx",
"args": ["--from", "mindtrail[semantic]", "mindtrail", "serve"]
}
}
}
# ~/.codex/config.toml
[mcp_servers.mindtrail]
command = "uvx"
args = ["--from", "mindtrail[semantic]", "mindtrail", "serve"]
Install the CLI once with pipx (or pip), then point your client at mindtrail serve:
pipx install "mindtrail[semantic]"
mindtrail init # downloads the model now and prints client configs
claude mcp add mindtrail --scope user -- mindtrail serve # Claude Code
Want the smallest install? Drop [semantic]: Mindtrail then needs no model download and
matches on words instead of meaning (see Better semantic recall).
More clients and troubleshooting are in docs/integrations.md.
Session 1 βΊ FYI, this project uses conventional commits and squash merges.
Session 2 βΊ Write a commit message for these changes.
β the agent recalls the convention and writes "feat(api): add pagination to /orders"
uvx picks up new releases on its own (uvx --refresh ... forces a check). With pipx, run
pipx upgrade mindtrail. Your memories live in ~/.mindtrail and are kept across upgrades.
See the changelog for what changed.
You don't need special commands. Work as usual and the agent decides what to keep:
release branch", "I prefer pytest over
unittest", "the flaky test was a timezone bug, fixed by pinning TZ=UTC". The agent stores
facts like these on its own. Say "remember thatβ¦" when you want to be sure.mindtrail list and mindtrail recall "<question>".mindtrail forget <id>. Deletes
are permanent.Good things to store: conventions, commands, ownership, where config lives, decisions and why they were made, root causes of tricky bugs. Don't bother with what the code or git history already says. Secrets are refused automatically.
Your agent gets three tools, and Mindtrail's server instructions tell it when to use them:
| Tool | What it does |
|---|---|
remember | Store one fact, preference, decision or event, scoped to the project or personal space. Pass replaces to supersede an outdated memory. |
recall | Find relevant memories from the current project plus your personal space. Returns nothing when nothing relevant exists. |
forget | Permanently delete a memory. |
Set MINDTRAIL_TOOLS=full for four more: search_memory (filters by space, type and validity),
get_context (a prompt-ready block within a token budget), update_memory (edits with
version history) and get_memory.
Behind the tools is a small, well-tested engine: duplicate merging, supersession, validity windows, version history and hybrid ranking. See docs/architecture.md.
mindtrail recall "how do we deploy?" # search project + personal memory
mindtrail remember "Staging is at staging.example.com" --scope project
mindtrail list # newest first
mindtrail forget <id> # permanent delete
mindtrail export -o memories.jsonl # everything you've stored, as JSON Lines
mindtrail doctor # diagnose the install
The default embedder matches on words and word fragments. For recall by meaning ("how do we deploy?" β "deploys go through GitHub Actions"), install the local neural model. It runs on CPU and needs no API key:
pipx install "mindtrail[semantic]" # or use the uvx config above
mindtrail init # downloads the model once (~210 MB) and re-indexes existing memories
For a smaller download (67 MB, somewhat lower recall), set
MINDTRAIL_EMBEDDING_MODEL=BAAI/bge-small-en-v1.5. Memories stored under another model are
re-embedded automatically the next time the server starts.
The agent test is in Does it actually help?. On two held-out sets of developer-memory questions (82 in total) that were never used for tuning (methodology):
| recall@1 | recall@5 | paraphrase recall@5 | correctly says "nothing stored" | stale/foreign leaks | |
|---|---|---|---|---|---|
| default install | 58β64% | 68β75% | 44β46% | 82β100% | 0% |
mindtrail[semantic] | 82β90% | 93β94% | 85β89% | 100% | 0% |
This is a small, synthetic retrieval benchmark written by us. Run mindtrail bench to
reproduce it, or add your own dataset.
from mindtrail import MemoryService
memory = MemoryService.from_config()
memory.remember("The API uses FastAPI and PostgreSQL", space_id="project:shop")
print(memory.get_context("add a new endpoint", space_ids=["project:shop"]).text)
Everything stays in ~/.mindtrail/mindtrail.db on your machine. Mindtrail refuses writes that
look like API keys, tokens or private keys. forget overwrites deleted data on disk, and
recalled memories are marked as untrusted reference data so agents don't follow instructions stored inside them.
See SECURITY.md to report issues.
Issues and PRs are welcome. Read CONTRIBUTING.md to get set up; the whole suite runs in about 15 seconds. If Mindtrail saves you from re-explaining your codebase, a β helps others find it.