
MCP Light Memory
io.github.PeterPirogPublished by GitHub account PeterPirogv1.8.1Updated Oct 24, 2026
Local-first persistent memory for coding agents and MCP clients.
The publisher's own server: Memory.fit
Overview
A local-first persistent memory server that lets coding agents checkpoint work and retrieve past decisions, gotchas and constraints across sessions.
- What you can do
- Retrieve task-relevant memories ranked, deduplicated and token-budgeted, with optional historical queries by date and a temporal timeline view. Create, update, supersede, link and archive durable memory entries stored as Markdown files with YAML frontmatter. Checkpoint working state and resume interrupted tasks through a task stack. Inspect status, guard, validate and doctor checks, plus configuration and history. Route one connection across multiple projects with a registry allowlist and a read-only boundary.
- When to use it
- Useful for long-running coding work in a git repository where an agent must remember decisions, constraints and failures between sessions without keeping full history in context. Also suited to teams wanting memory that stays entirely on disk and offline.
- Requirements
- Runs as a local stdio process. Needs Python 3.8+ and Git, with the target project being a git repository. Installation is done by cloning the repository and running the installer script for a supported client (Warp, OpenCode, JetBrains AI). Optional sentence-transformers and numpy packages improve semantic retrieval. No API keys or environment variables are declared.
Installation
In SourceWeft
- Open MCP Light Memory in the dashboard and add it to a workspace.
- 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
MCP Light Memory
Lightweight local-first persistent memory for coding agents and MCP clients.
formerly internal-rag
[version] [license] [python] [deps] [mcp]
What is this?
MCP Light Memory is a lightweight, local-first, persistent memory system for coding agents and MCP clients (Warp, OpenCode, JetBrains AI Assistant / PyCharm, Claude Code, Cursor). It acts as a checkpoint + retrieval layer — it stores the minimum durable state needed to resume complex work across sessions, without keeping the full conversation in the model's context window.
When your agent starts a task, it calls context and gets back relevant past decisions, gotchas, constraints, and hypotheses — ranked, deduplicated, and trust-bounded. When it finishes, it checkpoints the working state. Next session, even after a restart, the memory is there.
Why use it?
How it works (mechanisms)
- Markdown is the source of truth. Every memory is a
.mdfile with YAML frontmatter (id,type,status,tags,sources,links,valid_from,valid_to,supersedes). Human-readable, diffable, durable. - SQLite is a rebuildable cache. BM25/FTS5 index + optional embedding vectors + usage tracking. Delete it and everything rebuilds from Markdown.
- Retrieval: pure-Python BM25 + optional dense embeddings → RRF fusion → MMR diversification → policy boosts (type/status/temporal) → token-budget cut. Adaptive mode: sparse first, dense only if weak.
- Lifecycle:
remember→update→supersede(links both directions, never deletes history) →forget(archives, never deletes) →timeline(temporal view).search --at YYYY-MM-DDfor historical queries. - Trust boundary: retrieved content is wrapped in
=== BEGIN/END INTERNAL_RAG MEMORY ===with aSECURITY NOTICEheader. Structured JSON/MCP carriestrust: untrusted+ optionalsecurity_flags: ["instruction_like_content"]. - Evidence freshness: each result includes
evidence_state(present/missing/unverifiable) for local path-like evidence — derived at retrieval time, never persisted. - Multi-project router: one MCP stdio server in front of many projects via a JSON registry.
write:falseblocks mutating tools before spawning a child. Per-call subprocess isolation (no shared state).
Setup
Prerequisites
- Python 3.8+ (uses
pylauncher,python, orpython3— the installer auto-detects the real interpreter and rejects the WindowsApps stub) - Git (the target project must be a git repo)
- Optional:
pip install sentence-transformers numpyfor better semantic retrieval
The current version is defined by the VERSION file — check it (or run mlm.py --version) instead of hard-coding an expected number.
Quick start
Clone this repo once, then install into any project:
The installer:
- copies skill files + creates
INTERNAL_RAG/+AGENTS.md - runs
init+checkpoint+validate(soguardisOKimmediately) - auto-registers the MCP server in the client config when it can do so safely (or reports
MANUAL_REQUIRED/ prints JetBrains instructions) - writes the absolute path to the verified Python interpreter (survives Windows PATH issues)
Installation matrix
One installer, four clients, two config scopes. Full guide: docs/INSTALLATION.md.
--globalchanges the scope of the CLIENT CONFIG (~/.warp/.mcp.jsonvs{repo}/.warp/.mcp.json,~/.config/opencode/opencode.jsonvs projectopencode.json). The server still points at the target project you installed into.- Need one global MCP endpoint for many repositories? Use the multi-project router — docs/MCP-MULTI-PROJECT.md.
- JetBrains/PyCharm is assisted, not fully automatic: the installer prepares the JSON + Working Directory; you add the server in Settings → Tools → AI Assistant → MCP and choose Server level = Project or Global.
- Manual setup (no installer) per client: docs/INSTALLATION.md + client pages (Warp · OpenCode).
Zero-shot: copy-paste prompts for Warp and OpenCode
You can paste one of these directly into the client agent. Replace C:\Projects\App with the real target repository path.
Warp — install for one project:
Warp — global client config for one project:
OpenCode — install for one project (stable/V1):
OpenCode — global client config for one project (stable/V1):
For OpenCode 2 / V2, use the same prompts but explicitly say OpenCode 2 / V2 and require --client opencode2. More variants: docs/ZERO-SHOT-SETUP-PROMPTS.md.
Configuration details
Warp
Warp reads MCP server configs from ~/.warp/.mcp.json (global, auto-spawns) or
{repo}/.warp/.mcp.json (project, requires a manual toggle per Warp docs).
Shape: mcpServers.<name> with command, args, working_directory (always set it — the memory store is resolved from it). See examples/warp.example.json and docs/WARP-SETUP.md.
OpenCode stable (V1)
OpenCode reads opencode.json/.jsonc in the project root, or
~/.config/opencode/opencode.json globally. V1 servers are flat under
mcp.<name> (no servers sub-key) with enabled: true and command as an
array — see examples/opencode-legacy.example.json and docs/OPENCODE.md.
OpenCode 2 (V2, beta)
Same config files, different shape: mcp.servers.<name>, command as an
array, and no enabled field (V2 disables via disabled: true) — see
examples/opencode-v2.example.jsonc and docs/OPENCODE.md.
JetBrains AI Assistant / PyCharm
PyCharm does NOT auto-read any MCP config file. The installer prints
ready-to-paste JSON + Working Directory; you add the server in
Settings → Tools → AI Assistant → MCP (STDIO) and choose Server level =
Project or Global. See examples/jetbrains.example.json.
Multi-project router
One MCP connection in front of many projects — registry allowlist, write:false hard boundary, per-call subprocess isolation.
Registry file (projects.json)
Warp config for the router
See docs/MCP-MULTI-PROJECT.md for details.
Workflow
Core commands (CLI alias: mlm.py or legacy irag.py):
Path mapping (rebrand: internal-rag → MCP Light Memory)
The on-disk folder INTERNAL_RAG/ and the skill directory .agents/skills/internal-rag/ are intentionally kept under their legacy names for zero-migration backward compatibility. See docs/MIGRATION-TO-MCP-LIGHT-MEMORY.md.
Durable memory (CRUD)
Types: decision, knowledge, constraint, gotcha, failure, hypothesis, session.
Task stack (interrupts)
Configuration (.irag.yml, optional)
mlm.py config shows the effective configuration. mlm.py config --init writes a template.
Optional embeddings (better retrieval)
When the package is available and .irag.yml has embeddings: auto (default), retrieval uses embeddings with fallback to BM25. Override at runtime with --embeddings on|off|auto.
Two retrieval profiles (see docs/EMBEDDINGS.md):
english-fast(default,all-MiniLM-L6-v2)multilingual(intfloat/multilingual-e5-small) — for Polish-English projects
Offline / air-gapped
See docs/OFFLINE.md for details.
Privacy & Git
The default install mode is local-only. The installer uses .git/info/exclude, not the project's .gitignore, so local memory and integration files are not accidentally committed.
Before publishing a project:
Expected: RESULT: PASS
Full removal from a project
The uninstaller creates a backup outside the repository, then removes INTERNAL_RAG and its integrations. Use --keep-memory to preserve the memory data.
Documentation
- Installation · Daily usage · CLI reference
- Architecture · Memory lifecycle · Recovery
- MCP · Multi-project MCP
- Architecture decisions (ADR) · Configuration
- Embeddings · Offline · Git hooks
- Privacy & Git · Uninstall · Troubleshooting
- Zero-shot setup prompts · Migration · Branding
Structure in a target project
Source of truth
- current user instructions, 2. current code/tests/configuration, 3. specifications/ADRs, 4. verified memory, 5. session notes, 6. hypotheses.
Memory can be stale. Code takes precedence.
License
MIT.
Changelog
1.8.0 — JetBrains manual setup
--client jetbrainsno longer writes a fake config file (PyCharm ignores MCP config files). Prints ready-to-paste JSON + IDE menu instructions instead.--unregister --client jetbrainsprints a reminder to remove in the IDE UI.
1.7.2 — JetBrains cwd + client-specific messages
- JetBrains: writes
working_directoryas a hint + printsWARNINGwith exact path to set inSettings → Tools → AI Assistant → MCP. - Client-specific restart messages (Restart PyCharm / Restart Warp / Restart OpenCode).
Memory store: <path>printed in install output for immediate verification.
1.7.1 — Windows Python stub fix
detect_python()rejects the WindowsApps 0-byte stub; preferspy -0p; verifies each candidate with--version.- Post-register verification: runs
--versionimmediately after writing the config and reportsPASS/FAIL. --unregisterdeletes empty config files + parent dirs (fixes dead.warp/.mcp.jsonskeleton →GUARD STALE).
1.7.0 — Rebrand to MCP Light Memory
- Total rebrand from
internal-ragto MCP Light Memory (mcp-light-memory). New CLI aliasmlm(mlm.py). Logo/icon assets. Migration doc. GitHub rebrand checklist. - Backward-compatible:
irag.py,INTERNAL_RAG/, old MCP server names preserved as deprecated aliases. - 18 rebrand consistency tests.
1.6.1 — Post-v1.6 hardening
- Mutation/lifecycle benchmark (11 scenarios). Trust boundary (ADR-015):
trust: untrusted+security_flags. Evidence freshness (ADR-016):evidence_state. Scale benchmark (100/1k/10k). Router security regressions (+12 tests). Docs consistency test. 249 tests pass.
1.6.0 — Retrieval quality + MCP 2026-07-28
- Memory-quality benchmark (37 cases). MCP
2026-07-28dual-era (server/discover,_meta,structuredContent,outputSchema). Registry strictwrite. Sources in chunk prefix. Adaptive retrieval. Link-aware context.consolidate --prepare. Router latency benchmark. ADR-010…016.
1.5.0 — Abstention gate + multi-project router
- Relevance/abstention gate (
--meta). FTS5 candidate prefilter. Multi-project MCP router. MCP protocol hardening (pure stdout, SDK-verified). 168 tests.
1.4.0 — Chunking + dedup + temporal lifecycle
- Section-aware chunking (schema v3). SimHash dedup. Multilingual PL/EN profile. Temporal lifecycle (
valid_from/valid_to/supersedes/--at).consolidate --dry-run.
1.3.0 — Persistent embedding cache
- Chunk-level float32 BLOBs in SQLite. Multiple models coexist.
index --vacuum/--embed-missing.
1.0.2 — Token budget + privacy
- Token budget enforcement. Stale memory detection. Duplicate detection. Privacy scan at write-time. Auto-checkpoint timer. Offline/air-gapped pack.
1.0.0 — Initial release
- BM25 + MMR retrieval. Full memory CRUD. Task stack. MCP server (JSON-RPC stdio). Git hooks. Diagnostics. Export/import. Token budget.
Source: README.md at commit 92af0e7
Tools
0Version history
1- v1.8.1LatestSep 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

Memory.fit
fit.memoryOfficial publisher
Hosted Memory.fit server that lets an AI read your training, sleep, recovery and nutrition data and write back weekly plans, targets and meal plans.
pg.ddx.io: the PostgreSQL community's memory
io.ddx.pgOfficial publisher
pg.ddx.io: the PostgreSQL community's memory's hosted MCP server, published by pg.ddx.io; no sign-in required; Streamable HTTP; 29 tools.
var.gg Naming Memory
gg.varOfficial publisher
Remote MCP server that suggests and searches code identifier names from domain concepts in Korean, Japanese, Chinese, Vietnamese and English, and exposes ERD…

Counterparts
ai.counterparts
Local-first long-term memory for Claude Code and Claude Desktop: the assistant writes notes about you and your projects and recalls them in later sessions.

LAHZE - Persian AI Memory Platform
Published by GitHub account pedramgholizadeh
LAHZE - Persian AI Memory Platform's hosted MCP server; no sign-in required; Streamable HTTP; 13 tools.