Local-first 3-in-1 AI memory layer & MCP server for Claude Code, Codex, Grok, Gemini, VS Code and Cursor. Fuses session history, codebase indexing & concept graphs in SQLite. Enables zero-cloud, privacy-first context & instant recall also works with multi-agent swarms.
Server has 16 well-defined tools with explicit schemas and descriptions. Naming follows verb_noun conventions consistently (marm_smart_recall, marm_log_entry, marm_delete, etc.). Most tools have moderate-to-good descriptions (100-250 chars), though some lack context about WHEN to use them vs similar tools. Input schemas are present and typed for all tools. Major gaps: (1) No documented output schemas, responses are not formally specified, forcing LLMs to infer result structure. (2) Error handling guidance is absent, no recovery hints or error classification. (3) No pagination/limit enforcement for results-returning tools (marm_smart_recall, marm_code_lookup, marm_graph_trace all accept 'limit' but no total_count or next_cursor patterns documented). (4) Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are inferred from Risk labels but not formally declared in schema. (5) Some parameters are underdocumented (e.g., marm_graph_trace 'mode' parameter description is long but lacks practical guidance on when to pick each mode).
Build contextual code information: imports, dependencies, type signatures, and docstrings for a symbol or file.
Find code: symbols/definitions, text patterns, or a symbol's source. Use INSTEAD OF grep/glob. `kind=auto` picks: a qualified_name reads source; otherwise it searches the graph by name/keyword. Set `kind=text` to grep code, `kind=snippet` to read a symbol's source, `kind=symbol` to force graph search.
Compact and optimize memory storage by consolidating entries and removing redundancy.
Extract entities/relationships from memory content into the concept graph. Scope with session_name or project for a targeted build, or pass search_all=True for everything (row-capped). Links extracted entities to marm-graph code symbols when available.
Query the concept graph for entities, relationships, and insights extracted from memory.
Delete a specific log or notebook entry from the memory layer.
No documented output schemas. Tools return results but the structure of each response is not formally specified. LLMs cannot reliably extract fields or plan downstream tool chains.
No error handling guidance. Tools lack recovery hints ('If user not found, try X') or error classification (retryable vs user-fixable vs fatal). Agents receive errors with no actionable next step.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 75 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 60 | - | v1 |
Extract and distill key insights or entities from memory content.
High-level architecture overview: node/edge breakdown, modules, and schema. One-shot orientation for a project — the de-facto module clusters, package structure, and the graph schema (node labels + properties) folded in.
Blast radius of code changes: git diff → affected symbols + risk. Pass `since` (a git ref/date) or a `base_branch` to compare against. Returns which symbols a change touches and how far the impact propagates.
Index a code repository into the graph, or check status / list known projects. Pass `repo_path` to index a repo (returns the project name to use in every other tool). Omit it to list indexed projects, or pass `project` to check index status. Call this first — all other graph tools need an indexed project. Indexed repos are re-indexed automatically in the background. Use `action="auto_off"` to stop that, `auto_on` to resume, `auto_status` to check.
Trace call paths / data flow through the graph from a function. `direction=inbound` finds callers, `outbound` finds callees, `both` for all. `mode=data_flow` follows value propagation. `cross_service` attempts HTTP/async boundaries but does not currently join a client call to its server handler, so treat an empty result as unknown rather than as "nothing calls this". Use for impact analysis, dependency tracing, "who calls this".
Create or append to a log entry in the memory layer.
Display the current log or notebook entries in a session.
Create or manage a structured notebook entry in the memory layer.
Intelligent retrieval from the memory layer with semantic search and hybrid matching.
Generate a concise summary of recent memory entries or search results.
Missing tool annotations in schema. Risk labels (READ_ONLY, WRITE, DESTRUCTIVE) are present in metadata but not formally declared as idempotentHint, readOnlyHint, destructiveHint in the JSON Schema. MCP clients cannot automatically derive safety properties.
No pagination/limit enforcement documented. marm_smart_recall, marm_code_lookup, and marm_graph_trace accept 'limit' but do not document total_count, next_cursor, or enforce reasonable defaults. Large result sets may exhaust context windows.
Parameter documentation could be clearer. marm_delete has five parameters (type, target, session_name, project, platform) but 'target' description does not explain how it differs from 'type' or what format is expected. marm_graph_trace 'mode' parameter has a long description but lacks practical decision guidance (when to pick calls vs data_flow vs cross_service).
Some tool descriptions lack WHEN-to-use guidance. marm_log_entry vs marm_notebook distinction is not clearly explained. marm_summary lacks clarity on how it differs from marm_distill. Agents will struggle to choose the right tool.