Skip to main content
Glama
max-ramas

RMS Memory MCP

🧠 RMS Memory MCP

Version: 1.1.0 (2026-07-27) Β· companion GUI 1.1.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.

License: MIT Rust Crates.io Release Downloads Build Platform MCP

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.

Related MCP server: Mnemoverse Memory

✨ Key Features

πŸ—‚οΈ Global Centralized Vaults

Project context lives outside your repo β€” zero .mcp file pollution.

πŸ” Hybrid Retrieval (LanceDB)

Embedded Vector Search + Tantivy Full-Text Search for zero-fail context hits.

🌐 Multilingual Semantic Parsing

fastembed-rs + multilingual-e5-small β€” native Russian & English understanding.

🌳 AST Markdown Chunker

pulldown-cmark-based chunking keeps code blocks and lists bound to their parent heading.

🧩 Semantic Code Memory

Optional Tree-sitter indexing for Rust, Go, JS/JSX, TS/TSX, Python, C/C++, Java, Ruby, Swift, and Vue <script> blocks; stable segment identities and repeated preambles preserve context when large implementations split. Opt-in watch mode reindexes only dirty paths (with full-walk fallback).

πŸ•ΈοΈ Knowledge Graph Foundation

Derived Markdown/code relationships and durable user overrides are stored separately from retrieval chunks and consumed by the companion GUI graph.

🧹 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 vault, code, or all; mixed results use Reciprocal Rank Fusion rather than incompatible raw vector distances.

🎯 Bounded Recall (v1.0.7)

rms_search returns an inject/abstain envelope with max_chars, optional min_score, fail-closed errors, and retrieval_mode (hybrid or short-query fts_prefer).

♻️ Knowledge Lifecycle

Frontmatter status / supersedes / temporal valid_* gate Lance recall; soft supersede via rms_write; Doctor freshness lint (7/7).

πŸ”„ Session Continuity (v1.0.7)

Vault-backed checkpoints (rms_checkpoint_save/done/load/query), rms_overview project orientation, rms_system_instructions self-bootstrap, editor-agnostic rms-memory hook CLI, installer L3 thin adapters, and pinned notes that bypass temporal/min_confidence recall gates.

🧭 Multi-project MCP routing (v1.0.8+)

Explicit project always rebinds the active vault; empty Cursor roots/list falls back to process cwd; injected rules require project: "<key>" on every memory tool call; rms-memory inject-rules [--all] refreshes keys.

πŸ”— Cross-project federated search (v1.0.9)

Pass projects: [key, …] to rms_search / rms_code_search for read-only RRF federation. Vault/all across multiple projects requires cross_project_vault=true on every listed key (hard fail otherwise).

🧊 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)

rms-memory-{core,index,vault} path crates under crates/; public umbrella rms-memory-mcp keeps stable module paths for the GUI. See docs/crate-split.md.

πŸ“¦ Unified Releases

Public assets use rms_memory_mcp_<version>_<target>.* / rms_memory_gui_<version>_* on the same vX.Y.Z tag (MCP + GUI share numbering). Unversioned names are no longer published.

βš™οΈ Dynamic Auto-Installer

rms-memory install scans your system and wires itself into every supported IDE.

πŸ“œ Rules-as-Code Patching

Non-destructive AST patching of .cursorrules, .zed/assistant.md, etc. Opt-in by default.

πŸ§ͺ Durable Vault Writes

rms_write creates rolling .bak backups and atomically replaces create/replace targets after fsync, so interrupted writes never expose a truncated Markdown file.

πŸ“š Canonical Wiki Isolation

Generated <vault>/wiki/** stay Git-synchronized but are excluded from indexes/search/watchers/graph/packs; MCP write and canonical DocumentService also reject wiki paths (wiki-safe writers only).

πŸ›‘οΈ Ten-Point Resiliency

GC, background sync, write-guard snapshots, macOS sandbox bypass, llms.txt export, path traversal + injection protection, zombie prevention, graceful shutdown.

πŸ”’ 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 last_modified_by, timestamp, confidence, source β€” agents can filter by reliability.

πŸ”€ Multi-Scope

--scope flag supports arbitrary identifiers beyond filesystem paths (thread IDs, lead IDs, etc.).

πŸ–₯️ 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-mcp

Installs 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 .zip below).

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 | bash
irm https://raw.githubusercontent.com/max-ramas/rms-memory-mcp/master/scripts/install.ps1 | iex

Option 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) β€” lagging until workspace publish

As of 1.0.9 the library is a Cargo workspace with path-only internal crates (publish = false). cargo publish of the umbrella is intentionally disabled. Prefer Homebrew or a GitHub release binary for the current version.

# May install an older crates.io revision until the publish strategy lands
# (see docs/crate-split.md). Not the recommended path for 1.0.9+.
cargo install rms-memory-mcp

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); it never mirrors GUI source, build logs, updater metadata, credentials, or other 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 install

This 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" serve

Use 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 scope

For 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 init

This 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 memory

Registered 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,vue

Supported 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

rms-memory serve

Starts the JSON-RPC stdio server (auto-triggered by your IDE).

rms-memory init

Registers a project into the global registry. --dry-run supported. --full forces creation of all IDE rule templates.

rms-memory inject-rules [--all]

Re-injects managed IDE rule blocks with the concrete registry project key (existing files only, unless --full). Use after template updates. Fail-closed: a single unregistered path is refused rather than injected with a guessed key β€” run init there first, or use --all to refresh every registered project.

rms-memory import

Scans for existing docs (README.md, docs/, ADR/) and imports them β€” interactively or via --auto-import.

rms-memory install

Hooks the server into supported IDEs. --dry-run supported.

rms-memory uninstall

Removes the server from all discovered IDE configurations.

rms-memory doctor

Runs 5-point vault health diagnostics. --repair-frontmatter safely repairs duplicate, missing, and known attached frontmatter IDs with backups; arbitrary invalid YAML is reported but never rewritten automatically.

rms-memory config

Without flags: prints global + current-project settings, then offers interactive global editing. Any flag runs non-interactively. Global: --vault-path, --auto-add, --inject-rules, --auto-import skip|link|import_organize|import, --max-backups N. Project (cwd or --scope <path>): --code-index-mode off|manual|watch, --code-languages auto|<comma-list>, --include <globs>, --exclude <globs>, --cross-project-vault true|false.

rms-memory reindex [--vault|--code|--all]

Refreshes Markdown memory (default), derived semantic code memory, or both.

rms-memory sync

Incremental LanceDB delete-then-insert sync (also runs automatically during serve).

rms-memory gc

Prunes orphaned LanceDB indices belonging to deleted vaults.

rms-memory log

Tails the telemetry log (~/.rms-memory/rms.log).

rms-memory export-llms

Compiles the current vault into a single llms.txt payload.

rms-memory projects list

Lists registered project keys and their code/vault paths.

rms-memory projects locate --project <key>

Resolves one registered project key.

rms-memory projects remove <key>

Removes an erroneous project registration while preserving its vault files.

rms-memory hook --event <e>

Editor-agnostic continuity hook (session_start, pre_compact, session_stop); JSON on stdout. --project <key> or unique cwd resolution (fail-closed); --apply creates/updates or closes a checkpoint.

All commands

Accept --scope <id> to target arbitrary isolated vaults (threads, leads, etc.).

πŸ”Œ 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>

The CLI command 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 reserved). The published product remains the root umbrella rms-memory-mcp (binary + MCP server + tools + rules injector), 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.

  1. Path traversal + filter injection prevention

  2. Zombie process prevention (watcher shutdown on EOF + std::process::exit(0))

  3. Graceful shutdown (SIGINT/Ctrl+C handler)

  4. macOS sandbox bypass for fastembed model downloads

  5. rms-memory gc β€” orphaned vector store pruning

  6. PID-aware per-project writer lock and read-only background synchronization across IDE processes

  7. Markdown watcher plus an explicitly opt-in, 3s-debounced code watcher with path-scoped reindex and shared-generation suppression

  8. Write-guard snapshotting with rolling .bak backups (default: 5)

  9. Isolated telemetry logging (~/.rms-memory/rms.log)

  10. llms.txt export 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

βœ…

.cursorrules

Zed

βœ…

.zed/assistant.md

Claude Code

βœ…

.claude/CLAUDE.md

OpenCode

βœ…

β€”

Codex

βœ…

β€”

VS Code

βœ…

β€”

Antigravity

βœ…

β€”

πŸ“„ License

MIT License β€” see LICENSE for details.


Available Tools

12 tools
rms_checkpoint_doneA

Close a checkpoint: marks it status=done (drops out of recall) and writes a durable session summary note under artifacts/sessions/.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCheckpoint name to close.
projectNoRegistered project key, used when the MCP client did not provide a workspace root.
summaryYesWhat was accomplished.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCheckpoint name to load.
projectNoRegistered project key, used when the MCP client did not provide a workspace root.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoStatus filter; default all.
projectNoRegistered project key, used when the MCP client did not provide a workspace root.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoWhat this work is trying to achieve.
nameYesCheckpoint name (letters, digits, '-', '_', '.').
linksNoVault-relative paths of related notes.
pendingNoWhat remains to be done.
projectNoRegistered project key, used when the MCP client did not provide a workspace root.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRegistered project key, used when the MCP client did not provide a workspace root.
recent_limitNoMaximum recent notes to return (default 10, max 50).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
pathYesRelative path to the markdown document in the vault.
projectNoRegistered project key, used when the MCP client did not provide a workspace root.
noPromoteNoRead without side effects. Vault reads are already side-effect free; accepted for explicit forward-compatible contracts.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_system_instructionsA

Return the canonical RMS Memory usage protocol (search-first, persist, session continuity). Lets an agent self-bootstrap without injected rule files.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRegistered project key, used when the MCP client did not provide a workspace root.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRegistered project key, used when the MCP client did not provide a workspace root.
manifestNoOptional YAML manifest path for custom sections.
refresh_codeNoForce code reindex before generating.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
modeYesWrite mode.
pathYesRelative path to save the document (e.g., 'decisions/001-db.md').
pinnedNoWhen true, the note bypasses temporal and min_confidence recall gates (status still applies).
sourceNoOptional free-text citation or source reference for this record.
statusNoOptional lifecycle status: active, draft, or superseded.
contentYesThe markdown content to write.
projectNoRegistered project key, used when the MCP client did not provide a workspace root.
confidenceNoOptional confidence score (0.0–1.0) indicating reliability of this record.
supersedesNoOptional relative vault path of a prior note to soft-supersede (marks it status=superseded and links both sides).

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries full burden. It fails to disclose behavioral traits such as whether writes are idempotent, how the vault handles duplicate paths, or if there are side effects. The description is too brief to inform the agent about write behavior beyond the purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no superfluous text. The first sentence defines purpose and scope; the second provides usage guidance. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and no output schema, the description lacks details on what happens after writing (e.g., return value, error handling). It covers when to use but not enough about the complete usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 90%, so the schema already documents most parameters well. The description adds minimal extra meaning (e.g., 'proactively' hints at timing) but does not elaborate on parameter relationships or usage tips. It meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose ('Save new architectural decisions... to the RMS Memory vault') and provides specific examples of when to use it. It distinguishes from sibling tools like rms_read and rms_search by focusing on writing context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use the tool 'PROACTIVELY at the end of a task' and lists concrete scenarios (new user preference, solved bug, architectural decision). However, it does not mention when not to use it or compare directly with alternatives.

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. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedrms_checkpoint_done
    • First observedrms_checkpoint_load
    • First observedrms_checkpoint_query
    • First observedrms_checkpoint_save
    • First observedrms_code_search
    • First observedrms_overview
    • First observedrms_projects
    • First observedrms_read
    • First observedrms_search
    • First observedrms_system_instructions
    • First observedrms_wiki_pack
    • First observedrms_write

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct resource or action: search is separated by corpus, checkpoints have separate life-cycle tools, and read/write are distinct. No two tools have overlapping purposes.

Naming Consistency3/5

Tool names follow a mixed convention: some use verb_noun (checkpoint_load, code_search) while others are noun-first (projects, wiki_pack) or noun_noun (system_instructions). The 'rms_' prefix is consistent, but the pattern within is inconsistent.

Tool Count5/5

With 12 tools covering search, read/write, checkpoint lifecycle, projects, and overview, the set is well-scoped. Each tool serves a clear purpose without redundancy.

Completeness3/5

The set covers core operations but lacks vault document update/delete and a direct listing tool. Checkpoint lifecycle is well-covered, but vault operations are write-only and rely on search for discovery.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Local-first persistent memory for AI agents via MCP, enabling semantic search and memory sharing across agents with zero cloud cost and full privacy.
    16
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Persistent shared memory for AI coding agents that turns a folder of markdown files into searchable memory across sessions, repos, and machines.
    12
    Functional Source , Version 1.1, MIT Future

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/max-ramas/rms-memory-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server