Skip to main content
Glama
madgodinc

mgi-mind

Official

MGI-Mind

English | Русский | 中文

Latest release: v2.8.2 · CHANGELOG · Discussions · Issues · Contributing

Local long-term memory for AI assistants. One Rust binary, a local Qdrant vector database, local ONNX models. Speaks MCP, so Claude Code and other assistants read and write memory on their own. Also a normal CLI.

The same exchange inside an assistant:

You:  what was the deploy server again?

Assistant (calls mind_search "deploy server"):
  -> "Deploy server is 10.0.0.5:8080, SSH as deploy@, key in vault"  (source: infra.md)

You:  right, thanks

Nothing leaves the box. Embeddings, search, reranking and the vault are all local. No cloud account, no API key, no telemetry.


Contents

Related MCP server: memkeeper

What it is

MGI-Mind sits between you and your assistant. The assistant writes short notes ("memories") and facts as a conversation goes, and pulls the relevant ones back when they matter.

Retrieval, not just storage:

  • Hybrid search. Each memory is stored as two vectors: a dense vector (multilingual-e5-base, 768 dims) for meaning, and a sparse term-frequency vector (TF-IDF, BM25-style) for exact words. A query runs both arms and fuses them with Reciprocal Rank Fusion. "The server box" finds "deploy host" through the dense arm; fossilize_replay finds the one note that contains that exact token through the sparse arm.

  • Cross-encoder reranking. Fused top candidates are re-scored by bge-reranker-base, which reads the query and each passage together and is more accurate than comparing vectors. On by default and English-tuned; see Languages and the reranker for the trade-off on other languages.

  • One warm process. mgimind mcp is the MCP server itself: it runs for the whole session, models load once and stay warm in memory, so a lookup costs milliseconds instead of reloading on every call.

Around retrieval there's a knowledge graph for structured facts, per-agent session logs for cross-session continuity, and an encrypted terminal-only vault for secrets.

The validity model

Hybrid search is table stakes; most memory tools have some version of it. The part that is harder to find is what keeps the store from ossifying as it fills with old, contradictory, or self-reinforcing beliefs. These run mostly on their own:

  • Duel rule. When a new fact contradicts an existing one on the same subject and predicate, the second write resolves against the first instead of piling up a second "truth". An entrenched fact (many dependants, confirmations, age) holds; a strong fresh fact flips it and dampens the loser to a hidden stale status; a borderline one is marked contested or diverted to quarantine. Confirmations accrue live: re-asserting the same triple raises its own confirmations_count, so a fact confirmed a few times resists a single fresh contradiction (contested, not flipped) while an unconfirmed young fact still flips as easily as before. dependants still only comes from the migrate-v14 dependants --apply backfill - a cheap live producer (it would mean walking the graph on every write) is not implemented. Nothing is deleted, so the audit log keeps the loser; a re-proposed stale loser gets a fair new duel against whatever is current, keeping its own original created_at and confirmation history rather than starting over. Automatic, inside a normal mind_fact add.

  • Doubt window. An entrenched fact has to keep re-justifying itself. Every fact query measures how far the current context has drifted from the context the fact was written in; after five consecutive drifted retrievals the fact stops outranking facts that still hold up, and any single in-context retrieval resets the count. Nothing is hidden or deleted. Drift is measured on vectors with the corpus mean removed, because raw cosine cannot separate topics in an anisotropic embedding space (see mgimind calibrate below). The current context is the running process's own recent queries, so this applies inside a warm mgimind mcp or serve-http session; a one-shot CLI command has no context yet and no fact is penalised for that. This ships in shadow: drift is measured and recorded, and no fact changes, until you set doubt_drift_threshold from your own store's numbers and switch doubt_drift_mode to "enforce". A background pass separately re-tests entrenched facts that have gone quiet, under hard guarantees: never during a tool call, a per-tick cap, and a load-aware cadence.

  • Inheritance discount. mind_context's briefing (what a session sees at start) marks every fact it surfaces as inherited for that process. If a duel challenger is a re-proposal of one of those inherited facts - the agent echoing back what it was told rather than independently reconfirming it live - that challenge counts at half weight. The flag clears the moment the agent actually re-asserts the fact live and it lands without a conflict. Single-source decay (repeated confirmation from the same source counting for less each time) has the formula (diversity_weighted_count) but no live caller yet - not implemented, no "cannot co-confirm" guarantee today.

  • Two time axes on facts. Record-time (created_at/valid_until: when the store learned/retired a value) is bi-temporal with the superseded chain: a predicate can be registered (mind_predicate) as single-valued, temporal-single (one current value, but the previous ones are kept and queryable by date via mind_history), or multi-valued, and a superseded value is hidden from default ranking, not erased. An optional second axis, world-time (valid_from, settable on add), records when a fact became true in the world instead of when the store heard about it; mind_fact action=query with as_of + world_time=true resolves point-in-time queries against it, falling back to record-time per fact when it has no valid_from. Existing facts need no migration - they simply have no valid_from and behave exactly as before.

  • Explicit invalidate is final. mind_fact action=invalidate is a one-way door: re-adding the same triple afterward refuses (verdict invalidated) instead of silently reviving it. mind_fact action=restore is the only way back.

  • Typed outcome signals. mind_outcome records that a remembered fix actually worked (test_passed, code_compiled, user_confirmed, cited_by). A real success raises a memory's weight and marks a procedure verified; a failure pulls the weight down rather than being ignored.

These are research-shaped mechanisms, and their tuning constants are still being calibrated (the TODO(phase-4-calibration) markers in duel.rs / doubt.rs are honest). The shape is the point: a memory that argues with itself and demotes what stops holding up, instead of accreting forever.

mgimind calibrate measures whether that shape behaves as intended. It runs a corpus of realistic conflict situations through the live duel formulas and reports how many land on the outcome a person would expect: a fresh unsupported claim cannot overturn an entrenched belief, a CI signal can, repetition alone coexists rather than overwriting. Today 14 of 15 scenarios match intent; the one that does not is printed with its reason, not hidden, and the suite runs in CI. It also reports the doubt window's drift distribution, and that report exists because of what it found. The drift threshold was 0.4, picked in 384-dim MiniLM space and left in place when the default model became 768-dim multilingual-e5. Measured on a live store, 400 memories and all 79800 pairs, raw cosine ran from 0.666 to 0.972: the threshold could not fire once. The corpus mean vector had norm 0.884, so almost all of that cosine was a component every embedding shares. Centering fixes the measurement, and calibrate proposes a threshold from the drift your own store produces rather than from a constant that travelled between embedding spaces.

This measures the shape of the validity model, separate from retrieval recall (R@k, see BENCHMARKS.md). The two are different numbers and never belong in the same table.

Why bother

An assistant without memory asks for the same context every session and can't build on yesterday's work. The usual workaround is you keeping notes, tags, and folders, which the assistant still can't read by meaning.

The thing MGI-Mind does that Obsidian and Notion don't: the system decides what to write down, you don't. The MCP server reads what the assistant is doing in real time and routes facts, decisions, and fixes into the store through a relevance gate. You don't file, you don't tag, you don't decide what's worth saving. Low-signal candidates land in a quarantine layer (recoverable on re-assertion) instead of polluting retrieval.

How it compares to the obvious alternatives:

  • Plain notes (Obsidian, Notion). Strong as your personal notebook, but the assistant can't search them by meaning, and every keystroke is equally important to a folder of .md files.

  • Bare vector database. Semantic search, but no exact-term matching, no reranking, no dedup, no sessions, no facts, no secrets handling, no relevance gate, no procedural memory. You assemble all of that.

  • Hosted memory API. Your data on someone else's servers. Closes the box on inspection, dedup behaviour, and what the relevance gate is actually doing.

MGI-Mind is the assembled local version: hybrid + reranked retrieval, the relevance gate, dedup, facts, sessions, procedural memory ("error → fix" playbooks), and a terminal-only vault, all behind one binary you run yourself.

A note on evaluating it. BENCHMARKS.md reports retrieval recall (R@k on LongMemEval-S, zero-API, no LLM judge): given a question, did the gold session land in the top-k. On the default CPU config that is R@5 ≈ 98%. This is not the same metric as the QA-accuracy numbers other memory tools publish (they run an answerer and a judge over their retrieval), so do not put it in the same table. It measures whether the evidence was retrievable, not whether an LLM then answered correctly. mgi-mind has no answering step, so retrieval recall is the number it actually owns.

The honest gap: the validity model (duel rule, doubt window, supersession) is the differentiator, and retrieval recall does not test it. Two things test it instead. mgimind calibrate checks behavioral shape against intent (14/15 today, run it yourself); it proves the mechanism does what a reader expects, not that the constants are tuned against real data. The external belief-revision benchmark is STALE, and there only a preliminary partial run exists (N=155, ~32%, raw verdicts under benchmark/results/), produced by the harness on a branch rather than the scaffold on main, on a reduced haystack, possibly while the duel rule was still broken. See BENCHMARKS.md for the full caveats. Treat the validity model as a designed mechanism whose shape is verified and whose constants are not yet tuned, not a proven win on external data.

Quick start

Docker (the whole brain in one command)

The image bakes the binary, a bundled Qdrant, the ONNX runtime, and the models, so it runs offline with nothing to install:

docker run -p 8765:8765 madgodinc/mgi-mind

It prints a bearer token on startup. Point the Python client or any agent at http://localhost:8765 with that token. Persist memory across restarts with a volume, and pin a stable token:

docker run -p 8765:8765 -e MGIMIND_TOKEN=your-token \
  -v mgimind-data:/data madgodinc/mgi-mind

Plug it into an agent

Give an agent two tools, recall and remember, and its memory survives the process. With the server running and the Python client installed:

from mgimind import Memory

mem = Memory()                         # MGIMIND_URL / MGIMIND_TOKEN from the env
mem.add("Prod DB is Postgres 16 on db-prod:5432")
for hit in mem.search("prod database"):  # structured results: id, score, author
    print(hit["score"], hit["content"])

That wrapping is the whole integration. Copy-paste examples for LangGraph, Pydantic AI, the OpenAI Agents SDK, and raw HTTP (any language) are in docs/integrations. MCP and stdio still work for editor clients; the HTTP surface is the door for agent frameworks.

npm (any MCP client)

With Node.js 18 or newer, the npm package installs the prebuilt binary for your platform, checked against the release's SHA-256:

npx -y mgi-mind init          # creates ~/mgimind
npx -y mgi-mind doctor --fix  # downloads Qdrant and the models
claude mcp add mgimind -- npx -y mgi-mind mcp

Other clients take the same command in their MCP config: "command": "npx", "args": ["-y", "mgi-mind", "mcp"].

Native install

One command. The installer drops the binary on PATH and runs init + doctor --fix (which pulls Qdrant, ONNX Runtime, and the models). Or just tell your coding agent to install mgi-mind using AI_INSTRUCTIONS.md: it covers the install itself, not only how to use it once installed.

Linux / macOS:

curl -fsSL https://raw.githubusercontent.com/madgodinc/mgi-mind/main/install.sh | sh

Windows (PowerShell):

irm https://raw.githubusercontent.com/madgodinc/mgi-mind/main/install.ps1 | iex

When it finishes, the printed command wires the server into Claude Code:

claude mcp add mgimind -- /home/you/.local/bin/mgimind mcp

mgimind mcp IS the MCP server; it runs for the whole session with the models warm and brings up the bundled Qdrant on first use. Point your assistant at AI_INSTRUCTIONS.md once so it knows the protocol (log a session, search before answering, use the vault for secrets).

doctor --fix downloads the models into ~/mgimind/: the embedder (multilingual-e5-base, quantized ONNX, ~270 MB) and the reranker (bge-reranker-base, quantized ONNX, ~280 MB). ONNX Runtime and the Qdrant binary land next to the mgimind binary itself, so a doctor that reports a missing library is telling you about <install dir>/, not ~/mgimind/.

Installer flags

  • INSTALL_DIR=/opt/mgimind curl ... | sh: install somewhere other than ~/.local/bin.

  • MGIMIND_TAG=v2.8.2 curl ... | sh: pin a specific release instead of latest.

  • SKIP_DOCTOR=1 curl ... | sh: just drop the binary; run init + doctor --fix yourself later.

Manual install (no installer)

If you'd rather not pipe a script to a shell, grab the release tarball for your OS from Releases, put mgimind on your PATH, then:

mgimind init
mgimind doctor --fix
claude mcp add mgimind -- /absolute/path/to/mgimind mcp

Try it from the CLI (the same binary works without an assistant):

mgimind create work
mgimind add work "Deploy server is 10.0.0.5:8080, SSH as deploy@"
mgimind search "how do I reach the deploy box"

Per-OS notes

  • Linux x86_64, macOS arm64 and x86_64, Windows x86_64: prebuilt binaries in every release. The installer picks the right one.

  • macOS PATH: zsh does not include ~/.local/bin, so the installer appends the export PATH line to your ~/.zshrc and tells you it did. Open a new terminal before typing mgimind. Set MGIMIND_NO_PROFILE=1 to keep the installer out of your dotfiles and add the line yourself.

  • macOS Intel and ONNX Runtime: 1.24 dropped osx-x86_64, so Intel Macs get ONNX Runtime 1.23.0 while everything else gets 1.24.2. The binary requests C API 23, which both runtimes serve.

  • macOS first-run quarantine: the installer clears it, but a binary downloaded through a browser needs xattr -d com.apple.quarantine /path/to/mgimind. Releases are ad-hoc signed, not notarized; on Sequoia and later the right-click → Open trick no longer works for command-line binaries, so use xattr, or approve it once under System Settings → Privacy & Security.

  • Windows: SmartScreen may warn on the unsigned mgimind.exe ("Windows protected your PC"); choose More info → Run anyway. Antivirus can also quarantine the binary or the models it downloads; if mgimind doctor reports a file as downloaded but missing, allow mgimind.exe and the %USERPROFILE%\mgimind folder in your AV, then re-run mgimind doctor --fix. Code signing to remove the SmartScreen prompt is on the roadmap.

Build from source

Rust toolchain (rustup); no other dependencies.

git clone https://github.com/madgodinc/mgi-mind.git
cd mgi-mind
cargo build --release                  # binary: target/release/mgimind

Then run target/release/mgimind init && target/release/mgimind doctor --fix and wire it in with claude mcp add mgimind -- /absolute/path/to/target/release/mgimind mcp.

Using it

By hand (CLI):

mgimind add notes "Mom's birthday is March 14, she likes peonies" --source personal
mgimind search "when is my mother's birthday"
#  1. [notes] (score: 0.94) Mom's birthday is March 14, she likes peonies
#     source: personal

mgimind fact add "user" "prefers" "Rust"
mgimind fact query "user"
#   user -> prefers -> Rust

mgimind history --limit 3              # the three most recent memories
mgimind stats                          # counts per library, facts, sessions

Duel rule on contradictions. When two facts contradict and the predicate is Single or TemporalSingle, the second add resolves against the first instead of piling up:

# Tell the system this predicate has one current value at a time:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call",
  "params":{"name":"mind_predicate","arguments":
    {"action":"register","predicate":"lives_in",
     "cardinality":"TemporalSingle"}}}' \
  | mgimind mcp

mgimind fact add "Alice" "lives_in" "Prague"
mgimind fact add "Alice" "lives_in" "Dublin"
mgimind fact query "Alice"
#   Alice -> lives_in -> Dublin
# (Prague is preserved as history, queryable via mind_history / audit log
#  but hidden from default ranking.)

If you migrated from a pre-v1.7 install where the duel rule wasn't firing at the read path, run mgimind migrate-v14 redo-duels --apply once to collapse legacy contradictions to canonical answers. The walk is idempotent and dry-run by default.

Through your assistant (MCP). Once connected, you just talk:

You:  remember that the staging DB password is in the vault under "staging-db"
Assistant: (mind_add) saved. The secret itself stays in your terminal vault, not here.

You:  what database are we using on staging?
Assistant: (mind_search "staging database") Postgres 16, host db-staging.internal:5432

Search returns results in tiers so the assistant spends tokens carefully: --tier 1 is a ~100-character snippet, --tier 2 (default) is ~500, --tier 3 is the full text.

Seeing the store

mgimind brain renders the memory as a graph: cores for memories, facts, and regions, wired by the links between them, pulsing as the store changes. It binds to loopback only and needs the token printed alongside its URL.

Treat it as a control surface. An unrestricted viewer also serves DELETE /api/memories/:id, PATCH /api/node/:id and quarantine promotion, so whatever reaches that port with that token can change the store. For a viewer that cannot write, start it confined to an allowlist:

mgimind viewer --libraries work,personal

That fail-closes every mutating route with a 403, along with the routes that span all libraries (graph, audit, pulse, the ingest feed). mgimind brain takes no flags, so it is always the unrestricted form.

How it works

  your AI assistant
        |  MCP (JSON-RPC over stdio)
        v
  mgimind mcp  (one Rust process: MCP server + embedder, models stay warm)
        |  starts on first use
        v
  Qdrant (local, loopback only)
        |
        one "memories" collection, two vectors per point:
        dense (e5, meaning) + sparse (TF-IDF, exact terms)

Storage. All memories live in one Qdrant collection. A library field on each point separates namespaces (work, personal, a project), and a query can filter to one library or search across all. A point's ID is a UUIDv5 of library + content, so adding the same text twice overwrites the same point, with no duplicates and no race. A created_at datetime index lets history return the newest N directly without scanning.

Embeddings. Text is embedded locally through ONNX Runtime. Default is multilingual-e5-base (768 dimensions), strong on English and handles mixed languages. The embedder is model-aware: pooling (mean or CLS), token_type_ids input, query/passage prefixes are all config, so switching models doesn't need a code change. Inputs cap at 512 tokens; add splits long text into chunks so nothing past the cap silently disappears.

Search. The query is embedded once. Qdrant runs a dense nearest- neighbor search and a sparse search in a single Query API call and fuses them with RRF. If reranking is on, the top rerank_top_k candidates are re-scored by the cross-encoder and reordered. A library filter, when given, applies to both arms.

Safety. Downloads check against pinned SHA-256 hashes (fail-closed). Qdrant binds to loopback only and can require an API key. The vault is terminal-only, and the master password and decrypted secrets never travel over the MCP channel. File writes are atomic (temp file, fsync, rename, fsync the directory), so a crash leaves the old file or the new one, never a corrupt one.

Command reference

Memory

Command

What it does

mgimind add <library> <content> [--source <tag>]

Store a memory. Long text is chunked; prints how many chunks were stored.

mgimind search <query> [--library <l>] [--limit N] [--tier 1|2|3]

Hybrid search, then rerank. Tier sets how much text comes back.

mgimind history [--limit N]

Most recent memories, newest first.

mgimind delete <library> <id>

Delete one memory by id (id is shown in search results).

mgimind context

A compact session-start briefing: last session, recent facts, libraries.

Libraries

Command

What it does

mgimind create <name>

Register a library.

mgimind list

List libraries.

mgimind drop <name>

Delete a library and all its memories.

mgimind stats

Counts per library, facts, sessions, vault state.

Knowledge graph

Command

What it does

mgimind fact add <subject> <predicate> <object> [--valid-from <date>]

Store a fact triple. Re-adding the same triple raises its confirmation count instead of piling up a duplicate; refuses (does not revive) a triple that was explicitly invalidated. --valid-from optionally dates when it became true in the world.

mgimind fact query <term> [--as-of <date>] [--world-time] [--history]

Find facts matching a term in subject, predicate, or object; --as-of time-travels (record-time by default, --world-time switches to valid_from).

mgimind fact invalidate <id>

Soft-delete a fact (kept on disk, marked invalid, hidden from queries).

mgimind fact restore <id>

Undo an invalidate - the only way back.

Skills

A procedure answers "this broke, what fixed it last time". A skill answers "I am about to do X, is there a house way to do X". Same storage and the same outcome signals, matched at a different moment: against the task, before the work. A context render carries the catalogue (names and triggers), so an assistant knows what exists without searching, and pulls the body only for the skill that applies.

Command

What it does

mgimind skill set <name> --when <trigger> --body <text>

Write a skill. The name is its identity, so writing it again edits it and keeps the history. --body-file <path> reads the body from a file.

mgimind skill match <task> [--limit N]

The skills that apply to a task, ranked by relevance and by how they have worked out.

mgimind skill list / mgimind skill show <name>

The catalogue, or one skill in full.

mgimind skill outcome <name> [--failed] [--verify]

Record how applying it went. --verify needs a deterministic signal, not a hunch.

mgimind skill rm <name>

Delete a skill and its outcome history.

Sessions

Command

What it does

mgimind session start --agent <name>

Begin a session log for an agent.

mgimind session end --agent <name> --summary <text>

Close it with a summary.

mgimind session last [--agent <name>]

Show the last session (optionally for one agent).

Vault (terminal only)

Command

What it does

mgimind vault store <key> <value> [--category c] [--desc d]

Store an encrypted secret.

mgimind vault get <key>

Retrieve a secret (prompts for the master password, then confirms).

mgimind vault list

List key names (values never shown).

mgimind vault delete <key>

Delete a secret.

Service and data

Command

What it does

mgimind mcp

Run as the MCP server over stdio (what your assistant connects to). One warm process; starts Qdrant automatically.

mgimind serve / mgimind stop

Start / stop the bundled Qdrant by hand (rarely needed, mcp does it for you).

mgimind migrate [--purge]

Re-embed legacy per-library collections into the single memories collection. Idempotent. --purge deletes the old collections afterward.

mgimind relibrary --from <lib> --to <lib> (--source-match <re> | --content-match <re> | --ids-file <path>) [--apply]

Move memories to a different library. Point ids are content-addressed, so a move recomputes the destination id, carries over the exact vectors and payload, repoints any cited_by reference, and deletes the old point. Dry-run by default; a destination id already occupied by unrelated content is reported, not clobbered; safe to re-run after an interruption.

mgimind backup <file> / mgimind restore <file>

gzip+tar of the data directory. When Qdrant answers, each collection is captured through its own snapshot API instead of a raw copy of qdrant/storage, so a concurrent write can't corrupt the backup; models/ is always excluded (re-downloadable via doctor --fix). --encrypt wraps the same archive in AES-256-GCM.

mgimind export [--format json|md] [--output <dir>]

Export memories to files. md rejoins the fragments of a chunked document back into one block, in order.

mgimind import <obsidian|markdown> <path> [--library <l>]

Import a folder of markdown (recursively, chunked).

mgimind doctor [--fix]

Health check; --fix downloads anything missing.

Configuration

Config lives at ~/mgimind/config.json. Fields that affect retrieval:

Field

Default

Meaning

model_name

multilingual-e5-base

Embedding model directory under models/.

vector_size

768

Embedding dimension. Must match the model.

pooling

mean

mean (e5, MiniLM) or cls (some XLM-R models).

uses_token_type_ids

false

true for BERT-family models, false for XLM-R / e5.

query_prefix / passage_prefix

query: / passage:

e5 needs these; empty for models that don't.

rerank_enabled

true

Cross-encoder reranking. See the language note below.

rerank_model

bge-reranker-base

Reranker directory under models/.

rerank_top_k

20

How many candidates to fetch and rerank before returning limit.

qdrant_port

6334

Qdrant gRPC port.

qdrant_http_port

none

Qdrant's REST port, for backup/restore snapshots and the doctor report. Derived as qdrant_port - 1 (Qdrant's own default pairing) when unset; set this only if your server doesn't follow that pairing.

qdrant_api_key

none

If set, Qdrant starts with it and the client authenticates.

Languages and the reranker

The default stack is tuned for English, because that's where the assistant itself reasons best and where the models are strongest. It's the recommended setup for an English-first project.

A few honest details:

  • The embedder (multilingual-e5-base) is genuinely multilingual. An English query finds a Russian note and vice versa, and search alone works well across languages.

  • The default reranker (bge-reranker-base) is English-tuned. It improves English ranking, but it lowers ranking quality on Russian (and other non-English languages). This is the one place the defaults favor English.

  • If your content is mostly Russian (or another non-English language): set rerank_enabled = false. Hybrid dense+sparse search on its own ranks those languages well; the English-tuned reranker is what hurts them. Or swap in a stronger multilingual reranker.

  • Reranking costs cross-encoder inference per query: roughly one to two seconds for 20 candidates on a CPU-only box. Lower rerank_top_k or turn reranking off for snappier search.

Changing the embedding model

Switching models usually changes the vector dimension, so existing memories must be re-embedded:

  1. Back up first: mgimind backup ~/mgi-backup.tar.gz.

  2. Set model_name, vector_size, pooling, uses_token_type_ids, and the prefixes in config.json for the new model.

  3. mgimind doctor --fix to download it. Only the bundled defaults are pinned; a custom model downloads with an "integrity not verified" warning, so pin its SHA-256 in integrity.rs if you want strict verification.

  4. mgimind migrate to re-embed everything from the stored text under the new model.

Troubleshooting

  • "Model not found ... run doctor --fix": the model is not in ~/mgimind/models/. Run mgimind doctor --fix.

  • "invalid expand shape" / inference errors: usually an input far over 512 tokens. add chunks automatically; if you call the library directly, chunk first.

  • Searches are slow: that's the reranker on CPU. Lower rerank_top_k, or set rerank_enabled = false. Models stay warm for the life of the mgimind mcp process, so only the first lookup of a session pays the load cost.

  • A tool fails right after install: run mgimind doctor (the assistant can call mind_doctor); it reports exactly what's missing (Qdrant not running, a model not downloaded, ONNX Runtime absent, a file quarantined by AV) and --fix downloads what it can.

  • Dimension mismatch warning: a collection's vectors don't match vector_size, usually after a model change. Re-embed with mgimind migrate.

  • Russian results feel off: set rerank_enabled = false (see the language note above).

  • A VPN, tunnel or proxy breaks while mgimind is running: run mgimind doctor and read the network footprint. Every mgimind port is loopback-bound, and mgimind changes no route, DNS or firewall setting, so it cannot pull traffic out of a tunnel. Look at what starts alongside it: Docker Desktop and WSL2 add virtual adapters of their own, and TUN clients with strict routing can drop the tunnel when an adapter appears or disappears.

Security

  • Downloads verify against pinned SHA-256 (fail-closed) for ONNX Runtime (linux-x64), Qdrant, and the default models (e5 and the reranker). Other platforms and custom models warn instead of trusting blindly.

  • Qdrant binds to 127.0.0.1 only and supports an API key.

  • The vault is AES-256-GCM with an Argon2id-derived key (parameters pinned so a library upgrade can't lock you out). Terminal-only, so the master password and decrypted secrets never travel over the MCP channel. The mind_vault_* MCP tools return terminal instructions, never the secret value.

  • File writes are atomic and directory-fsynced, so a crash leaves the old file or the new one, never a corrupt one.

Network footprint

Every socket mgi-mind opens is bound to loopback:

Component

Port

Bind

Qdrant HTTP

qdrant_http_port, derived as qdrant_port - 1 by default

127.0.0.1

Qdrant gRPC

qdrant_port, 6334 by default

127.0.0.1

mind_visualize

4173

127.0.0.1

mgimind viewer

random, printed at startup

127.0.0.1

mgimind serve-http

random, or --port

127.0.0.1 unless --host

serve-http --host is the one way to bind another interface (a Docker -p mapping needs it), and a non-loopback host is refused unless you also pass --agent-token.

mgimind installs no driver, adds no network adapter, and changes no route, DNS or firewall setting. mgimind doctor prints this footprint with a live probe of every port, so the claim is something you can check rather than trust.

Status and audit

Current version: 2.8.2 (semver-stable since v1.0.0). The 0.x line built the foundation: the audit log and ephemeral viewer (0.10), the quarantine layer and best-effort retrieval policy (0.11), the viewer wave (0.12), session liveness (0.13), and procedural memory (0.14, benchmarked on LongMemEval-S plus a 227-pair error→fix dataset from 20 public repos). The 1.x line added the validity model: the duel rule, the doubt window and its background re-test, bi-temporal fact supersession, the confidence score, and typed outcome signals (mind_outcome), plus install-mode CPU/GPU profiles.

The MCP surface is additive-only until a 2.0 bump: 29 live tools plus 15 deprecated aliases kept for compatibility. Nothing is renamed or removed inside 2.x; new verbs (most recently mind_skill) may be added. The other 1.0 contracts are the asymmetric "Qdrant now → md says" reconcile diff and the MGIMIND_MODEL_VARIANT={cpu|gpu|auto} switch.

The project went through a code audit; AUDIT_STATUS.md accounts for every issue one by one with where it was fixed or why it was deferred. CHANGELOG.md has the per-release history for the 1.x line plus the v1.7 candidate section (pre-1.0 releases are in CHANGELOG-ARCHIVE.md), and ROADMAP.md names what is committed for the next releases and which directions are still candidate at the v3.0 horizon.

Project layout

src/
  cli.rs         command dispatch and output rendering
  storage.rs     Qdrant: single collection, hybrid search, history, stats, migrate, chunking
  embedder.rs    ONNX embedding (model-aware pooling, prefixes, 512-token cap)
  reranker.rs    cross-encoder reranking
  knowledge.rs   knowledge-graph facts + cardinality + supersession
  duel.rs        duel rule: resolve contradicting facts (flip / contested / quarantine)
  doubt.rs       doubt window + background active re-test of entrenched facts
  activity.rs    recent-query buffer, corpus mean (centering), origin-context store
  confidence.rs  per-fact confidence score (dependants / confirmations / signals)
  outcome.rs     typed external signals (test_passed, code_compiled, ...) into weight
  procedure.rs   procedural memory: learn / recall / outcome
  ingest.rs      auto-extract & ingest candidates
  relevance.rs   relevance gate (length, blacklists, decision markers, token novelty)
  retrieval_policy.rs  search-before-answer classifier
  provenance.rs  cited external snippets with mandatory source
  extractor.rs   optional local LLM extraction (off by default)
  consolidate.rs merge duplicates, report cold entries
  md_reconcile.rs md import as reconcile with "md wins"
  audit.rs       append-only audit log for memory/fact/procedure/skill
                 writes, updates, deletes and quarantine transitions (not
                 pinned blocks, kv, vault, or sessions yet)
  http_api.rs    loopback HTTP surface for multi-agent access
  viewer.rs      ephemeral local HTTP viewer (axum, static frontend baked in)
  pulse.rs       live graph pulses for the viewer
  session.rs     per-agent session files
  secrets.rs     secret-scrub on the write path
  vault.rs       encrypted secret vault (terminal only)
  mcp.rs         MCP server over stdio (hand-rolled JSON-RPC; warm in-process models)
  config.rs      configuration + install-mode profiles
  integrity.rs   pinned SHA-256 hashes for downloads
  util.rs        atomic writes, verified downloads
  (plus migrate, install-mode, access/decay, and bench harnesses)
tests/
  cli_integration.rs   black-box tests against a real Qdrant (CLI + MCP round-trip)
  http_integration.rs  the multi-agent HTTP surface end to end

License

Apache-2.0. See LICENSE.

Available Tools

44 tools
mind_addC

Add a memory entry

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoSource tag
contentYesContent to store
libraryYesLibrary name

TDQS

C2.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether entries persist, are deduplicated, are indexed for recall, require a pre-existing library, or what happens on conflict — all relevant for a memory write tool.

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

Conciseness3/5

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

The phrase is a single front-loaded clause with zero waste, which is good structurally. But it is so terse that it tips into under-specification rather than efficient conciseness.

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?

With no annotations, no output schema, and two required parameters whose relationship (library + content) is unstated, the description is too thin for a write tool in a large sibling set. An agent needs at least the library prerequisite and the intended scope of "memory entry" to call 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?

Schema description coverage is 100%, so the schema already documents library, content, and source, making 3 the baseline. The description adds no extra meaning, such as format or constraints on the required library or content fields.

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 a verb and resource ("Add a memory entry"), which is enough to know it creates a memory. However, it gives no differentiation from the many sibling write tools such as mind_fact_add, mind_create, mind_vault_store, mind_learn, or mind_ingest, so an agent cannot tell which add-path this is.

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 when-to-use guidance, no mention of prerequisites, and no named alternative among the crowded add/store siblings. The agent is left to guess whether this is the right insertion tool.

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

mind_blockA

Pinned core-memory blocks (persona / user / current-project): a few small, named notes that are ALWAYS injected at the top of the session context, not ranked retrieval. Use for stable, always-relevant facts the agent must not have to search for. action=set overwrites, get/list read, remove deletes. Content is capped (4KB/block, 32 blocks); this is core memory, not a second store: put searchable knowledge in mind_add instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoBlock name [a-z0-9_-]; required for set/get/remove
actionYesOperation (default: list)
contentNoBlock content; required for action=set

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses the injection behavior, per-action semantics (set overwrites, get/list read, remove deletes), and hard resource limits (4KB/block, 32 blocks). It does not state what happens on overwrite of a missing block or whether remove is recoverable, which is the remaining gap for a mutation 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?

Front-loads what the tool is and the ALWAYS-injected constraint, then actions, then limits, then the sibling alternative. Dense but every clause adds an operational fact; only the parenthetical example list is mildly expendable.

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

Completeness4/5

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

For a 3-param mutation tool with no annotations and no output schema, the description covers purpose, action semantics, capacity limits, and alternatives. Only edge-case behavior (overwrite of a nonexistent block, reversibility of remove) remains undocumented.

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 documented enum, so the baseline is 3, but the description adds semantics the schema lacks — that 'set' overwrites existing content and that 'list' needs no name — plus the storage cap that bounds what content may be passed.

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?

Names the specific resource (pinned core-memory blocks: persona/user/current-project) and its defining behavior (ALWAYS injected at top of session context, not ranked retrieval). This distinguishes it clearly from retrieval siblings like mind_search and mind_recall.

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 when-to-use ('stable, always-relevant facts the agent must not have to search for') paired with an explicit when-not and named alternative ('put searchable knowledge in mind_add instead'). No inference required to route between the two tools.

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

mind_browseA

Browse/list memories by metadata WITHOUT a search query: inventory, not ranking. Newest first. Use to answer 'what did agent X write recently', 'everything from this source', 'all memories since a date'. Same filters as mind_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax records
authorNoOnly memories written by this agent
sourceNoOnly memories with this ingest source tag
libraryNoList from one library
archivedNo'only' lists ARCHIVED (soft-forgotten) memories so they can be restored; 'include' returns both archived and live. Omit to list only live memories.
librariesNoList from ANY of these libraries (OR)
created_sinceNoOnly memories created at/after this instant, INCLUSIVE (RFC3339 or YYYY-MM-DD)
created_beforeNoOnly memories created before this instant, EXCLUSIVE (RFC3339 or YYYY-MM-DD)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose useful behavior: newest-first ordering, no relevance ranking, and that metadata filters rather than query matching drive results. However, it says nothing about pagination behavior, whether 'limit' is the only paging mechanism, authentication/permission requirements, or what the response contains.

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 short sentences, all front-loaded with the most discriminating information (no query, inventory not ranking) first. No filler, no restatement of the tool name.

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

Completeness4/5

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

For a read-oriented browse tool with full param coverage, the description covers scope, ordering, and filter semantics. The remaining gap is return shape/paging, which matters since there is no output schema, but it is minor for an inventory 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 every parameter is documented in the schema itself, including the archived enum semantics and inclusive/exclusive date bounds. The description adds only 'Same filters as mind_search', which cross-references rather than elaborating. Baseline 3 is correct.

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?

States a specific verb+resource ('Browse/list memories by metadata') and immediately distinguishes the operation from its nearest sibling: 'WITHOUT a search query: inventory, not ranking'. The contrast with mind_search (named explicitly) lets an agent pick this tool without opening either schema.

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?

Gives three concrete trigger questions ('what did agent X write recently', 'everything from this source', 'all memories since a date') plus the discriminating condition (inventory vs ranking) and points to mind_search for shared filter semantics. This goes beyond implied usage to explicit when-to-use.

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

mind_consolidateA

Preview what mgimind consolidate would do: count of exact duplicates, near-duplicates, and cold (old + unused) entries. Always dry-run on the MCP surface; destructive consolidation stays on the CLI where the user types --apply explicitly. Use this when the user asks 'how much duplicate memory do I have?' or before suggesting they run the CLI command.

ParametersJSON Schema
NameRequiredDescriptionDefault
libraryNoScope to one library (omit for all)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden, and it does disclose the critical trait: the tool is always dry-run on the MCP surface and will never mutate memory. It does not discuss cost on large libraries or how scope affects the counts, so it stops just short of full coverage.

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 tight sentences, front-loaded with what is counted, then the safety/dry-run guarantee, then the invocation trigger. No redundancy and every sentence carries 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?

No output schema exists, and the description partially compensates by naming the three count categories returned. For a single optional-parameter read tool this is nearly sufficient; only the exact shape/threshold definition of 'cold' is left unspecified.

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?

There is one optional parameter with 100% schema description coverage ('Scope to one library (omit for all)'), so the schema already carries the semantics. The description adds no further meaning about argument form or default scoping, matching the baseline for high-coverage single-parameter tools.

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?

Names a specific verb (preview) and enumerates exactly what is measured: counts of exact duplicates, near-duplicates, and cold (old + unused) entries. It also positions itself against the CLI `mgimind consolidate` path, so an agent can tell this apart from a destructive consolidation tool without opening the schema.

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?

Gives explicit trigger conditions ('Use this when the user asks how much duplicate memory do I have?') and a sequencing cue ('before suggesting they run the CLI command'), plus an explicit exclusion – destructive consolidation lives on the CLI with `--apply`. Nothing about when to reach for this vs. alternatives is left to inference.

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

mind_contextB

Generate compact context briefing for session start

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and it is essentially silent. It does not say whether the call is read-only, what the briefing contains or how large it is, whether it writes anything, or what happens if no prior session data exists.

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 with no filler, and the trigger ('session start') is front-loaded alongside the action. It is efficient, though its brevity comes at the cost of content rather than being a virtue of trimming redundancy.

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?

With no output schema and no annotations, the description is the only source of information, and it leaves the return value completely undefined. An agent cannot tell what 'compact context briefing' actually delivers or how it differs from mind_session_start before committing to the call.

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 takes zero parameters, which is the baseline-4 case: there are no parameter semantics to explain and nothing in the schema or description needs reconciling.

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?

States a specific verb ('Generate') and a specific resource ('compact context briefing for session start'), which is more than a restatement of the name. However, it does not distinguish itself from closely related siblings such as mind_session_start, mind_recall, or mind_stats, leaving the agent to guess which one produces session context.

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 phrase 'for session start' implies the trigger condition, so usage is inferable at a high level. There is no explicit when-to-use guidance, no when-not-to-use, and no pointer to alternatives among the many sibling tools that could also supply session context.

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

mind_createA

DEPRECATED: use mind_library(action="create"). Removed in v2.0. (Create a new library)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden, and it discloses the most important trait an agent needs: this tool is deprecated and removed in v2.0. That is genuine lifecycle/safety context beyond the schema. It does not say whether calling it now errors or still creates a library, which is the one remaining behavioral gap.

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 compact sentence-set with the deprecation warning front-loaded, the replacement named, and the removal version given. Nothing is wasted and the most decision-relevant information comes first.

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

Completeness4/5

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

For a one-parameter, never-to-be-called tombstone tool, the agent needs only to know not to use it and what to use instead, both of which are supplied. There is no output schema and no annotations, and the description is sufficient for correct selection behavior.

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 0% for the single required 'name' parameter. The description implies the parameter is the library name via 'Create a new library', which is minimal compensation, but adds no format, uniqueness, or naming constraints. With only one parameter this is adequate but thin.

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 states both the operation ('Create a new library') and its lifecycle status ('DEPRECATED ... Removed in v2.0'), and points at the sibling mind_library as the replacement. An agent can immediately tell what this tool did and that it should not be selected. It stops short of a 5 because the actionable purpose is really 'do not call this', with the original function only parenthetically noted.

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 gives explicit routing guidance: use mind_library(action="create") instead, and names the version in which this tool disappears. This is clear when-not-to-use instruction, though it does not say whether the tool still functions in the current version (i.e., whether it is a hard failure or a soft warning).

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

mind_deleteA

DEPRECATED: use mind_library(action="delete"). Removed in v2.0. (Delete a specific memory by ID)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory UUID (from search results)
libraryYesLibrary name

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, but it does add real behavioral context: the tool is deprecated and removed in v2.0, so calls may fail or be unavailable. It does not disclose whether the deletion is permanent or recoverable (a mind_restore sibling exists) or what permissions are needed.

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 tight sentence with the migration directive front-loaded and the tool's function following. Every clause earns its place; nothing is padded.

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

Completeness4/5

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

For a deprecated two-parameter tool with fully documented schema and no output schema, the description covers what the agent needs: the replacement path and removal status. It is slightly ambiguous about whether the tool still functions in the current version.

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 both parameters (id as Memory UUID, library as Library name). The description only echoes the 'by ID' notion and adds no format or sourcing detail beyond the schema, so the baseline 3 applies.

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 parenthetical states a specific verb and resource: 'Delete a specific memory by ID'. It also routes the agent away from itself via the mind_library(action="delete") pointer, so an agent can distinguish it from siblings. The purpose is relegated to parentheses behind the deprecation banner, which slightly weakens front-loading.

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 names the replacement (mind_library(action="delete")) and the condition that makes this tool unusable ('Removed in v2.0'). The agent is told both what to use instead and why, leaving nothing to inference.

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

mind_doctorC

Check system health

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it does not meet it. 'Check' implies a read-only inspection, yet the schema exposes a 'fix' flag that presumably mutates or repairs state; the description never discloses that this tool can change data, nor what would be changed or whether it is reversible.

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

Conciseness3/5

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

Three words with no waste and the verb is front-loaded, so it is structurally fine. The problem is under-specification rather than verbosity — it is concise to the point of being uninformative.

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?

For a tool with no annotations, no output schema, and an undocumented mutating parameter, the description should explain what is checked, what the result means, and what fix does. None of that is present, so an agent cannot invoke it confidently.

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

Parameters2/5

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

Schema description coverage is 0% and the description says nothing about the single 'fix' parameter, whose boolean semantics are the most consequential part of the call. The description adds zero meaning beyond the schema, and the schema itself explains nothing, leaving a mutation switch entirely undocumented.

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 gives a verb ('Check') and a resource ('system health'), so the intent is broadly readable, but 'system' is undefined and it does not differentiate itself from siblings like mind_stats or mind_quarantine_list, which also inspect state. An agent cannot tell from the text what is actually being diagnosed.

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 when-to-use guidance, no mention of when to run this versus mind_stats, and no statement of prerequisites or cost. The existence of a repair mode is never hinted at, so the agent has no basis for choosing between a diagnostic and a corrective call.

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

mind_exportB

Export all data to JSON or Markdown files

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson or mdjson
outputNoOutput directory./mgimind-export

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, so the description carries the full disclosure burden. It conveys that files are written and which formats are available, but says nothing about overwriting existing files, what 'all data' includes (secrets, vault contents?), permissions needed, or whether the default directory is created. For a filesystem-writing operation this is a significant gap.

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 short sentence with the verb and the format/destination constraint front-loaded. No filler.

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

Completeness3/5

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

For a two-parameter export tool with no annotations and no output schema, the description is minimally viable: it names the artifact types but leaves the write behavior, scope boundaries, and failure modes unexplained.

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% and both fields already document their accepted values and defaults. The description restates the format options and adds nothing about the output directory or path semantics, so baseline 3 applies.

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?

States a specific verb ('Export') and resource ('all data') plus the output artifacts (JSON or Markdown files). An agent can tell this apart from mind_import by direction, though the description never names that sibling or any other.

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 when-to-use or when-not guidance. Nothing distinguishes this from mind_vault_store, mind_import, or mind_consolidate, all of which move data in or out of the store, so the agent must infer backup/portability intent on its own.

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

mind_factA

Knowledge-graph facts (subject -> predicate -> object). Single tool with action: add (insert a new fact), query (list facts about a subject), invalidate (soft-delete a fact by id when a single-valued fact has been superseded). Replaces mind_fact_add / _query / _invalidate.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRequired for invalidate (from action=query)
as_ofNoWith action=query: POINT-IN-TIME: return the facts that were CURRENT at this instant (RFC3339 or YYYY-MM-DD), time-travelling the superseded chain. Answers 'what was X on date Y'.
actionYesOperation
objectNoRequired for add
historyNoWith action=query: return the SUPERSEDED history (past TemporalSingle values, oldest first) instead of current facts
subjectNoRequired for add/query
predicateNoRequired for add

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add real context: invalidate is a soft-delete, not a hard delete, and is scoped to superseded single-valued facts. However it is silent on side effects of add (whether inserting a single-valued fact supersedes prior ones), permissions, and error behavior, leaving material mutation semantics undisclosed.

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 dense sentence that front-loads the data model, then enumerates the actions with tight parentheticals, and closes with the consolidation note. No filler sentences; every clause carries 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?

For a 7-parameter multiplexed tool with no output schema, the description covers the data model, all three action modes, and the soft-delete nature of invalidate, which is what an agent needs to select a mode. It stops short of describing what each action returns or any limits on query results, which would round out the picture.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description slightly exceeds it by giving the semantics of the `action` enum values rather than just labeling the field. The deeper parameter meaning (as_of time-travel, history supersession chain) lives in the schema, so no additional credit is warranted there.

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?

States the resource concretely ('Knowledge-graph facts (subject -> predicate -> object)') and decomposes the multiplexed tool into its three actions with a verb each (add/insert, query/list, invalidate/soft-delete). It also names the three legacy tools it replaces, so an agent can map intent to this tool without opening a schema.

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?

Each action carries a when-to-use cue: add for inserts, query for 'list facts about a subject', and invalidate specifically 'when a single-valued fact has been superseded'. That is solid routing guidance, but there is no explicit when-not guidance or comparison against the non-fact siblings (mind_recall, mind_search) that may also surface facts.

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

mind_fact_addA

DEPRECATED: use mind_fact(action="add"). Removed in v2.0. (Add a knowledge graph fact)

ParametersJSON Schema
NameRequiredDescriptionDefault
objectYes
subjectYes
predicateYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations, so the description carries the full burden. It does disclose valuable lifecycle context (deprecated, removed in v2.0), but it never says whether calls still succeed, error, or no-op before removal — the key behavioral question for a deprecated endpoint. Additional context beyond the deprecation notice is 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?

A single front-loaded sentence with zero waste: deprecation, replacement, and removal timeline come first, with the actual function noted briefly at the end.

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

Completeness4/5

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

For a deprecated stub with no output schema, the description gives the agent everything actionable: don't call it, call mind_fact instead. The only shortfall is not stating the runtime behavior of the deprecated call itself.

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

Parameters2/5

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

Three required parameters (subject, predicate, object) with 0% schema description coverage and no enum or format hints. The description adds no meaning about what values these should take or how they relate to the knowledge graph, so it fails to compensate for the coverage gap.

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 parenthetical states a specific verb+resource (add a knowledge graph fact), so the tool's function is identifiable despite the deprecation banner dominating the string. It also implicitly distinguishes itself from siblings by naming mind_fact as the replacement.

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 the agent not to use this tool and gives the exact alternative call (mind_fact(action="add")), plus the removal version. There is no ambiguity about when (never) or what to use instead.

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

mind_fact_invalidateA

DEPRECATED: use mind_fact(action="invalidate"). Removed in v2.0. (Soft-delete a fact by ID (for superseding a changed single-valued fact))

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFact ID from mind_fact_query

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It usefully discloses that this is a 'soft-delete' (vs. hard delete) and its intended semantic purpose (superseding a changed single-valued fact), which adds real context beyond the name. However, it omits permissions, reversibility details, and side-effect scope for 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.

Conciseness4/5

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

Front-loaded and efficient: deprecation and replacement come first, purpose follows. Slightly redundant with the nested parentheses around the purpose clause, but no wasted sentences.

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

Completeness4/5

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

For a deprecated single-param tool with no output schema, the essential information an agent needs — that it is deprecated and what to call instead — is fully present. Only minor behavioral detail (permissions, reversibility) is absent.

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 sole 'id' parameter is documented in the schema ('Fact ID from mind_fact_query'). The description adds no syntax or format detail beyond that, so the baseline 3 applies when 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 states a specific verb+resource ('Soft-delete a fact by ID') and immediately front-loads a deprecation notice pointing to the replacement sibling 'mind_fact(action="invalidate")'. An agent can distinguish this from mind_fact, mind_fact_add and mind_fact_query without opening any schema.

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 routing guidance: it names the exact replacement call and states this tool is 'Removed in v2.0'. The when-not-to-use condition and the concrete alternative are both spelled out, leaving nothing to inference.

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

mind_fact_queryA

DEPRECATED: use mind_fact(action="query"). Removed in v2.0. (Query facts about a subject)

ParametersJSON Schema
NameRequiredDescriptionDefault
subjectYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose the dominant behavioral fact: the tool is deprecated and removed in v2.0, so calls may fail. It does not describe return behavior or error semantics, but for a deprecated stub the critical trait is surfaced.

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 short sentences, with the deprecation warning and replacement call front-loaded before the purpose gloss. Nothing is wasted.

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

Completeness4/5

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

For a one-parameter, annotation-free deprecated stub with no output schema, the description supplies what an agent actually needs: do not call this, call mind_fact(action="query") instead. Only the subject parameter's expected shape is left unaddressed.

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

Parameters2/5

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

Schema description coverage is 0% and the single 'subject' parameter has no schema description. The description only restates 'a subject' without adding format, validation, or example semantics, so it does not compensate for the coverage gap.

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 parenthetical '(Query facts about a subject)' states a specific verb+resource, and the deprecation notice names the sibling (mind_fact) that supersedes it. An agent can tell what this tool would do and that it is superseded without opening the schema.

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?

It explicitly gives the when-not (DEPRECATED, removed in v2.0) and the alternative with the exact call form: mind_fact(action="query"). This is the strongest possible routing guidance, leaving nothing to inference.

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

mind_historyC

Show recent additions chronologically

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it discloses only the sort order. It says nothing about the scope of 'additions', the default cap (schema shows default 10 but that is not in the text), the return shape, or any pagination/permission behavior.

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

Conciseness3/5

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

At four words it is front-loaded and waste-free, but it is terse to the point of under-specification rather than genuinely efficient. There is no filler, yet the single sentence also carries no useful detail.

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?

For a simple listing tool this is thin: with no output schema and no annotations, the description should clarify what is listed, in what direction, and how many by default. None of that is present, leaving the agent unsure what 'additions' refers to.

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

Parameters2/5

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

Schema description coverage is 0% for the single 'limit' parameter, which has a default of 10 but no documentation anywhere. The description never mentions limiting or result counts, so it fails to compensate for the coverage gap.

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 phrase 'Show recent additions chronologically' names a verb (show) and a resource (recent additions) with an ordering qualifier, so the basic action is inferable. However, 'additions' is undefined (additions to what collection?), and it does not distinguish itself from plausible siblings like mind_list, mind_browse, or mind_recall_all, which likely also enumerate stored items.

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 versus the many listing/recall siblings, no prerequisites, and no exclusions. The agent is left to infer that 'recent additions' means a recent-items listing, which is only weakly implied.

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

mind_importC

Import markdown files from a directory (Obsidian, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to vault/directory
sourceNoSource type: obsidian, markdownobsidian
libraryNoTarget library nameimported

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It says nothing about what importing does to existing data (overwrite, dedupe, append), what permissions or vault access are required, whether the operation is idempotent, or what happens on partial failure — all material for a write operation into a knowledge base.

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 with the core action front-loaded and no filler. It is efficient, though its brevity is partly under-specification rather than disciplined concision.

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?

For a write-style import tool with no annotations, no output schema, and a knowledge-base target, the description omits result behavior, conflict handling, and target-library semantics. The schema covers inputs but nothing compensates for the missing behavioral context.

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

Parameters3/5

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

Schema description coverage is 100%, so path, source, and library are already documented in the schema with defaults. The description adds nothing about parameter semantics beyond the schema (e.g., accepted source values or how the target library is created). Baseline 3 applies when the schema does the work.

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 states a specific verb and resource: importing markdown files from a directory, with examples of the source ecosystem (Obsidian). An agent can tell this is a bulk file-ingestion tool rather than a query or mutation of individual items. It does not, however, distinguish itself from near-siblings like mind_ingest, mind_learn, or mind_vault_store, which likely also bring external content into the store.

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 versus mind_ingest, mind_learn, or mind_vault_store, and no stated preconditions (directory must exist, files must be markdown, whether re-imports are safe). The only contextual hint is the Obsidian parenthetical, which is an example source, not a usage rule.

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

mind_ingestA

Auto-ingest memory. PRIMARY: pass a candidates array of already-extracted items you judged worth keeping. BACKSTOP: omit candidates and pass raw text for marker-based heuristic extraction. Each candidate is secret-scrubbed and near-dup-checked before writing.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoRaw text for heuristic extraction (used only when candidates is omitted)
libraryNoTarget library for memory candidates. Pass the library of the PROJECT this content is about (e.g. its project name) — most mgi-mind instances split memory by project, and 'projects' is the catch-all for cross-project or unclassified notes, not a safe generic choice. The default exists so the call doesn't fail when omitted, not as a recommendation; look up the right library (mind_context or mind_search) before relying on it.projects
candidatesNoExtracted items. Each is one of: {"type":"memory","content":"..."} | {"type":"fact","subject":"...","predicate":"...","object":"..."} | {"type":"procedure","trigger_error":"...","fix":"..."}

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses that each candidate is secret-scrubbed and near-dup-checked before writing, implying a write operation and some safety processing. However, it omits permissions, idempotency, reversibility, and what a successful write returns, leaving significant behavioral gaps.

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

Conciseness5/5

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

Three tight sentences with no filler, front-loading the primary use case before the fallback and safety note. Every sentence carries unique 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?

For a three-parameter tool with no output schema and no annotations, the description covers the main mode-selection and safety behavior well. It is still silent on return values and what happens if both raw and candidates are omitted, leaving minor gaps for an agent trying to interpret results.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds priority semantics ('PRIMARY' candidates, 'BACKSTOP' raw) that are not in the schema, helping an agent decide which parameter to populate first. The library parameter's detailed usage guidance lives entirely in the schema, not the 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?

States a specific verb (ingest) and resource (memory), and distinguishes two operating modes (PRIMARY/BACKSTOP). However, it does not differentiate from sibling tools like mind_add or mind_learn that also write memory, so an agent must infer which to pick.

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 tells when to use candidates vs raw ('PRIMARY: pass candidates... BACKSTOP: omit candidates...'), giving clear context for parameter selection. It stops short of naming alternative sibling tools or when not to use this tool at all.

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

mind_learnA

Record a procedural-memory lesson (error -> fix). Stored unverified by default (a manual lesson has no truth signal); surfaced with low weight until confirmed. Pass verified=true ONLY with a deterministic signal (test green / exit 0).

ParametersJSON Schema
NameRequiredDescriptionDefault
fixYesWhat resolved it
errorYesError message / signature (will be normalized: paths, line numbers, addresses stripped)
contextNoShort task description (drives semantic recall)
verifiedNoTrue ONLY if a deterministic check confirmed the fix
provenanceNoProject / file where this applied

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses that records are stored unverified by default, surfaced with low weight until confirmed, and explains the truth-signal semantics. It omits return shape, dedup/merge behavior, and permission needs, keeping it short of a 5.

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?

Three dense sentences, front-loaded with the purpose before the storage/semantics details. Every sentence earns its place. Slightly terse around the usage condition but nothing is wasted.

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

Completeness4/5

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

For a five-parameter mutation tool with no annotations and no output schema, the description covers the highest-value behavior (default unverified state, low recall weight, verified gating). It stops short of describing what the call returns or how repeated lessons interact, leaving minor 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%, so the input schema already documents all five parameters, making 3 the baseline. The description adds slight value by elaborating the verified condition ('test green / exit 0') beyond the schema wording, but does not clarify error normalization or context semantics further.

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?

States a specific verb and resource: 'Record a procedural-memory lesson (error -> fix)'. The error->fix framing gives a concrete shape of what gets stored. It does not explicitly differentiate from sibling write tools like mind_add, mind_skill, or mind_procedure_outcome, so it falls short of a 5.

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?

Provides conditional guidance for the verified flag ('Pass verified=true ONLY with a deterministic signal'), which is real usage instruction. However, it never says when to prefer mind_learn over related siblings (mind_skill, mind_procedure_outcome, mind_add) or when not to use it, so usage is largely implied.

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

mind_libraryA

Library namespaces. Single tool with action: create (new library by name), list (all libraries with counts), delete (remove a specific memory by id within a library: destructive). Replaces mind_create / mind_list / mind_delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRequired for action=delete; memory uuid from search results
nameNoRequired for action=create
actionYesOperation
libraryNoRequired for action=delete

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully flags delete as destructive, but says nothing about permissions, reversibility, or what 'counts' in list represents, leaving mutation semantics thin for a tool with zero annotation coverage.

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?

Front-loaded with the resource name, then a compact per-action breakdown that reads cleanly. Dense but no sentence is wasted; slightly telegram-style but appropriate for a dispatcher.

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

Completeness4/5

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

For a three-action dispatcher with full schema coverage and no output schema, the description covers what each action does and its relationship to siblings. Only the destructive/permission nuance for delete is under-explained.

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 id/name/library each documenting which action requires them, so the schema does the heavy lifting. The description adds only high-level action-to-parameter flavor beyond that, which is the expected baseline.

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?

States the resource ('library namespaces') and enumerates each action with its specific effect: create a named library, list all with counts, delete a memory by id. It explicitly names the siblings it supercedes (mind_create / mind_list / mind_delete), so an agent can place it precisely without opening schemas.

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 action breakdown and the 'Replaces mind_create / mind_list / mind_delete' note tell the agent when to reach for this tool over the older single-purpose siblings. No explicit 'when-not' or prerequisite guidance, but the routing context is clear.

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

mind_listA

DEPRECATED: use mind_library(action="list"). Removed in v2.0. (List all libraries)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden but discloses the lifecycle state (deprecated, removed in v2.0) and the successor call, which is the key behavioral fact. It doesn't cover return format or auth, but for a deprecated read-style listing tool the lifecycle warning is the relevant disclosure.

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?

Front-loads the actionable warning (DEPRECATED + replacement) before the parenthetical description of what it did. No wasted words.

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

Completeness4/5

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

For a deprecated, zero-param tool with no output schema, the entry gives the agent everything needed: what it did, that it is deprecated, the replacement call, and the removal version. Only a note on whether it still functions in the current version is arguably missing.

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?

Zero parameters, so there is nothing to document; baseline 4 applies. The description correctly adds no parameter noise.

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 parenthetical '(List all libraries)' states a specific verb and resource, so the agent knows what the tool did. However, the deprecated/replacement framing leads, and it doesn't explicitly differentiate scope against siblings like mind_library beyond naming the replacement.

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?

It explicitly tells the agent not to use this tool and to use mind_library(action="list") instead, plus states the removal version. The when-not-to-use and the alternative are both named with no inference required.

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

mind_outcomeA

v1.5: Record a typed external-signal outcome on any memory (not only procedures). Use this when a test passed/failed, code compiled, a user explicitly confirmed/denied a fact, or a citing memory referenced this one. Idempotent on (memory_id, signal_type, source): re-posting the same triple updates the existing entry rather than appending a duplicate. Signals contribute to the fact's external_signal_score, which feeds the duel rule and the §3 Mechanism 2 doubt-window guardrail. When memory_id is a PROCEDURE and signal_type is test_passed or code_compiled, this also bumps the procedure's success/fail counters: so a green test after a mind_learn fix marks that playbook verified without a separate mind_procedure_outcome call. Pass the procedure id returned by mind_learn.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoStable identifier of where the signal came from (e.g. 'ci.github.com/run/12345', 'user-mad'). Used for idempotency.
successNoDid the signal positively confirm the fact (true) or negate it (false)? A failed test_passed (success=false) pulls the score negative.
memory_idYesTarget memory id (from mind_search or any tool returning ids)
signal_typeYesWhat kind of signal this is. test_passed is the strongest (weight 1.0); cited_by the weakest (0.2).

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and discloses idempotency on (memory_id, signal_type, source), downstream external_signal_score effects, and procedure counter bumps. However, it omits permissions, error behavior, and the exact response shape, so it is rich but not fully complete.

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 purpose and usage, then moves into idempotency and side effects, which is a sensible structure. It is somewhat dense with internal references such as '§3 Mechanism 2 doubt-window guardrail' and a version prefix, but most sentences carry actionable 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?

For a mutation-style tool with no annotations and no output schema, the description covers purpose, when to use it, idempotency, scoring impact, and procedure integration. It still leaves gaps around return values and error conditions, but it is largely complete for correct invocation.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by defining the idempotency key as (memory_id, signal_type, source), explaining that memory_id may target any memory or a procedure, and instructing the caller to pass the procedure id returned by mind_learn.

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 and resource: 'Record a typed external-signal outcome on any memory (not only procedures).' It explicitly distinguishes this tool from procedure-specific alternatives and enumerates the signal types, so an agent can identify scope and route correctly.

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?

It gives explicit triggers: 'Use this when a test passed/failed, code compiled, a user explicitly confirmed/denied a fact, or a citing memory referenced this one.' It also names the condition for avoiding a separate mind_procedure_outcome call when the target is a procedure and the signal is test_passed or code_compiled.

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

mind_predicateA

v1.4: register and inspect predicate cardinality (single | temporal-single | multi). Cardinality controls how mind_fact(action="add") detects conflicts: Multi predicates never conflict; Single/TemporalSingle flag a conflict_pending event when a second distinct object is asserted. Default for unregistered predicates is Multi.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation
predicateNoRequired for action=register and action=get
cardinalityNoRequired for action=register

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and does well: it explains that Multi predicates never conflict, that Single/TemporalSingle raise a conflict_pending event on a second distinct object, and that unregistered predicates default to Multi. It omits whether register overwrites existing registrations or what get/list return, but the core behavioral semantics are clearly stated.

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?

Three sentences, front-loaded with purpose then the behavioral consequence that justifies it. The 'v1.4:' prefix is minor version noise that could be dropped, but overall there is little waste.

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

Completeness4/5

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

For a 3-parameter tool with full schema coverage and no output schema, the description supplies the one thing the schema cannot: the semantic effect of each cardinality on downstream conflict detection and the default behavior. Return values of get/list are left unstated, but that is a minor gap.

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

Parameters4/5

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

Schema coverage is 100%, so the three parameters are already documented and the baseline is 3. The description adds genuine meaning beyond the raw enum by explaining what each cardinality value actually does to conflict detection, which is the semantic payload the caller needs.

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?

States a specific verb pair ('register and inspect') plus the resource ('predicate cardinality'), and the verbs map cleanly onto the action enum (register/get/list). An agent can distinguish it from siblings like mind_fact since it governs predicate metadata rather than asserting facts. It lacks an explicit sibling comparison, but the purpose is unambiguous.

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 frames usage indirectly by explaining that cardinality dictates how mind_fact(action="add") detects conflicts, which tells an agent why it might register. However, it never states when to register vs get vs list, nor when to leave the Multi default in place, so the routing 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.

mind_procedure_outcomeA

Record whether a recalled procedure worked when reused. worked=false raises its fail count and demotes it, so the store self-corrects instead of ossifying on a bad fix.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesProcedure id from mind_recall
workedYesDid the fix work this time

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose a real side effect: worked=false increments a fail count and demotes the procedure, and the stated rationale (self-correction instead of ossification) explains why. It omits what worked=true does, idempotency, and whether an unknown id errors.

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 tight sentences with the action front-loaded and the rationale second; every clause earns its place and nothing is padded.

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

Completeness4/5

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

For a 2-parameter mutation with no output schema and no annotations, the description covers the key behavioral consequence, but it leaves gaps on the success path (what worked=true changes) and failure/error behavior.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds meaning beyond the schema by explaining the consequence of the worked flag's values (demotion on false), which is not encoded in the parameter 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 names a specific verb (record) and resource (whether a recalled procedure worked when reused), which is more precise than the bare tool name. It does not, however, distinguish itself from the nearby sibling mind_outcome, which an agent must disambiguate on its own.

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?

Usage is implied rather than stated: the agent can infer this is called after mind_recall and a reuse attempt, but there is no explicit when-to-use, when-not, or named alternative (e.g. mind_outcome) to route between.

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

mind_provenance_addA

Persist an externally-sourced snippet (code, doc, RFC quote, commit message, etc.) into mgi-mind with a mandatory provenance citation. The agent supplies the snippet AS PLAIN UTF-8: no HTML, no markup. Call this ONLY when the snippet was just produced by a code-search or doc-search MCP in the same session; do NOT fill provenance fields from memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoOptional path inside the repo. No leading '/', no '..' segments.
langNoOptional language tag (free string).
noteNoOptional one-liner the agent attaches (why this is worth keeping).
repoNoOptional owner/repo when the source is a code host. Regex: ^[\w.-]+/[\w.-]+$.
libraryNoTarget library. Must exist (create with mind_create).external-snippets
snippetYesRaw text to store. Plain UTF-8. Must NOT contain HTML tags; the agent is responsible for stripping markup upstream.
line_rangeNoOptional line range, e.g. "42" or "42-58". Regex: ^\d+(-\d+)?$.
origin_urlYeshttps:// URL the snippet was lifted from. Host must be in the allowlist (github.com, gitlab.com, bitbucket.org, sr.ht, codeberg.org, grep.app, sourcegraph.com).
search_tool_usedYesIdentifier of the search source the agent used in THIS session, e.g. "mcp.grep.app", "sourcegraph", "github code search", "local ripgrep". REQUIRED. Empty rejects with 'provenance source unknown: use mind_add instead'.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose key behaviors: the plain-UTF-8/no-markup requirement with the agent responsible for stripping markup upstream, the mandatory-provenance rule, and (via schema) the mind_add fallback. It could go further on persistence semantics (overwrite vs append, idempotency), so not a full 5.

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?

Four front-loaded sentences with essentially zero waste: purpose first, format constraint second, usage rule third. Tight, though the format constraint slightly overlaps with the schema's snippet description.

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

Completeness4/5

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

For a 9-param write tool with no annotations and no output schema, the description covers the critical constraints (provenance, session-origin, plain text) and the schema covers the rest. Return/persistence semantics are the only modest 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%, so all nine parameters are already documented, including regexes, allowlists, and the failure message on empty search_tool_used. The description adds only the plain-UTF-8 framing already echoed in the snippet field, 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?

States a specific verb (Persist) and resource (externally-sourced snippet) with its distinguishing feature: the mandatory provenance citation. It clearly separates itself from the sibling mind_add by requiring provenance rather than memory-sourced data.

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 call (ONLY when the snippet was just produced by a code-search or doc-search MCP in the same session) and when not to (do NOT fill provenance fields from memory). The schema reinforces the routing to mind_add when provenance is unknown, so the agent has an alternative path.

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

mind_quarantineA

Inspect, promote, or expire entries that the relevance gate filtered into the quarantine layer. Single tool with action: list (newest first, optional library filter), show (full content + gate reason by id), promote (the gate was too strict: move to ordinary memory by id), expire (the gate was right: delete by id; only ever touches quarantined points, never live memory, and stays recoverable from the audit log). Replaces mind_quarantine_list / _show / _promote.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoRequired for action=show, promote, or expire
limitNoMax entries for action=list
actionYesWhat to do
libraryNoScope for action=list (optional)

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers: it states expire 'only ever touches quarantined points, never live memory, and stays recoverable from the audit log', and that list is newest-first while show returns full content plus gate reason. It stops short of describing return shape or limits beyond the schema defaults, so not a full 5.

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?

Front-loads the overall purpose, then breaks out each action in a tight parenthetical series with zero filler. Dense but well-ordered, every clause 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?

No output schema and no annotations, yet the description covers the action set, id requirements per action, ordering, scoping, recoverability, and the safety boundary against live memory. Nothing an agent needs to invoke it correctly is missing.

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, but the description adds real meaning to the action enum the schema only labels 'What to do' – defining list vs show vs promote vs expire behavior and when id is needed. It exceeds the baseline without fully re-specifying every param.

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?

States a specific verb set (inspect, promote, expire) and a precise resource (entries the relevance gate filtered into the quarantine layer). It even names the three siblings it replaces (mind_quarantine_list / _show / _promote), so an agent can route to it without opening any schema.

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 maps each action to its intent: promote when 'the gate was too strict', expire when 'the gate was right', list for newest-first browsing with an optional library filter. The alternative-condition reasoning leaves nothing to inference.

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

mind_quarantine_listA

DEPRECATED: use mind_quarantine(action="list"). Removed in v2.0. (List entries the v0.11 relevance gate filtered into the quarantine layer. These are not surfaced by mind_search by design: use this tool when you suspect a fact was filtered (e.g., the user keeps repeating something the gate would reject as low-signal). Newest first.)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
libraryNoScope to one library (omit for all)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden and does well: it explains that results are deliberately excluded from mind_search, that the layer comes from the v0.11 relevance gate, and that ordering is newest first. It does not cover permissions or pagination/truncation behavior, which would round out the mutation-free read profile.

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 deprecation and replacement instruction is correctly front-loaded, and the parenthetical packs scope, exclusion-from-search, trigger, and ordering efficiently. The nested parenthetical is dense but every clause carries information an agent needs.

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?

No output schema and no annotations, so the description must stand alone, and it adequately explains what the tool returns and how results are ordered. The main omission is what happens if the deprecated tool is called after removal, and limit's effect on the result set.

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 50%: 'library' is documented but 'limit' has only a default, no description. The description adds no parameter-level detail beyond implying recency ordering, so it neither compensates for the gap nor goes beyond the schema. Baseline 3 for partial coverage.

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 parenthetical states a specific verb+resource ('List entries the v0.11 relevance gate filtered into the quarantine layer') and differentiates it from siblings by noting these are not surfaced by mind_search by design. The front-loaded DEPRECATED/removal notice, however, is the dominant message, so the actual purpose is secondary rather than the opening statement.

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 names the replacement explicitly (mind_quarantine(action="list")) and gives a concrete trigger for using this tool (when you suspect a fact was filtered, e.g., the user keeps repeating low-signal content). The guidance is slightly self-contradictory, though: it tells the agent the tool is removed in v2.0 and to use another tool, then also tells it when to use this one.

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

mind_quarantine_promoteA

DEPRECATED: use mind_quarantine(action="promote"). Removed in v2.0. (Explicitly promote a quarantined entry to ordinary memory by id. The automatic promotion path is re-asserting the same content via mind_ingest; use this when you know the entry should be live without re-ingesting.)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the effect (entry becomes live/ordinary) and the crucial lifecycle fact that the tool is removed in v2.0, but says nothing about reversibility, permissions, or behavior when the id is missing or already promoted. Useful context, but incomplete for a mutation tool with zero annotation coverage.

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 deprecation and replacement are front-loaded, which is the right priority for an agent deciding whether to call it. The nested parenthetical is slightly awkward but the whole thing is short and every clause (deprecation, effect, alternative path) earns its place.

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

Completeness4/5

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

For a single-parameter, deprecated tool with no output schema, the description supplies what an agent needs: what it does, when to use it, and that it should migrate to the replacement. Missing only edge-case behavior, which is minor given the deprecation.

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 0% for the single 'id' parameter, so the description must compensate. 'by id' implies the identifier refers to a quarantined entry but adds no format, source, or lookup guidance beyond that bare hint. Minimal compensation for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource: 'Explicitly promote a quarantined entry to ordinary memory by id.' An agent immediately knows this moves an entry out of quarantine into normal memory, distinct from siblings like mind_quarantine_list or mind_restore. The deprecation banner is front-loaded rather than obscuring the purpose.

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 names the replacement (mind_quarantine(action="promote")), states removal in v2.0, and contrasts the manual path against the automatic one (re-asserting via mind_ingest). It even gives the selecting condition: 'use this when you know the entry should be live without re-ingesting.' This is textbook when/when-not/alternative guidance.

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

mind_quarantine_showA

DEPRECATED: use mind_quarantine(action="show"). Removed in v2.0. (Show a single quarantined entry with its full content and the gate reason. Returns 'not in quarantine' for regular memory ids: the surface is honest about what it can see.)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose one meaningful edge behavior — returning "not in quarantine" for regular memory ids — but says nothing about permissions, output shape, or whether the read is safe/idempotent, so coverage is partial.

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 deprecation warning is front-loaded where an agent will see it first, followed by the functional description in parentheses. Nearly every sentence earns its place; the parenthetical behavioral note is slightly buried but useful.

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

Completeness4/5

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

For a deprecated one-parameter read tool with no output schema, the description covers lifecycle status, replacement, purpose, and one return edge case. Nothing essential is missing for an agent deciding whether to call or avoid 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?

Schema coverage is 0% for the single required `id` parameter. The description hints the id can be either a quarantine entry id or a regular memory id (via the "not in quarantine" behavior), which adds some meaning, but does not specify the expected id format.

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 states a specific verb and resource — "Show a single quarantined entry with its full content and the gate reason" — which is far more than the name alone conveys. It also makes the lifecycle status unambiguous (deprecated, removed in v2.0), though it does not explicitly contrast with the single-entry vs. list sibling (mind_quarantine_list).

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?

It gives explicit when-not-to-use guidance ("DEPRECATED") and names the exact replacement call, mind_quarantine(action="show"), plus the removal version. An agent needs no inference to know this tool should not be selected for new work.

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

mind_recallA

Recall error->fix playbooks for an error and/or a task context. Ranking blends relevance with trust: a verified or proven fix gets a boost, a repeatedly-failing one is demoted, but a strongly-matching unverified fix still surfaces.

ParametersJSON Schema
NameRequiredDescriptionDefault
errorNoError signature to match (lexical)
limitNoMax playbooks
contextNoTask description to match (semantic)

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does disclose the non-obvious ranking logic: verified/proven fixes are boosted, repeatedly-failing ones demoted, and strongly-matching unverified ones still surface. That materially helps an agent interpret and trust ordering. It still omits read-only status and the shape of a returned 'playbook'.

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 sentences, purpose front-loaded before the ranking detail, with no filler. The second sentence is slightly dense but every clause describes a distinct ranking behavior that earns its place.

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

Completeness3/5

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

For a 3-parameter recall tool with no output schema and no annotations, the description explains purpose and ranking but never describes what a returned playbook contains or the response shape. Adequate but with a clear gap given structured data cannot fill 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?

Schema description coverage is 100%, so error (lexical), context (semantic), and limit (default 3) are already fully documented. The description adds the 'and/or' combinatorics — that either or both matching inputs may be supplied — but little else beyond what the schema provides, so the baseline 3 holds.

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?

States a specific verb and resource ('Recall error->fix playbooks') with additional scope ('for an error and/or a task context'). An agent can tell what the tool returns without opening the schema. It does not, however, explicitly distinguish itself from the sibling mind_recall_all, which is the natural alternative an agent would weigh.

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 phrase 'for an error and/or a task context' implies the situation in which to reach for it, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g. mind_recall_all, mind_search). Usage is inferable rather than stated.

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

mind_recall_allA

Unified recall across all memory types at once (facts + memories + procedures) for one query. Current facts first, then semantic memories, then matching error->fix procedures. One call instead of three separate searches.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax per silo
queryYesWhat to recall

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; it usefully discloses result ordering (current facts, then semantic memories, then error->fix procedures), which is real behavior beyond the schema. It says nothing about read-only safety, permissions, pagination, or result size limits, leaving notable gaps for a no-annotation tool.

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 short sentences with zero filler; scope and the core differentiator ('one call instead of three') are front-loaded. Every clause carries 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?

No output schema exists, and the description partially compensates by describing the ordering of returned silos, which is the key thing an agent needs to interpret results. It is nearly complete for a two-parameter recall tool, missing only return-shape and safety 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?

Schema coverage is 100% and both parameters ('query' and 'limit') are already documented there, so the description only adds the framing 'for one query' and the notion of per-silo limiting. No format, syntax, or default behavior is added beyond the schema, making baseline 3 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?

States a specific verb (recall) and resource (all memory types: facts + memories + procedures), and explicitly frames itself as the union of three searches, which distinguishes it from siblings like mind_recall and mind_search. An agent can tell what this returns without opening the schema.

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 phrase 'One call instead of three separate searches' clearly signals when to prefer this tool over narrower search calls. However, it never names the actual alternative tools (mind_search, mind_recall, mind_fact_query) or states any when-not condition, so routing 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.

mind_restoreA

Restore an ARCHIVED (soft-forgotten) memory by id, returning it to search. Archiving (consolidate --archive-cold) reversibly hides cold memories instead of deleting them; this is the undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory id of an archived entry

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden and does disclose meaningful traits: archiving is reversible, memories are hidden rather than deleted, and the effect is returning to search. It does not cover failure modes (invalid/non-archived id), side effects, or permissions, which keeps it below a 5.

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 filler, with the core action and the id-scoping front-loaded and the archiving relationship following as supporting context. Every clause earns its place.

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

Completeness4/5

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

For a single-parameter, annotation-free tool with no output schema, the description supplies enough to call it correctly and understand its effect on search. It is slightly incomplete on return behavior and error handling, but the essential context is present.

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 'id' parameter is already documented as 'Memory id of an archived entry'. The description reinforces 'by id' but adds no syntax, format, or constraint beyond what the schema supplies, so the 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?

States a specific verb (restore) on a specific resource (an ARCHIVED, soft-forgotten memory) addressed by id, and frames the operation precisely as the undo of archiving. An agent can immediately distinguish it from sibling mind_delete (permanent removal) and mind_consolidate (the archiving operation itself).

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 ties usage to the archiving operation ('Archiving (consolidate --archive-cold) reversibly hides...; this is the undo'), giving a clear condition that selects this tool over alternatives. It does not state exclusions (e.g. what to do when the id was hard-deleted rather than archived), 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.

mind_sessionA

Manage the agent's session record across runs. Single tool with action: start (open a new session for an agent), last (read the previous session's summary), end (close the active session with a hand-written summary). Replaces mind_session_start / _last / _end.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNoAgent name; same across start/endunknown
actionYesLifecycle step
summaryNoRequired for action=end. Free-form, <200 words, what happened this session

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does disclose per-action semantics plus that the end summary must be hand-written, free-form, and under 200 words. However it omits edge behavior: calling start when a session is already active, what last returns when no prior session exists, persistence/ordering guarantees, and whether end is irreversible.

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 tight sentences, front-loaded with the resource, then the enum breakdown, then the migration note. Every clause earns its place and nothing is padded.

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?

There is no output schema, so the description must convey returns, and it only partially does ('last — read the previous session's summary'); what start and end return, and any error signaling, are unstated. Adequate for the happy path but incomplete for a lifecycle tool with a required enum action.

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 adds only marginal meaning beyond the schema (it restates what each action does and that agent should be consistent across start/end), with no extra constraints such as summary being ignored for actions other than end.

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?

States a specific resource (the agent's session record across runs) and enumerates the three lifecycle operations with a parenthetical gloss for each. It also explicitly says it supersedes mind_session_start/_last/_end, letting an agent distinguish it from named siblings without opening schemas.

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?

Each action is scoped: start opens a session, last reads the prior session's summary, end closes the active one. That is clear routing guidance for the enum, and the 'Replaces...' clause tells the agent not to reach for the old split tools. No explicit exclusion or prerequisite (e.g. what happens if start is called while one is open) is given.

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

mind_session_endA

DEPRECATED: use mind_session(action="end"). Removed in v2.0. (End the active session for an agent)

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNoSame agent name used in mind_session_startunknown
summaryYesSession summary

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses deprecation and removal-in-v2.0 status, which is real behavioral context beyond the schema. However, it does not say what actually happens when invoked (error, no-op, silent success), which matters for a deprecated mutation-style 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?

Extremely tight, with the most decision-critical information (DEPRECATED and the replacement) front-loaded. Slightly fragmented across two parenthetical thoughts, but every token earns its place.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, the description covers what it does and that it should not be used. Given the deprecation, the only meaningful gap is runtime behavior on invocation, which is minor for a deprecated endpoint.

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% – both 'agent' (default 'unknown', references mind_session_start) and 'summary' are documented in the schema itself. The description adds no parameter syntax or meaning beyond that, so the baseline 3 applies.

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 parenthetical '(End the active session for an agent)' states a specific verb and resource, so an agent knows exactly what the tool does. It also names the replacement tool (mind_session), differentiating it from siblings like mind_session_start. The purpose is clear but subordinated to the deprecation notice, keeping it just short of a 5.

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?

It explicitly states the alternative (mind_session(action="end")) and the condition that makes this tool unusable ('Removed in v2.0'). This is unambiguous routing away from the tool, which is exactly the guidance an agent needs for a deprecated endpoint.

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

mind_session_lastA

DEPRECATED: use mind_session(action="last"). Removed in v2.0. (Get last session summary)

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNoOnly consider this agent's sessions

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It clearly discloses deprecation and removal in v2.0, which is the most critical trait for tool selection. It does not state whether the operation is read-only or what happens if called, but for a deprecated stub the key behavioral disclosure is present.

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, front-loading the most important information (DEPRECATED) and including only the essential replacement instruction and a brief purpose note. No sentence is wasted.

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

Completeness4/5

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

For a simple, deprecated tool with a fully documented single parameter and no output schema, the description provides sufficient context: what it does, that it should not be used, and what to use instead. It does not explain the contents of a 'session summary', but that is not necessary for the agent's decision.

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 ('agent') is already documented in the schema as 'Only consider this agent's sessions'. The description adds no further parameter meaning, so the baseline of 3 applies.

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 states the resource and action ('Get last session summary') and explicitly distinguishes itself from the sibling it replaces by naming mind_session(action="last"). The purpose is clear, though it is presented as a parenthetical after the deprecation notice, so it is not front-loaded.

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 tells the agent not to use this tool, gives the exact alternative (mind_session(action="last")), and states the removal version (v2.0). This is complete when/when-not guidance with a named alternative.

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

mind_session_startA

DEPRECATED: use mind_session(action="start"). Removed in v2.0. (Start a new session)

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNoAgent nameunknown

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses deprecation and the v2.0 removal, which is exactly the context an agent needs to avoid this tool, but it never says whether invoking it still works, returns an error, or where it routes. For a tombstoned tool, that operational behavior is the key missing disclosure.

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 terse fragments with zero waste, front-loading the DEPRECATED marker and the replacement before the parenthetical purpose. Optimal for a tombstone entry.

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

Completeness4/5

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

For a deprecated single-parameter stub with no output schema, the replacement pointer and removal version are the essential facts and both are present. It could be more complete by confirming whether calls now fail or are proxied.

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 `agent` parameter, so the schema already documents it. The description adds no syntax, default, or meaning beyond that, which matches the baseline 3 when structured data does the work.

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 states a specific verb and resource ("Start a new session") and explicitly names the successor tool that replaces it. An agent can identify this as a deprecated session-start stub without opening the schema. It falls short of 5 only because the deprecated framing, not the behavior, carries the identity.

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?

It gives an explicit, actionable directive: use mind_session(action="start") instead, and states it is removed in v2.0. The when-to-use and the alternative are both spelled out, leaving nothing to inference.

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

mind_skillA

Skills: the house way of doing a kind of work, matched against the task you are ABOUT TO START (mind_recall is the other half: it answers an error that already happened). action=match takes a task description and returns the playbooks that apply, ranked by relevance and by how they have actually worked out. Call it before starting non-trivial work, the way you would check for a house rule. action=set writes one (name is the identity, so writing the same name edits it and keeps its history), list/show read, remove deletes, outcome records whether applying it worked (verify=true only for a deterministic signal, never a hunch).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoThe playbook itself, 8KB max; required for action=set
nameNoSkill name [a-z0-9_-]; required for set/show/remove/outcome
taskNoWhat the work is; required for action=match
whenNoWhat kind of task should surface this skill; required for action=set
limitNoMax skills to return for action=match (default 3)
actionYesOperation (default: list)
verifyNoaction=outcome: promote to verified on success. Deterministic signals only
workedNoaction=outcome: did applying the skill work (default true)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does substantial work: it discloses that name is the identity so re-writing the same name edits in place and preserves history, that remove deletes, and that verify=true should only be used for deterministic signals, 'never a hunch.' It also explains that match ranks by relevance and by observed outcomes. Not covered: what match/list/show actually return or any error/permission 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?

A single dense paragraph, front-loaded with the core concept and the sibling contrast before detailing actions; nearly every clause conveys a distinct rule. Slightly breathy in places ('the way you would check for a house rule'), and the action list reads as a run-on, but nothing is gratuitous.

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

Completeness3/5

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

For a six-action tool with eight parameters and no output schema, the description explains the semantics of each action but never describes what match, list, or show return (ranked playbooks with what fields? the body? history?). Mutation-side behavior is well covered, but the read-path gap leaves an agent guessing about results.

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 already 100%, so the baseline is 3, but the description adds real meaning beyond the schema: name-as-identity semantics (writing the same name edits and keeps history) and the constraint that verify should only be set on deterministic signals. The 8KB body cap and task/when roles are left to the schema.

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 the resource concretely (skills/playbooks, 'the house way of doing a kind of work') and its trigger (the task you are about to start), which is enough to separate it from mind_recall_all/mind_recall. The multi-action surface (match/set/list/show/remove/outcome) is enumerated, though the primary verb is diffused across six operations rather than stated crisply up front.

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?

It states when to call it ('before starting non-trivial work'), what action to use for the common case (action=match takes a task description and returns the playbooks that apply), and explicitly routes the agent away from the sibling: 'mind_recall is the other half: it answers an error that already happened.' Per-action guidance is bundled in as well.

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

mind_statsB

Show memory statistics

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Show' weakly implies a read-only, side-effect-free operation, but the description says nothing about scope (which memory stores are counted), cost, or the shape of the returned statistics, and there is no output schema to fill that gap.

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?

Three words, no filler, purpose stated up front. It is arguably too terse to be useful, but nothing in the sentence is wasted or buried.

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

Completeness3/5

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

For a zero-argument read tool this is the minimum viable description: it names the resource but not what the statistics cover (counts, sizes, types) nor when they refresh. With no annotations and no output schema, a slightly richer description would materially help an agent decide whether to call it.

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 takes zero parameters, so the schema is trivially complete and there is nothing for the description to disambiguate. The baseline of 4 for a no-parameter tool applies.

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?

States a specific verb and resource ('Show memory statistics'), so an agent immediately knows this returns aggregate information rather than recalling or mutating memories. However, it does nothing to differentiate itself from adjacent diagnostics siblings such as mind_doctor, mind_history, or mind_context.

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 when-to-use guidance, no statement of when this is preferable to mind_doctor or mind_history, and no mention of any prerequisite state (e.g., memory must be initialized). The agent must infer usage entirely from the name.

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

mind_vaultA

Vault is terminal-only by design. This tool explains how the user runs the equivalent mgimind vault command: secret values never cross the MCP channel. Single tool with action: store (instructions for storing a secret), get (instructions for retrieving), list (instructions for listing keys). Replaces mind_vault_store / _get / _list.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoOptional key name to interpolate into the instructions
actionYesWhat instructions to render

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden, and it does substantive work: it discloses that no secret value ever crosses the MCP channel, that the operation is terminal-only, and that the tool's output is guidance rather than a performed action. It leaves unstated the exact shape of the rendered instructions and error behavior for an invalid action, which keeps it out of the top band.

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?

Four tight sentences with no filler, and the most important constraint ('terminal-only by design', secrets never cross MCP) is front-loaded before the action enumeration and the replacement note. The final replacement sentence is slightly redundant with the action list but earns its place as routing guidance.

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

Completeness4/5

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

For a 2-parameter, annotation-free, output-schema-free tool the description is close to sufficient: it explains the design rationale, the three actions, and the deprecation mapping. The one gap is that an agent is not told explicitly that the returned text is meant to be surfaced verbatim to the user rather than acted upon.

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 both parameters, so the baseline is 3. The description restates the three action values as instruction variants (store/get/list), which largely duplicates the schema's enum descriptions and 'What instructions to render', and adds nothing new about `key` beyond the schema's interpolation note.

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 states a specific and unusual purpose: it does not touch secrets but renders instructions for running the equivalent `mgimind vault` command. It explicitly distinguishes itself from the sibling tools by naming mind_vault_store / _get / _list as replaced. It stops short of a 5 only because the replacement relationship is asserted rather than explained (the siblings still appear in the toolset, leaving a small ambiguity about their live status).

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 gives clear context for when to reach for this tool ('Vault is terminal-only by design', secrets never cross the MCP channel) and routes the agent away from the older per-operation siblings. It does not spell out exclusions or edge conditions (e.g., what to do if the user asks for a value directly), so it lands at clear-context-without-exclusions.

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

mind_vault_getA

DEPRECATED: use mind_vault(action="get"). Removed in v2.0. (Explain how to retrieve a secret (never returns plaintext over MCP))

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey name

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral-disclosure burden. It reveals two important traits — deprecation/removal and that plaintext is never returned over MCP — but omits auth requirements, error behavior, and what the tool actually returns if invoked.

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

Conciseness3/5

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

The description is short and front-loads the deprecation warning, which is appropriate. However, the nested parenthetical "(Explain how to retrieve a secret (never returns plaintext over MCP))" is awkward and reads more like an instruction than a structured description.

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

Completeness3/5

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

For a deprecated single-parameter tool, the description sufficiently routes the agent away to mind_vault. It is incomplete for a still-callable tool because it does not explain return values or failure modes, and there is no output schema 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 description coverage is 100%, so the single key parameter is already documented in the schema. The description does not add format, syntax, or other meaning beyond what the schema provides, making the baseline 3 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 states a specific deprecated tool for retrieving a secret and explicitly points to the replacement, mind_vault(action="get"). It also notes that plaintext is never returned over MCP, which distinguishes it from a general retrieval tool. However, the fragmented deprecation-first phrasing and odd parenthetical keep it from being a fully clean purpose statement.

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?

It explicitly says the tool is deprecated, removed in v2.0, and directs the agent to use mind_vault(action="get") instead. This gives an unambiguous when-not-to-use and a concrete alternative.

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

mind_vault_listA

DEPRECATED: use mind_vault(action="list"). Removed in v2.0. (Explain how to list stored secret keys (terminal-only; needs the master password))

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and usefully discloses that the operation is terminal-only and requires the master password. It does not describe return values or error behavior, but the deprecation status and auth constraints are valuable.

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 deprecation warning is front-loaded and the replacement is stated immediately. The parenthetical is somewhat confusing and could be clearer, but the description remains short.

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

Completeness4/5

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

For a deprecated, zero-parameter tool with no annotations or output schema, the description provides the essential information: do not use it, use mind_vault(action="list"), and note terminal/master-password constraints. It is nearly complete, though the original purpose could be stated more cleanly.

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 the baseline is 4. The description adds no parameter information, and none is needed.

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 marks the tool as deprecated and names the replacement, mind_vault(action="list"), so an agent can distinguish it from active siblings. The parenthetical also hints at the original purpose of listing stored secret keys, though it is awkwardly phrased and incomplete.

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?

It explicitly tells the agent not to use this tool and to use mind_vault(action="list") instead, and states it was removed in v2.0. This is exactly the routing guidance needed for a deprecated tool.

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

mind_vault_storeB

DEPRECATED: use mind_vault(action="store"). Removed in v2.0. (Explain how to store a secret (never accepts the secret over MCP))

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey name the user wants to store

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one genuine behavioral trait: it never accepts the secret over MCP, which is security-relevant context an agent could not infer from the schema. Beyond that it reveals nothing about what happens on call, and the deprecation status is stated inconsistently ('deprecated' vs 'removed in v2.0').

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

Conciseness2/5

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

The deprecation notice and redirect are correctly front-loaded, but the trailing parenthetical '(Explain how to store a secret (never accepts the secret over MCP))' is confusing, nested, and reads like an authoring instruction that leaked into the text. That fragment does not earn its place and actively obscures the message.

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

Completeness3/5

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

For a single-parameter, no-output-schema tool the description is just adequate: it tells the agent to migrate to mind_vault. However, it never resolves the core ambiguity of whether this tool is still callable or returns an error, and it leaves the security constraint sentence unexplained. An agent has the migration path but not a complete picture of current behavior.

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 'key' parameter, so the baseline is 3. The description adds no syntax, format, or naming guidance for the key beyond what the schema already says, and the parenthetical about never accepting the secret arguably raises a question the parameter docs do not answer.

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's primary function is a deprecation notice, and it names the replacement (mind_vault with action="store") clearly enough to distinguish intent. However, the stated purpose is muddled by the parenthetical '(Explain how to store a secret...)', which reads like leaked internal text rather than a purpose statement. An agent can tell this tool stores a secret but not cleanly what the tool itself does versus what it documents.

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 routes the agent to the alternative: mind_vault(action="store"), and states the condition (this tool is deprecated/removed in v2.0). That is stronger than most definitions. It loses a point because the 'removed in v2.0' claim conflicts with the tool still being present and callable, leaving the agent unsure whether it works at all.

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

mind_visualizeA

Open the 3D memory visualization in the user's browser: the brain as glowing cores (memories, facts, regions) wired by neurons, with live pulses. Call this when the user asks to SEE or SHOW their memory / 'the brain' / how memory looks. Spawns a local viewer and returns the URL.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden and does well: it discloses a side effect (spawns a local viewer), the delivery channel (user's browser), and the return value (the URL). It omits anything about permissions, port conflicts, or what happens if a viewer is already running, which keeps it short of a 5.

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: what it does and what the user sees, then when to call it, then the mechanics and return. Every sentence adds distinct information with no 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?

For a zero-parameter tool with no output schema and no annotations, the description covers purpose, trigger, side effect, and return value. Nothing an agent needs to invoke it correctly is missing.

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 takes zero parameters, which is the documented baseline of 4. The description correctly implies a no-argument invocation by never referencing any input.

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?

States a specific verb and resource ('Open the 3D memory visualization in the user's browser') plus what the visualization actually contains. No sibling tool in the list does anything comparable, so an agent can distinguish it immediately.

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?

Gives an explicit invocation trigger with quoted user phrasings ('SEE or SHOW their memory / "the brain" / how memory looks'), which is strong usage guidance. It stops short of naming when-not to use it or pointing to an alternative, so it lands at 4 rather than 5.

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

mind_webB

Read a webpage as Markdown, optionally save to library

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to read
saveNoLibrary to save into (omit to just read)

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the dual read/save mode, but that same information is already in the schema's save parameter, and it says nothing about fetch failures, permission/auth needs, rate limits, or whether saving overwrites existing library entries.

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 compact, front-loaded sentence with no filler and the primary action stated first. It is arguably under-specified rather than over-long, but the structure itself is efficient.

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

Completeness3/5

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

For a simple two-parameter tool with no output schema, the description covers the core action and the Markdown return format. It omits what a 'library' value means, what the default save destination is, and error behavior, leaving meaningful 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 description coverage is 100% and both parameters are documented in the schema, so the baseline of 3 applies. The description restates the read/save distinction but adds no format, default, or destination-library semantics beyond what the schema already provides.

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?

States a specific verb ('Read'), resource ('a webpage'), and output format ('as Markdown'), plus the optional save behavior. It is clear what the tool does, but it never distinguishes itself from plausible siblings like mind_browse or mind_ingest.

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 'optionally save to library' phrasing implies when to pass save versus omit it, which is useful implied guidance. However, there is no explicit when-to-use-this-vs-alternative statement (e.g., mind_browse or mind_ingest), so routing relies on inference.

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.

  1. 44 tool updatesv0.1.0
    • First observedmind_add
    • First observedmind_block
    • First observedmind_browse
    • First observedmind_consolidate
    • First observedmind_context
    • First observedmind_create
    • First observedmind_delete
    • First observedmind_doctor
    • First observedmind_export
    • First observedmind_fact
    • First observedmind_fact_add
    • First observedmind_fact_invalidate
    • First observedmind_fact_query
    • First observedmind_history
    • First observedmind_import
    • First observedmind_ingest
    • First observedmind_learn
    • First observedmind_library
    • First observedmind_list
    • First observedmind_outcome
    • First observedmind_predicate
    • First observedmind_procedure_outcome
    • First observedmind_provenance_add
    • First observedmind_quarantine
    • First observedmind_quarantine_list
    • First observedmind_quarantine_promote
    • First observedmind_quarantine_show
    • First observedmind_recall
    • First observedmind_recall_all
    • First observedmind_restore
    • First observedmind_search
    • First observedmind_session
    • First observedmind_session_end
    • First observedmind_session_last
    • First observedmind_session_start
    • First observedmind_should_search
    • First observedmind_skill
    • First observedmind_stats
    • First observedmind_vault
    • First observedmind_vault_get
    • First observedmind_vault_list
    • First observedmind_vault_store
    • First observedmind_visualize
    • First observedmind_web

TDQS

B3.2/5.0

Scored across 44 tools

Disambiguation3/5

There are genuine clusters of near-synonymous tools: mind_search/mind_browse/mind_recall/mind_recall_all, mind_add/mind_ingest, and mind_outcome vs mind_procedure_outcome (the former explicitly subsumes the latter). Worse, ~15 deprecated aliases (mind_fact_add, mind_quarantine_list, mind_vault_get, mind_session_start, etc.) directly duplicate the newer action-based tools, so an agent can easily pick the wrong one. Descriptions are unusually careful, which keeps this from scoring lower, but the overlap is real.

Naming Consistency4/5

Nearly everything is snake_case under a shared mind_ prefix and follows a predictable verb_noun style (mind_search, mind_add, mind_learn). The main deviation is the new action-based noun-only tools (mind_fact, mind_library, mind_vault, mind_session, mind_quarantine) plus stateless names like mind_doctor and mind_context. Readable, but the mixed verb-style/noun-with-action convention is a minor inconsistency.

Tool Count2/5

44 tools is far beyond the reasonable band for this domain, and the count is inflated by ~15 deprecated tools that still appear in the surface alongside their replacements. Even the ~29 active tools is heavy for what is essentially a memory store. Deprecation flags help, but shipping both generations at once bloats the set.

Completeness4/5

The lifecycle is unusually thorough: add/ingest, semantic search, browse, cross-type recall, knowledge-graph facts, procedures, skills, pinned blocks, sessions, vault, quarantine, provenance, outcome signals, export/import, consolidate, restore, stats and health checks. The only minor gap is that there is no clear in-place edit/update path for an ordinary memory (append + invalidate/delete are the only mutations).

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Hermetic memory for AI agents — one Rust binary, one SQLite file, zero network. Recall returns evidence with provenance or abstains: no code path for making things up.
    22
    9
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local memory for AI agents in one SQLite file on your own machine. Facts carry a validity window and a confidence score, so an outdated one is superseded and downweighted rather than deleted, and retrieval fuses BM25, vector similarity and a knowledge graph.
    2
    Business Source 1.1