Skip to main content
Glama
jagoff

MEMO MCP Server

by jagoff

memo — local memory for AI

memo

Your coding agent starts every session with amnesia. memo fixes that — 100% on your own machine.

Persistent, searchable memory for Claude Code, Codex, Cursor, Cline, Devin, and OpenCode. No cloud, no API keys, no Ollama, no vector DB to run. And it spends fewer tokens, not more.

PyPI Downloads License: MIT MCP MCP Toplist

Save a fact once — every later session recalls it automatically, all stored locally.


Install

curl -fsSL https://raw.githubusercontent.com/jagoff/memo/v4.16.0/install.sh | bash

Prefer a package manager? uv tool install mlx-memo · pipx install mlx-memo · brew tap jagoff/memo && brew install mlx-memo

Then:

memo doctor                                   # self-check
memo save 'we use Postgres, not Mongo'        # save a decision
memo search 'what database did we pick?'      # search by meaning

That's it. Your agents pick it up over MCP automatically — the installer wires every client it finds.

New Mac:

curl -fsSL https://raw.githubusercontent.com/jagoff/memo/v4.16.0/install.sh | bash
memo sync bootstrap git@github.com:yourname/memo-sync.git

Agent-managed setup:

curl -fsSL https://raw.githubusercontent.com/jagoff/memo/v4.16.0/install.sh | bash
memo doctor --strict-runtime

On Linux or just want to look around first?

docker run --rm ghcr.io/jagoff/memo:latest memo doctor

Related MCP server: neuromcp

Why this saves you money

Most memory servers add context. memo is built to remove it.

Profile

Tools

Schema tokens

agent (default)

43

~9.7k

core / slim

60

~13.2k

full / default

165

~30.6k

The default MCP surface is 43 tools, not 165 — 74% fewer tools, and about 68% less schema context: 43 tools / ~9.7k schema tokens versus 165 tools / ~30.6k tokens on the full surface — overhead paid every session, in every client.

Ambient recall injects one relevant memory before the model answers. The bundled Claude Code hook caps that injection at ~160 tokens. memo roi reports the real grounding and re-ask counts — the estimated-savings figure it used to print was removed in 4.14.0, because multiplying those counts by hardcoded constants was a savings claim memo could not support. For measured savings, memo tokens reads the provider's own usage counters through the context-compression proxy.

memo roi       # value from grounded recalls and avoided re-asks
memo tokens    # usage-savings ledger

Three things nothing else does

🕰️ Time-machine — query your knowledge as it was

memo as-of ask "what was the deploy strategy?" --date 2026-02-01
memo diff --from 2026-01-01 --to 2026-03-01

Full historical reconstruction by reverse-replaying history.db. Useful when you need to know why past-you made a call, not just what past-you decided.

⚡ Contradiction radar — memory that notices when you change your mind

memo contradict scan      # find conflicting facts corpus-wide
memo contradict triage    # resolve: fuse / newer-wins / dismiss

Change a decision and memo flags the now-stale version, so the agent stops reintroducing what you already threw out.

🔮 Dream — it optimizes itself while you sleep

memo dream run

A 7-phase nightly pipeline: inventory → mine signals → resolve conflicts → prune stale → synthesize cross-cluster insights → optimize → pre-warm the top-100 query embeddings so tomorrow's recall stays under 200 ms. Every run writes a receipt you can audit. Zero intervention.


How it works

Hybrid retrieval. A vector leg (MLX on Apple Silicon, sentence-transformers on CPU) and a BM25 leg (FTS5, diacritic-folding for Spanish) run in parallel, fuse via Reciprocal Rank Fusion, then go through an optional MLX cross-encoder rerank.

vector + keyword search in parallel, fused, reranked, top memory injected

Markdown is the source of truth. Every memory is a plain .md file you can read, grep, and version-control. SQLite is a derived index that rebuilds from the files at any time — hand-edit in Obsidian and your edit wins on the next memo reindex. Nothing is locked in a database you can't open.

Prompts and memories stay on your machine. Embedder, reranker, and LLM all run in-process. No telemetry. Memory travels only if you point memo sync at a git remote you own. Normal startup is fully offline; remote update checks and auto-update require an explicit opt-in. → Privacy and network policy

Also in the box: cross-agent memo resume (reopen any session from any agent), cross-Mac git sync, a knowledge graph with optional codegraph symbol edges, encrypted secret storage, OCR/audio ingestion, evidence packs, outcome learning, signed federation, and a local chat UI over your memory (memo chat serve). → Full feature reference


How it compares

Verified July 2026 against each project's own docs. Corrections welcome — open an issue and I'll fix the table.

memo

mem0

letta

cognee

basic-memory

cipher

100% local, no cloud API

⚠️

⚠️

⚠️

⚠️

Time-machine (rewind to any date)

⚠️

⚠️

⚠️

Contradiction detection + resolution

⚠️

⚠️

Autonomous nightly maintenance

Token-economy MCP profiles

⚠️

Markdown / Obsidian as source of truth

⚠️

✅ first-class · ⚠️ partial, config-gated, or add-on · ❌ absent

Closest comparators are basic-memory (local-first + Obsidian + MCP — same thesis) and cipher (memory for coding agents).


Requirements

Support

macOS, Apple Silicon (M1–M4)

Full — MLX embedder + reranker + ask/synthesize/dream

Linux / Ubuntu

Standalone CPU backend — search, recall, save. pipx install "mlx-memo[cpu]" · docs/ubuntu.md

Intel Mac

Unsupported — current PyTorch releases do not ship Python 3.13 wheels for this platform

Docker

Cross-platform, CPU backend · docs/docker.md

Python ≥ 3.13 (the installer handles this via uv if you don't have it). First install pulls ~8 GB of models, 5–15 min. Optional: an Obsidian vault — without one, memo uses ~/Documents/memo/.


Docs

Install detail, installer knobs, new-Mac migration

reference.md › Install

Per-client MCP setup (Claude Desktop, Cursor, Cline, Continue)

reference.md › MCP setup

Ambient recall, capture, and tuning

reference.md › Ambient memory

Full CLI reference (145 commands) + memo tui

reference.md › CLI

All MEMO_* flags and model profiles

reference.md › Configuration

Architecture and design notes

reference.md › Design

Privacy and network policy

PRIVACY.md

All 145 top-level CLI commands

Core: save search ask get edit rename delete list

Recall & Hooks: recall recall-hook context briefing continuity prewarm capture-tick capture-stop interject ask-gaps guard digest

Session & History: history as-of diff record-history session chat-session resume reflect mine-history episodes chronicle

Maintenance: reindex maintain review dream consolidate synthesize dedupe cross-dedup retier contradict coordinate terminal invalidate temporal compress-context ops

Analysis & Quality: health stats doctor journey-check lint drift analytics eval roi tokens token-savings usefulness gaps outcome profile confidence graduation hype definitive evidence

Knowledge Graph: graph entities entity extract-entities links version related

Advanced Search: embed rerank contextual retrieve context-pack chat chat-ask repo

Import / Export / Sync: import export backup restore sync ingest federation

Visualization: tui dashboard map logs hook-log

Setup & Config: init setup config install-mcp install-watcher uninstall-watcher install-slash install-statusline install-recall-hook install-shell-wrapper install-shims startup-banner migrate migrate-vault migrate-independence update upgrade self-update watch release onboard

Daemons: daemons recall-daemon ingest-daemon maint-daemon embed-daemon idle-daemon

Other: backend-native collaborative events feedback query mandate drift sleep-cycle operational ocr-image provenance secret verbatim mcp-command codex-badge debug-recall http-api proxy mine-git token-gate fix undo code-facts code-nudge code-health


Contributing

git clone https://github.com/jagoff/memo && cd memo
uv pip install -e '.[dev]'

Issues and PRs welcome — see CONTRIBUTING.md. If memo is useful to you, a ⭐ genuinely helps other people find it.

MIT licensed. Built on Apple MLX, sqlite-vec, and codegraph.

Available Tools

60 tools
memo_askA
Read-onlyIdempotent

Answer a question using memo retrieval and citations.

Read-only. Use when you want a synthesized answer grounded in durable memories instead of raw hit lists. k, type, and snippet_chars tune retrieval; source attributes consult logging. With client sampling enabled, synthesis runs on the calling model (see synthesizer field).

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of memories to retrieve as grounding (top-k).
typeNoRestrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type.
sourceNoCalling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info.
questionYesNatural-language question to answer from durable memories.
session_idNoTracked memo session id to associate the answer with.
include_reposNoAlso search indexed repository knowledge, not just memories.
snippet_charsNoCharacter cap per cited snippet; None uses the default.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true. Description adds context about client sampling and synthesizer field, and reinforces read-only nature. No contradictions.

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?

Four sentences, front-loaded with purpose, followed by usage guidance and parameter roles. No fluff, every sentence adds value.

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 7 parameters and presence of output schema, description covers core functionality, usage context, read-only nature, parameter tuning, and client sampling. Missing specifics on return format, but output schema exists to fill that gap.

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%, baseline is 3. Description adds context for some parameters (k, type, snippet_chars, source) but does not explain all (e.g., session_id, include_repos). Schema descriptions are already comprehensive.

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?

Clearly states the tool answers a question using memo retrieval and citations. Distinct from sibling tools like memo_search which return raw hit lists.

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 states when to use 'synthesized answer grounded in durable memories instead of raw hit lists'. Mentions parameter tuning but does not explicitly list when not to use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_attention_ackA
Idempotent

Acknowledge an attention item so it stops being surfaced.

Idempotent: returns {'acknowledged': false} when the id is unknown or already acknowledged; true only on the first acknowledgement.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the attention item to acknowledge.
actor_idNoIdentifier of the acknowledging agent (journaled).memo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Extends beyond the idempotentHint annotation by detailing the exact return values for known/unknown/already acknowledged cases. This helps the agent understand the tool's exact behavior.

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 concise sentences, front-loaded with the main purpose, and no wasted words. Efficient and clear.

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?

Comprehensive enough for a simple idempotent acknowledgment tool with output schema and annotations. Slightly lacking in connecting 'attention item' to broader context, but still good.

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 covers both parameters with 100% description coverage. The description adds no additional parameter semantics beyond the schema, so a baseline score of 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 states a specific verb 'Acknowledge' and resource 'attention item', and explains the effect 'stops being surfaced'. It is clear and distinguishable from sibling tools.

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?

No explicit guidance on when to use or alternatives are provided. The purpose is clear but an agent might benefit from knowing this is for dismissing attention items rather than other actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_attention_addA

Add an item that must be surfaced to later agents.

Writes a journaled attention record; severities outside low|medium|high|critical are rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject tag the attention item belongs to.
summaryYesThe item later agents must see before working on the project.
severityNoOne of 'low', 'medium', 'high', 'critical'.medium

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations indicate it is a write operation (readOnlyHint false) and not destructive. The description adds that it journals the record and rejects invalid severities, providing extra context beyond annotations.

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 critical information is front-loaded and easily parsed.

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?

The tool has an output schema (not shown) so return values are documented. The description covers purpose, constraints, and severity validation, but does not mention prerequisites or duplicate behavior for a simple add operation.

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 has 100% coverage with descriptions for all three parameters. The description adds value by explicitly stating that severities outside the allowed set are rejected, which is not in 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 ('Add') and the resource ('item that must be surfaced to later agents'), specifying it writes a journaled attention record. This distinguishes it from siblings like memo_attention_ack.

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 later agent needs to see an item, but does not explicitly state when to avoid using it or mention alternatives like memo_attention_ack for acknowledging.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_chat_askA
Read-onlyIdempotent

Answer a conversational question with optional history and context.

Read-only. Use instead of memo_ask when prior turns or explicit context should shape retrieval and synthesis. history is a list of chat messages; session_id links the answer to a tracked memo session. With client sampling enabled, synthesis runs on the calling model (see synthesizer field).

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of memories to retrieve as grounding (top-k).
typeNoRestrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type.
sourceNoCalling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info.
contextNoExtra structured context for synthesis (bounded to 256KB); merged with session_id when given.
historyNoPrior chat turns as {'role', 'content'} dicts; bounded (128 items / 512KB) and used to shape retrieval.
questionYesNatural-language question for this conversational turn.
session_idNoTracked memo session id linking the answer to a session.
snippet_charsNoCharacter cap per cited snippet; None uses the default.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description reinforces this with 'Read-only' and adds context about synthesis running on the calling model with client sampling, which is beyond annotations.

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 very concise: four sentences, front-loaded with the core purpose, and no unnecessary words. Every sentence adds value.

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?

With 8 parameters (1 required) and an output schema, the description covers the main purpose and key distinctions. It doesn't detail every parameter, but the schema does, and the description adds the conversational context and guidance vs memo_ask.

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 baseline is 3. The description adds meaning by explaining that history is a list of chat messages, session_id links the answer to a tracked session, and context is used for synthesis. This enriches the schema descriptions.

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 answers a conversational question with optional history and context. It distinguishes itself from the sibling memo_ask by specifying when to use this tool instead, mentioning prior turns or explicit context shaping retrieval.

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 provides explicit guidance on when to use this tool over memo_ask: when prior turns or explicit context should shape retrieval. It also hints at client sampling and synthesizer field but doesn't give exhaustive usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_conflict_openA

Open a local, auditable reality conflict.

Writes a 'detected' conflict record to the hash-chained journal. Resolution is human-only — memo_conflict_resolve reports the CLI command a human must run.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesShort stable label for the disputed subject.
summaryYesDescription of the conflicting claims or evidence.
freeze_writeNoWhen true, mark the topic write-frozen until a human resolves the conflict.
evidence_urisNomemo:// URIs of the evidence supporting each side.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations, noting that the tool writes to a hash-chained journal and that resolution is human-only. Annotations already indicate non-destructive write operations, so the description aligns and adds value without contradiction.

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 very concise with three sentences, front-loading the purpose and then adding key details about the journal and resolution. Every sentence is informative with no fluff.

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 role in conflict management, the description adequately covers the core workflow and mentions the journal's auditability. It does not detail the output schema, but that is acceptable since an output schema exists. Minor gaps in expectations about 'open a conflict' are acceptable.

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 explains all parameters well. The description does not add new information about parameters beyond what the schema provides, meeting the baseline expectation.

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: 'Open a local, auditable reality conflict.' It specifies that it writes a 'detected' conflict record to a hash-chained journal, distinguishing it from siblings like memo_conflict_resolve which handles human resolution.

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 when to use this tool (to open a conflict) and mentions memo_conflict_resolve for resolution, providing an alternative. However, it lacks explicit guidance on when not to use it or specific prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_conflict_resolveA
Read-onlyIdempotent

Report the local human action required to resolve a conflict.

Read-only: never resolves anything itself — it returns the memo operational conflict resolve command a human must run locally.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the conflict to resolve.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds behavioral context beyond annotations: that it returns a command string for human execution and does not resolve anything itself. No contradiction.

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, each adding value. The first states the primary purpose, the second clarifies behavior (read-only, returns command). No unnecessary words, front-loaded with the key action.

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 low complexity (1 param, clear annotations, output schema present), the description is fully sufficient. It explains the tool's purpose, limitation, and output nature. No gaps.

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% with one parameter 'id' described as 'Id of the conflict to resolve.' The description does not add meaningful new semantics beyond the schema; baseline 3 applies.

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 'reports the local human action required to resolve a conflict'. It uses a specific verb ('report') and resource ('local human action'), and distinguishes from siblings by emphasizing it does not resolve conflicts itself, unlike other conflict-related tools.

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 says 'Read-only: never resolves anything itself' and that it returns a command for a human to run. This gives clear context on when to use it (to get the resolution command) and implies when not to (when actual resolution is needed, use another tool). However, it doesn't name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_consolidateA
Read-onlyIdempotent

Detect near-duplicate clusters and propose merges.

Read-only — returns proposals without modifying the corpus. Uses the AdvancedConsolidator under the hood (same as memo_consolidate_list_archived). With client sampling enabled, merge synthesis runs on the calling model up to MEMO_SAMPLING_MAX_CALLS (see synthesizer field). max_clusters bounds how many clusters come back; a single cluster's member list is bounded separately by member_limit -- same-topic memories cluster by design, so one cluster can hold most of the corpus.

Both defaults are derived from MEMO_MCP_RESPONSE_BUDGET_TOKENS rather than picked for round numbers: a returned member carries a 600-char body_preview, so the response costs roughly max_clusters * member_limit * 850 chars and the previous 20 x 20 spent ~47k tokens against a 10k cap -- 20 clusters cannot be returned with any useful member detail at all. 10 x 2 measures 3,978 tokens on the conformance corpus and ~9,039 projected for a corpus whose bodies actually reach the 600-char preview cap. Two sample members are what it takes to SEE a duplicate; total still reports the cluster's real size, and memo_get fetches any member by id. Raise either argument to see more and accept a larger response (the budget middleware refuses one that overruns rather than silently truncating it).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOptional filter by memory type.
thresholdNoCosine similarity threshold (default 0.85).
max_clustersNoClusters to process and return. Each one costs a member list plus a merge proposal, so this is the dominant term in the response size.
member_limitNoSample members returned per cluster. A cluster's true size always comes back in `total`; `truncated` says whether any members were dropped.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Even with annotations declaring readOnlyHint and destructiveHint, the description adds substantial context: it details the AdvancedConsolidator algorithm, sampling behavior, budget-derived defaults, response size calculations, and the middleware refusal rather than truncation. This far exceeds what the annotations alone convey.

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

Conciseness4/5

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

The description front-loads the purpose in the first two sentences, then follows with a logically organized explanation of algorithm, parameters, and budget. It is verbose, but every sentence carries useful information, so the length is justified.

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 output schema exists and annotations cover safety, the description completes the picture: it explains the algorithm, parameter trade-offs, default rationale, and failure behavior (budget middleware refusing overruns). No critical context appears missing.

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

Parameters5/5

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

The input schema already has 100% description coverage, but the tool description adds non-obvious rationale: why defaults are 10x2, the token budget math, and that two sample members are enough to see a duplicate. These insights go well beyond the schema's per-parameter descriptions.

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 first sentence, 'Detect near-duplicate clusters and propose merges,' is a specific verb+resource statement that clearly defines the tool's function. It also immediately clarifies the read-only nature, distinguishing it from any actual merge-execution tool.

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 states 'Read-only — returns proposals without modifying the corpus,' providing clear context for when to use the tool. It does not explicitly name an alternative for actually performing merges, but the read-only framing makes the intended use case clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_contextA
Read-onlyIdempotent

Build prompt-ready memory context without calling the answer LLM.

Read-only. Unlike memo_search's raw hit list, this returns a budgeted, prompt-ready context pack for direct injection: static profile, dynamic recent context, query hits, omissions, and a readonly prompt wrapper.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of query hits retrieved for the pack (hybrid mode; clamped to 1-500).
typeNoRestrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type.
sourceNoCalling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info.
questionYesNatural-language question used to retrieve and pack relevant memories.
budget_charsNoTotal character budget for the returned readonly prompt wrapper; rows beyond the budget are trimmed and counted in 'omissions'.
snippet_charsNoCharacter cap per memory snippet inside the pack.
include_dynamicNoInclude the dynamic section: up to 5 memories updated in the last 7 days.
include_profileNoInclude the static profile section (identity/preference lines).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral context beyond annotations: it explains that the pack includes dynamic recent context (up to 5 memories updated in last 7 days), static profile, query hits, omissions, and is read-only. It also mentions budget trimming. No contradiction.

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 two sentences long. First sentence states purpose clearly. Second sentence elaborates on content and differentiates from sibling. No wasted words, front-loaded with key information.

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 that an output schema exists, the description need not explain return values. It covers purpose, behavioral traits, and high-level output structure. All relevant aspects are addressed for a tool of this complexity.

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 all parameters. The description does not add specific parameter semantics beyond the schema, but it does provide context on how budget_chars and snippet_chars affect output. 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 tool's purpose: 'Build prompt-ready memory context without calling the answer LLM.' It contrasts with memo_search's raw hit list, specifying that this returns a budgeted, prompt-ready context pack with static profile, dynamic recent context, query hits, omissions, and a readonly prompt wrapper. This distinguishes it from siblings and is specific about what it does.

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

Usage Guidelines5/5

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

The description explicitly says 'Read-only. Unlike memo_search's raw hit list, this returns a budgeted, prompt-ready context pack for direct injection.' It tells when to use this tool (when needing a prompt-ready pack) and when to use an alternative (memo_search for raw hits). This provides clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_crush_retrieveA
Read-onlyIdempotent

Retrieve original content from crush cache.

When memo crushes a large JSON array during ingest, it offloads low-relevance rows to cache and embeds only the top-K rows. The context-compression proxy reuses the same cache to make a cut reversible. This tool recovers the original from either.

ParametersJSON Schema
NameRequiredDescriptionDefault
hash_markerYesEither the ingest-time wrapped form, "<<memo-crush:abc123def456>>", or the proxy's bare hex key, "abc123def456" — both name the same cache.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds meaningful behavioral context: the cache holds offloaded rows, top-K rows remain embedded, and both ingest-time and proxy cache entries can be recovered through this tool.

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

Conciseness4/5

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

The purpose is front-loaded, and the supporting explanation is compact. The three context sentences are not wasted; they explain why the cache exists and how recovery works, though some of the narrative could be trimmed without losing 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?

With one fully documented parameter, an output schema, and annotations covering safety and idempotency, the description supplies enough contextual background about the crush cache and its two access paths. Nothing essential is missing for correct invocation.

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% and the single parameter, hash_marker, is fully documented with both accepted forms. The description does not need to add parameter semantics because the schema already provides complete meaning.

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 first sentence states a specific verb and resource: 'Retrieve original content from crush cache.' The surrounding explanation clarifies the cache's purpose and distinguishes it from ordinary memo retrieval, so an agent can tell exactly what this tool targets.

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 clearly explains when the tool is relevant: after ingest-time crushing, when low-relevance rows were offloaded, and when the context-compression proxy needs to reverse a cut. It does not explicitly name alternatives or exclusion conditions, but the context is enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_deleteA
Destructive

Permanently delete one memory by id or unique prefix.

Destructive and irreversible (no trash). Elicitation-capable clients are asked to confirm before the delete runs; other clients proceed unchanged. Resolves ambiguous short ids safely and returns an error instead of guessing. When cross-reference indexing is enabled, the response warns about memories that linked to the deleted record.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId or unique prefix of the memory to delete permanently (markdown file + index rows).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description adds crucial behavioral details: irreversibility (no trash), confirmation behavior for elicitation-capable clients, safe ambiguous-id resolution with errors, and cross-reference warnings. This far exceeds what annotations alone provide.

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 four sentences, each earning its place: main purpose, destructive irreversibility, confirmation nuance, and safety behavior. It is front-loaded with the core action and avoids redundancy.

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 destructive tool with one parameter and an output schema, the description is remarkably complete. It covers irreversible side effects, confirmation flows, error handling for ambiguous ids, and reference warnings, leaving little ambiguity for the agent about what to expect.

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 schema already fully describes the 'id' parameter (100% coverage). The description adds valuable context about prefix ambiguity resolution and error behavior, which helps the agent understand how the parameter is interpreted without guessing.

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 states a specific verb+resource+scope: 'Permanently delete one memory by id or unique prefix.' This clearly distinguishes it from sibling tools like memo_forget (which likely implies a soft delete) and other memory operations.

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 through the phrase 'permanently delete' and mentions confirmation behavior, but it does not explicitly contrast with alternatives such as memo_forget or memo_unforget, nor does it state when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_embed_batchA
Read-onlyIdempotent

Embed one or more document strings with memo's document embedder.

Read-only. Use for diagnostics or external indexing when you need document vectors from the same model memo uses internally. Pass a list of strings; an empty list returns no vectors without error.

ParametersJSON Schema
NameRequiredDescriptionDefault
textsYesDocument strings to embed on the document side (raw, no query instruction prefix); an empty list returns no vectors.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Adds context beyond annotations: confirms read-only, explains empty list returns no vectors without error, and notes it uses the same internal embedder. No contradictions with annotations.

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 concise sentences (plus one clarifying) that are front-loaded. Every sentence adds value without redundancy.

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 one-parameter tool with output schema, the description covers purpose, usage context, behavior, and parameter semantics adequately.

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% with detailed description of the 'texts' parameter. The description adds no significant new information beyond what the schema provides.

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?

Clearly states action (embed), resource (document strings), and context (same embedder model as memo). Implicitly distinguishes from query embedding sibling by mentioning document strings.

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 says when to use: for diagnostics or external indexing when document vectors are needed. Does not specify when not to use or alternatives, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_embed_queryA
Read-onlyIdempotent

Embed one query string with memo's query embedding path.

Read-only. Use for diagnostics or integrations that need the exact vector memo would use for retrieval queries. Rejects empty text and returns the vector, dimension, and model id.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesQuery text to embed on the query side (instruction-prefixed for asymmetric retrieval); empty or whitespace-only raises an error.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description reinforces 'Read-only' and adds useful behavioral details: rejects empty text, and returns vector, dimension, and model id. No contradictions, but the description mainly confirms annotations with small additions, so a 4 is appropriate.

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 short sentences that front-load the core purpose, then add usage context and return behavior. Every sentence adds value, with no wasted words. It is highly compact yet informative.

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 a simple tool with one parameter and an existing output schema, the description covers all necessary aspects: purpose, usage context, parameter semantics, and return value structure (vector, dimension, model id). It is fully sufficient for an agent to use correctly.

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

Parameters5/5

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

Schema coverage is 100% with a single parameter 'text'. The description for this parameter adds key context: 'instruction-prefixed for asymmetric retrieval' and clarifies that empty/whitespace-only input raises an error. This meaningfully extends beyond the schema's basic type description.

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 embeds one query string using memo's query embedding path, and specifies it's for diagnostics or integrations needing the exact vector for retrieval queries. This verb+resource+scope is specific and distinguishes it from sibling tools like memo_embed_batch.

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 says 'Read-only' and 'Use for diagnostics or integrations that need the exact vector memo would use for retrieval queries.' It also notes that empty text is rejected. However, it does not mention alternatives (e.g., memo_embed_batch for batch processing) or when not to use it, which would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_evidence_packA
Read-onlyIdempotent

Return bounded, cited evidence for a question, or an explicit abstention.

Read-only, no side effects. Every snippet carries a memo:// citation; when retrieval coverage stays under min_coverage the result is an explicit abstention, never a fabricated answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoMaximum candidate memories to retrieve (clamped to 1-50).
typeNoRestrict evidence to one memory type (e.g. 'decision', 'fact'); None searches every type.
as_ofNoISO date/datetime for time-travel: only memories valid at that moment are considered.
questionYesNatural-language question to collect cited evidence for.
max_charsNoCharacter budget for the packed evidence text.
min_coverageNoMinimum retrieval coverage (0-1) required to answer; below it the pack abstains explicitly.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds valuable behavioral details: citations are memo://, abstention policy based on min_coverage. No contradictions.

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?

Three sentences, no unnecessary words. The key one-liner is front-loaded, making it easy for an AI to quickly grasp the tool's purpose.

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 complexity (6 parameters, high schema coverage, output schema exists), the description covers the essential behaviors (citations, abstention). Could be slightly more explicit about output format, but output schema likely compensates.

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% with clear parameter descriptions. The description does not add significant meaning beyond the schema, so a baseline score of 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?

Clearly states the tool returns bounded, cited evidence for a question or an explicit abstention. This distinguishes it from sibling tools like memo_search or memo_ask which may not provide citations or abstention.

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?

Provides usage context: use for cited evidence, expects abstention when coverage is low. However, it does not explicitly contrast with alternatives like memo_search or memo_ask, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_federation_previewA
Read-onlyIdempotent

Preview the exact memories an ACL would allow into a signed bundle.

ParametersJSON Schema
NameRequiredDescriptionDefault
principalYesPrincipal (device id) of the intended bundle recipient whose ACL-visible memories are previewed.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate a safe, read-only, idempotent operation. The description adds context about ACL authorization and signed bundles, enhancing understanding of the tool's behavior without contradicting annotations.

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, concise sentence that immediately conveys the tool's purpose with no unnecessary 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?

Combined with the input schema and annotations, the description provides sufficient context. The output schema further aids completeness. Minor clarification linking the principal to the ACL would improve it.

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?

The input schema already describes the 'principal' parameter thoroughly. The tool description does not add extra meaning beyond the schema, so parameter semantics are adequately covered.

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: to preview which memories an ACL would allow into a signed bundle. The verb 'Preview' and specific resource 'exact memories' make it distinct from sibling tools.

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 used for previewing memories under ACL constraints, but it provides no explicit guidance on when to use this tool over others or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_focus_clearA
Idempotent

Clear a project's current focus.

Idempotent: returns {'cleared': false} when no focus was set.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject tag whose focus should be cleared.
actor_idNoIdentifier of the agent clearing the focus (journaled).memo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Adds value beyond annotations by stating idempotency and return behavior when no focus was set, though annotations already cover idempotency.

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, no redundant information, action front-loaded.

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?

Adequate for a simple tool with full schema, annotations, and output schema; could add more context about prerequisites.

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%, description adds no extra meaning beyond schema; baseline 3.

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 'Clear a project's current focus' uses a specific verb and resource, clearly distinguishing from sibling tools like memo_focus_set.

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?

No explicit guidance on when to use this tool versus alternatives; usage is implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_focus_setA
Idempotent

Set the current focus for a project.

Replaces the project's previous focus; the change is journaled with the acting agent's identity. Safe to repeat with the same summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject tag the focus belongs to.
summaryYesOne-line description of the work currently in focus.
actor_idNoIdentifier of the agent setting the focus (journaled).memo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it mentions journaling with the acting agent's identity and that the change replaces the previous focus. Annotations already indicate idempotent and non-destructive, and the description reinforces idempotency by stating 'safe to repeat'. This adds useful context about journaling.

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 concise sentences. The first sentence states the primary action, and subsequent sentences add key behavioral details (replaces, journaled, safe to repeat). No unnecessary words, well-structured and front-loaded.

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 tool's low complexity, the presence of full schema descriptions, and an output schema (not shown but present), the description is complete. It covers the core behavior, idempotency, and journaling, which suffices for this straightforward mutation tool.

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 baseline is 3. The description does not add parameter-level information beyond what the schema provides (e.g., project, summary, actor_id). It only elaborates on the overall behavior, not individual parameters.

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 'Set the current focus for a project' with a specific verb and resource. It explains that it replaces previous focus, but it does not explicitly differentiate from the sibling tool memo_focus_clear, which clears focus. Thus, purpose is clear but lacks sibling differentiation.

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 for setting focus and notes it is safe to repeat, which provides some guidance. However, it does not explicitly state when to use this tool versus alternatives like memo_focus_clear or when not to use it. The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_forgetA
Destructive

Mark one memory as forgotten without deleting its history.

Destructive in retrieval behavior: the memory is hidden from normal recall/search surfaces until memo_unforget restores it. Pass reason to record why the memory should no longer be surfaced.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId or unique prefix of the memory to hide from recall.
reasonNoOptional free-text reason recorded in the memory's metadata as forget_reason.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations provide destructiveHint=true, and description elaborates: hidden from recall/search until memo_unforget restores it. Reversible nature clearly stated. No contradictions with annotations.

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?

Three concise sentences, front-loaded with main purpose, no wasted words. Efficiently conveys all necessary information.

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?

With output schema present and low complexity (2 simple params), the description covers all needed aspects: purpose, effect, parameter roles, and relationship to sibling tools.

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%, but description adds value: for 'id' mentions 'unique prefix' not in schema; for 'reason' explains purpose. Adds meaningful context 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?

Description clearly states 'Mark one memory as forgotten without deleting its history.' It uses a specific verb (mark) and resource (memory), and distinguishes from siblings like memo_delete and memo_unforget.

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?

Explanation of destructive retrieval behavior and mention of memo_unforget for restoration provides context. Could explicitly state when to use memo_delete instead, but the guidance is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_getA
Read-onlyIdempotent

Fetch one memory by id or unique id prefix.

Read-only. Returns the full memory record, None when it does not exist, or an ambiguity error when the prefix matches multiple records. Use memo_search or memo_list first when you do not know the id.

When MEMO_EMITTED_LEDGER is on and the resolved id already has an entry in this session's emission ledger, this call counts as a recovery against the feature's net-saving estimate (see memo_cache_stats's emit_ledger.memo_get_after_digest) -- the conservative rule the spec calls for, not proof this call actually followed a digest pointer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFull 32-char memory id or a unique prefix (git-style short ids).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds valuable behavioral context: the read-only nature, the ambiguity error, and the MEMO_EMITTED_LEDGER recovery counting. It goes beyond the structured safety hints without contradicting them.

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

Conciseness4/5

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

The description is front-loaded with the core purpose, then gives edge cases and usage guidance. The final paragraph about MEMO_EMITTED_LEDGER is detailed and possibly overlong, but it is relevant to behavioral transparency and does not repeat structural data.

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?

The tool has a simple schema, rich annotations, and an output schema. The description covers purpose, edge cases (None, ambiguity), alternatives, and advanced ledger behavior, leaving no significant gaps 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.

Parameters3/5

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

The schema already provides 100% coverage for the single 'id' parameter, including the format ('Full 32-char memory id or a unique prefix'). The description does not add meaning beyond the schema; it reinforces the same idea but does not introduce new semantic details.

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 opens with a specific verb and resource: 'Fetch one memory by id or unique id prefix.' It clearly distinguishes from sibling tools like memo_search and memo_list by focusing on retrieval by identifier, and it explicitly states the possible return outcomes (full record, None, ambiguity error).

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

Usage Guidelines5/5

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

The description explicitly states when to use alternatives: 'Use memo_search or memo_list first when you do not know the id.' This gives clear contextual guidance for choosing the right tool and when not to use memo_get.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_get_embedder_profileA
Read-onlyIdempotent

Return the active embedding model profile.

Read-only. Use this to inspect the model id, vector dimensions, normalization, and provider that memo uses for semantic search. Useful when verifying compatibility with stored vectors or external retrieval components.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying the exact information returned (model id, dimensions, normalization, provider) and its relevance to semantic search. No contradictions with annotations.

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, front-loaded with the main action ('Return the active embedding model profile') followed by read-only note and detailed use case. Every sentence contributes value with no redundancy.

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 zero parameters, comprehensive annotations, and existence of an output schema, the description fully explains the tool's purpose and the kind of data returned. It also provides context on when to use it (compatibility verification), making it complete.

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 tool has zero parameters, so baseline is 4. The description does not need to explain parameters, but it effectively explains what the output contains, which adds meaning beyond the input 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 returns the active embedding model profile and lists specific fields (model id, vector dimensions, normalization, provider). This directly addresses the tool's purpose and distinguishes it from siblings, as no other tool retrieves embedder profile details.

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?

It explicitly says 'Read-only' and provides use cases: inspecting model details and verifying compatibility with stored vectors or external retrieval components. While it doesn't list when not to use it, the context is clear and sufficient for a simple read-only tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_graphA
Read-onlyIdempotent

Navigate the entity knowledge graph (read-only).

One consolidated explorer over memo's corpus graph. Pick a verb:

  • "path": shortest entity path from a to b (fewest hops).

  • "why": weighted shortest path a->b as evidence — the same route with each hop's edge weight (how many memories bridge it), so a connection is explained, not just asserted.

  • "neighbors": direct neighbours of entity (or a).

  • "explore": a rich "what's around X" view of entity (or a) — degree, neighbours, and the memories that mention it.

  • "communities": clusters of related entities (limit caps count).

  • "impact": changed code plus linked durable memories for cwd.

  • "architecture": a bounded CodeContextPack for cwd. entity (or a) selects a symbol/path focus; mode is scout, verify, or audit and cursor continues an incomplete page.

By default this navigates the MEMORY graph only (entities linked through shared memories). Set include_code=True to also fold in the codegraph code-structure layer (call/extends/etc. edges between code symbols).

ParametersJSON Schema
NameRequiredDescriptionDefault
aNoFirst entity (path/why source; fallback for entity).
bNoSecond entity (path/why target).
cwdNoGit working tree used by the impact verb.
modeNoArchitecture evidence mode: scout | verify | audit.scout
verbYesOne of path | neighbors | explore | communities | why | impact | architecture.
depthNoCodeGraph hop depth for impact (bounded to 0..3).
limitNoResult cap (neighbours, mentioning memories, communities).
scopeNoRepo-relative path bounding architecture findings.
cursorNoOpaque continuation cursor returned by architecture.
entityNoEntity name for neighbors/explore.
max_charsNoApproximate architecture finding budget.
include_codeNoFold in the codegraph code-structure layer (default off → memory-only, so results are durable-memory navigation).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, and non-destructive hints. The description adds substantial behavioral context: the memory-only default, how include_code folds in the codegraph, the meaning of 'why' as a weighted path, and cursor-driven pagination for architecture. This goes beyond the annotations and clearly explains what the tool returns and how it behaves.

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 thorough but well-structured: a one-line summary followed by a bulleted list of verbs with concise explanations. It is front-loaded with the main purpose and no sentence is redundant. Despite its length, it is appropriately sized for the tool's complexity.

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 12 parameters, 7 verbs, and an existing output schema, the description covers all operational aspects: verb definitions, parameter roles, default behavior, include_code toggle, pagination via cursor, and limits. The output schema provides return details, so the description is complete for effective tool selection and 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?

The schema already describes all parameters, so the baseline is 3. The description adds value by mapping verbs to parameters (e.g., 'path' uses a and b, 'impact' uses cwd, 'neighbors/explore' use entity or a) and by explaining the semantics of include_code and cursor. This is more than the schema alone provides.

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 opens with a clear verb+resource statement: 'Navigate the entity knowledge graph (read-only).' It then enumerates specific sub-operations (path, why, neighbors, explore, communities, impact, architecture), which distinguishes it from sibling tools like memo_search or memo_get. The scope is very clear.

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 provides clear context for each verb and explains the default memory-only behavior with include_code to add the codegraph layer. It does not explicitly name alternative tools or when not to use it, but the context is strong enough to infer its intended use-case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_handoff_consumeA
Idempotent

Mark a handoff consumed so it stops surfacing to later agents.

Idempotent: returns {'consumed': false} when the id is unknown or the handoff was already consumed; true only on the first consume.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the handoff to mark consumed (from memo_operational_state or memo_handoff_create).
actor_idNoIdentifier of the consuming agent (journaled).memo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide idempotentHint=true, and the description adds concrete behavior details: idempotent, returns {'consumed': false} for unknown/already consumed, and true only on first consume. This enriches the behavioral model beyond annotations. Score 4 because it does not cover all possible side effects (e.g., what happens to other agents seeing the handoff).

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 extremely concise: one sentence for purpose, one paragraph for behavioral details. Every sentence is informative and necessary. No redundant or vague language.

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 tool's simplicity, the presence of an output schema (so return values need not be fully detailed), and the behavioral explanation, the description covers all necessary aspects for correct usage. It is complete and self-contained.

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 covers 100% of parameters with descriptions. The tool description does not add additional meaning to parameters beyond what is already in the schema. Baseline score of 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 action ('mark a handoff consumed'), the resource ('handoff'), and the purpose ('stops surfacing to later agents'). It effectively distinguishes from sibling tool memo_handoff_create, which creates handoffs.

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 context (consuming handoffs to stop surfacing) but does not explicitly state when to use or not use this tool, nor provide any alternatives. It lacks explicit guidance on when-not or comparison to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_handoff_createA

Create a durable handoff for another agent or session.

Writes a journaled handoff record that surfaces in memo_operational_state until some agent consumes it.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYesProject tag the handoff belongs to.
summaryYesWhat the receiving agent needs to know to continue the work.
to_actorNoTarget agent identifier; empty string leaves the handoff open to any agent.
from_actorYesIdentifier of the agent creating the handoff.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: notes that the handoff is journaled, durable, and surfaces in operational state until consumed. Annotations are minimal, but the description compensates well.

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 concise with two sentences: one for primary purpose, one for key behavioral details. No extraneous information.

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 schema completeness and presence of output schema, the description explains the lifecycle (created, persists until consumed) and purpose. Minor omission: no mention of effects on operational state beyond surfacing.

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%, with parameter descriptions already clear. The tool description provides high-level context (e.g., 'for another agent or session') but does not add significant per-parameter meaning.

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 creates a durable handoff for another agent or session. It uses specific verbs and resources, and the distinction from the sibling 'memo_handoff_consume' is evident.

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 should be used to pass work to another agent, but lacks explicit when-not-to-use or alternatives. However, the sibling context provides differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_historyA
Read-onlyIdempotent

List recent memory history events.

Read-only. Use for audit trails across the corpus or filter by op and memory id when investigating a specific write, update, delete, forget, or reindex action. Short ids are resolved safely.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRestrict events to one memory: full 32-char hex id or a unique short prefix. An ambiguous prefix returns a one-element error list with the matching ids; an unknown prefix returns an empty list. Omit for corpus-wide history.
opNoExact-match filter on operation type. Events are recorded with op "save", "update", or "delete"; omit to include all ops.
limitNoMaximum events to return, newest first. Clamped to 1..500.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by noting that short ids are 'resolved safely' and that ambiguous prefixes return an error list, which is behavioral context beyond the annotations. It doesn't contradict annotations.

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, front-loaded with the core purpose, and every sentence adds value. It's concise without being under-specified, and the structure flows from general purpose to specific usage guidance.

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 tool's moderate complexity (3 optional params, 100% schema coverage, output schema present, and strong annotations), the description is complete. It covers the tool's purpose, usage context, and key behavioral nuance (short id resolution) without needing to explain return values since an output schema exists.

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 all three parameters thoroughly. The description adds minimal extra meaning beyond the schema, but it does reinforce the purpose of filtering by op and id. Baseline 3 is appropriate since the schema does the heavy lifting.

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 lists recent memory history events, with a specific verb ('List') and resource ('memory history events'). It distinguishes itself from siblings by mentioning audit trails and filtering by op and memory id, which is unique among the many memo_* tools.

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

Usage Guidelines5/5

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

The description explicitly says when to use it: 'Use for audit trails across the corpus or filter by op and memory id when investigating a specific write, update, delete, forget, or reindex action.' It also implies when not to use it (for searching content, use memo_search) and mentions safe short id resolution, providing clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_idle_captureA

Run idle capture on the current session.

Write tool. Extracts durable insights from the newest tracked session transcript and saves them as memo records. Use after a meaningful unit of work, or periodically for clients without Stop hooks. Do not use for normal lookup; call memo_search, memo_ask, or memo_unified_briefing when you only need to read existing memories. With dry_run=True, no memories are written and the response only reports what would run.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoPreview what would be saved without writing anything.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Description adds behavioral context beyond annotations: it is a write tool that saves to memo records, and dry_run prevents writing. No contradiction with annotations (destructiveHint=false, etc.). Minor gap: does not discuss rate limits or auth, but adequate given annotations.

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?

Efficient and front-loaded: first sentence states action and type ('Write tool'). Subsequent sentences provide usage guidance and dry_run behavior. No unnecessary information.

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?

Covers purpose, usage, and parameter behavior. Assumes knowledge of 'idle capture' and 'session transcript', but context signals indicate siblings and annotations. Has output schema, so return values are covered. Minor gap: prerequisites like session existence are implied but not explicit.

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% with a brief description for dry_run. The tool description adds meaning by explaining the effect of dry_run in context ('no memories are written and the response only reports what would run'), which is more explicit than the schema's 'Preview what would be saved without writing anything.'

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 'Run idle capture... Extracts durable insights... saves as memo records.' It distinguishes itself as a write tool, contrasting with sibling read tools like memo_search and memo_ask.

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

Usage Guidelines5/5

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

Explicitly states when to use ('after a meaningful unit of work, or periodically for clients without Stop hooks') and when not to use ('Do not use for normal lookup; call memo_search, memo_ask, or memo_unified_briefing'). Also explains dry_run mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_invalidateA
Destructive

Close one memory's truth-validity interval without deleting it.

Sets invalid_at in the record's frontmatter and index; the record itself is retained and stays readable.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoISO-8601 timestamp when the memory became invalid (naive values are treated as UTC); defaults to now.
idYesID of the memory whose validity to close; errors if not found.
reasonYesWhy the memory is no longer valid; sanitized and logged in the update history.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but description adds that the record is retained and readable, and that invalid_at is set in frontmatter and index. This context goes beyond the annotation to clarify non-destructive nature of the mutation.

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 fluff. Purpose is front-loaded. Every sentence adds necessary detail.

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 output schema exists and schema coverage is full, description adequately covers the tool's behavior, side effects, and parameter semantics.

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%, baseline 3. Description adds value by explaining the effect of parameters: 'at' defaults to now, 'reason' is sanitized and logged. This supplements the schema descriptions.

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 action: 'Close one memory's truth-validity interval without deleting it.' It uses a specific verb-resource pair and distinguishes from siblings like memo_delete by noting the record is retained.

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?

Implies usage as an alternative to deletion ('without deleting it') but provides no explicit guidance on when to choose this over related tools like memo_forget, memo_supersede, or memo_update. No 'when not to use' or comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_journal_verifyB
Read-onlyIdempotent

Verify every native operational hash chain.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare the tool as read-only and idempotent. The description adds that it performs verification, which is consistent. However, it doesn't disclose what happens during verification or potential outcomes.

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

Conciseness4/5

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

The description is extremely concise, one sentence. It front-loads the purpose but may be too terse for clarity. However, it contains no fluff.

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 tool has an output schema (not provided), the description could be larger. It lacks context about verification scope, process, or return values. Adequate but leaves gaps.

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 tool has no parameters, and schema coverage is 100%. While the description could explain why no parameters are needed, it's not required. Baseline 4 is appropriate.

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 'Verify every native operational hash chain' uses a specific verb ('verify') and resource, clearly distinguishing it from other memo tools. However, it could be more explicit about what 'native operational hash chain' means.

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?

The description provides no guidance on when to use this tool versus siblings or its prerequisites. No context about typical use cases or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_lintA
Read-onlyIdempotent

Inspect the memory corpus for maintenance issues.

Read-only. Returns grouped lint findings such as malformed metadata or other records that may need cleanup, capped at limit per category — the findings scale with the corpus and a whole report runs past any client's response budget. Use memo_update, memo_delete, or vault edits separately to fix findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoFindings to return per category. True per-category totals come back under `counts`.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavior beyond annotations: results are grouped, capped per category, scale with corpus size, and could exceed response budgets if not limited. This explains the limit parameter's rationale without contradicting annotations.

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?

Three sentences, each earning their place: purpose, return characteristics plus rationale, and usage guidance. No redundant phrasing or filler. Front-loaded with the core verb and resource.

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 an output schema exists, the description is complete for a read-only lint tool with one optional parameter. It covers what is returned (grouped findings), key constraints (limit, scaling, response budget), and the follow-up action (use other tools to fix). No important gaps remain.

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% for the single 'limit' parameter, which already explains its default and the 'counts' field. The description reinforces the cap behavior but adds little novel meaning 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.

Purpose5/5

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

The description uses a specific verb ('Inspect') and resource ('memory corpus') with a clear scope ('maintenance issues'). It distinguishes itself from siblings by focusing on audit/lint findings rather than retrieval, updates, or deletion, and explicitly names the categories of findings (malformed metadata, cleanup needs).

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

Usage Guidelines5/5

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

The description explicitly directs the agent to use memo_update, memo_delete, or vault edits separately to fix findings, making clear that this tool is for inspection only. This provides a strong usage guideline and differentiates it from mutation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_listA
Read-onlyIdempotent

List recent memories, optionally filtered by memory type.

Read-only. Use this to browse the corpus before choosing an id for memo_get, memo_update, memo_rename, memo_delete, or history tools. limit caps the number of returned records.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to one memory type (e.g. 'decision', 'fact'); None lists every type.
limitNoMaximum records to return, newest by `updated` first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds behavioral context: 'List recent memories' implying default sorting by recency, and 'Read-only' confirms the safety trait. No contradictions, and the description enriches understanding beyond annotations.

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?

Three sentences with every line earning its place: purpose, usage guidance, and parameter context. Front-loaded with the verb 'List' and resource. No filler or repetition.

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 tool's simplicity (2 optional params, full schema coverage, output schema present, and clear annotations), the description is complete. It explains the browsing workflow, the filtering behavior, and the limit cap, which is sufficient for the agent to use the tool 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 description coverage is 100%, so baseline is 3. The description mentions '`limit` caps the number of returned records' and 'optionally filtered by memory type', but these add no new meaning beyond what is already in the input schema descriptions. No value is added to parameter understanding.

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 lists recent memories with optional filtering by type, and explicitly differentiates it from other memo tools by positioning it as a browsing step before using get/update/delete/history tools. The verb 'List' combined with the resource 'memories' and scope is 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 Guidelines5/5

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

The description provides explicit guidance: 'Use this to browse the corpus before choosing an id for memo_get, memo_update, memo_rename, memo_delete, or history tools.' This tells the agent when to use this tool and what alternatives to use after, plus notes about the `limit` parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_mark_reviewedA
Idempotent

Record review evidence, verify the memory, and schedule its next review.

Replaying the latest still-current review with identical evidence and actor is a no-op, so retries are idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesID of the memory to mark as reviewed; errors if not found.
actorNoIdentifier of who performed the review, stored with the evidence.
evidenceNoFree-text evidence supporting the review; sanitized before being persisted with the review record.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already indicate idempotency (idempotentHint=true) and non-destructiveness (destructiveHint=false). The description adds valuable context by explaining that retries with identical evidence and actor are a no-op, which enhances transparency. It does not contradict any annotations.

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 extremely concise with only two sentences. The first sentence states the purpose, and the second addresses idempotency. Every sentence earns its place without any filler.

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 has three parameters, an output schema, and annotations, the description provides sufficient context: purpose, idempotency, and a note on evidence sanitization. It does not fully explain 'verify the memory' or 'schedule its next review', but these are likely detailed in the output schema or elsewhere, so completeness is adequate.

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 covers 100% of parameters with descriptions, so the baseline is 3. The description adds extra meaning by noting that evidence is sanitized before being persisted, which is not in the schema. This additional detail justifies a slightly higher score.

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 records review evidence, verifies the memory, and schedules the next review. It uses a specific verb ('Record') and resource ('review evidence'), making the purpose clear. However, it does not explicitly differentiate from sibling tools like 'memo_review_due' or 'memo_get'.

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 used when reviewing a memory, but it provides no explicit guidance on when to use it versus alternatives, nor does it mention any prerequisites or exclusions. The usage context is implied but not detailed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_offloadA
Idempotent

Offload a bulky payload (tool output, log, dump) out of the context window: memo stores it content-addressed as a reference-tier memory and returns {id, sha256, kind, synopsis, deduplicated, drill_down}.

Use memo_offload for bulk working-context dumps; use memo_save for curated durable facts meant to be recalled. Idempotent per payload: re-offloading identical content returns the existing id with deduplicated: true instead of writing a new memory.

The synopsis is deterministic (no LLM): JSON keys, CSV headers, code symbols, or compressed text. Reference tier is excluded from auto-recall, so offloaded blobs never appear in the recall hook. Fetch the full payload later with memo_get(id).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional label used as the stored memory's title and markdown heading; None auto-generates 'offload:<kind> <sha256[:12]>'.
contentYesRaw payload to store verbatim. Rejected when empty/whitespace-only or longer than the configured max_content_chars (MEMO_MAX_CONTENT_CHARS); identical content deduplicates by sha256 to the existing memory id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Discloses idempotent behavior (deduplication), deterministic synopsis, and that offloaded blobs are excluded from auto-recall. These add context beyond annotations (idempotentHint=true) and enhance behavioral understanding.

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 concise paragraphs with front-loaded purpose, clear structure. Every sentence adds meaningful information without redundancy.

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 output schema presence and rich annotations, the description fully covers behavior: what tool does, when to use, idempotency, output format (types of fields), and how to retrieve content later with memo_get.

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 already documents parameters with 100% coverage. Description adds value by explaining verbatim storage, rejection criteria for content, and auto-generation for title when null. Minor improvement over 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 tool's purpose: offloading bulky payloads out of the context window, content-addressed storage in reference-tier memory. It differentiates from memo_save by contrasting bulk dumps vs. curated durable facts.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('bulk working-context dumps') versus memo_save ('curated durable facts meant to be recalled'). Also explains idempotency and auto-recall exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_operational_stateA
Read-onlyIdempotent

Read current focus, handoffs, attention items, conflicts, and outcomes.

Read-only snapshot of the operational journal's current state. Returns only what is still open unless include_closed is set, and only the newest limit entries per section — open items awaiting human triage accumulate faster than they settle, so an unbounded snapshot eventually costs more context than the memories it describes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNewest items to return per section (conflicts, handoffs, attention, outcomes, signals). True totals come back under `counts`.
projectNoProject tag to scope the state to; None returns every project.
include_closedNoAlso return settled history: resolved conflicts, consumed handoffs, and acknowledged attention items. Off by default — that history only grows and can exceed the response budget.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering safety. The description adds valuable behavioral context: it returns only open items unless include_closed is set, enforces a per-section limit, and explains why unbounded snapshots accumulate context cost.

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 two sentences: a crisp summary of what is read, then a concise explanation of snapshot behavior, defaults, and cost rationale. No filler or redundancy; the key action is front-loaded.

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?

With a rich output schema and parameter descriptions, the description adequately captures the tool's scope without needing return-value details. Its prose list omits 'signals' (present in the schema's limit description), but this is minor and readily filled by the schema.

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?

Parameter schema coverage is 100%, with each parameter already documented (limit default 20, project scoping, include_closed false). The description references 'include_closed' and 'limit' but adds no new syntactic meaning; it reinforces the reason for the limit but does not expand on parameter semantics.

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 opens with 'Read current focus, handoffs, attention items, conflicts, and outcomes,' clearly specifying the action and resource. This distinguishes it from sibling mutation tools like memo_focus_set or memo_handoff_create, which modify those items rather than read them.

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 establishes a clear read-only snapshot use case and explains default behavior (open items only, limited entries) and the cost rationale. It does not explicitly name alternatives or state when not to use the tool, but the read-only nature and aggregate scope make the intended context obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_outcome_recordA
Idempotent

Record whether recalled memories helped a task succeed.

Feeds success/failure back into each cited memory's outcome stats — the signal behind procedure promotion. Idempotent per idempotency_key.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesOne of 'success', 'failure', 'partial'.
task_idYesStable identifier of the task whose outcome is recorded.
actor_idNoIdentifier of the reporting agent (journaled).memo
artifactsNoOptional URIs or paths of artifacts the task produced.
memory_idsYesIds of the memories that were recalled or used for the task.
idempotency_keyYesCaller-chosen key that makes retries safe: the same key replays the stored outcome instead of double-counting; reusing it with a different payload is rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare idempotentHint=true, and the description elaborates on the mechanism: 'Idempotent per idempotency_key,' explaining that retries replay the stored outcome and reusing the key with a different payload is rejected. This adds useful detail beyond the annotation, though no other behavioral traits (e.g., side effects beyond stat updates) are disclosed.

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 two sentences, front-loaded with the core action and followed by key context. Every sentence adds value, and there is no wasted text.

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 has 6 parameters (4 required) and an output schema exists, the description covers the essential purpose and idempotency. The mention of procedure promotion provides necessary context. It does not explain the output, but the schema covers that. Overall, it is sufficiently complete.

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 each parameter already has a description. The description only adds context about idempotency_key's role in safety, but does not elaborate on other parameters like actor_id or artifacts. Thus, it adds marginal semantic value 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 action ('record') and the resource ('whether recalled memories helped a task succeed'). It distinguishes itself from sibling tools by explicitly mentioning its role as the signal for procedure promotion, setting it apart from related tools like memo_procedure_promote.

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 usage after recalling memories for a task, stating it 'feeds success/failure back into each cited memory's outcome stats.' While it does not explicitly list when not to use it, the context is clear. It would benefit from an explicit note that this is for outcome tracking, not for initial memory creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_pop_notificationA
Destructive

Read and dismiss pending idle-capture notification.

Destructive only for the notification queue: returns the pending idle-capture message, then removes that transient notification so it is not shown twice. It never deletes memories or session transcripts. Use after memo_idle_capture or before replying to surface auto-saved insights; use memo_search or memo_list to read durable memory records.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Discloses beyond annotations: confirms destructive only to the notification queue, never deletes memories or transcripts, and explains the pop-and-remove behavior.

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

Conciseness4/5

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

Well-structured with a clear first sentence, but slightly verbose with three sentences; could be trimmed slightly without losing clarity.

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 no parameters and annotations present, the description fully explains behavior, return value, and usage context; output schema exists so return details are not needed.

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?

No parameters, and schema coverage is 100%. The description adds context that the tool operates on the pending notification implicitly, meeting the baseline for zero params.

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 reads and dismisses a pending idle-capture notification, differentiating it from siblings like memo_search and memo_list for reading durable records.

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

Usage Guidelines5/5

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

Explicitly states when to use (after memo_idle_capture or before replying) and when not to use (for reading durable memory records, use memo_search or memo_list).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_procedure_candidatesA
Read-onlyIdempotent

List outcome-backed memories ready for procedural promotion.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum candidates returned (clamped to 1-500).
min_utilityNoMinimum outcome utility score, clamped to 0-1.
min_successesNoMinimum successful outcomes a memory needs (floor 1).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate read-only and idempotent behavior. The description adds context about the specific subset of memories returned, but no additional behavioral traits (e.g., pagination, auth requirements) beyond annotations.

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, lean sentence with no wasted words. It is front-loaded with the key action and criteria.

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 output schema exists and annotations cover safety, the description sufficiently explains the tool's purpose. It is complete for a simple filtered-list tool with no hidden complexity.

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 parameters are well-documented. The description does not add any parameter-level details beyond what the schema provides, meeting the baseline for full 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 function: listing memories that are 'outcome-backed' and 'ready for procedural promotion'. It uses specific verbs and resource, and distinguishes itself from siblings like memo_list (generic list) and memo_procedure_promote (promotion action).

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?

No explicit guidance on when to use this tool versus alternatives. The naming and sibling list imply that it is a precursor to memo_procedure_promote, but the description does not state this or provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_procedure_promoteA

Promote grounded memories into a reusable procedure/failure pattern.

Creates a new durable memory citing the sources; rejects sources whose outcome stats don't meet the kind threshold.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo'procedure' (needs >=2 successes and utility >=0.75 per source) or 'failure_pattern' (needs >=2 failures at >=50% failure rate).procedure
titleYesTitle of the new procedure or failure-pattern memory.
reasonNoProvenance note recorded with the promotion.outcome-backed promotion
contentNoExplicit body for the new memory; None concatenates the source bodies.
actor_idNoIdentifier of the promoting agent (journaled).memo
memory_idsYesSource memories with recorded outcome evidence; every id must exist and qualify.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations provide no safety profile (all false). Description adds that it creates a durable memory and rejects sources not meeting thresholds, but does not disclose other side effects like whether source memories are modified or deleted. More behavioral context would be helpful.

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

Conciseness4/5

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

Two concise sentences. First states purpose, second adds rejection detail. No wasted words, but could be slightly more structured with bullet points.

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?

With 6 parameters and an output schema (not shown), the description does not explain return value or effect on source memories. It says 'creates a new durable memory' but not whether sources remain unchanged. Adequate but not complete.

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?

Input schema covers 100% of parameters with descriptions. Tool description adds little beyond schema (e.g., repeats threshold condition for 'kind'). Schema does the heavy lifting, so 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?

Description clearly states the action: 'Promote grounded memories into a reusable procedure/failure pattern.' It uses specific verb and resource, and distinguishes from siblings like memo_procedure_candidates which likely lists candidates rather than creating the promotion.

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 mentions that sources must meet thresholds based on 'kind', but does not explicitly state when to use this tool vs alternatives (e.g., memo_procedure_candidates, memo_outcome_record). No guidance on 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.

memo_profileA
Read-onlyIdempotent

Return bounded stable and active memory with evidence metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory used to resolve the current project (git toplevel) so the project-specific profile document is included in the stable section. Defaults to the server process's working directory.
limitNoMaximum recent memory records in the 'active' section (clamped to 0-50; forgotten records are excluded).
scopeNoDescriptive label echoed into the payload: one of 'current', 'user', 'project', 'agent' (anything else returns a memo.error.v1 invalid_scope envelope). Does not filter or authorize — content selection stays governed by Memo's profile files and record provenance.current
sourceNoCaller identity recorded in the recall consult log. Empty string falls back to the MEMO_SOURCE env var, then the MCP client's declared clientInfo name.
budget_charsNoCharacter budget for the 'stable' profile text (clamped to 256-12000). Longer text is truncated with a trailing ellipsis and an entry in 'omissions'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds that results are bounded by budget_chars and include stable/active sections with evidence metadata, providing useful behavioral nuance beyond annotations.

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

Conciseness4/5

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

Description is a single sentence that conveys the core function efficiently. However, it uses jargon ('bounded stable and active memory') that may require prior context; a slightly more structured breakdown could improve clarity.

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 presence of an output schema and detailed parameter descriptions, the description is mostly complete. However, it does not explain what 'stable' vs 'active' memory means or how evidence metadata is structured, which could be ambiguous for an agent.

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%; each parameter is well-documented in the schema. The description does not add additional meaning beyond what is already in the schema, so a baseline score of 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?

Description clearly states it returns bounded stable and active memory with evidence metadata. This is specific to the tool's function and distinguishes it from siblings like memo_search (search) and memo_context (context retrieval).

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 guidance on when to use this tool versus alternatives such as memo_context or memo_unified_briefing. No indication of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_provenanceA
Read-onlyIdempotent

Return provenance metadata for one memory.

Read-only. Use with a full id or unique prefix when you need origin, lineage, file path, or related audit details for a record before trusting, editing, or citing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory id to trace: full 32-char hex id or a unique short prefix (git-style). Unknown ids return null.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds value by detailing the type of metadata returned and noting that unknown ids return null, which is consistent with annotations.

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: first clearly states purpose, second provides usage context and specifics. Every word is valuable; no redundancy or filler.

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 output schema exists, the description sufficiently covers what the tool does, when to use it, and what it returns (provenance metadata). It addresses the key use case without missing critical details.

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?

The schema description for the 'id' parameter is already detailed (full 32-char hex or unique prefix, git-style, returns null for unknown). The description repeats this without adding meaningful new information, so baseline 3 is appropriate.

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 returns provenance metadata for a memory, specifying the kinds of information (origin, lineage, file path, audit details). It mentions usage before trusting, editing, or citing, but could more explicitly distinguish from similar tools like memo_get or memo_history.

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?

Provides clear guidance on when to use: with a full id or unique prefix when needing audit details before trusting, editing, or citing. This sets context, though it doesn't explicitly mention when not to use or offer direct sibling comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_record_diffA
Read-onlyIdempotent

Return recent history events for one memory in chronological order.

Read-only. Use to inspect how a memory changed over time before editing or rolling back. Accepts a full id or unique prefix; limit caps returned events and has_more reports truncation.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory id: full 32-char hex id or a unique short prefix. Ids shorter than 32 chars are prefix-resolved; an ambiguous prefix returns an error payload listing the matching ids.
limitNoMaximum history events to return, clamped to 1..500. The newest `limit` events are fetched and returned oldest-first; `has_more` is true when the record has at least `limit` events.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive, but the description adds valuable behavioral context beyond that: it specifies chronological ordering, supports full id or unique prefix (with prefix resolution), and explains that `limit` caps events while `has_more` reports truncation. This enriches the agent's understanding of how the tool behaves without contradicting annotations.

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, front-loaded with the primary action, and every sentence adds value. It avoids redundancy, is concise, and is well-structured for quick parsing by an agent.

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 tool has only 2 parameters (both documented) and an output schema exists, the description is fully sufficient. It covers purpose, usage context, behavioral details, and parameter semantics. No additional information is needed for an agent to select and invoke this tool 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 description coverage is 100%, so the schema already fully documents both parameters. The description repeats some of this (e.g., prefix resolution, limit capping) but adds the semantic note about `has_more` reporting truncation, which is a minor addition. Since the schema carries the heavy lifting, 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 starts with a specific verb and resource: 'Return recent history events for one memory in chronological order.' This clearly states what the tool does and differentiates it from sibling tools like memo_history (which likely covers broader history) by focusing on per-memory change inspection.

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 gives clear usage context: 'Use to inspect how a memory changed over time before editing or rolling back.' This tells the agent when to invoke this tool. However, it does not explicitly mention when not to use it or name alternative tools, so it misses the 'when-not/alternatives' element 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.

memo_reindexA
Idempotent

Rebuild memo's searchable index from the markdown vault.

Writes only derived index state; markdown remains the source of truth. Use after hand-editing vault files or changing indexing behavior. force reprocesses records even if memo thinks they are current.

errors counts files that FAILED to index (parse error, embed failure, refused path) — a subset of skipped, which also counts deliberate skips (archives, chronicle, secrets). A non-zero errors means the index is incomplete: fix the cause and re-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoWhen true, re-embed every indexed entry even when the on-disk body is unchanged (e.g. after an embedder model swap).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare idempotentHint=true and destructiveHint=false. The description adds critical context: 'Writes only derived index state; markdown remains the source of truth.' It also explains the difference between errors (failures) and skipped (deliberate skips), which is important for understanding the tool's behavior. This goes beyond annotations without contradicting them.

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 concise (three short paragraphs) and front-loaded with the primary purpose. Each sentence serves a purpose: the action, the non-destructive nature, usage context, force explanation, and error semantics. No fluff or redundancy.

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?

The description covers all essential behavioral aspects: what it does, when to use it, the force parameter, and the error/skip distinction. An output schema exists (as noted in context signals), so return details are likely covered there. For a tool with moderate complexity, this is complete enough; could mention potential side effects (e.g., performance) but not necessary.

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?

The single parameter 'force' is fully described in the schema with its purpose and example ('e.g. after an embedder model swap'). The description's additional note '`force` reprocesses records even if memo thinks they are current' adds minimal extra meaning beyond the schema's coverage (100%). Baseline 3 is appropriate as the schema handles the semantics well.

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 action: 'Rebuild memo's searchable index from the markdown vault.' This is a specific verb (rebuild) with a clear resource (searchable index) and source (markdown vault). It distinguishes from sibling tools like memo_search (which searches) and memo_lint (which checks), making it clear this is about rebuilding the index.

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 provides explicit when-to-use context: 'Use after hand-editing vault files or changing indexing behavior.' It also clarifies the force flag and error interpretation. While it doesn't name alternatives or explicitly state when not to use it, the context is clear and sufficient for an agent to decide when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_renameA
Destructive

Rename one memory title without changing its body or tags.

Destructive metadata edit. Use after memo_save or memo_search when a record has the right content but the wrong title. Pass id for a specific memory; omit it only immediately after a save, when memo can target the most recent local save. Use memo_update instead when you need to edit content, type, or tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoId or unique prefix of the memory to rename; when omitted, targets the most recent save made on this device.
titleYesNew title for the memory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark destructiveHint=true; the description reinforces 'Destructive metadata edit' and adds context on behavior of omitted id (targets most recent save). No contradictions.

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?

Every sentence serves a purpose: first states action and scope, second flags destructive nature, third gives use case and parameter advice. No wasted words.

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 annotations and output schema, the description covers purpose, usage, parameters, and behavioral traits comprehensively for a simple rename operation.

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% with descriptions for both parameters; the description adds practical nuance about when to omit id (only after a save). This justifies a score above baseline 3.

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 'rename' and the resource 'memory title', and explicitly distinguishes from siblings by noting 'without changing its body or tags' and referencing memo_update for editing other fields.

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

Usage Guidelines5/5

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

Provides explicit when-to-use context ('after memo_save or memo_search when a record has the right content but the wrong title') and when-not-to-use ('Use memo_update instead when you need to edit content, type, or tags').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_rerankA
Read-onlyIdempotent

Rerank candidate memory hits for a query.

Read-only. Performs no retrieval of its own (unlike memo_search) — it only reorders caller-supplied hit dictionaries, e.g. after memo_search or another retrieval source, when you need the most relevant subset ordered for answer synthesis. When reranking is disabled in this install, hits pass through in input order without scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
hitsYesCandidate hit dicts (e.g. from memo_search); each is scored on its title plus snippet/body and returned with a 'rerank_score' field added. Non-dict entries are dropped.
queryYesQuery text the cross-encoder scores each hit against; empty returns the hits unchanged.
top_nNoKeep only the N best hits after reranking; None or a non-positive value returns all.
body_charsNoCharacter cap of each hit's snippet/body fed to the reranker.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true and idempotentHint=true; description confirms read-only and adds behavioral details: no retrieval, adds 'rerank_score' field, drops non-dict entries, and handles disabled state gracefully. No contradiction with annotations.

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?

Three concise sentences front-load the purpose and key differentiator, then cover usage and edge case. No filler; every sentence earns its place.

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 output schema exists, description need not detail return values. It covers purpose, usage, behavior (including disabled state and score addition), and interaction with parameters. Annotations and schema complement fully.

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 covers 100% of parameters with descriptions. Description adds extra meaning for hits (scored on title/snippet/body, adds rerank_score, drops non-dicts) and query (empty returns unchanged). This adds value beyond schema, justifying above baseline 3.

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 starts with 'Rerank candidate memory hits for a query', specifying a clear verb and resource. It distinguishes from sibling memo_search by stating it performs no retrieval of its own, making its unique purpose explicit.

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

Usage Guidelines5/5

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

Explicitly tells when to use: after memo_search or another retrieval source, for answer synthesis. Also mentions an alternative (memo_search) and explains behavior when reranking is disabled, giving clear usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_review_dueA
Read-onlyIdempotent

List records whose explicit review date passed or have an open conflict.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum records to return (clamped to 1-200). Records with an open conflict sort first, then by earliest review date.
projectNoProject name to filter by (matched against its slugified project namespace); omit to list all projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare read-only and idempotent behavior; the description adds filtering conditions but omits details like default sorting (covered in schema) or record scope (e.g., excludes deleted records).

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?

Single sentence, 10 words, no redundancy – highly concise and front-loaded.

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?

Covers the essential purpose and conditions; output schema likely documents return values; slight omission of ordering or pagination details, but overall adequate.

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 covers all parameters with descriptions (100% coverage); the tool description adds no further meaning 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?

Clearly states the tool lists records with specific conditions (passed review date or open conflict), distinguishing it from generic list/search tools among siblings.

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 memo_list or memo_search; the description only implies its purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_saveA

Persist content to memo.

Use memo_save for a durable curated fact, decision, or preference; use memo_offload for bulk dumps of working context.

When extract is true (defaults to the MEMO_SAVE_EXTRACT flag, off), the helper LLM decomposes content into atomic facts and saves each as its own memory (mem0 ADD-model) instead of one opaque blob; tags propagate to every fact. Returns an extraction summary (status, saved ids, saved_titles, counts) rather than a single record. If nothing extractable is found, the blob is saved verbatim. Normal saves add action (created, corroborated, or revised) and index_pending so callers can distinguish evidence from a new record.

scope controls the auto project:<repo> tag for THIS call only: "global" skips it (the memory lands untagged → the global recall tier, +0.10 boost everywhere); "project" or None keep the default auto-detection. An explicit project: tag in tags always wins either way.

defer_embed mirrors CLI memo save --defer-embed: it persists markdown + BM25 immediately and marks the semantic vector pending for memo_reindex. Extraction mode ignores it, matching the CLI.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags to attach; lower-cased and de-duplicated.
typeNoMemory type. One of: decision, fact, bug, feedback, preference, note, manual, synthesis, procedure, failure_pattern, reference, temp.note
extraNoArbitrary JSON metadata bag stored with the record. Authority-controlled keys (write_policy, visibility, trust_tier, ...) are stripped.
scopeNo'global' skips the auto project:<repo> tag (global recall tier); 'project' or None keep auto-detection. Other values are rejected.
titleNoOptional title; when omitted it is derived from the first line of content.
contentYesMarkdown body to persist. Must be non-empty.
extractNoDecompose content into atomic facts saved individually; None defers to the MEMO_SAVE_EXTRACT flag (off by default).
auto_deriveNoWhen true, a helper LLM fills missing metadata (title/type/tags); adds ~0.5-2s per save.
defer_embedNoPersist markdown and the text index immediately, but leave the semantic vector pending for a later memo_reindex call.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations only carry readOnlyHint=false and destructiveHint=false (no strong assertions), so the description must disclose behavior, which it does thoroughly. It explains the extraction mode's return shape (extraction summary vs single record), the tag propagation to every fact, the fallback 'blob saved verbatim' behavior, the auto project:<repo> tagging logic including the global recall tier boost, and the authority-controlled key stripping in `extra`. This is rich behavioral context well beyond minimal requirements.

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

Conciseness4/5

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

The description is organized into clear topically-paragraphed blocks (purpose, extraction mode, scope, defer_embed), each earning its place. It is long but every paragraph addresses a distinct behavioral aspect necessary for correct usage. Shorter than the length would suggest given 9 parameters and several conditional behaviors it must explain.

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 9 parameters, an output schema exists (which presumably documents the extraction summary shape), and no strong annotations to lean on, the description fully compensates. It covers the two major sub-modes (extract vs normal), the scope/recall-tier mechanics, the defer_embed flow, cross-references memo_reindex, and notes CLI parity. For a tool this complex, this is complete.

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 baseline is 3. The description adds meaningful value by explaining the interaction semantics between parameters: extract's decomposition behavior, scope's 'global'/None distinction and the project tag precedence ('An explicit project: tag in tags always wins'), and defer_embed's mirroring of the CLI flag with the extraction-mode exception. Parameters like title/type/auto_derive are adequately covered by schema alone.

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 ('Persist `content` to memo') and resource, and explicitly distinguishes memo_save from memo_offload ('durable curated fact, decision, or preference' vs 'bulk dumps of working context'). The scope of what gets saved is precise and it differentiates from the closest sibling.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use memo_save for a durable curated fact, decision, or preference; use memo_offload for bulk dumps of working context.' It also explains mode-specific behaviors (extract vs normal) and how scope/auto_derive/defer_embed each alter behavior, giving the agent clear conditional decision-making guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_save_textA

Save a memory from text.

Write tool. Persists one plain note from text and returns the saved memory id. Use for quick client-agnostic saves when you already have the exact content to remember. Prefer memo_save when you need tags, type, extraction, conflict handling options, or project/global scope. Prefer memo_idle_capture for transcript-derived session insights. title is optional; when omitted memo uses the first text line.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe content to save as a memory.
titleNoOptional title (auto-generated from first line if not provided).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations (readOnlyHint=false) already indicate write operation. Description adds that it 'returns the saved memory id' and title is optional, providing useful behavioral context beyond annotations.

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?

Concise with front-loaded purpose 'Save a memory from text.' followed by clear details. Every sentence adds value with no redundancy.

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?

With 2 params, high schema coverage, and presence of output schema, description explains purpose, return value, and parameter behavior adequately. Could mention that it's a simple save without conflict handling, but that is already implied by comparison with memo_save.

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 baseline is 3. Description adds that title is optional and auto-generated from first line, but this info is also in the schema description. No significant additional meaning 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?

Description clearly states 'Save a memory from text' and 'Persists one plain note from text and returns the saved memory id.' It distinguishes from siblings by explicitly mentioning memo_save for more options and memo_idle_capture for transcripts.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool: 'Use for quick client-agnostic saves when you already have the exact content to remember.' Also provides alternatives: 'Prefer memo_save when you need tags... Prefer memo_idle_capture for transcript-derived session insights.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_search_traceA
Read-onlyIdempotent

Search memories and include retrieval trace diagnostics.

Read-only. Debug variant of memo_search: use it when investigating ranking, filters, or recall misses rather than for normal lookup. Returns the same style of hits as memo_search plus trace metadata that explains how candidates were selected and scored at each stage.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoRetrieval mode: 'hybrid' (RRF fusion of vector + BM25, default), 'vec' (semantic only), 'bm25' (keyword FTS5), 'exact' (strict-AND keyword with tag/title boost), or 'fuzzy' (typo-tolerant keyword). Unrecognized values behave as 'hybrid'.hybrid
typeNoRestrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type.
limitNoMaximum hits to return (clamped to 1-500).
queryYesSearch text; empty or whitespace-only returns no hits.
sourceNoCalling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info.
body_charsNoCharacter cap per hit body; longer bodies are truncated with body_truncated=true. Negative disables truncation.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already convey readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's job is lighter. It adds valuable context: 'Read-only. Debug variant... Returns the same style of hits as memo_search plus trace metadata that explains how candidates were selected and scored at each stage.' This enhances transparency without contradicting annotations.

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 two sentences long, front-loaded with the core purpose, and each sentence adds value. There is no fluff or redundancy. It is appropriately sized for a targeted debug tool variant.

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 tool's complexity (6 parameters with 100% schema coverage, output schema present, and a clear sibling relationship), the description is complete. It explains the purpose, usage context, and what distinguishes the output. No critical information is missing.

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 baseline is 3. The description does not elaborate on individual parameters beyond what the schema provides; it only mentions the output (trace metadata). No additional parameter semantics are added, so the score remains at 3.

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 starts with 'Search memories and include retrieval trace diagnostics,' specifying the verb (search) and resource (memories) with a clear differentiator (trace diagnostics). It also explicitly distinguishes from the sibling tool memo_search by calling itself a 'debug variant' and stating its specialized use case.

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

Usage Guidelines5/5

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

The description gives explicit guidance: 'use it when investigating ranking, filters, or recall misses rather than for normal lookup.' This directly tells the agent when to choose this tool over memo_search, satisfying the dimension's requirement for context and exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_session_getA
Read-onlyIdempotent

Fetch metadata for one tracked memo session.

Read-only. Use after memo_session_list or memo_start_session when you need the stored transcript path, project, checkpoints, or other session details. Returns None when the session id is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesFull session id or a prefix of at least 4 characters. On a prefix tie the first match wins; unknown or too-short ids return null.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds that the tool returns None for unknown session IDs, which is behavioral context not captured in annotations. The description also states 'Read-only', confirming the safety profile.

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, front-loaded with the purpose, followed by a concise usage directive. No extraneous information; 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 presence of an output schema and 100% schema coverage, the description adequately covers the tool's purpose, usage context, and return behavior for unknown IDs. No gaps are evident.

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%, with the parameter description explaining prefix matching and null returns. The main tool description does not add new information about the parameter beyond what the schema provides, so baseline score applies.

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 fetches metadata for one memo session. It specifies the resource ('tracked memo session') and the action ('Fetch metadata'), and distinguishes from siblings by mentioning when to use it (after memo_session_list or memo_start_session).

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 provides explicit usage context: 'Use after memo_session_list or memo_start_session when you need the stored transcript path, project, checkpoints, or other session details.' It does not list explicit when-not-to-use scenarios, but the guidance is clear and helpful for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_session_listA
Read-onlyIdempotent

List tracked memo sessions.

Read-only. Use to find recent session ids, transcript paths, and project context for capture or inspection. project narrows results and limit caps the number of sessions returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum sessions to return, sorted by most recently updated first. Clamped to 1..200.
projectNoExact project-name filter (the working-directory basename recorded on the session, e.g. the repo folder name). Omit to list sessions from all projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds 'Read-only' and positions the tool for inspection, but this largely restates the annotation rather than adding new behavioral context.

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 short, front-loaded with the core action, and every sentence serves a purpose: purpose, read-only nature, use case, and parameter scoping. There is no unnecessary elaboration.

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 read-only listing tool, this description is complete: annotations cover safety, the schema covers both parameters, and an output schema is present. The description communicates enough for an agent to select and call the tool 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?

Input schema coverage is 100%, with both `limit` and `project` already described in detail. The description only restates that `project` narrows results and `limit` caps the count, adding no meaningful parameter meaning 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 opens with 'List tracked memo sessions,' a specific verb-plus-resource statement, and clarifies it returns 'session ids, transcript paths, and project context.' This clearly distinguishes it from the various search/retrieval sibling tools.

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 says when to use it ('to find recent session ids, transcript paths, and project context for capture or inspection') and how to narrow results with `project` and `limit`. It does not explicitly name alternatives or say when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_signal_listB
Read-onlyIdempotent

List durable watcher markers, newest epoch first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of markers.
markerNoFilter to one marker.
min_epochNoReturn signals at or above this epoch.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which fully covers the safety profile of this read-only list operation. The description adds the ordering behavior ('newest epoch first'), which is useful, though it doesn't disclose pagination behavior, output size expectations, or whether this returns signals the agent itself created.

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 declarative sentence that fully communicates the purpose and ordering behavior. There is zero wasted content, and the most important information (what it lists and the sort order) is front-loaded in the first few 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?

The tool has an output schema (context signal), 100% param coverage in the schema, and comprehensive annotations. For a simple read-only list operation with all parameters documented and an output schema present, the description covers the essential purpose. The main gap is lack of usage differentiation, but the operation is simple enough that this is a minor omission rather than a critical one.

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 all three parameters (limit, marker, min_epoch) are documented in the schema with descriptions. The description adds no additional semantic value beyond the schema, which sets the baseline at 3. The schema descriptions themselves are adequate but not enriched by the tool description.

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 uses a specific verb+resource combo ('List durable watcher markers') with an ordering note ('newest epoch first'), which clearly identifies the action and result. It doesn't explicitly distinguish from siblings, but the 'markers' resource is reasonably unique among the sibling list tools (memo_terminal_list, memo_list, etc.), and its uniqueness is partially evident from the name itself.

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?

There is no guidance on when to use this tool vs alternatives like memo_signal_remember or memo_terminal_list. The description states 'durable watcher markers' but doesn't explain what these markers represent, when an agent should query them, or situations where another tool (e.g., memo_list or memo_stats) would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_signal_rememberC
Idempotent

Remember a durable, idempotent operational watcher marker.

ParametersJSON Schema
NameRequiredDescriptionDefault
epochNoMonotonic watcher epoch; stale epochs are rejected.
fenceNoOptional leadership fence token.
markerYesStable idempotency marker for the watcher signal.
payloadNoStructured signal payload.
actor_idNoAgent writing the signal.memo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior3/5

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

Annotations provide some coverage: idempotentHint=true aligns with the 'idempotent' trait in the description, and destructiveHint=false suggests a safe write. The description adds 'durable' and mention of epoch/fence semantics are NOT in the description. However, with idempotentHint already in annotations, the description adds modest context by describing the write as idempotent, but largely restates annotation info rather than revealing behavior like return semantics or what 'stale epochs rejected' means for the caller.

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

Conciseness4/5

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

One concise sentence, no filler or fluff. Accurate for its limited scope, though it sacrifices explanatory depth for brevity. The sentence earns its place but doesn't add behavioral richness.

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?

This is a write operation with no annotations on error conditions, side effects, or return value. While an output schema exists and parameters are covered, the description doesn't clarify the semantic model of a 'watcher' or how this differs from related tools (memo_signal_list, memo_state). The term 'operational watcher' is unexplained domain jargon that the description assumes the reader knows.

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 documents all 5 parameters with reasonable descriptions (epoch as monotonic watcher with stale rejected, fence as leadership token, marker as stable idempotency key, etc.). The description adds minimal parameter insight beyond the schema; the only added semantic is that 'marker' serves as a 'stable idempotency marker,' which partially overlaps with the schema. Baseline 3 is correct given full schema coverage.

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

Purpose3/5

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

The description states it remembers a 'durable, idempotent operational watcher marker,' which names the resource (marker) and some traits (durable, idempotent) but uses jargon-heavy terms ('operational watcher marker') that are ambiguous without further context. It doesn't clearly distinguish this from the many sibling memo_* tools like memo_signal_list or memo_state, nor explain what a 'watcher' is in this domain.

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 when-to-use vs alternatives guidance is given in the description. The name and sibling list suggest this is related to signal management (memo_signal_list exists), but nothing states when to prefer this over memo_signal_list or other tools. 'Operational watcher marker' implies a niche use case but the description provides no context on triggers or scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_start_sessionA

Start a new session for this client.

Write tool. Creates or refreshes a tracked session checkpoint used by capture, grounding, and transcript lookup. Call once at the beginning of a task or conversation. Pass session_id to continue a known session; omit it to create one. Pass cwd to bind the session to a project directory; omit it to use the current process directory. Do not use this to save memories directly; call memo_save or memo_save_text for durable content.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoCurrent working directory (defaults to current directory).
session_idNoOptional session ID (auto-generated if not provided).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations show readOnlyHint=false, confirming it's a write operation. The description adds that it creates or refreshes a tracked session checkpoint. It does not elaborate on side effects like whether calling it multiple times is safe or has cumulative effects, but it provides sufficient context given the annotations are minimal.

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 concise at 4 sentences, well-structured with clear intent, usage, parameter guidance, and a caution against misuse. Every sentence adds value, and the structure is front-loaded with the core purpose.

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 output schema exists (context indicates 'Has output schema: true'), the description does not need to explain return values. It covers purpose, usage, parameter semantics, and differentiation from sibling tools. For a session start tool, this is 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% with descriptions. The description adds behavioral context beyond the schema: 'Pass session_id to continue a known session; omit it to create one. Pass cwd to bind the session to a project directory; omit it to use the current process directory.' This provides practical guidance not captured in the schema alone.

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 starts a new session for the client. It specifies it's a write tool that creates or refreshes a session checkpoint used by capture, grounding, and transcript lookup. It distinguishes itself from memo_save and memo_save_text by clarifying it is not for saving memories.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: 'Call once at the beginning of a task or conversation.' It explains when to pass session_id (to continue a known session) vs omit (to create a new one), and when to pass cwd (to bind to a project). It also explicitly states when not to use the tool and directs to alternatives (memo_save/memo_save_text for durable content).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_statsA
Read-onlyIdempotent

Return local memo corpus and runtime statistics.

Read-only. Use for diagnostics, health checks, and environment inspection. Includes corpus count, storage paths, embedder model, history error count, and recall daemon health when available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. Description adds value by listing specific statistics (corpus count, storage paths, etc.) and explicitly stating 'Read-only', reinforcing the safe behavior.

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 concise sentences with no wasted words. The most critical information (purpose and usage) is front-loaded.

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 presence of an output schema, the description provides sufficient context by listing example statistics and noting 'when available'. The no-parameter tool with clear annotations is fully described.

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

Parameters5/5

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

No parameters, so the description does not need to add parameter info. It explains what the tool returns, which fully compensates for the absence of 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?

Description uses clear verb 'Return' and specific resource 'local memo corpus and runtime statistics'. It distinguishes itself from sibling tools by focusing on diagnostics and health checks, and enumerates the included fields.

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 states 'Use for diagnostics, health checks, and environment inspection', providing clear context. No direct alternatives mentioned, but the purpose is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_supersedeA
Destructive

Close the old memory at the successor's validity start.

Only the old record is modified; the close time never precedes the old record's own validity start.

ParametersJSON Schema
NameRequiredDescriptionDefault
new_idYesID of the successor memory; the old memory is closed at this record's validity start (or creation time). Errors if not found.
old_idYesID of the memory being superseded; its validity interval is closed. Must differ from new_id; errors if not found.
reasonYesWhy the successor replaces the old memory; logged as 'superseded by <new_id>: <reason>' in the update history.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true. The description adds valuable context: 'Only the old record is modified' clarifies the scope of destruction, and the constraint on close time prevents confusion. This goes beyond annotations without contradicting them.

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 extremely concise—two sentences, no filler, and perfectly front-loaded. Every word adds value.

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?

The description explains the core behavior and constraints. With an output schema present, return format is not needed. However, it omits details like the effect on the new record, side effects, or ordering requirements. Minor gap, but generally sufficient.

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% with clear descriptions for all three parameters. The description does not add any additional parameter-level detail beyond what the schema provides. Baseline score of 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 action ('Close the old memory') and the specific condition ('at the successor's validity start'). It identifies the resource (memory) and implicitly distinguishes from other memo tools by describing a unique supersede operation. No ambiguity.

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?

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It simply describes the operation without contextual hints about use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_terminal_listA
Read-onlyIdempotent

List deliverable terminals; empty while legacy TTY input is disabled.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral context: that the result is conditional on legacy TTY input being enabled ('empty while legacy TTY input is disabled'), which is exactly the kind of behavioral quirk an agent needs to know. This adds value beyond the annotations.

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

Conciseness4/5

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

A single, short sentence delivers the purpose plus a critical conditional caveat. There's some ambiguity in the phrase 'empty while legacy TTY input is disabled' that could be clearer, but no wasted words are present. It's economically written and front-loaded with the verb and resource.

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?

The output schema exists, so return values need not be described. The description flags the key caveat (empty when legacy TTY disabled) which is the main behavioral context an agent needs. For a zero-parameter read tool with annotations fully covering the safety profile, the description is sufficiently complete.

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 tool has 0 parameters and 100% schema coverage (as nothing exists to document). The description adds no parameter information since there are none. With no parameters, the baseline is 4 per the rubric, and the description's note about the legacy TTY state effectively explains the tool's input-free nature as a state readout.

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 names a specific resource ('deliverable terminals') with the verb 'list', making the purpose clear. It doesn't explicitly distinguish from siblings, but the term 'deliverable terminals' is a distinct concept among the many memo_* tools, and the description differentiates by noting it returns 'deliverable' terminals specifically, which is narrowly scoped enough.

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 alludes to when it's useful via 'empty while legacy TTY input is disabled', implying this tool reflects legacy terminal state. However, it doesn't explicitly state when to use this tool versus alternatives like memo_get or memo_list, and offers no explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_tool_docsA
Read-onlyIdempotent

Look up a tool's live description and parameter schema by name.

Use this when a tool you expect (from a prior session, or from documentation) is missing from your current tool list: memo's proxy prunes schemas of recently-unused tools from context to save tokens — memo's own tools stay registered and callable regardless; other servers' tools are still reachable exactly as they were before pruning. Call this with the tool's name to get back what its full schema would have shown, then call the tool directly by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe tool name, e.g. "memo_graph" or "mcp__octocode__localSearchCode".

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds meaningful context beyond annotations by explaining that memo's proxy prunes schemas of recently-unused tools, that memo's own tools remain callable, and that other servers' tools are still reachable. This is valuable behavioral context for understanding why a tool might be absent.

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 compact yet information-dense: purpose, use case, background, and follow-up action are all covered in three sentences. Every sentence earns its place, and the primary purpose is front-loaded in the first sentence. No filler or redundant restatement of the tool name exists.

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?

The description fully explains why this tool exists, when to invoke it, what to pass, and what to do after receiving the result. An output schema is present, so return value details are already structured. The description also addresses the subtle scenario of pruned schemas, which is essential context for an agent encountering a missing tool.

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%, and the schema already documents the 'name' parameter with concrete examples. The description restates that the tool is called with a tool name but does not add substantive detail about the parameter's format, constraints, or edge cases beyond what the schema provides. The baseline of 3 is appropriate when the schema carries the semantic weight.

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 opens with a specific verb and resource: 'Look up a tool's live description and parameter schema by name.' This clearly identifies it as a meta-documentation lookup tool, which distinguishes it from all sibling tools that operate on memo content or sessions. No ambiguity remains about what the tool does.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: when a tool expected from a prior session or documentation is missing from the current tool list. It also explains the pruning context and instructs the agent to call the retrieved tool directly by name afterward. This is strong usage guidance that prevents misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_unforgetA
Idempotent

Restore a previously forgotten memory to normal retrieval.

Idempotent write. Accepts a full id or unique prefix and returns whether a matching forgotten record was restored. Use after deciding a memory should participate in search and recall again.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId or unique prefix of the forgotten memory to restore.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate idempotent and non-destructive. Description adds that it returns a boolean indicating success and accepts prefixes, going beyond annotations.

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?

Three sentences, front-loaded with purpose, no unnecessary 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 one parameter, strong annotations, and implied output schema, description fully covers what agent needs: purpose, when to use, input constraints, and return value.

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?

Only one parameter 'id' with schema description. Description adds that it can accept a unique prefix, which is valuable extra semantics.

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?

Clearly states it restores a forgotten memory to normal retrieval, using a specific verb and resource. Distinguishes from sibling tools like memo_forget.

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

Usage Guidelines5/5

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

Provides explicit guidance: use after deciding a memory should participate in search and recall again. Mentions idempotency and acceptance of unique prefix.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_unified_briefingA
Read-onlyIdempotent

Load a compact startup briefing from Memo's durable and operational state.

Read-only. Call before deciding or answering so prior durable facts can ground the task. Pass cwd to bias project context and source to attribute consult logs to the calling client.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory; its basename scopes operational items (focus, handoffs, attention, conflicts) to that project. None includes every project.
sourceNoCalling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Description adds value beyond annotations by explaining that cwd biases project context and source attributes consult logs. It also states 'Read-only' matching annotations, but does not cover other behavioral aspects.

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: three sentences that front-load the main purpose and immediately provide usage guidance. No wasted words.

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 presence of an output schema (not shown but indicated), the description covers purpose, usage, parameters, and behavioral traits adequately for a read-only briefing tool.

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%, but description adds extra context: cwd 'biases project context' and source 'attributes consult logs.' This clarifies parameter roles beyond the schema descriptions.

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 loads a 'compact startup briefing' from Memo's durable and operational state. It's a specific resource, but does not explicitly differentiate from siblings like memo_get or memo_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?

Explicit guidance given: 'Call before deciding or answering so prior durable facts can ground the task.' This provides clear context on when to use, but no mention of when not to use or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_updateA
Destructive

Patch fields on a memory. content replaces the whole body; replace_old+replace_new is a surgical exact-string edit (old must occur exactly once — unchanged text stays byte-identical); append adds a paragraph. All three are versioned (memo_version_rollback).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId or unique id prefix of the memory to patch.
tagsNoFull replacement tag list (lower-cased, de-duplicated); None leaves tags unchanged.
typeNoNew memory type (must be a valid type, e.g. 'decision', 'fact'); None leaves it unchanged.
titleNoNew title; None leaves the title unchanged.
appendNoParagraph appended to the end of the body. Mutually exclusive with content and replace_old/replace_new.
contentNoFull replacement body. Mutually exclusive with replace_old/replace_new and append.
replace_newNoReplacement text for replace_old. Pass together with replace_old.
replace_oldNoExact string to find in the body; must occur exactly once. Pass together with replace_new.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, so description adds value by noting versioning (memo_version_rollback), exact-match requirement for replace_old, and byte-identical preservation. This clarifies behavioral traits beyond annotations.

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

Conciseness4/5

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

Single paragraph packs essential information, front-loaded with the main action. Could be slightly more structured (e.g., bullet list), but no wasted words and all key points are covered efficiently.

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 output schema exists, description covers input semantics thoroughly, including constraints on replace_old occurrence and versioning. No critical missing information, though it could mention return behavior or error cases.

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 baseline is 3. Description adds context: tags are lower-cased/deduplicated, type must be valid, mutual exclusivity between content/replace/append. This adds meaningful guidance 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?

Description clearly states it patches fields on a memory, lists three distinct update modes (content replacement, surgical edit, append), and mentions versioning. This provides a specific verb-resource-action scope and distinguishes it from sibling tools like memo_save or memo_get.

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?

Description explains when to use each parameter (content for full replacement, replace_old+replace_new for exact edits, append for adding a paragraph) and notes mutual exclusivity. However, it does not explicitly contrast with siblings or provide conditions for when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_versionA
Read-onlyIdempotent

Get memo version info — the package version and the backend protocol version. Use this to check which version of memo is running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and no destructive behavior. The description adds value by specifying the exact type of version info returned (package version and backend protocol version), which is beyond annotations.

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 concise sentences with no wasted words. The key information is front-loaded: 'Get memo version info' immediately states the purpose.

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 tool has no parameters and an output schema exists, the description sufficiently explains what the tool returns and when to use it. No gaps.

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?

No parameters exist, so schema coverage is 100%. The description does not need to add parameter info; baseline 4 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 'Get' and the resource 'memo version info', specifying the package and backend protocol versions. It is distinct from sibling tools, which are mostly for data operations or queries.

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 says 'Use this to check which version of memo is running', providing clear when-to-use guidance. No exclusion or alternatives needed for such a simple tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memo_write_queue_statusA
Read-onlyIdempotent

Return process-local MCP write queue depth, waits, and rejections.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description does not contradict and adds no further behavioral context beyond what is returned.

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?

Single sentence, front-loaded with purpose, no extraneous words. Efficient and clear.

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 zero-parameter read-only status tool, the description fully explains the output. No additional detail needed given the annotations and output schema.

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?

No parameters exist, so the description does not need to add parameter details. Baseline for 0 params is 4, and the description clearly states what the tool returns.

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?

Describes a specific verb 'Return' and resource 'process-local MCP write queue' with explicit attributes (depth, waits, rejections). Uniquely identifies the tool among many siblings.

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 guidance on when to use this tool versus alternatives. Lacks context such as diagnostic scenarios or frequency of use.

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. 2 tool updatesv4.14.2
    • Addedmemo_crush_retrieve
    • Addedmemo_tool_docs
  2. 3 tool updatesv4.13.3
    • Changedmemo_history1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum events to return, newest first (no clamp)."New value: +"Maximum events to return, newest first. Clamped to 1..500."
    • Changedmemo_record_diff1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum history events to return (no clamp). The newest `limit` events are fetched and returned oldest-first; `has_more` is true when the record has at least `limit` events."New value: +"Maximum history events to return, clamped to 1..500. The newest `limit` events are fetched and returned oldest-first; `has_more` is true when the record has at least `limit` events."
    • Changedmemo_session_list1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum sessions to return, sorted by most recently updated first (no clamp)."New value: +"Maximum sessions to return, sorted by most recently updated first. Clamped to 1..200."
  3. 3 tool updatesv4.10.0
    • Changedmemo_consolidate3 fields changed
      • changedInput schema / properties / max_clusters / default
        Previous value: -20New value: +10
      • changedInput schema / properties / max_clusters / description
        Previous value: -"Maximum clusters to process (default 20)."New value: +"Clusters to process and return. Each one costs a member list plus a merge proposal, so this is the dominant term in the response size."
      • addedInput schema / properties / member_limit
        Added value: +{
        +  "default": 2,
        +  "description": "Sample members returned per cluster. A cluster's true size always comes back in `total`; `truncated` says whether any members were dropped.",
        +  "type": "integer"
        +}
    • Changedmemo_lint2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "description": "Findings to return per category. True per-category totals come back under `counts`.",
        +  "type": "integer"
        +}
      • changedOutput schema / additionalProperties
        Previous value: -{
        -  "items": {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  "type": "array"
        -}New value: +true
    • Changedmemo_operational_state1 field changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 20,
        +  "description": "Newest items to return per section (conflicts, handoffs, attention, outcomes, signals). True totals come back under `counts`.",
        +  "type": "integer"
        +}
  4. 1 tool updatev4.9.2
    • Changedmemo_operational_state1 field changed
      • addedInput schema / properties / include_closed
        Added value: +{
        +  "default": false,
        +  "description": "Also return settled history: resolved conflicts, consumed handoffs, and acknowledged attention items. Off by default — that history only grows and can exceed the response budget.",
        +  "type": "boolean"
        +}
  5. 4 tool updates
    • Changedmemo_save1 field changed
      • addedInput schema / properties / defer_embed
        Added value: +{
        +  "default": false,
        +  "description": "Persist markdown and the text index immediately, but leave the semantic vector pending for a later memo_reindex call.",
        +  "type": "boolean"
        +}
    • Addedmemo_signal_list
    • Addedmemo_signal_remember
    • Addedmemo_terminal_list
  6. 1 tool updatev4.6.0
    • Changedmemo_graph7 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Opaque continuation cursor returned by architecture."
        +}
      • addedInput schema / properties / cwd
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Git working tree used by the impact verb."
        +}
      • addedInput schema / properties / depth
        Added value: +{
        +  "default": 1,
        +  "description": "CodeGraph hop depth for impact (bounded to 0..3).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_chars
        Added value: +{
        +  "default": 12000,
        +  "description": "Approximate architecture finding budget.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "scout",
        +  "description": "Architecture evidence mode: scout | verify | audit.",
        +  "type": "string"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Repo-relative path bounding architecture findings."
        +}
      • changedInput schema / properties / verb / description
        Previous value: -"One of path | neighbors | explore | communities | why."New value: +"One of path | neighbors | explore | communities | why |\nimpact | architecture."
  7. 43 tool updatesv4.4.6
    • Changedmemo_ask7 fields changed
      • addedInput schema / properties / include_repos / description
        Added value: +"Also search indexed repository knowledge, not just memories."
      • addedInput schema / properties / k / description
        Added value: +"Number of memories to retrieve as grounding (top-k)."
      • addedInput schema / properties / question / description
        Added value: +"Natural-language question to answer from durable memories."
      • addedInput schema / properties / session_id / description
        Added value: +"Tracked memo session id to associate the answer with."
      • addedInput schema / properties / snippet_chars / description
        Added value: +"Character cap per cited snippet; None uses the default."
      • addedInput schema / properties / source / description
        Added value: +"Calling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info."
      • addedInput schema / properties / type / description
        Added value: +"Restrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type."
    • Changedmemo_attention_ack2 fields changed
      • addedInput schema / properties / actor_id / description
        Added value: +"Identifier of the acknowledging agent (journaled)."
      • addedInput schema / properties / id / description
        Added value: +"Id of the attention item to acknowledge."
    • Changedmemo_attention_add3 fields changed
      • addedInput schema / properties / project / description
        Added value: +"Project tag the attention item belongs to."
      • addedInput schema / properties / severity / description
        Added value: +"One of 'low', 'medium', 'high', 'critical'."
      • addedInput schema / properties / summary / description
        Added value: +"The item later agents must see before working on the project."
    • Changedmemo_chat_ask8 fields changed
      • addedInput schema / properties / context / description
        Added value: +"Extra structured context for synthesis (bounded to 256KB); merged with session_id when given."
      • addedInput schema / properties / history / description
        Added value: +"Prior chat turns as {'role', 'content'} dicts; bounded (128 items / 512KB) and used to shape retrieval."
      • addedInput schema / properties / k / description
        Added value: +"Number of memories to retrieve as grounding (top-k)."
      • addedInput schema / properties / question / description
        Added value: +"Natural-language question for this conversational turn."
      • addedInput schema / properties / session_id / description
        Added value: +"Tracked memo session id linking the answer to a session."
      • addedInput schema / properties / snippet_chars / description
        Added value: +"Character cap per cited snippet; None uses the default."
      • addedInput schema / properties / source / description
        Added value: +"Calling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info."
      • addedInput schema / properties / type / description
        Added value: +"Restrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type."
    • Changedmemo_conflict_open4 fields changed
      • addedInput schema / properties / evidence_uris / description
        Added value: +"memo:// URIs of the evidence supporting each side."
      • addedInput schema / properties / freeze_write / description
        Added value: +"When true, mark the topic write-frozen until a human resolves the conflict."
      • addedInput schema / properties / summary / description
        Added value: +"Description of the conflicting claims or evidence."
      • addedInput schema / properties / topic / description
        Added value: +"Short stable label for the disputed subject."
    • Changedmemo_conflict_resolve1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Id of the conflict to resolve."
    • Changedmemo_context8 fields changed
      • addedInput schema / properties / budget_chars / description
        Added value: +"Total character budget for the returned readonly prompt wrapper; rows beyond the budget are trimmed and counted in 'omissions'."
      • addedInput schema / properties / include_dynamic / description
        Added value: +"Include the dynamic section: up to 5 memories updated in the last 7 days."
      • addedInput schema / properties / include_profile / description
        Added value: +"Include the static profile section (identity/preference lines)."
      • addedInput schema / properties / k / description
        Added value: +"Number of query hits retrieved for the pack (hybrid mode; clamped to 1-500)."
      • addedInput schema / properties / question / description
        Added value: +"Natural-language question used to retrieve and pack relevant memories."
      • addedInput schema / properties / snippet_chars / description
        Added value: +"Character cap per memory snippet inside the pack."
      • addedInput schema / properties / source / description
        Added value: +"Calling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info."
      • addedInput schema / properties / type / description
        Added value: +"Restrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type."
    • Changedmemo_delete1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Id or unique prefix of the memory to delete permanently (markdown file + index rows)."
    • Changedmemo_embed_batch1 field changed
      • addedInput schema / properties / texts / description
        Added value: +"Document strings to embed on the document side (raw, no query instruction prefix); an empty list returns no vectors."
    • Changedmemo_embed_query1 field changed
      • addedInput schema / properties / text / description
        Added value: +"Query text to embed on the query side (instruction-prefixed for asymmetric retrieval); empty or whitespace-only raises an error."
    • Changedmemo_evidence_pack6 fields changed
      • addedInput schema / properties / as_of / description
        Added value: +"ISO date/datetime for time-travel: only memories valid at that moment are considered."
      • addedInput schema / properties / k / description
        Added value: +"Maximum candidate memories to retrieve (clamped to 1-50)."
      • addedInput schema / properties / max_chars / description
        Added value: +"Character budget for the packed evidence text."
      • addedInput schema / properties / min_coverage / description
        Added value: +"Minimum retrieval coverage (0-1) required to answer; below it the pack abstains explicitly."
      • addedInput schema / properties / question / description
        Added value: +"Natural-language question to collect cited evidence for."
      • addedInput schema / properties / type / description
        Added value: +"Restrict evidence to one memory type (e.g. 'decision', 'fact'); None searches every type."
    • Changedmemo_federation_preview1 field changed
      • addedInput schema / properties / principal / description
        Added value: +"Principal (device id) of the intended bundle recipient whose ACL-visible memories are previewed."
    • Changedmemo_focus_clear2 fields changed
      • addedInput schema / properties / actor_id / description
        Added value: +"Identifier of the agent clearing the focus (journaled)."
      • addedInput schema / properties / project / description
        Added value: +"Project tag whose focus should be cleared."
    • Changedmemo_focus_set3 fields changed
      • addedInput schema / properties / actor_id / description
        Added value: +"Identifier of the agent setting the focus (journaled)."
      • addedInput schema / properties / project / description
        Added value: +"Project tag the focus belongs to."
      • addedInput schema / properties / summary / description
        Added value: +"One-line description of the work currently in focus."
    • Changedmemo_forget2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Id or unique prefix of the memory to hide from recall."
      • addedInput schema / properties / reason / description
        Added value: +"Optional free-text reason recorded in the memory's metadata as forget_reason."
    • Changedmemo_get1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Full 32-char memory id or a unique prefix (git-style short ids)."
    • Changedmemo_handoff_consume2 fields changed
      • addedInput schema / properties / actor_id / description
        Added value: +"Identifier of the consuming agent (journaled)."
      • addedInput schema / properties / id / description
        Added value: +"Id of the handoff to mark consumed (from memo_operational_state or memo_handoff_create)."
    • Changedmemo_handoff_create4 fields changed
      • addedInput schema / properties / from_actor / description
        Added value: +"Identifier of the agent creating the handoff."
      • addedInput schema / properties / project / description
        Added value: +"Project tag the handoff belongs to."
      • addedInput schema / properties / summary / description
        Added value: +"What the receiving agent needs to know to continue the work."
      • addedInput schema / properties / to_actor / description
        Added value: +"Target agent identifier; empty string leaves the handoff open to any agent."
    • Changedmemo_history3 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Restrict events to one memory: full 32-char hex id or a unique short prefix. An ambiguous prefix returns a one-element error list with the matching ids; an unknown prefix returns an empty list. Omit for corpus-wide history."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum events to return, newest first (no clamp)."
      • addedInput schema / properties / op / description
        Added value: +"Exact-match filter on operation type. Events are recorded with op \"save\", \"update\", or \"delete\"; omit to include all ops."
    • Changedmemo_invalidate3 fields changed
      • addedInput schema / properties / at / description
        Added value: +"ISO-8601 timestamp when the memory became invalid (naive values are treated as UTC); defaults to now."
      • addedInput schema / properties / id / description
        Added value: +"ID of the memory whose validity to close; errors if not found."
      • addedInput schema / properties / reason / description
        Added value: +"Why the memory is no longer valid; sanitized and logged in the update history."
    • Changedmemo_list2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum records to return, newest by `updated` first."
      • addedInput schema / properties / type / description
        Added value: +"Filter to one memory type (e.g. 'decision', 'fact'); None lists every type."
    • Changedmemo_mark_reviewed3 fields changed
      • addedInput schema / properties / actor / description
        Added value: +"Identifier of who performed the review, stored with the evidence."
      • addedInput schema / properties / evidence / description
        Added value: +"Free-text evidence supporting the review; sanitized before being persisted with the review record."
      • addedInput schema / properties / id / description
        Added value: +"ID of the memory to mark as reviewed; errors if not found."
    • Changedmemo_offload2 fields changed
      • addedInput schema / properties / content / description
        Added value: +"Raw payload to store verbatim. Rejected when empty/whitespace-only or longer than the configured max_content_chars (MEMO_MAX_CONTENT_CHARS); identical content deduplicates by sha256 to the existing memory id."
      • addedInput schema / properties / title / description
        Added value: +"Optional label used as the stored memory's title and markdown heading; None auto-generates 'offload:<kind> <sha256[:12]>'."
    • Changedmemo_operational_state1 field changed
      • addedInput schema / properties / project / description
        Added value: +"Project tag to scope the state to; None returns every project."
    • Changedmemo_outcome_record6 fields changed
      • addedInput schema / properties / actor_id / description
        Added value: +"Identifier of the reporting agent (journaled)."
      • addedInput schema / properties / artifacts / description
        Added value: +"Optional URIs or paths of artifacts the task produced."
      • addedInput schema / properties / idempotency_key / description
        Added value: +"Caller-chosen key that makes retries safe: the same key replays the stored outcome instead of double-counting; reusing it with a different payload is rejected."
      • addedInput schema / properties / memory_ids / description
        Added value: +"Ids of the memories that were recalled or used for the task."
      • addedInput schema / properties / status / description
        Added value: +"One of 'success', 'failure', 'partial'."
      • addedInput schema / properties / task_id / description
        Added value: +"Stable identifier of the task whose outcome is recorded."
    • Changedmemo_procedure_candidates3 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum candidates returned (clamped to 1-500)."
      • addedInput schema / properties / min_successes / description
        Added value: +"Minimum successful outcomes a memory needs (floor 1)."
      • addedInput schema / properties / min_utility / description
        Added value: +"Minimum outcome utility score, clamped to 0-1."
    • Changedmemo_procedure_promote6 fields changed
      • addedInput schema / properties / actor_id / description
        Added value: +"Identifier of the promoting agent (journaled)."
      • addedInput schema / properties / content / description
        Added value: +"Explicit body for the new memory; None concatenates the source bodies."
      • addedInput schema / properties / kind / description
        Added value: +"'procedure' (needs >=2 successes and utility >=0.75 per source) or 'failure_pattern' (needs >=2 failures at >=50% failure rate)."
      • addedInput schema / properties / memory_ids / description
        Added value: +"Source memories with recorded outcome evidence; every id must exist and qualify."
      • addedInput schema / properties / reason / description
        Added value: +"Provenance note recorded with the promotion."
      • addedInput schema / properties / title / description
        Added value: +"Title of the new procedure or failure-pattern memory."
    • Changedmemo_profile5 fields changed
      • addedInput schema / properties / budget_chars / description
        Added value: +"Character budget for the 'stable' profile text (clamped to 256-12000). Longer text is truncated with a trailing ellipsis and an entry in 'omissions'."
      • addedInput schema / properties / cwd / description
        Added value: +"Working directory used to resolve the current project (git toplevel) so the project-specific profile document is included in the stable section. Defaults to the server process's working directory."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum recent memory records in the 'active' section (clamped to 0-50; forgotten records are excluded)."
      • addedInput schema / properties / scope / description
        Added value: +"Descriptive label echoed into the payload: one of 'current', 'user', 'project', 'agent' (anything else returns a memo.error.v1 invalid_scope envelope). Does not filter or authorize — content selection stays governed by Memo's profile files and record provenance."
      • addedInput schema / properties / source / description
        Added value: +"Caller identity recorded in the recall consult log. Empty string falls back to the MEMO_SOURCE env var, then the MCP client's declared clientInfo name."
    • Changedmemo_provenance1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Memory id to trace: full 32-char hex id or a unique short prefix (git-style). Unknown ids return null."
    • Changedmemo_record_diff2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Memory id: full 32-char hex id or a unique short prefix. Ids shorter than 32 chars are prefix-resolved; an ambiguous prefix returns an error payload listing the matching ids."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum history events to return (no clamp). The newest `limit` events are fetched and returned oldest-first; `has_more` is true when the record has at least `limit` events."
    • Changedmemo_reindex1 field changed
      • addedInput schema / properties / force / description
        Added value: +"When true, re-embed every indexed entry even when the on-disk body is unchanged (e.g. after an embedder model swap)."
    • Changedmemo_rename2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Id or unique prefix of the memory to rename; when omitted, targets the most recent save made on this device."
      • addedInput schema / properties / title / description
        Added value: +"New title for the memory."
    • Changedmemo_rerank4 fields changed
      • addedInput schema / properties / body_chars / description
        Added value: +"Character cap of each hit's snippet/body fed to the reranker."
      • addedInput schema / properties / hits / description
        Added value: +"Candidate hit dicts (e.g. from memo_search); each is scored on its title plus snippet/body and returned with a 'rerank_score' field added. Non-dict entries are dropped."
      • addedInput schema / properties / query / description
        Added value: +"Query text the cross-encoder scores each hit against; empty returns the hits unchanged."
      • addedInput schema / properties / top_n / description
        Added value: +"Keep only the N best hits after reranking; None or a non-positive value returns all."
    • Changedmemo_review_due2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum records to return (clamped to 1-200). Records with an open conflict sort first, then by earliest review date."
      • addedInput schema / properties / project / description
        Added value: +"Project name to filter by (matched against its slugified project namespace); omit to list all projects."
    • Changedmemo_save8 fields changed
      • addedInput schema / properties / auto_derive / description
        Added value: +"When true, a helper LLM fills missing metadata (title/type/tags); adds ~0.5-2s per save."
      • addedInput schema / properties / content / description
        Added value: +"Markdown body to persist. Must be non-empty."
      • addedInput schema / properties / extra / description
        Added value: +"Arbitrary JSON metadata bag stored with the record. Authority-controlled keys (write_policy, visibility, trust_tier, ...) are stripped."
      • addedInput schema / properties / extract / description
        Added value: +"Decompose content into atomic facts saved individually; None defers to the MEMO_SAVE_EXTRACT flag (off by default)."
      • addedInput schema / properties / scope / description
        Added value: +"'global' skips the auto project:<repo> tag (global recall tier); 'project' or None keep auto-detection. Other values are rejected."
      • addedInput schema / properties / tags / description
        Added value: +"Tags to attach; lower-cased and de-duplicated."
      • addedInput schema / properties / title / description
        Added value: +"Optional title; when omitted it is derived from the first line of content."
      • addedInput schema / properties / type / description
        Added value: +"Memory type. One of: decision, fact, bug, feedback, preference, note, manual, synthesis, procedure, failure_pattern, reference, temp."
    • Changedmemo_search11 fields changed
      • addedInput schema / properties / body_chars / description
        Added value: +"Character cap per hit body; longer bodies are truncated with body_truncated=true. Negative disables truncation."
      • addedInput schema / properties / date_from / description
        Added value: +"Inclusive ISO date/datetime lower bound (e.g. '2026-07-01'); ignored when 'file' is set."
      • addedInput schema / properties / date_to / description
        Added value: +"Inclusive ISO date/datetime upper bound; a bare date covers that whole day. Ignored when 'file' is set."
      • addedInput schema / properties / explain / description
        Added value: +"When true, add per-hit 'explain' fields and a 'trace' key showing pipeline scoring. Not available with 'file' (explain stays empty)."
      • addedInput schema / properties / file / description
        Added value: +"Keep only hits whose capture-stamped files_read/files_modified arrays contain this path fragment (case-insensitive substring). Date filters and explain are not applied in file mode."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum hits to return (clamped to 1-500)."
      • addedInput schema / properties / mode / description
        Added value: +"Retrieval mode: 'hybrid' (RRF fusion of vector + BM25, default), 'vec' (semantic only), 'bm25' (keyword FTS5), 'exact' (strict-AND keyword with tag/title boost), or 'fuzzy' (typo-tolerant keyword). Unrecognized values behave as 'hybrid'."
      • addedInput schema / properties / query / description
        Added value: +"Search text; empty or whitespace-only returns no hits."
      • addedInput schema / properties / source / description
        Added value: +"Calling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info."
      • addedInput schema / properties / type / description
        Added value: +"Restrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type."
      • addedInput schema / properties / when / description
        Added value: +"Natural-language date phrase (EN/ES: 'yesterday', 'last week', 'hace 3 dias', ...) parsed into date_from/date_to when neither is set; unrecognized phrases apply no date filter."
    • Changedmemo_search_trace6 fields changed
      • addedInput schema / properties / body_chars / description
        Added value: +"Character cap per hit body; longer bodies are truncated with body_truncated=true. Negative disables truncation."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum hits to return (clamped to 1-500)."
      • addedInput schema / properties / mode / description
        Added value: +"Retrieval mode: 'hybrid' (RRF fusion of vector + BM25, default), 'vec' (semantic only), 'bm25' (keyword FTS5), 'exact' (strict-AND keyword with tag/title boost), or 'fuzzy' (typo-tolerant keyword). Unrecognized values behave as 'hybrid'."
      • addedInput schema / properties / query / description
        Added value: +"Search text; empty or whitespace-only returns no hits."
      • addedInput schema / properties / source / description
        Added value: +"Calling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info."
      • addedInput schema / properties / type / description
        Added value: +"Restrict retrieval to one memory type (e.g. 'decision', 'fact'); None searches every type."
    • Changedmemo_session_get1 field changed
      • addedInput schema / properties / session_id / description
        Added value: +"Full session id or a prefix of at least 4 characters. On a prefix tie the first match wins; unknown or too-short ids return null."
    • Changedmemo_session_list2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum sessions to return, sorted by most recently updated first (no clamp)."
      • addedInput schema / properties / project / description
        Added value: +"Exact project-name filter (the working-directory basename recorded on the session, e.g. the repo folder name). Omit to list sessions from all projects."
    • Changedmemo_supersede3 fields changed
      • addedInput schema / properties / new_id / description
        Added value: +"ID of the successor memory; the old memory is closed at this record's validity start (or creation time). Errors if not found."
      • addedInput schema / properties / old_id / description
        Added value: +"ID of the memory being superseded; its validity interval is closed. Must differ from new_id; errors if not found."
      • addedInput schema / properties / reason / description
        Added value: +"Why the successor replaces the old memory; logged as 'superseded by <new_id>: <reason>' in the update history."
    • Changedmemo_unforget1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Id or unique prefix of the forgotten memory to restore."
    • Changedmemo_unified_briefing2 fields changed
      • addedInput schema / properties / cwd / description
        Added value: +"Working directory; its basename scopes operational items (focus, handoffs, attention, conflicts) to that project. None includes every project."
      • addedInput schema / properties / source / description
        Added value: +"Calling layer for consult attribution (e.g. 'claude-code', 'codex'); empty falls back to client info."
    • Changedmemo_update8 fields changed
      • addedInput schema / properties / append / description
        Added value: +"Paragraph appended to the end of the body. Mutually exclusive with content and replace_old/replace_new."
      • addedInput schema / properties / content / description
        Added value: +"Full replacement body. Mutually exclusive with replace_old/replace_new and append."
      • addedInput schema / properties / id / description
        Added value: +"Id or unique id prefix of the memory to patch."
      • addedInput schema / properties / replace_new / description
        Added value: +"Replacement text for replace_old. Pass together with replace_old."
      • addedInput schema / properties / replace_old / description
        Added value: +"Exact string to find in the body; must occur exactly once. Pass together with replace_new."
      • addedInput schema / properties / tags / description
        Added value: +"Full replacement tag list (lower-cased, de-duplicated); None leaves tags unchanged."
      • addedInput schema / properties / title / description
        Added value: +"New title; None leaves the title unchanged."
      • addedInput schema / properties / type / description
        Added value: +"New memory type (must be a valid type, e.g. 'decision', 'fact'); None leaves it unchanged."
  8. 24 tool updatesv4.4.4
    • Changedmemo_ask3 fields changed
      • addedInput schema / properties / snippet_chars / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / snippet_chars / default
        Previous value: -800New value: +null
      • removedInput schema / properties / snippet_chars / type
        Removed value: -"integer"
    • Addedmemo_attention_ack
    • Addedmemo_attention_add
    • Changedmemo_chat_ask3 fields changed
      • addedInput schema / properties / snippet_chars / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / snippet_chars / default
        Previous value: -800New value: +null
      • removedInput schema / properties / snippet_chars / type
        Removed value: -"integer"
    • Addedmemo_conflict_open
    • Addedmemo_conflict_resolve
    • Addedmemo_evidence_pack
    • Addedmemo_federation_preview
    • Addedmemo_focus_clear
    • Addedmemo_focus_set
    • Addedmemo_handoff_consume
    • Addedmemo_handoff_create
    • Addedmemo_invalidate
    • Addedmemo_journal_verify
    • Addedmemo_mark_reviewed
    • Addedmemo_operational_state
    • Addedmemo_outcome_record
    • Addedmemo_procedure_candidates
    • Addedmemo_procedure_promote
    • Addedmemo_profile
    • Addedmemo_review_due
    • Changedmemo_save1 field changed
      • removedInput schema / properties / respect_synapse_freeze
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "boolean"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
    • Addedmemo_supersede
    • Addedmemo_write_queue_status
  9. 2 tool updatesv3.7.0
    • Addedmemo_context
    • Changedmemo_search1 field changed
      • addedInput schema / properties / explain
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
  10. 33 tool updatesv1.0.0
    • First observedmemo_ask
    • First observedmemo_chat_ask
    • First observedmemo_consolidate
    • First observedmemo_delete
    • First observedmemo_embed_batch
    • First observedmemo_embed_query
    • First observedmemo_forget
    • First observedmemo_get
    • First observedmemo_get_embedder_profile
    • First observedmemo_graph
    • First observedmemo_history
    • First observedmemo_idle_capture
    • First observedmemo_lint
    • First observedmemo_list
    • First observedmemo_offload
    • First observedmemo_pop_notification
    • First observedmemo_provenance
    • First observedmemo_record_diff
    • First observedmemo_reindex
    • First observedmemo_rename
    • First observedmemo_rerank
    • First observedmemo_save
    • First observedmemo_save_text
    • First observedmemo_search
    • First observedmemo_search_trace
    • First observedmemo_session_get
    • First observedmemo_session_list
    • First observedmemo_start_session
    • First observedmemo_stats
    • First observedmemo_unforget
    • First observedmemo_unified_briefing
    • First observedmemo_update
    • First observedmemo_version

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, though the retrieval-related tools (memo_search, memo_context, memo_search_trace, memo_rerank, memo_ask, memo_chat_ask, memo_evidence_pack) cluster tightly and could be confusing for an agent to choose between. Other groups like save (memo_save, memo_save_text) and operational state are well-separated.

Naming Consistency5/5

All tools follow a consistent memo_verb_noun or memo_verb pattern, making the set predictable. The naming is uniform and descriptive, with no mixing of conventions.

Tool Count2/5

55 tools is excessive for a memory management server. While each tool has a specific role, many are very granular (e.g., separate tools for embedding queries vs. documents, multiple search variants). The tool count feels bloated and would benefit from consolidation into fewer, more general tools.

Completeness5/5

The tool set covers the full lifecycle of memory management: CRUD, search, retrieval, conflict resolution, session tracking, focus, handoffs, attention, profiling, review, invalidation, and federation. No obvious gaps for the stated domain.

Maintenance

ActivityActive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Basic Memory is a knowledge management system that allows you to build a persistent semantic graph from conversations with AI assistants. All knowledge is stored in standard Markdown files on your computer, giving you full control and ownership of your data. Integrates directly with Obsidan.md
    17
    3,864
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Semantic memory for AI agents — local-first MCP server with hybrid search, knowledge graph, contradiction detection, and plan-then-commit consolidation.
    390
    4
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Self-hosted semantic memory for AI agents. Save worklogs, decisions, and notes via MCP, then recall them across sessions by meaning rather than keyword. Backed by Postgres + pgvector with local embeddings (multilingual-e5-base).
    1
    MIT

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/jagoff/memo'

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