Local-first non-linear memory operating system for AI operators. MCP server providing memory recall, session management, and work digest tools.
nlm-memory defines 7 tools with reasonable naming (verb_noun pattern) and descriptions (avg ~120 chars). All tools have input schemas with typed parameters and descriptions. However, output schemas are not documented in the visible code, responses are inferred from implementation. Error handling is minimal; no recovery guidance or actionable error messages. Tool descriptions lack WHEN/WHY context and dependency hints. Parameters like 'mode' and 'kind' use enums but lack explicit enum constraints in schema. No tool annotations (readOnlyHint/destructiveHint). The report_outcome tool is WRITE but unmarked. Composition is reasonable, tools chain via IDs, but descriptions don't guide multi-step workflows.
Fetch a single session by ID with full details including body, markers, entities, related facts, exemplars, and outcome.
Search code exemplars by semantic similarity or keyword match. Returns ranked code snippets with context and file paths.
Search the fact store for facts matching a query. Returns ranked facts with optional subject/predicate filtering and kind filtering.
Search memory for sessions matching a query. Returns ranked sessions with optional entity filtering, kind filtering, and workstream scoping. Supports keyword and semantic recall modes.
Recall a workstream by ID or label. Returns workstream details including sessions, facts, exemplars, and rollup summary.
Record an outcome signal for a session or standalone. Signals are used for training and evaluation of the recall system.
Output schemas not documented. Tool descriptions state what is returned (e.g. 'Returns ranked sessions') but do not specify field names, types, or structure. LLMs cannot plan downstream calls or extract data reliably.
No tool annotations. report_outcome is WRITE (destructive) but lacks destructiveHint. All READ tools lack readOnlyHint. Agents cannot distinguish safe from unsafe operations without reading descriptions.
Enum constraints not enforced in schema. Parameters 'mode' (keyword|semantic), 'kind' (decision|open|attribute), and 'outcome' (success|failure|partial) accept free-form strings. Schema should declare enum values, not just descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Generate a daily work digest for the operator. Summarizes sessions, decisions, and outcomes for a given date.
Descriptions lack WHEN/WHY guidance. 'Search memory for sessions' does not explain when to call recall_sessions vs recall_facts vs recall_code. No dependency hints (e.g. 'Call this first to find session IDs for get_session').
No error handling guidance. Tool descriptions do not explain failure modes or recovery steps. If recall_sessions returns empty results, the agent has no guidance on whether to retry, adjust query, or try a different tool.