RMS Memory MCP
RMS Memory MCP is an MCP server that gives AI coding agents persistent, local-first Markdown and semantic code memory across projects.
Search memory:
rms_searchsearches vault notes, derived code index, or both (hybrid/RRF), with optional project federation, confidence filters, content limits, file history, and graph neighbors.Search code:
rms_code_searchqueries the semantic code index and returns file, symbol, kind, line range, and language info.Read and write memory:
rms_readloads vault documents;rms_writecreates/appends/replaces notes with audit metadata, soft-supersede, pinning, and dry-run previews.Manage projects:
rms_projectslists registered project keys even without workspace roots;rms_overviewgives session-start orientation for one project.Session continuity:
rms_checkpoint_save,rms_checkpoint_load,rms_checkpoint_query, andrms_checkpoint_donemanage checkpoints and durable session summaries.Knowledge graph:
rms_graphexposes durable graph status, neighbors, paths, snapshots, semantic queries, and edge mutations (available as schema in broader tooling).File history:
rms_file_historyreturns git commit history per code file without shelling out to git.Maintenance:
rms_syncincrements index sync,rms_reindexrebuilds vault/code/all indexes,rms_doctorchecks vault health, andrms_prunedry-runs or archives aged superseded notes.Documentation generation:
rms_wiki_packbuilds deterministic wiki context packs from vault/code sources.Self-bootstrap:
rms_system_instructionsreturns the canonical memory-usage protocol so agents can orient themselves without injected rules.
π§ RMS Memory MCP
Version: 1.2.0 (2026-09-16) Β· companion GUI 1.2.0 (unified numbering)
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
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: Smriti
β¨ 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, 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 |
π 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 |
βοΈ 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. |
π¦ 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. Until Apple/Windows signing certificates
exist, macOS builds may be unsigned β see GUI-README.md for
Gatekeeper notes. 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, and vue. 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.
π 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 7-point vault health diagnostics. |
| 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 |
| 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. |
| 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.
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.
Available Tools
18 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 | Registered project key, used when the MCP client did not provide a workspace root. | |
| summary | Yes | What was accomplished. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key side effects: status change, dropping from recall, and writing a durable note. Lacks detail on error behavior or permissions, but is reasonably transparent for a simple closure operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that immediately conveys the core purpose and side effects. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 100% schema coverage and no output schema, the description adequately explains the tool's behavior. It could mention that the checkpoint must exist, but the required 'name' parameter implies that. Overall, it provides sufficient context for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds no extra parameter information beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (close) and resource (checkpoint), and describes the specific actions: marking status as done, dropping out of recall, and writing a session summary note. It effectively distinguishes from siblings like rms_checkpoint_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, such as rms_checkpoint_save or rms_checkpoint_query. No context on prerequisites (e.g., checkpoint must exist and be open).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | Registered project key, used when the MCP client did not provide a workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It indicates a read-like operation ('load'), but does not explicitly state whether it has side effects, requires authentication, or any other behavioral traits beyond the implied reading of checkpoints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence delivers the core purpose, and the second provides immediate, actionable usage guidance. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of output schema, the description provides a reasonable overview of what the tool returns ('full body and bounded previews'). It also relates to its sibling tools by specifying the prerequisite query step. Could be slightly more explicit about the return format, but sufficient for a load operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds minimal extra meaning: it implies the 'name' comes from the query tool's results, but does not add details about format or constraints for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'load' and the resource 'checkpoint', specifying it loads the full body and bounded previews of linked notes, which distinguishes it from the sibling tool 'rms_checkpoint_query' that presumably lists or searches checkpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use 'rms_checkpoint_query' first to find checkpoint names, providing a clear prerequisite. However, it does not specify when not to use this tool or mention any alternatives beyond the prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | Registered project key, used when the MCP client did not provide a workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that checkpoints are returned newest first, with full pending text, and filtered by status. However, it does not mention pagination, limits, or what happens if no checkpoints match, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficiently packed with key information: purpose, ordering, content, and filtering. Every word earns its place, and the structure is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (list checkpoints with filter) and absence of output schema, the description covers sorting, content, and filtering adequately. It could mention pagination or maximum results, but overall it provides enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions. The description adds value by stating the default value for 'status' ('default all') and explaining when the 'project' parameter is needed ('when the MCP client did not provide a workspace root'). This goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List'), the resource ('checkpoints'), the context ('for the current project'), and key attributes ('newest first', 'with full pending text'). It also specifies a filter parameter, making the tool's function unambiguous and distinguishing it from siblings like rms_checkpoint_load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for listing checkpoints with filtering, but does not explicitly state when to use this tool versus alternatives (e.g., when to use rms_checkpoint_load instead). However, the context is sufficiently clear from the sibling tool names and the description of the filter options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| 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 | Registered project key, used when the MCP client did not provide a workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses important behavioral details: that it can create or update, and that updating preserves id/created_at and keeps omitted fields. However, it does not explain the exact behavior for creating vs updating (e.g., how it decides), error handling, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, each providing essential information: the action and location, the usage timing, and the behavioral nuance on update. There is no redundancy or unnecessary detail, making it very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no output schema), the description covers the core functionality but leaves gaps. It does not explain the return value, error conditions, or prerequisites. The behavior for creating versus updating is implied but not fully specified, so the description is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying the file naming convention ('artifacts/checkpoints/<name>.md') and that the checkpoint status is 'active'. This provides helpful context that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates or updates a session checkpoint, specifying the file path and status. It is specific about the action and resource, but it does not strongly differentiate from the sibling tool 'rms_checkpoint_done', which might mark a checkpoint as completed. However, the purpose is still clear and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool: 'Save before context compaction or a long pause so work can be resumed.' This provides a clear context for usage. However, it does not mention when not to use it or provide alternative tools, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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_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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does this well by noting that the index is optional, that unindexed projects yield an empty list, that `projects` is read-only, and that the active bind is not changed. These are meaningful behavioral details beyond the basic 'search' action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: scope, result contents, index-availability caveat, and federation behavior. The most important differentiator is front-loaded in the first sentence, and no filler or redundant restatement of the tool name is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema, the description covers output fields, an important edge case (empty results for unindexed projects), and federation semantics. The remaining details like limits and inclusion flags are fully described in the input schema. Nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds contextual color like 'read-only' and 'does not change the active bind,' but the precedence rule for `project` vs `projects` is already in the schema. This is a baseline case where the description mostly reinforces, not extends, the parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search only the derived semantic code index.' This clearly distinguishes the tool from general search tools like rms_search and states exactly what domain it operates on. The result fields are also enumerated, making the tool's purpose concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool is useful: it searches only the derived semantic index)Skip and warns that unindexed projects return empty results. It also explains the `projects` parameter for cross-project federation and the precedence rule. However, it does not explicitly name an alternative tool or state when to prefer rms_search over this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_doctorA
Run the seven-point vault health diagnostics (structure, IDs, links, LanceDB, wiki isolation, registry, freshness). 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it returns structured JSON and that the repair flag is conditional, and it mentions 'refuses sticky-bind repair'. However, it does not explicitly state whether the tool is read-only beyond the repair flag, nor does it mention required permissions or side effects on the vault.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loading the purpose and output format, with the usage constraint in the second. No redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers the seven diagnostic areas, notes that output is structured JSON, and provides a safety constraint. It could elaborate on what the diagnostics examine or any prerequisites, but it is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already described. The description adds the conditional requirement 'only with an explicit project,' which is already in the schema, and adds 'refuses sticky-bind repair,' which is behavioral rather than parameter-specific. Thus it adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'Run' and resource 'seven-point vault health diagnostics' and enumerates the seven checks (structure, IDs, links, LanceDB, wiki isolation, registry, freshness). It clearly distinguishes from siblings by focusing on diagnostics rather than sync, search, or write operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does not explicitly mention when to use this tool vs siblings, but it provides a key usage constraint for repair_frontmatter (requires an explicit project). The overall context of when to run diagnostics is implied but not stated, so guidance is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by stating 'no shell', lazy catch-up on query, default omission of commit messages, and commit-count budgets on catch-up/reindex. It does not detail side effects of reindex or exact budget behavior, but the disclosed behaviors are materially useful and not contradicted by any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the core purposeable, then gives preference guidance, action context, defaults, and constraints. Every sentence adds distinct information without fluff or repetition, making it well-structured for quick agent scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema)Skip the description explains the key operation, actions, defaults, and constraints, so an agent can select and invoke it correctly. The main gap is that return shape beyond commit messages is not described, such as which commit fields are included, but the schema and description are otherwise adequate for safe use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter semantics baseline is 3. The description reinforces action semantics such as 'use action=reindex' and 'requires explicit project', but it does not add meaning beyond what the schema already documents. The schema itself carries the parameter documentation load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise operation and resource: 'Query the derived code_path git fileβcommit history cache (no shell).' This clearly identifies what the tool does and sets it apart from generic shell-based git commands or other search-style read tools. The phrase 'fileβcommit history cache' leaves no ambiguity about the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Prefer this over `git log` for when a source file changed.' It also provides conditional action guidance, saying to use reindex after a force-push/rebase and that it requires an explicit `project`. This is strong routing and selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add meaningful behavioral detail: mutations require explicit `project`, ensure only reconciles when empty or `force=true`, path uses BFS, and semantic edges are ephemeral. It does not disclose return shapes, side effects, or error behavior, but the key operational traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph, but every clause earns its place: the operation type, action list with key semantic annotations, mutation requirement, and usage guidance. It is front-loaded and efficient, though the packed action list is somewhat hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 19 parameters, 10 actions, and no output schema, the description gives a solid action overview but not full contextual completeness. It lacks action-specific return expectations, node/edge key format guidance, and sequencing advice such as 'call status first,' leaving the agent to infer some behavior from parameter names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents all 19 parameters. The description adds some grouping value by associating actions with relevant parameters and flagging `project` as required for mutations, but it does not substantially compensate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-resource pair ('Query and mutate the durable Markdown/code knowledge graph') and then enumerates the specific actions. It also distinguishes itself from the search siblings by stating it is for dependency traversal, so an agent can tell it apart from rms_search and rms_code_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context: 'Prefer this for dependency traversal instead of guessing from search alone,' which names the alternative and the condition for choosing it. It does not enumerate when not to use the tool or contrast with the other siblings like rms_read or rms_write, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_overviewA
Structured orientation summary for exactly one project: document counts by folder and status, recent notes, and active checkpoints. 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 | Registered project key, used when the MCP client did not provide a workspace root. | |
| recent_limit | No | Maximum recent notes to return (default 10, max 50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides crucial behavioral info: fail-closed on missing project context, single-project scope. This goes beyond basic purpose and helps the agent understand failure mode and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus a note. Front-loaded with the key purpose and outcome. Every sentence adds information without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple overview tool with no output schema, the description sufficiently explains what the tool returns and its failure conditions. No additional context needed for effective invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, baseline 3. The description adds value by explaining when 'project' is needed (when no workspace root) and setting context for usage, improving parameter understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a 'structured orientation summary for exactly one project' including specific elements like document counts, recent notes, and active checkpoints. It distinguishes from sibling tools like rms_checkpoint_load and rms_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Call this at session start' and notes fail-closed behavior requiring a bound workspace or project key. Does not list alternatives but the constraint 'never aggregates across projects' helps decide when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. The description only mentions that the tool works without a workspace root but does not disclose whether it is read-only, requires authentication, has rate limits, or returns cached data. For a tool with no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences with no wasted words. The first sentence states the purpose, and the second adds a crucial contextual note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description is moderately complete. It explains the tool's output (list of project keys) and a key behavior (works without workspace root). However, it does not describe the return format or whether the list is sorted or filtered, leaving some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description does not need to add parameter information, and it correctly avoids extraneous detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists RMS Memory project keys, with a specific verb ('List') and resource ('registered RMS Memory project keys'). The additional note about working without a workspace root helps distinguish it from tools that may require one, though it doesn't explicitly differentiate from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a workspace root is missing ('works even when the MCP client did not provide a workspace root'), but it does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternative tools among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | Registered project key, used when the MCP client did not provide a workspace root. | |
| older_than_days | No | Minimum age in days for a superseded note to be eligible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the critical safety behaviors: defaults to a dry run and never deletes notes. It also specifies the archive destination. It does not clarify whether archiving moves or copies notes, and omits permission requirements, but the core safety profile is transparent enough for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The first sentence captures purpose and the dry-run default; the second reinforces the non-destructive nature. Key constraints are front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with all optional params and no output schema, the description covers the essential intent and safety. It leaves out details like the project parameter's fallback usage and the exact output/return behavior, but those are either in the schema or not critical for correct invocation. The description is sufficiently complete for an agent to call the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds minimal extra meaningβit maps 'apply=true' to the archive action and 'retention window' to age, but these are largely redundant with the schema descriptions. It does not elaborate on the `project` parameter's purpose beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a precise resource ('superseded vault notes'), a retention condition ('older than a retention window'), and an optional action ('archive them'). It also clearly distinguishes itself from sibling tools like rms_search and rms_code_search by focusing on pruning/archiving, not retrieval or editing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (to identify and optionally archive superseded notes) and explicitly states the dry-run default and the `apply=true` switch to finalize. It does not explicitly name alternatives or say 'do not use when...', but the purpose is self-evidently distinct from the search and write tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_readA
Read the full contents of a markdown document from the RMS Memory vault. Provide the relative path (e.g., 'rules/api.md'). Use this to retrieve the full context of a document found via rms_search.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| path | Yes | Relative path to the markdown document in the vault. | |
| project | No | Registered project key, used when the MCP client did not provide a workspace root. | |
| noPromote | No | Read without side effects. Vault reads are already side-effect free; accepted for explicit forward-compatible contracts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool reads content and implies no side effects (e.g., noPromote parameter notes vault reads are side-effect free). However, it lacks details on authentication, rate limits, or response format, making it minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that are front-loaded with the key action and resource. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description covers the main usage (path and retrieval context) but fails to mention the 'id', 'project', and 'noPromote' parameters. The schema partially covers these, but the description could be more complete by briefly explaining optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (3 of 4 parameters described in schema). The description adds emphasis on the 'path' parameter but does not provide new meaning beyond the schema for 'project' and 'noPromote'. The 'id' parameter is not described in either the schema or the description, so the description does not fully compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'full contents of a markdown document from the RMS Memory vault'. It distinguishes itself from sibling tools, especially rms_search, by specifying that it is used to retrieve the full context of a document found via search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: after finding a document via rms_search, to retrieve its full context. It does not provide explicit exclusions or alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It clearly warns that the operation is destructive to derived tables and requires explicit project selection, which are critical behavioral traits. It does not detail side effects like downtime or reversibility, but the core destructive behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The destructive warning and the required project condition are front-loaded, and the alternative tool is named efficiently. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two parameters, no output schema, and no annotations, the description covers purpose, destructiveness, a required parameter, and the preferred alternative. It does not mention return behavior or further operational impacts, but for a simple reindex tool the core information an agent needs is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema. The description adds context about full rebuild and 'vault and/or code indexes,' which loosely maps to the corpus parameter, but it does not provide additional parameter-level detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Full rebuild of vault and/or code indexes.' It clearly identifies the destructive nature and differentiates from rms_sync by naming the alternative. An agent can distinguish this tool from siblings without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to prefer rms_sync for incremental catch-up, which tells the agent when not to use this tool. It also emphasizes that an explicit project is required, giving a clear prerequisite. This is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_searchA
Search RMS Memory. Returns a decision envelope: {decision: inject|abstain, reason, injected_ids, results}. corpus=vault (default) searches human Markdown memory; code searches derived semantic code; all ranks each corpus independently and combines them with Reciprocal Rank Fusion, never raw vector distances. Pass projects: [key, β¦] for read-only cross-project federation (when both project and projects are set, projects wins so injected rules stay compatible); vault/all across multiple projects requires every listed key to have cross_project_vault=true (hard error otherwise β no silent degrade). Weak matches abstain when min_score is set; content is bounded by max_chars.
| 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). | |
| 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. | |
| 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: it discloses the decision envelope (`inject|abstain`, `injected_ids`, `results`), fail-closed abstention when `min_score` is set, hard errors on invalid `cross_project_vault` usage with no silent degrade, RRF combination rather than raw vector distances, and `max_chars` bounding. These are substantive behavioral traits beyond a simple 'search' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: purpose and return envelope first, then corpus semantics, then federation constraints, then threshold and bounding behavior. Every clause earns its place, and there is no redundant repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 11 parameters and no output schema, the description plus the rich input schema provide enough for an agent to select and invoke the tool correctly. It specifies the return envelope, key failure modes, federation constraints, and result-bounding behavior, leaving no critical invocation gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining RRF combination for `corpus=all`, the compatibility rationale for `projects` winning over `project`, and the hard-error policy for vault/all federation. These are useful additions, though most individual parameter details already live in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Search RMS Memory') and immediately gives the decision envelope, which makes the tool's role clear. However, it never explicitly differentiates itself from the sibling `rms_code_search` even though `corpus=code` overlaps with that tool, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete selection context: `corpus=vault` vs `corpus=code` vs `corpus=all`, when to pass `projects` for read-only cross-project federation, and the precedence rule when both `project` and `projects` are set. It stops short of a 5 because it does not explicitly name alternatives or state when not to use this tool in favor of a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_syncB
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 | Registered project key, used when the MCP client did not provide a workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavior; it only says 'incremental' and CLI equivalence, but doesn't state side effects, whether it mutates the index, required environment, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded purpose, no filler; the CLI parenthetical gives a concrete anchor without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-param tool the basics are covered, but absent annotations and output schema leave behavior (index mutation, incremental semantics) unexplained. It is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already explains the project fallback. The description adds a practical 'prefer project in multi-root' heuristic, which is useful but minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (incremental sync) and resource (vault index), and the CLI equivalence helps identify it. Does not name a sibling, but 'incremental' distinguishes it from a full reindex.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only guidance is a condition for setting the `project` parameter. It says nothing about when to choose sync over sibling tools like rms_reindex or rms_prune.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 | Registered project key, used when the MCP client did not provide a workspace root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It accurately describes the tool as returning a protocol, implying a safe read operation. While it doesn't explicitly state no side effects, the nature of the tool makes that clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, and no wasted words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one optional parameter, no output schema, and no annotations, the description is sufficiently complete. It covers purpose and benefit without needing additional detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds no meaning beyond what the schema provides for the single 'project' parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the canonical RMS Memory usage protocol, with a specific verb and resource. It distinguishes from sibling tools by mentioning self-bootstrapping without injected rule files, which is unique among the listed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for initial self-bootstrapping, but does not explicitly state when to use it versus alternatives like rms_search or rms_checkpoint_load. There is no guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_wiki_packB
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 | Registered project key, used when the MCP client did not provide a workspace root. | |
| manifest | No | Optional YAML manifest path for custom sections. | |
| refresh_code | No | Force code reindex before generating. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full burden for behavioral disclosure. It does not mention side effects (e.g., whether the vault or code index are modified), authorization needs, or rate limits. The 'refresh_code' parameter hints at a potential write action but is not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The purpose is front-loaded and every word adds value. No redundant phrasing or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description should explain the return material format or structure. It only says 'Returns material', which is vague. For a tool that generates a pack, an agent needs to know what to expect (e.g., a path, file list, or structured data) to use the output effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds marginal value beyond the schema by framing the pack as 'for an agent to create human-readable documentation', but does not clarify how parameters like 'refresh_code' affect output. Schema already describes each parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool generates a 'wiki context pack' from vault and code index, distinguishing it from siblings like search or read tools. The verb 'Generate' and resource 'wiki context pack' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like rms_search or rms_code_search. It does not state prerequisites or when not to use it, leaving the agent to infer usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rms_writeA
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 | Registered project key, used when the MCP client did not provide a 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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, yet only states that the tool saves content. It does not mention side effects such as writing to disk, adding to the index, mode-specific overwrite/append behavior, or soft-superseding behavior, all of which an agent must know for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core purpose and the key usage trigger with no filler. The primary action is front-loaded and the proactive usage cue is placed immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (11 parameters, no output schema, no annotations) and the description only covers purpose and one usage pattern. It omits expected return values, operational side effects, and how modes (create/append/replace) affect behavior, leaving a substantial gap for a write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 91%, so the input schema already documents the 11 parameters in detail. The description adds high-level context about what kind of content belongs in the vault, but no parameter-specific meaning beyond the schema, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Save') and a concrete resource ('new architectural decisions, constraints, development rules, or project context') targeted at the RMS Memory vault. This clearly differentiates the tool from the read/search/prune siblings, which operate on the same vault but do not write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use conditions: '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.' It does not offer when-not-to-use guidance or name alternatives such as rms_checkpoint_save, so it stops short of the full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
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 18 tools
Most tools have clearly distinct purposes (search, code search, graph, read, write, checkpoints, etc.). However, rms_search and rms_code_search overlap somewhat since rms_search can already search the code corpus via corpus=code, and rms_sync vs rms_reindex could be confused without reading descriptions carefully.
All tools share the rms_ prefix and use snake_case, which is consistent. However, the verb patterns are mixed: some are action-oriented (sync, search, read, write, prune) while others are noun-oriented (checkpoint_done, checkpoint_save, checkpoint_load, checkpoint_query, file_history, wiki_pack, system_instructions). The checkpoint group is consistent internally, but overall the set mixes verb-first and noun-first naming.
18 tools is on the higher end but still reasonable for a memory server that covers sync, search, graph, checkpoints, diagnostics, and project management. Each tool serves a distinct function, though a few could potentially be consolidated (e.g., checkpoint tools are four separate tools but that's a coherent subdomain).
The server covers the core memory lifecycle well: write, search, read, sync, reindex, prune, checkpoints, graph queries, and diagnostics. Minor gaps include no explicit tool for deleting/removing notes (rms_prune only archives), and no direct tool for editing existing notes (rms_write saves new content but update semantics are unclear).
Maintenance
Related MCP Connectors
Local-first memory and continuity for AI coding agents. No cloud backend; optional hosted lane.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Related MCP Servers
- AlicenseAqualityAmaintenanceHosted memory for AI agents that learns from outcomes, with shared rooms. One key across Claude, Cursor & ChatGPT.6111,285 npm25MIT
- AlicenseNot gradedqualityDmaintenanceLocal-first persistent memory for AI agents via MCP, enabling semantic search and memory sharing across agents with zero cloud cost and full privacy.12 npm1MIT
- 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.-
- AlicenseAqualityAmaintenanceLocal-first memory for AI coding agents using SQLite, enabling persistent recall of decisions, lessons, and project context without cloud or API keys.10280Apache 2.0