RMS Memory MCP
RMS Memory MCP gives AI coding agents a persistent, local-first Markdown memory vault they can search, write to, and maintain across sessions and IDEs.
Search memory (
rms_search): hybrid vector + full-text search over vault notes, code, or both (RRF-fused), with project/cross-project federation, score/confidence/char budgets, and an inject/abstain envelope.Search code (
rms_code_search): semantic code index hits with language, symbol, line range, plus related notes and history/graph enrichment.Read notes cheaply (
rms_read): whole note, outline, single heading, char window, or an "unchanged" stub viaif_hash.Persist knowledge (
rms_write): save decisions, rules, constraints and preferences with audit metadata, confidence, lifecycle status, soft supersede, dry-run previews, and credential/token refusal.Git history without a shell (
rms_file_history): derived file→commit cache query, catch-up, and reindex.Knowledge graph (
rms_graph): status/ensure, neighbors, BFS paths, snapshots, ephemeral semantic edges, edge create/suppress/restore, DOT export.Session continuity (
rms_checkpoint_save/done/load/query): save goals and pending work before compaction, resume later, close with a durable session summary.Project orientation (
rms_overview): document counts, recent notes, active checkpoints, index lag, and git branch/HEAD/changed files for one project.Maintenance: health diagnostics (
rms_doctor), full reindex (rms_reindex), incremental sync (rms_sync), superseded-note archiving (rms_prune), and duplicate/staleness reporting (rms_hygiene).Discovery & scaffolding: list project keys (
rms_projects), build wiki context packs (rms_wiki_pack), and self-bootstrap agent rules (rms_system_instructions).Reminders (
rms_remind): add/list/done/cancel/snooze user reminders surfaced in tool responses.
Provides tools for querying a project's local Git file→commit history cache, including lazy catch-up and reindex, so agents can determine when source files changed without shelling out to git log.
🧠 RMS Memory MCP
Latest release: see GitHub Releases · rms-memory update installs it · the optional companion GUI is released separately
Persistent, local-first memory for your AI coding agents.
Stop re-explaining your architecture to Cursor, Zed, and Claude Code and other IDEs every single session.
Features • Download • Install • Quick Start • CLI • MCP Tools • Architecture
🔒 Privacy promise
RMS does not collect your data or usage statistics. RMS Memory MCP has no accounts, license checks or analytics, and your notes, code, queries and settings stay on your machine (local-first). The only requests that reach RMS carry no content and no personal identifier:
Update check:
rms-memory doctor(and therms_doctortool) asksupdate.rms-ds.comfor the newest version, at most once a day: your OS, CPU architecture and the version, no ID. If that server is unreachable it falls back to GitHub*. Turn it off withRMS_MEMORY_NO_UPDATE_CHECK=1.Downloads you ask for:
rms-memory update,rms-memory guiand the install scripts fetch signed files fromupdate.rms-ds.com, which counts downloads per release and source; its analytics store no IP addresses or user agents.Embedding model: on first use it is downloaded once from Hugging Face*.
Embeddings are computed on your machine (the bundled model, or a local Ollama), so your notes never leave your computer for any AI service.
If an online service is ever introduced, we will tell you clearly beforehand.
The Problem
You're developing a single project but switching between different agents — Cursor, Zed, Claude Code, OpenCode, etc. Every one of them loses context of architectural decisions, system requirements, and user preferences the moment you close the tab. You end up re-explaining the same things over and over, or copy-pasting a stale CLAUDE.md between tools.
RMS Memory MCP bridges this gap: a single, isolated, centralized Markdown vault — perfectly structured for LLM consumption — that any MCP-compatible IDE can read from and write to.
🖥️ Prefer a GUI over raw Markdown?
RMS Memory GUI turns your vault into a visual workspace — full graph editor, per-project Git & GitHub sync, one-click Doctor repair, and an AI-assisted Wiki generator (bring your own key). One-time desktop app, works on top of everything below. The MCP server stays 100% free and standalone either way.
Related MCP server: io.github.oleksiijko/pmb-ai
✨ Key Features
🗂️ Global Centralized Vaults | Project context lives outside your repo — zero |
🔍 Hybrid Retrieval (LanceDB) | Embedded Vector Search + Tantivy Full-Text Search for zero-fail context hits. |
🌐 Multilingual Semantic Parsing |
|
🌳 AST Markdown Chunker |
|
🧩 Semantic Code Memory | Optional Tree-sitter indexing for Rust, Go, JS/JSX, TS/TSX, Python, C/C++, Java, Ruby, Swift, C#, PHP, Kotlin, SQL, HTML, CSS, and Vue |
🕸️ Knowledge Graph (v1.2.0) | Durable Markdown/code relationships via MCP |
🧹 Safe Project Lifecycle | Unregistering preserves vault/index data; permanent GUI deletion requires the exact project key, is confined to the master vault, and never touches source code. |
🔀 Federated Corpus Search | Search |
🎯 Bounded Recall (v1.0.7) |
|
♻️ Knowledge Lifecycle | Frontmatter |
📓 Obsidian vaults (v1.3.0) |
|
🌍 Local HTTP transport (v1.3.0) |
|
🔐 Credential refusal (v1.3.0) |
|
⬆️ Updates (v1.4) |
|
🔄 Session Continuity (v1.0.7) | Vault-backed checkpoints ( |
🧭 Multi-project MCP routing (v1.0.8+) | Explicit |
🔗 Cross-project federated search (v1.0.9) | Pass |
🧊 Concurrent bind cache (v1.0.9) | Up to 4 warm Store+watcher pairs (LRU); multi-root IDE sessions stop thrashing open/close. |
🧱 Cargo workspace (v1.0.9+) |
|
📦 Unified Releases | Public assets use |
🪶 Small idle footprint (v1.3.0) | Each |
⚙️ Dynamic Auto-Installer |
|
📜 Rules-as-Code Patching | Non-destructive AST patching of |
🧪 Durable Vault Writes |
|
📜 File git history (v1.1.2) | Derived |
📚 Canonical Wiki Isolation | Generated |
🛡️ Ten-Point Resiliency | GC, background sync, write-guard snapshots, macOS sandbox bypass, |
🔒 Security Hardened | Panic-free database layer, symlink traversal blocked, JSON-RPC error responses, request size limits. See SECURITY.md and NOTICE. |
🧠 Audit Metadata | Every record auto-receives |
🔀 Multi-Scope |
|
🖥️ Optional Companion GUI | Paid Tauri desktop app: visual Markdown/graph editor, Git & Vault sync, Doctor dashboard, AI-assisted organizer/Wiki (BYOK), and cross-tool spend tracking — layered on top of the same vault, never required. See GUI-README.md. Install and open it from the terminal with |
📥 Download
RMS Memory MCP (command-line server, free)
Also as: macOS .tar.gz · Windows .zip · Linux x64 .tar.gz / .rpm · Linux ARM64 .tar.gz / .rpm
The installers put rms-memory on your PATH (/usr/local/bin on macOS, Program Files\RMS Memory MCP on Windows). Always the newest stable release. The macOS installer and binary are signed with an Apple Developer ID and notarized, so macOS opens them without a warning. The Windows installer is not code-signed yet, so SmartScreen may warn before the .msi runs.
Prefer a one-line installer? It picks the right build, verifies the signature and puts the binary on your PATH:
curl -fsSL https://raw.githubusercontent.com/max-ramas/rms-memory-mcp/master/scripts/install.sh | bashirm https://raw.githubusercontent.com/max-ramas/rms-memory-mcp/master/scripts/install.ps1 | iexWith an archive: unpack, put rms-memory (rms-memory.exe on Windows) on your PATH and run rms-memory install to register it in your IDEs. Already installed? rms-memory update fetches the release from the same server, verifies its signature and checksum, and keeps the previous binary for rms-memory update --rollback. The signed manifest of the latest release is at /v1/rms-memory-mcp/latest. Downloads through this server are counted per release; no IP addresses or user agents are stored.
RMS Memory GUI (optional desktop app, trial included)
The MCP server never needs the GUI. From a terminal, rms-memory gui installs it for your OS (signature and checksum verified) and opens it.
Homebrew, .deb/.rpm packages of the MCP and older versions: GitHub Releases.
📦 Installation
Option 1: Homebrew (macOS Apple Silicon & Linux)
brew tap max-ramas/tap
brew install rms-memory-mcpInstalls a prebuilt binary — no Rust toolchain required. The formula updates automatically with every release.
Not covered by Homebrew: macOS Intel (dropped as of v1.0.1) and Windows (Homebrew doesn't run there — use Option 2 or the
.zipbelow).
Option 2: GitHub release binary
Prebuilt binaries for aarch64-apple-darwin (Apple Silicon), x86_64-unknown-linux-gnu,
aarch64-unknown-linux-gnu, and x86_64-pc-windows-msvc are published on every
release, along with
.deb/.rpm packages for Linux. One-line installers auto-detect your architecture:
curl -fsSL https://raw.githubusercontent.com/max-ramas/rms-memory-mcp/master/scripts/install.sh | bashirm https://raw.githubusercontent.com/max-ramas/rms-memory-mcp/master/scripts/install.ps1 | iexOption 3: Build from Source
# 1. Clone the repository
git clone https://github.com/max-ramas/rms-memory-mcp.git
cd rms-memory-mcp
# 2. Build the optimized release binary
cargo build --release
# 3. Add the binary to your global PATH
cp target/release/rms-memory ~/.cargo/bin/crates.io (cargo install)
As of 1.1.0+, tag push publishes only the umbrella crate rms-memory-mcp
to crates.io. Internal workspace members (rms-memory-core / index / vault /
cli) stay publish = false (path deps for local builds and the companion GUI).
Release packaging flattens those crates into a staging tree via
scripts/flatten-for-crates-io.py before cargo publish (as of 1.1.1 the
staging tree also inlines rms-memory-cli) — see
docs/crate-split.md.
cargo install rms-memory-mcp
# Prefer Homebrew or a GitHub release binary if you want a pinned installer.Optional RMS Memory GUI installers
The companion RMS Memory GUI is a paid, optional Tauri desktop control plane: a visual Markdown/graph editor, per-project and Vault-wide Git/GitHub sync, a Doctor dashboard with one-click repair, an AI-assisted organizer and Wiki generator (bring your own key, proposal-only), and cross-tool spend tracking. The MCP server remains fully standalone: it does not require the GUI, an AI provider, or a GUI license to index, search, sync or serve MCP clients.
See GUI-README.md for the full feature breakdown, supported platforms, installer verification and release-distribution policy.
GUI source is private, but desktop installers are published as binary assets
on this repository's GitHub Releases
under the matching v<version> tag. macOS builds are signed with Developer ID and
notarized; Windows builds are not signed yet — see GUI-README.md. The private GUI workflow transfers only the completed
.dmg, .msi/.exe, .AppImage, .deb, and .rpm installer files (plus
SHA256SUMS.txt when present). With updater signing enabled, the GUI pipeline
mirrors signed latest.json, companion .sig files, and macOS *.app.tar.gz
onto this public release (URLs rewritten to rms-memory-mcp; in-app Install
reads …/releases/latest/download/latest.json). It never mirrors GUI source,
build logs, credentials, or private GUI release archives.
The same publication flow runs for a v* GUI tag and for a manually dispatched,
version-validated GUI release.
🚀 Quick Start
The fastest way to get every IDE on your machine connected:
rms-memory installThis scans ~/.config/ and ~/Library/Application Support/ and hooks rms-memory directly into Cursor, Zed, Claude Code, OpenCode, and others — no manual JSON editing.
Generated Wiki namespace
The optional desktop GUI writes human-readable Wiki pages to <vault>/wiki/. RMS Memory MCP remains AI-free and treats this directory as generated output rather than canonical memory. A shared case-insensitive path policy (src/path_policy.rs, also reused by the GUI) excludes the entire namespace from Markdown/code indexing, vector and full-text retrieval, watchers, the durable graph and Wiki context packs. Write isolation matches that policy: rms_write requires .md and rejects wiki/**; canonical DocumentService list/read/write APIs exclude or reject wiki; Wiki page mutations use wiki-safe methods that skip memory audit-frontmatter injection. Linked-document link: resolution always re-checks that the canonical target stays inside the vault. Full or incremental sync removes legacy Wiki-derived records by path without deleting the files, and doctor reports the isolation state explicitly.
For virtual projects without a filesystem path (threads, leads, etc.), use --scope:
rms-memory --scope "thread:abc-123" serveUse multiple isolated scopes
A scope is an isolation boundary for a vault and its index. Without --scope, RMS Memory uses the canonical current working directory; an explicit filesystem path addresses that same kind of project vault. Any other non-empty identifier creates an isolated virtual vault:
rms-memory serve # current project scope
rms-memory --scope "/home/user/my-project" serve # explicit project scope
rms-memory --scope "thread:abc-123" serve # virtual thread scope
rms-memory --scope "product:acme" serve # virtual product scopeFor project knowledge plus per-thread history, query each scope explicitly and merge the results in the caller. RMS Memory intentionally does not mix scopes implicitly. Scope IDs may not be empty or exceed 512 characters; absolute and .//../ values are resolved as paths, while all other values are opaque identifiers.
When using min_confidence, start with an unfiltered search. Use 0.3–0.5 for broad refinement and reserve 0.7+ for verified canonical facts; records without a confidence value remain visible.
Configure your vault
The simplest way to configure the server is to run the interactive setup wizard. You don't need to memorize any CLI flags — just run:
rms-memory config(Alternatively, set the vault root directly with rms-memory config --vault-path ~/MyVaults/, then run rms-memory init in each repository you want to register.)
Register a repository explicitly from its root before connecting IDE agents:
cd /path/to/project
rms-memory initThis creates the project mapping in ~/.rms-memory/registry.toml and provisions its isolated, structured vault. Routine MCP discovery is read-only and fail-closed: it never creates a project from /, never falls back to a shared global vault, and never guesses between multiple registered projects.
~/MyVaults/
└── <ProjectKey>/
├── rules/
├── decisions/
├── architecture/
├── artifacts/
├── docs/
└── api/Optional semantic code memory
Markdown memory remains the default corpus. Semantic source indexing is separate, supports all bundled language adapters, and never changes source files:
rms-memory reindex --code # build/update only derived code memory
rms-memory reindex --all # refresh Markdown vault + code memoryRegistered projects support code_index_mode = "off" | "manual" | "watch"; the default is off. Set it from the project root with rms-memory config --code-index-mode watch (or add --scope <project-path>). watch is explicitly opt-in, coalesces supported source saves for three seconds, and reindexes only the dirty paths (try_index_code_paths) with a full-walk fallback when the index is cold, the dirty set is empty/oversized (>200), or the watcher channel overflows. Concurrent IDE processes share a completion marker so an unchanged workspace stays idle. Code search results include their source language.
Perf smoke for large fixtures: ./scripts/bench_large_vault.sh [notes] [code_files].
Language selection is project-scoped and defaults to every bundled adapter:
rms-memory config --code-languages auto
rms-memory config --code-languages go,typescript,tsx,vueSupported names are rust, go, javascript, jsx, typescript, tsx, python, c, cpp, java, ruby, swift, vue, csharp, php, kotlin, sql, html, and css. Generated paths (node_modules, .next, .nuxt, target, vendor, and coverage) are always excluded. Ambiguous .h files are indexed as C exactly once; use .hpp, .hh, or .hxx for C++ headers. Vue indexes only inline JavaScript/TypeScript <script> contents and maps results back to the .vue host file; templates, styles, script setup macros, and external src scripts remain outside v1.0.5 semantic extraction.
HTML files contribute inline JavaScript <script> blocks (mapped back to the .html file) and elements with an id; CSS files contribute rule sets by selector and @keyframes. SQL files contribute CREATE TABLE / VIEW / TYPE / FUNCTION / PROCEDURE / TRIGGER statements.
Use an existing Obsidian vault
rms-memory projects attach-obsidian ~/Obsidian/Notes --key notes # in place, read-only
rms-memory import --obsidian ~/Obsidian/Notes --dry-run # or copy into this project's vaultAn attached vault is indexed and searchable (pass project: "notes"), but RMS Memory never creates, edits, moves or deletes files in it: rms_write, checkpoints, prune and hooks refuse, and projects remove only drops the registration. The index lives under ~/.rms-memory/dbs/ like any other. Obsidian links ([[Note]], [[Note|label]], [[Note#Heading]], ![[image.png]], frontmatter aliases) resolve in the graph, the index and doctor.
Embedding model and retrieval eval
The default model is multilingual-e5-small (384 dimensions, downloaded once). To compare it with others on your own notes and switch:
rms-memory embedding list
rms-memory embedding eval --models multilingual-e5-small,bge-m3 --show-misses
rms-memory embedding use bge-m3 # or: ollama:nomic-embed-text (local Ollama)eval turns each note's first heading into a query (or reads --queries file.jsonl with {"query": "...", "expect": ["path.md"]} lines) and reports hit@1, hit@k and MRR for embeddings alone and for hybrid search. Each model keeps its own index under the project's dbs/ folder, so switching back reuses the old one. After use, restart running MCP servers (IDE, GUI); the next sync builds the new index. Ollama URLs must be loopback (http://127.0.0.1:11434 by default).
🛠 CLI Commands
Command | Description |
| Starts the JSON-RPC stdio server (auto-triggered by your IDE). |
| Registers a project into the global registry. |
| Re-injects managed IDE rule blocks with the concrete registry |
| Scans for existing docs ( |
| Hooks the server into supported IDEs. |
| Removes the server from all discovered IDE configurations. |
| Runs 8-point vault health diagnostics (the 8th reports credentials stored in notes, never changing them; a 9th checks |
| Without flags: prints global + current-project settings, then offers interactive global editing. Any flag runs non-interactively. Global: |
| Refreshes Markdown memory (default), derived semantic code memory, or both. |
| Incremental LanceDB delete-then-insert sync (also runs automatically during |
| Prunes orphaned LanceDB indices belonging to deleted vaults. |
| Archives superseded notes older than N days (default 30) under |
| Derived |
| Checks the RMS update server and installs a newer binary (signature, size and sha256 verified, atomic swap, |
| Installs the optional desktop GUI (14-day trial) from the update server and opens it; opens it when it is already installed. Downloads are labelled |
| Local, content-free statistics: how many characters each tool returned to agents (see |
| Generates wiki context packs from the vault and the code index (same data as |
| Live GUI/AI status banner + capability catalog ( |
| Durable knowledge graph (same actions as MCP |
| Tails the telemetry log ( |
| Compiles the current vault into a single |
| Lists registered project keys and their code/vault paths. |
| Resolves one registered project key. |
| Looks up the registry key for a code path (including post-migrate redirects). |
| Moves/renames a registered project after the repo folder changed. Plans key rename, vault/db moves, and |
| Removes an erroneous project registration while preserving its vault files. |
| Registers an existing Obsidian vault in place, read-only: indexed and searchable, never modified. The read-only flag is kept in |
| Lists the bundled embedding models, switches the model ( |
| Optional local archive of your AI-assistant dialogs (Claude Code, Codex, Antigravity, OpenCode, Cursor, Zed), read from the files those tools already keep on disk; nothing is intercepted and nothing is sent anywhere. |
| Editor-agnostic continuity hook ( |
All commands | Accept |
🔌 MCP Tools Exposed
Tool descriptions are written to be action-oriented, so agents use the vault proactively without being asked.
MCP resources (1.3.0): rms://<project>/overview, rms://<project>/instructions, rms://<project>/checkpoint/<name> and rms://<project>/note/<path> are read-only views for clients that attach context by URI. MCP prompts: session_start, save_progress (name) and record_decision (topic).
The server resolves an explicit scope or legacy rootUri, then negotiates MCP roots/list. If a client exposes neither (or opens several registered roots), pass the short registry key in project; injected agent rules contain the correct key for that repository. rms_projects lists valid keys without requiring a bound workspace. An explicit project on any tool call always wins and rebinds the active vault — one long-lived MCP process can serve every registered project. Without project, ambiguity stays fail-closed (no silent pick-first).
To remove an accidental registration without deleting its Markdown vault:
rms-memory projects remove <key>If the repository folder was moved or renamed, do not recreate .git or
re-run init from scratch. Plan and apply a migrate instead:
rms-memory projects migrate --project <key> --to /new/path/to/repo --dry-run
rms-memory projects migrate --project <key> --to /new/path/to/repo
rms-memory projects resolve-key --path /new/path/to/repoThe CLI command projects remove is intentionally non-destructive. The companion GUI exposes a
separate Delete project and data action for permanent cleanup of the
registration, Markdown vault, and derived index. It requires typing the exact
project key and accepts only a dedicated child of the configured master vault;
the repository source path is explicitly excluded from deletion.
🏗 Architecture Highlights
Implementation lives in path-only crates under crates/ (rms-memory-core, rms-memory-index, rms-memory-vault, rms-memory-cli for cycle-free gc/prune). The published product remains the root umbrella rms-memory-mcp (binary + MCP server + tools + rules injector + serve), which re-exports every former rms_memory_mcp::<module> path so the companion GUI keeps stable imports. Heavy deps (lancedb, ort, fastembed, tree-sitter) concentrate in rms-memory-index. Details: docs/crate-split.md.
A central ~/.rms-memory/registry.toml routes every project to an isolated vault, computed from a hash of the project path. No .mcp files, no per-repo config — global MCP entries (e.g. Zed's settings.json) can target any workspace automatically.
The transport-neutral ProjectService is the single implementation used by
the CLI and companion GUI. Registry mutation remains revisioned through
ConfigManager; deletion validates canonical paths before unregistering and
returns structured warnings if filesystem cleanup cannot be completed.
Instead of duplicating existing docs into the vault, rms-memory import can create lightweight Link Files — Markdown stubs with a link: <path> frontmatter property. Reads/writes are transparently redirected to the source file, while the vector index still respects the vault's directory structure.
Embedded LanceDB (~/.rms-memory/dbs/) combines vector similarity with full-text search, so a query never comes back empty just because the exact keywords didn't match.
Human-authored Markdown and derived Rust code live in separate tables. Code chunks carry stable symbol identities, line ranges, and preambles; unchanged chunks reuse their vectors. corpus=all fuses independently ranked result sets with Reciprocal Rank Fusion, avoiding any assumption that distances from the two corpora are comparable.
Graph nodes and edges are deliberately independent of retrieval chunk boundaries. Markdown links, Rust imports, trait implementations, and lexical call hints can be reconciled as derived relationships; user-created edges and suppress/restore overrides persist across reindexing. Current Rust call edges are syntax-level hints, not a compiler-accurate call graph.
pulldown-cmark parses the Markdown AST directly. Chunks are built by walking up to the parent heading, with a strict 1500-character boundary and ~200-character overlapping window for oversized code blocks — no mid-sentence truncation.
Path traversal + filter injection prevention
Zombie process prevention (watcher shutdown on EOF +
std::process::exit(0))Graceful shutdown (
SIGINT/Ctrl+Chandler)macOS sandbox bypass for
fastembedmodel downloadsrms-memory gc— orphaned vector store pruningPID-aware per-project writer lock and read-only background synchronization across IDE processes
Markdown watcher plus an explicitly opt-in, 3s-debounced code watcher with path-scoped reindex and shared-generation suppression
Write-guard snapshotting with rolling
.bakbackups (default: 5)Isolated telemetry logging (
~/.rms-memory/rms.log)llms.txtexport for flat, decoupled LLM ingestion
Live MCP requests have been verified for rms_search(corpus=vault|code|all) and rms_code_search. On this repository, reindex --code indexed 43 Rust files into 298 semantic items and 438 segments with all vectors reused on an unchanged run. An isolated five-server watcher run coalesced rapid saves into one shared completion-marker update; a later real-project stress gate completed concurrent GeoMail, License Server, RMS Monitoring, and GeoTax Site indexing, then seven MCP servers (after four IDE restarts) stayed at 0.0% CPU with no background reindex.
🧩 Supported IDEs
IDE | Auto-Install | Rules Injection |
Cursor | ✅ |
|
Zed | ✅ |
|
Claude Code | ✅ |
|
OpenCode | ✅ | — |
Codex | ✅ | — |
VS Code | ✅ | — |
Antigravity | ✅ | — |
📄 License
MIT License — see LICENSE for details.
* Contacted directly by the tool for your convenience (a fallback update lookup on GitHub, the one-time embedding model download from Hugging Face). RMS does not take part in that exchange.
Available Tools
20 toolsrms_checkpoint_doneA
Close a checkpoint: marks it status=done (drops out of recall) and writes a durable session summary note under artifacts/sessions/.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Checkpoint name to close. | |
| project | No | Project key (when the client sends no workspace root). | |
| summary | Yes | What was accomplished. |
rms_checkpoint_loadA
Load one checkpoint with its full body and bounded previews of linked notes. Use rms_checkpoint_query first to find names.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Checkpoint name to load. | |
| project | No | Project key (when the client sends no workspace root). |
rms_checkpoint_queryA
List checkpoints for the current project, newest first, with full pending text. Filter with status=active|done|all (default all).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Status filter; default all. | |
| project | No | Project key (when the client sends no workspace root). |
rms_checkpoint_saveA
Create or update a session checkpoint (artifacts/checkpoints/.md, status=active). Save before context compaction or a long pause so work can be resumed. Updating preserves id/created_at and keeps omitted fields. The code repository branch and HEAD are recorded automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | What this work is trying to achieve. | |
| name | Yes | Checkpoint name (letters, digits, '-', '_', '.'). | |
| links | No | Vault-relative paths of related notes. | |
| pending | No | What remains to be done. | |
| project | No | Project key (when the client sends no workspace root). |
rms_code_searchA
Search only the derived semantic code index. Results include language, file, symbol, kind, line range, and segment index. The code index is optional, so an unindexed project returns an empty result list. Pass projects: [key, …] for read-only cross-project code federation (when both project and projects are set, projects wins); does not change the active bind.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results; default 10, maximum 100. | |
| query | Yes | The semantic code query. | |
| project | No | Registered project key, used when the MCP client did not provide a workspace root. Ignored when `projects` is also set. | |
| projects | No | Explicit list of registered project keys for read-only federated code search (max 8 after dedupe). Does not change the active bind. When set together with `project`, this list wins. | |
| include_notes | No | Attach vault notes (decisions, patterns) that mention the hit's file or symbol, with `code_changed_since_note` when the code is newer. Default true; not used with projects: […]. | |
| include_content | No | Whether to include indexed code content; default true. | |
| include_file_history | No | When true, attach the last 3 commits from the derived code_path git-history cache to each code hit. Not allowed together with projects: […] federation. Default false. | |
| include_graph_neighbors | No | When true, attach durable graph neighbors for each hit path. Not allowed together with projects: […] federation. Default false. |
rms_doctorA
Run the vault health diagnostics (structure, IDs, links, LanceDB, wiki isolation, registry, freshness, credentials; plus pattern staleness when the vault has patterns/). Also reports a newer release (checked at most daily; RMS_MEMORY_NO_UPDATE_CHECK=1 disables) or a server binary replaced since start. Returns structured JSON. Set repair_frontmatter=true only with an explicit project (refuses sticky-bind repair).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Registered project key. Required when repair_frontmatter=true. | |
| repair_frontmatter | No | Attempt frontmatter ID repairs. Requires project. Default false. |
rms_file_historyA
Query the derived code_path git file→commit history cache (no shell). Prefer this over git log for when a source file changed. Lazy catch-up on query; use action=reindex after force-push/rebase (requires explicit project). Default response omits commit messages. Catch-up/reindex enforce commit-count budgets.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path relative to the project code_path (required for action=query). | |
| limit | No | Max commits to return (default 20, max 200). | |
| action | No | query (default), catch_up, or reindex (full rebuild; requires project). | |
| project | No | Registered project key. Required for action=reindex; recommended for all actions when the MCP client did not provide a workspace root. | |
| include_message | No | Include commit subject lines. Default false. |
rms_graphA
Query and mutate the durable Markdown/code knowledge graph (MCP-first). Actions: status, ensure (reconcile vault links if empty or force=true), neighbors, path (BFS), snapshot, semantic (ephemeral embedding edges), create_edge / suppress_edge / edge_override (mutations require explicit project), export_dot. Prefer this for dependency traversal instead of guessing from search alone.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Path/node for path search goal. | |
| from | No | Path/node for path search start. | |
| node | No | Node key (e.g. vault:doc-id) or vault path for neighbors. | |
| path | No | Vault-relative path alias for neighbors. | |
| force | No | ensure: rebuild vault links even when the graph is non-empty. | |
| limit | No | Max neighbors / snapshot / export rows. | |
| action | No | Graph action; default status. | |
| author | No | Optional author for edge overrides. | |
| source | No | Source node_key for create_edge. | |
| target | No | Target node_key for create_edge. | |
| project | No | Registered project key. Required for create_edge / suppress_edge / edge_override. | |
| edge_key | No | Edge key for suppress/restore overrides. | |
| relation | No | Edge relation (lowercase + underscores); default links_to. | |
| max_depth | No | Max BFS depth for path (default 8). | |
| max_nodes | No | semantic: max nodes considered. | |
| override_action | No | Override action for suppress_edge / edge_override. | |
| expected_revision | No | Optimistic concurrency revision for edge overrides; default 0. | |
| neighbors_per_node | No | semantic: neighbors per node. | |
| confidence_threshold | No | semantic: minimum similarity confidence. |
rms_hygieneA
Read-only memory hygiene report for one project: near-duplicate and identical notes (embedding similarity), active checkpoints untouched for 14+ days, and session notes older than 90 days, with next steps. Never edits the vault; merge duplicates with rms_write + supersedes.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project key (when the client sends no workspace root). | |
| min_similarity | No | Cosine similarity at which two notes count as near duplicate candidates; candidates must also share half of their word 3-grams. |
rms_overviewA
Structured orientation summary for exactly one project: document counts by folder and status, recent notes, active checkpoints, index lag, and the code repository's git state (branch, HEAD, ahead/behind, changed file names; never diff contents). Call this at session start. Fail-closed: requires a bound workspace or an explicit project key; never aggregates across projects.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project key (when the client sends no workspace root). | |
| recent_limit | No | Maximum recent notes to return (default 10, max 50). |
rms_projectsB
List registered RMS Memory project keys. This tool works even when the MCP client did not provide a workspace root.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
rms_pruneA
Find superseded vault notes older than a retention window and optionally archive them under artifacts/pruned/. Defaults to a dry run; set apply=true to archive candidates. Never deletes notes.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | When true, archive eligible notes. Defaults to false (dry run). | |
| project | No | Project key (when the client sends no workspace root). | |
| older_than_days | No | Minimum age in days for a superseded note to be eligible. |
rms_readA
Read a markdown document from the RMS Memory vault by relative path (e.g. 'rules/api.md'). Whole note by default. For long notes save tokens: outline (headings with sizes), heading (one section), max_chars/offset (window), if_hash (hash from an earlier read; returns a short 'unchanged' stub if the note has not changed).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| path | Yes | Relative path to the markdown document in the vault. | |
| offset | No | Start at this character offset (with max_chars). | |
| heading | No | Return only the section under this heading (with its sub-sections). Exact title first, then substring. | |
| if_hash | No | content_hash from an earlier read of this note. If unchanged, a short stub is returned instead of the text. | |
| outline | No | Return only a table of contents (headings with character sizes, frontmatter summary, content hash). | |
| project | No | Project key (when the client sends no workspace root). | |
| max_chars | No | Return at most this many characters; the reply says which offset continues. | |
| noPromote | No | Read without side effects. Vault reads are already side-effect free; accepted for explicit forward-compatible contracts. |
rms_reindexA
Full rebuild of vault and/or code indexes. Destructive to derived tables — requires explicit project. Prefer rms_sync for incremental catch-up.
| Name | Required | Description | Default |
|---|---|---|---|
| corpus | No | Which corpus to rebuild; default vault. | |
| project | Yes | Registered project key (required). |
rms_remindA
Personal reminders that you pass on to the user. When the user says e.g. "remind me to call Viktor Petrovich tomorrow at 12", call action=add with text and due_at (RFC3339 WITH the user's UTC offset, e.g. 2026-11-06T12:00:00+03:00; use in_minutes for relative times; if you do not know the date, time or timezone, ask first). Afterwards, tool responses carry a [RMS reminder] block about 30/20/10/5 minutes before the time and once when it is due: relay it to the user in your reply. Other actions: list, done, cancel, snooze (new due_at/in_minutes). Global, not per project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Reminder id (done, cancel, snooze). | |
| text | No | What to remind about (add). | |
| action | No | Default list. | |
| due_at | No | RFC3339 timestamp with UTC offset. | |
| in_minutes | No | Relative alternative to due_at, minutes from now. |
rms_searchA
Search RMS Memory. Returns {decision: inject|abstain, reason, injected_ids, results}; trust an abstain. corpus: vault (default, Markdown notes), code (derived semantic code), all (rank-fused). projects: [keys] = read-only cross-project search (wins over project; vault/all needs cross_project_vault=true on every key, else an error). Content is bounded by max_chars; use snippet_chars + rms_read to save tokens
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of chunks to return. Default is 10. | |
| query | Yes | The semantic query string to search for. | |
| corpus | No | Corpus to search. Defaults to vault. | |
| project | No | Registered project key, used when the MCP client did not provide a workspace root. Ignored when `projects` is also set. | |
| projects | No | Explicit list of registered project keys for read-only federated search (max 8 after dedupe). Does not change the active bind. When set together with `project`, this list wins. Vault/all with len>1 requires cross_project_vault=true on every listed key. | |
| max_chars | No | Maximum total characters of injected content across results (default 2000). Truncates/drops weaker hits to stay within budget. | |
| min_score | No | Optional minimum relevance in 0..1 (distance and RRF normalized). If the best hit is weaker, rms_search abstains with an empty results list (fail-closed). | |
| snippet_chars | No | Cut each result's content to this many characters (token-saving first pass); then rms_read the winners with `heading` or `outline`. | |
| min_confidence | No | Optional minimum confidence threshold (0.0–1.0). Records with NULL confidence are always included. CAUTION: do NOT use high values (e.g. 0.9+) unless you need strict filtering. If zero results, retry without this parameter. | |
| pattern_status | No | Minimum status for hits from patterns/ notes. Default verified-in-runtime: unproven patterns are hidden. `implemented` also returns implemented ones; `proposed`/`all` returns everything (hits carry their pattern_status). Other notes are never filtered. | |
| include_content | No | Whether to include full chunk text in results. | |
| include_file_history | No | When true, attach the last 3 commits from the derived code_path git-history cache to each code hit (lazy catch-up). Not allowed together with projects: […] federation. Default false. | |
| include_graph_neighbors | No | When true, attach durable graph neighbors for each hit path. Not allowed together with projects: […] federation. Default false. |
rms_syncC
Incremental vault index sync (same as CLI rms-memory sync). Prefer an explicit project when the IDE is multi-root.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project key (when the client sends no workspace root). |
rms_system_instructionsA
Return the canonical RMS Memory usage protocol (search-first, persist, session continuity). Lets an agent self-bootstrap without injected rule files.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project key (when the client sends no workspace root). |
rms_wiki_packA
Generate a wiki context pack from the vault and code index. Returns material for an agent to create human-readable wiki documentation from verified sources.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project key (when the client sends no workspace root). | |
| manifest | No | Optional YAML manifest path for custom sections. | |
| refresh_code | No | Force code reindex before generating. |
rms_writeB
Save new architectural decisions, constraints, development rules, or project context to the RMS Memory vault. Use this tool PROACTIVELY at the end of a task if you learned a new user preference, solved a tricky bug, or made a new architectural decision.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mode | Yes | Write mode. | |
| path | Yes | Relative path to save the document (e.g., 'decisions/001-db.md'). | |
| pinned | No | When true, the note bypasses temporal and min_confidence recall gates (status still applies). | |
| source | No | Optional free-text citation or source reference for this record. | |
| status | No | Optional lifecycle status: active, draft, or superseded. | |
| content | Yes | The markdown content to write. | |
| dry_run | No | When true, classify create/update/noop and return a JSON preview without writing disk or touching the index. Defaults to false. | |
| project | No | Project key (when the client sends no workspace root). | |
| confidence | No | Optional confidence score (0.0–1.0) indicating reliability of this record. | |
| supersedes | No | Optional relative vault path of a prior note to soft-supersede (marks it status=superseded and links both sides). |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v1.4.3- Changed
rms_checkpoint_done1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_checkpoint_load1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_checkpoint_query1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_checkpoint_save1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_code_search1 field changed- added
Input schema / properties / include_notesAdded value: +{ + "description": "Attach vault notes (decisions, patterns) that mention the hit's file or symbol, with `code_changed_since_note` when the code is newer. Default true; not used with projects: […].", + "type": "boolean" +}
- Changed
rms_hygiene1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_overview1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_prune1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_read6 fields changed- added
Input schema / properties / headingAdded value: +{ + "description": "Return only the section under this heading (with its sub-sections). Exact title first, then substring.", + "type": "string" +} - added
Input schema / properties / if_hashAdded value: +{ + "description": "content_hash from an earlier read of this note. If unchanged, a short stub is returned instead of the text.", + "type": "string" +} - added
Input schema / properties / max_charsAdded value: +{ + "description": "Return at most this many characters; the reply says which offset continues.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Start at this character offset (with max_chars).", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / outlineAdded value: +{ + "description": "Return only a table of contents (headings with character sizes, frontmatter summary, content hash).", + "type": "boolean" +} - changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Added
rms_remind - Changed
rms_search2 fields changed- added
Input schema / properties / pattern_statusAdded value: +{ + "description": "Minimum status for hits from patterns/ notes. Default verified-in-runtime: unproven patterns are hidden. `implemented` also returns implemented ones; `proposed`/`all` returns everything (hits carry their pattern_status). Other notes are never filtered.", + "enum": [ + "verified-in-runtime", + "implemented", + "proposed", + "all" + ], + "type": "string" +} - added
Input schema / properties / snippet_charsAdded value: +{ + "description": "Cut each result's content to this many characters (token-saving first pass); then rms_read the winners with `heading` or `outline`.", + "maximum": 4000, + "minimum": 40, + "type": "integer" +}
- Changed
rms_sync1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_system_instructions1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_wiki_pack1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
- Changed
rms_write1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Registered project key, used when the MCP client did not provide a workspace root."New value: +"Project key (when the client sends no workspace root)."
1 tool update
v1.3.2- Added
rms_hygiene
6 tool updates
v1.2.0- Changed
rms_code_search1 field changed- added
Input schema / properties / include_graph_neighborsAdded value: +{ + "description": "When true, attach durable graph neighbors for each hit path. Not allowed together with projects: […] federation. Default false.", + "type": "boolean" +}
- Added
rms_doctor - Added
rms_graph - Added
rms_reindex - Changed
rms_search1 field changed- added
Input schema / properties / include_graph_neighborsAdded value: +{ + "description": "When true, attach durable graph neighbors for each hit path. Not allowed together with projects: […] federation. Default false.", + "type": "boolean" +}
- Added
rms_sync
5 tool updates
v1.1.2- Changed
rms_code_search1 field changed- added
Input schema / properties / include_file_historyAdded value: +{ + "description": "When true, attach the last 3 commits from the derived code_path git-history cache to each code hit. Not allowed together with projects: […] federation. Default false.", + "type": "boolean" +}
- Added
rms_file_history - Added
rms_prune - Changed
rms_search1 field changed- added
Input schema / properties / include_file_historyAdded value: +{ + "description": "When true, attach the last 3 commits from the derived code_path git-history cache to each code hit (lazy catch-up). Not allowed together with projects: […] federation. Default false.", + "type": "boolean" +}
- Changed
rms_write1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "default": false, + "description": "When true, classify create/update/noop and return a JSON preview without writing disk or touching the index. Defaults to false.", + "type": "boolean" +}
12 tool updates
v0.1.0- First observed
rms_checkpoint_done - First observed
rms_checkpoint_load - First observed
rms_checkpoint_query - First observed
rms_checkpoint_save - First observed
rms_code_search - First observed
rms_overview - First observed
rms_projects - First observed
rms_read - First observed
rms_search - First observed
rms_system_instructions - First observed
rms_wiki_pack - First observed
rms_write
TDQS
Scored across 20 tools
Most tools target clearly distinct operations: search, read/write, checkpoint lifecycle, sync/reindex, diagnostics, graph, history, and reminders. A few pairs need careful reading to distinguish, notably rms_doctor vs rms_hygiene (diagnostics vs duplicate/cleanup reporting), rms_prune vs rms_hygiene, and rms_sync vs rms_reindex, but their descriptions explicitly clarify the boundaries.
All tools share a predictable rms_ snake_case prefix, which is consistent throughout. Within that, some names are verb-first (rms_search, rms_read, rms_write) and others are noun-first (rms_checkpoint_query, rms_file_history, rms_wiki_pack), but the style remains readable and mostly grouped by domain.
Twenty tools is on the heavy side for a memory server, though the product genuinely spans search, persistence, checkpoints, indexing, graph, diagnostics, and reminders. Tools like rms_system_instructions and rms_remind feel somewhat peripheral, making the surface borderline heavy rather than tightly scoped.
The surface covers search (vault/code/all), read/write, checkpoint create/query/load/close, project discovery, overview, incremental sync and full reindex, graph traversal/mutation, file history, diagnostics, hygiene, pruning, wiki packing, and reminders. Lifecycle coverage is broad and coherent, with only intentionally absent operations like hard deletion, which is explicitly replaced by pruning/archiving.
Maintenance
Related MCP Connectors
Persistent memory for AI agents — shared .brain across Claude Code, Cursor & Codex
Persistent memory for AI agents: one brain shared across Claude, Cursor, Codex and more.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceLocal-first cross-agent memory for AI coding agents. Persistent, shared memory over MCP — what you tell one agent can be recalled by another — with all data stored in a single local SQLite file, no cloud and no API keys.-
- AlicenseAqualityBmaintenanceLocal-first memory for AI coding agents using SQLite, enabling persistent recall of decisions, lessons, and project context without cloud or API keys.10132 PyPI284Apache 2.0
- FlicenseNot gradedqualityBmaintenancePersistent memory for AI coding agents: local-first semantic search, dependency graphs, git history.1-
- AlicenseNot gradedqualityBmaintenanceZero-GPU, local-first, CPU-native cognitive memory layer for autonomous AI agents with hybrid search (LanceDB + SQLite FTS5), WebUI inspector, and multi-agent shared workspaces.Apache 2.0