memsem
This MCP server provides a local, self-correcting semantic memory system for AI agents, enabling persistent storage, retrieval, and management of atomic facts and episodic session summaries.
Add/reinforce facts: Store or reinforce
subject → predicate → objecttriples with metadata like theme, tags, importance, project, provenance, and pinning. Automatically handles frequency/confidence updates and soft supersession of conflicting facts. Batch multiple facts viamemory_add_many.Search memories: Perform strict lexical search (50% word-match threshold) by default. Optionally relax to include 2-hop graph traversal and local semantic search via Ollama embeddings. Filter by query, project, theme, or focus topics; adjust result limits.
List memories: Retrieve active memories sorted by dynamic priority (pinned first), filterable by project or hierarchical themes; ideal for session context injection.
Browse theme map: Obtain a hierarchical tree of themes with fact counts, acting as a routing map for exploration.
View statistics: Get an overview of active, archived, pinned, episode, and graph edge counts, top priorities, and recent changes.
Generate routing index: Refresh and retrieve a structured index (
memory-index.md) of themes, keywords, pinned facts, and unthemed facts for efficient session start and topic routing.Handle episodes: Record a session summary (
memory_episode_add) to build episodic memory, and search past episodes (memory_episode_search) to recall previous discussions.Recalibrate importance: Adjust a fact's importance score with guardrails (pinned and critical facts protected, change capped at ±0.15), supporting dry-run and audit logging via reason.
Archive (forget): Soft-delete memories to remove them from standard results while preserving them for history.
Uses local Ollama embeddings to enable semantic search, allowing related concepts to be found without shared keywords.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@memsemRemember that I'm allergic to peanuts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Semantic memory for AI agents — remembers what matters, knows what to forget. One command to install. Works in every project, for every AI. 100% local.
Why — when big memory systems already exist?
They exist, and they got the hard parts right: vector stores (mem0), temporal knowledge graphs (Zep / Graphiti), agent frameworks (MemGPT / Letta). But they all share the same three flaws:
Brute storage, no structure. They keep what you throw at them, and retrieval is a similarity search over everything. The AI doesn't know where to look — so it looks everywhere, and the noise drowns the signal.
No precision. A fuzzy match is a fuzzy match: almost-right memories fill the context budget and waste tokens.
No self-correction. A fact contradicted months ago stays as strong as the day it was written.
memsem fixes exactly these three things:
🧭 It knows where to search. Every session starts with a routing card (
memory-index.md): themes + keywords, injected into the context. The AI routes by theme, crosses projects, and only pays for what it needs. Hierarchical themes + a live focus list keep the session's active branches at full priority — the rest is attenuated, never lost.🎯 It is precise. Strict lexical search by default (50% word-match threshold, no graph propagation unless you explicitly ask) — a query returns the right facts, ranked by dynamic priority (
importance × confidence × recency × frequency). Precision is measured, not assumed: P@3 0.958 on the reference benchmark (51 facts, 20 queries,scripts/bench.mjs, results inDESIGN.md§11).🔄 It corrects itself. Contradictions fade the old fact instead of overwriting it ("I drank milk for years… wait, lactose intolerant") — history is always kept, critical facts (≥ 0.8) are protected. Background agents extract durable facts at session end, consolidate small facts into patterns, and recalibrate priorities — only when the memory stays at least as searchable.
All the big-system promises, minus their flaws: one command, 100% local, and your memory stays yours — never committed, per-user, shared across all your repos.
Related MCP server: local-memory-mcp
See it work
Install once, let it run. This is a real session on a throwaway database — your actual memory is never touched (node scripts/demo.mjs):
=== memsem — demo on a temporary database ===
(your real memory in ~/.memory-mcp stays untouched)
1. The AI writes durable facts (memory_add_many)
→ 4 facts written
2. Strict search (lexical): memory_search { query: 'milk' }
→ user → drinks → milk
3. Semantic search (relax, local embeddings): memory_search { query: 'cheese', relax: true }
No shared word with « lactose » — the local semantic index (Ollama) bridges it
→ lactose → is-present-in → cheese, yogurt, cream
→ user → is-intolerant-to → lactose
→ user → drinks → milk
4. Soft supersession: the AI learns you no longer drink milk
→ conflict: true, old fact faded (faded: [1])
5. Search now returns the current fact
→ user → drinks → no more milk (lactose intolerant)
→ user → drinks → milk
Stats: 5 active memories, semantic index OK (mxbai-embed-large)Privacy — your memory is yours
100% local — stored in
~/.memory-mcp/memory.dbon your machine. No cloud, no telemetry, nothing leaves your computer.Never committed — the database lives outside every repository. Clone a public repo, push code, share screenshots: your memory stays with you. Each user has their own memory.
The memory follows you, not your projects — the same base is shared across all your repos. Create a new folder, a new repo: the memory is still there.
Install
opencode — one line
Add to opencode.json (project or ~/.config/opencode/opencode.json):
{ "plugin": ["memsem"] }That's it. The plugin registers the MCP server, injects the memory protocol and the memory index into every session, grants the needed permissions, and runs the background agents. Restart opencode.
Claude Code — one command
npx -y memsem setupThis registers the MCP server (claude mcp add memory -- npx -y memsem) and adds a "memsem memory" block to ~/.claude/CLAUDE.md pointing to the full protocol.
Or install it with AI: just paste into Claude:
Install the memsem persistent memory: run
npx -y memsem setup, read~/.memsem/memory-protocol.md, and apply the protocol.
Any MCP client
npx -y memsemThe server speaks MCP over stdio. Point any MCP-capable host at it and inject memory-protocol.md into the host's instructions (e.g. as AGENTS.md) to make the AI autonomous.
Universal installer
npx -y memsem setup # detects and configures your hosts (opencode, Claude)
npx -y memsem setup --help # see optionsIdempotent, safe, reversible (--uninstall).
How it works
The memory lifecycle — every fact follows the same path:
flowchart LR
W["memory_add — subject → predicate → object"] --> R["repeated → confidence ↑ frequency ↑"]
W --> P["priority = f(importance, confidence, recency, frequency)"]
R --> S{"contradiction?"}
S -- yes --> F["old fact fades progressively"]
F --> A["archived — history always kept"]
S -- no --> K["kept, reinforced"]
A --> J["pinned & critical (≥ 0.8) are protected"]Atomic facts — every memory is a
subject → predicate → objecttriple with importance, confidence, frequency, tags, theme, provenance, trust and evidence.Themes & focus — hierarchical themes (
food/drinks) are the routing map; a search by theme crosses all projects. Thefocuslist keeps the session's active themes at full priority.Dynamic priority —
0.45 × importance + 0.25 × confidence + 0.2 × recency + 0.1 × frequency. A critical fact beats a recurring pattern.Soft supersession — contradictions fade the old fact (confidence decays) until it archives under a threshold. History is always kept.
Semantic index (optional) — each fact is embedded locally (
mxbai-embed-largevia Ollama);relax: truesearches add cosine similarity (threshold 0.5). Without Ollama, everything works identically — strict lexical search.Evidence and time —
inferred,verbatimandverifiedtrust states keep a short evidence trail;recorded_atis separate fromvalid_from/valid_until, with historicalasOfqueries.Review and scope — uncertain facts can stay
pending; rejection blocks their normalized value, project scope is isolated by default, and cross-project search is explicit.
Known limitations
Read honestly, from an independent review (Agent Memory Atlas):
The automatic correction path has no lock. A rejected value that is re-asserted (say the same old transcript is read ten times) returns and fades its own correction — an ordinary correction is archived at the third re-assertion. Only a human rejecting a candidate writes a durable suppression (
memory_suppressions) that refuses the value outright. This is a deliberate position (repetition is evidence) with a real cost.A pin protects survival, not visibility. A pinned correction never loses confidence and stays first in
memsem list, but a repeated rejected value can still take the topmemory_searchresult.importwrites past the gate — restoring a backup reinstates a suppressed value.A refused write leaves no audit row, and purging a reviewed fact leaves its text in
memory_candidates.Consolidation and extraction safety rules are prompts, not code.
Rough edges, not bugs — each is tracked in DESIGN.md roadmap and open questions.
Comparison
memsem |
| mem0 | Zep / Graphiti | official memory MCP | Obsidian as memory | |
Auto-writes during sessions | ✅ | ❌ | ⚠️ via app code | ⚠️ via app code | ❌ | ❌ |
Priority for context budget | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Contradictions (soft supersession) | ✅ | ❌ (overwrites) | ❌ (overwrites) | ✅ (temporal versioning) | ❌ | ❌ |
Semantic search | ✅ local (Ollama) | ❌ | ✅ (vector store) | ✅ (graph + embeddings) | ❌ | ⚠️ (plugins) |
Episodic memory + self-maintenance | ✅ | ❌ | ⚠️ (episodic add-ons) | ✅ (temporal knowledge graph) | ❌ | ❌ |
One memory across all your repos | ✅ | ❌ (per project) | ⚠️ (per app config) | ⚠️ (per app config) | ❌ | ⚠️ (vault) |
Zero dependency, | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
Human-readable / editable | ⚠️ (CLI list/edit) | ✅ | ❌ | ❌ | ✅ (JSON) | ✅ |
Comparison as of Aug 2026, from public docs; capabilities evolve — verify before choosing.
Command line
Everything that can be done through MCP can be done from a terminal:
memsem list [--theme x] [--project p] [--limit n] [--all] # read your memory
memsem edit <id> [--object "..."] [--importance 0.6] [...] # fix a fact by hand (audited)
memsem forget <id> [--yes] # archive a fact (confirm)
memsem purge <id> [--yes] # permanently erase a fact (confirm)
memsem doctor [--limit n] [--hours h] # most-modified facts — spot drift
memsem export [--output f] [--project p] # full JSON dump
memsem import <file.json> # restore / merge a dump
memsem setup [--host opencode|claude] # install for your hostsManual fixes are written to the audit journal — memsem doctor shows them too.
Configuration
Tunable constants (priority weights, thresholds, fade factors, model…) live in
src/config.ts. Override any of them in ~/.memsem/config.json
(or $MEMSEM_CONFIG), deep-merged with validation:
{ "priority": { "importance": 0.4, "confidence": 0.3 }, "minLexical": 0.4 }Settings are documented and validated by a benchmark
(scripts/bench.mjs — 51 facts, 20 queries, P@k/R@k across
constant sets; results in DESIGN.md §11).
Durability
The database is versioned and migrated automatically at startup (schema_migrations),
with an automatic backup before any migration (~/.memory-mcp/backups/, last 5 kept).
WAL mode is on — a crash mid-write leaves the database intact. Full dumps and
restores via memsem export / memsem import.
Documentation
memory-protocol.md— the protocol injected into your AI: how it writes, searches, and maintains memory automatically.DESIGN.md— full design: vision, principles, the lactose case study, constant calibration, roadmap.scripts/demo.mjs— reproduce the demo above on a throwaway database.
Roadmap
Semantic index (local Ollama embeddings)
Episodic memory + session extraction
Hippocampus consolidation + pairwise scoring judge
Universal opencode plugin +
memsem setupVersioned migrations + automatic backup + export/import
Configurable constants, validated by a benchmark
Secure judge: dry-run, audit journal, guardrails,
memsem doctorCLI:
list/edit/forget— fix a fact by handEvidence contract, temporal validity, candidate review, audit and confirmed purge
Multi-hop graph propagation (relax mode)
Write gate on the automatic path (supersession → suppression decision)
importbehind the gate (consult suppressions)Audit refused writes; purge candidate text; consolidation rules in code
Obsidian bridge: export/import memory as readable markdown notes
License
MIT — free for anything. Your memory stays yours.
Available Tools
18 toolsmemory_addAjouter une mémoireB
Écrit ou renforce un fait atomique (sujet → prédicat → objet), avec confiance, preuve et période de validité optionnelles. Une valeur rejetée par la revue humaine est bloquée à l'écriture.
| Name | Required | Description | Default |
|---|---|---|---|
| pin | No | Épingle la mémoire : toujours en tête de contexte (memory_list) | |
| tags | No | Mots-clés pour la recherche lexicale | |
| theme | No | Thème hiérarchique, ex: alimentation/boissons. Sert de carte de routage : une recherche par thème traverse les projets | |
| trust | No | Niveau de confiance : inféré ou citation verbatim ; utilisez memory_verify pour verified | |
| object | Yes | L'objet du fait, ex: lait, lactose | |
| project | No | Projet (défaut: global — la mémoire traverse tous les repos) | |
| subject | Yes | Le sujet du fait, ex: utilisateur, projet, module | |
| evidence | No | Preuve courte ou citation ayant motivé le fait | |
| predicate | Yes | Le prédicat, ex: boit, intolerant-a, preferer | |
| validFrom | No | Début de validité ISO 8601, distinct de l'enregistrement | |
| importance | No | Importance intrinsèque 0..1 (défaut 0.5). 0.9+ = fait critique qui doit l'emporter | |
| provenance | No | Référence de la session d'origine | |
| validUntil | No | Fin de validité ISO 8601 exclusive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool writes and that rejected values are blocked at write time, which is valuable context beyond the schema. However, it omits details about the 'reinforce' behavior (e.g., what happens on duplicate facts), idempotency, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core action and a critical constraint without excess. The description is front-loaded with the primary verb and resource, then provides the rejection caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a rich schema, the description lacks connection to the surrounding workflow (memory_candidate_add, memory_verify, etc.). The rejection behavior hints at a review process but does not explain when to use this tool versus alternatives. With no output schema, more contextual guidance was needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 groups optional confidence, evidence, and validity period but does not add new meaning beyond the schema's parameter descriptions. No compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses 'writes or reinforces' as a specific verb and identifies the atomic fact (subject→predicate→object) as the resource. It also mentions the rejection-by-human-review behavior, which subtly distinguishes it from candidate/review workflows and aligns with the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The description implies it is for persisting a fact but never mentions alternatives like memory_candidate_add (for review) or memory_add_many (for batch), leaving the agent to infer context from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_add_manyAjouter plusieurs mémoiresA
Écrit plusieurs faits atomiques en un seul appel (économie de tokens). Chaque entrée suit la même sémantique que memory_add.
| Name | Required | Description | Default |
|---|---|---|---|
| facts | Yes | ||
| project | No | Projet (défaut: global — la mémoire traverse tous les repos) | |
| provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only mentions that it writes atomic facts and follows memory_add semantics, but does not explain whether the batch is atomic, how failures are handled, or any side effects. This is insufficient for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise, and front-loaded with the main action. It efficiently communicates the batch nature and the token-saving benefit without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, nested array schema, no output schema), the description is too brief. It omits details about the shape of facts, validation, and return behavior, relying on memory_add as an external reference, which may not be available to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'project' is described). The description does not explain the structure of the 'facts' array, the meaning of 'provenance', or any parameter-specific constraints, instead deferring to memory_add. This fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool writes multiple atomic facts in a single call ('Écrit plusieurs faits atomiques en un seul appel'), specifying the verb and resource. It also references memory_add to clarify semantics, distinguishing it as the batch counterpart to the single-entry sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use this tool to save tokens when writing several facts ('économie de tokens'). It also implies that memory_add is for single entries by stating each entry follows its semantics. However, it does not explicitly state when not to use it or mention alternatives beyond memory_add.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_auditLire le journal d'auditB
Retourne les mutations, revues, dry-runs et purges avec leur raison, sans réexposer le contenu purgé.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Restreindre à une mémoire ou un candidat | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It usefully discloses that purged content is not re-exposed, which is a meaningful safety guarantee. However, it does not explicitly state that the operation is read-only, nor does it mention permissions, response format, or pagination behavior, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the return type, scope, and a key exclusion without wasted words. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only audit tool with optional parameters and no output schema, the description is minimally adequate. It covers what is returned and a notable caveat, but lacks usage context, result ordering, limit behavior, and response details, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: the 'id' parameter is documented, but 'limit' lacks a description. The tool description adds no parameter-level meaning and does not explain how 'id' or 'limit' filter the audit log entries. Since coverage is low, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Retourne' and defines the resource precisely: mutations, revues, dry-runs et purges avec leur raison. It also distinguishes the tool from siblings by explicitly stating that purged content is not re-exposed, positioning it clearly as the read-only audit counterpart to action-oriented tools like memory_purge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool returns but gives no guidance on when to use it versus alternatives. No exclusions or alternative tools are mentioned, and the use case is only implied by the tool name 'memory_audit'. There is no explicit context like 'use this to review why actions were taken'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_addProposer une mémoire à revueA
Place un fait en attente sans le rendre récupérable. Une revue humaine peut ensuite l'approuver ou le rejeter durablement.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| theme | No | ||
| trust | No | ||
| object | Yes | ||
| project | No | ||
| subject | Yes | ||
| evidence | No | ||
| predicate | Yes | ||
| validFrom | No | ||
| importance | No | ||
| provenance | No | ||
| validUntil | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosure. It effectively communicates the pending state ('en attente'), the non-retrievability ('sans le rendre récupérable'), and the permanent outcome of human review ('l'approuver ou le rejeter durablement'). This adds valuable behavioral context beyond a simple 'add' description, though it omits details like side effects or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core action and followed by the review consequence. Every word earns its place, with no redundant information, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, no annotations, no output schema), the description is too minimal. It does not explain parameter meanings, the review workflow's relation to siblings like memory_candidate_list/review, or any return/error behavior. The short description leaves significant gaps for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 12 parameters with zero description coverage, and the description provides no information about any parameter (subject, predicate, object, tags, evidence, etc.). The phrase 'un fait' hints at the triple structure but does not explain the semantics of optional fields, leaving the agent without guidance on parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's core function: 'Place un fait en attente sans le rendre récupérable' (places a fact on hold without making it retrievable). This distinguishes it from siblings like memory_add by specifying the pending state and non-retrievability, and it mentions human review, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a fact should not be immediately retrievable but rather await human approval, contrasting with direct add tools. However, it does not explicitly name alternatives or state when not to use this tool, so it provides clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_listLister les candidats mémoireA
Liste les faits en attente, approuvés ou rejetés sans les injecter dans la récupération normale.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| project | No |
TDQS
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 an important behavioral trait: the listing does not inject facts into normal retrieval. But it does not mention read-only guarantees, authentication requirements, rate limits, or the shape of the returned data, leaving gaps for a tool with no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that starts with the verb and resource, states the status scope, and adds the retrieval-injection caveat. There is no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (three optional scalar parameters) and no output schema, the description captures the core purpose and a key behavioral guarantee. However, it omits return format, ordering, default limit behavior, and explicit relationships to sibling tools, making it minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only restates the status enum values (pending/approved/rejected) that are already present in the input schema. It provides no explanation of the 'limit' parameter or the 'project' filter, so the description fails to compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Liste') and resource ('faits... candidats'), enumerates the three statuses, and adds a key scope distinction by noting the listing does not inject facts into normal retrieval. This clearly differentiates it from a general memory list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for reviewing candidate facts by status, particularly because it mentions pending/approved/rejected and the lack of injection into retrieval. However, it does not explicitly name sibling alternatives such as memory_list or memory_candidate_review, nor does it provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_candidate_reviewRevoir un candidat mémoireB
Approuve un candidat et publie son évidence, ou le rejette et bloque sa réintroduction par la write gate.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | No | ||
| decision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful side-effects: approval publishes evidence, rejection blocks reintroduction via the write gate. However, with no annotations, it omits crucial details like reversibility, permission requirements, or behavior for already-reviewed candidates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence packs the core action and consequences. No wasted words, and the approve/reject branches are clearly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the two outcomes are clear, the description lacks important context: what qualifies as a candidate, how to interpret 'évidence' and 'write gate', and what conditions must be met before calling. The 0% schema coverage and absent annotations make this incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameter semantics. 'id' and 'reason' are left undefined; only 'decision' is implied through the approve/reject wording. The description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's dual function: approving a candidate (publishing its evidence) or rejecting it (blocking reintroduction). This specific verb+resource+effect structure distinguishes it from sibling tools like memory_candidate_add or memory_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention preconditions (e.g., candidate must be pending) or exclude other tools, leaving the agent to infer context from the name and siblings only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_episode_addEnregistrer un épisodeA
Enregistre un épisode de session (résumé épisodique + provenance). À appeler à la fin d'une conversation : l'historique des sessions alimente la consolidation future.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| summary | Yes | Résumé de la session en une phrase | |
| provenance | No | Identifiant de la session source |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that session history feeds future consolidation, which is valuable behavioral context. However, it does not mention return values, side effects, or any limitations (e.g., idempotency, rate limits), so transparency is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and followed by a clear usage instruction. Every word contributes; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple add operation with no output schema and no annotations, the description gives the core purpose and timing. However, it omits explanation of the 'project' parameter and what happens after the call (e.g., return value). These are notable gaps for an agent that must invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (summary and provenance have descriptions, project does not). The description adds some context by labeling the content as 'résumé épisodique' and mentioning provenance, but it does not clarify the optional 'project' parameter, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool saves a session episode (episodic summary + provenance) and explicitly references the 'episode' concept, distinguishing it from sibling tools like memory_add. The verb 'Enregistre' and resource 'épisode de session' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call at the end of a conversation, giving a clear context of when to use this tool. It does not explicitly name alternatives, but the context implies it is for episodic session summaries rather than general memory entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_episode_searchChercher dans les épisodesA
Recherche dans les résumés de sessions (la couche temporelle) : « qu'est-ce qu'on a fait la semaine dernière ? », « de quoi a-t-on parlé sur ce projet ? ». Sans query, liste les épisodes récents. Même seuil strict que la recherche de mémoires.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Mots-clés sur le résumé de la session | |
| project | No | Restreindre à un projet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It adds useful details: searching session summaries, listing recent episodes when no query is given, and applying a strict threshold comparable to memory search. It does not explain the return format or sort order, but the read-only nature is implied by 'search.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose, examples, no-query behavior, and threshold context. Every phrase adds value, and the description is front-loaded with the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with three optional parameters and no output schema, the description covers the core semantics, usage examples, and a notable behavioral nuance. It could mention the exact return shape or pagination, but the examples and threshold note make it reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%: query and project have meaningful descriptions, while limit is only typed. The description text does not add much beyond the schema, though it references the query behavior contextually. This is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches through session summaries, calling it the temporal layer, which distinguishes it from the sibling memory_search. It also provides concrete example questions, making the purpose immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The examples ('what did we do last week?', 'what did we talk about on this project?') indicate when to use the tool. It also notes that omitting the query lists recent episodes, and that the same strict threshold as memory search applies, giving helpful context. However, it does not explicitly name sibling tools as alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_forgetOublier une mémoireA
Archive une mémoire (elle ne remonte plus dans les recherches, mais reste en base).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la mémoire |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It discloses a key behavioral trait: the memory is archived (not deleted) and remains in the base, with the effect of being hidden from search results. This goes beyond a simple 'forget' and clarifies the durability of the operation. However, it does not mention reversibility or potential side effects, so it is not fully exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently communicates both the action and its consequence. Every word adds value, and the parenthetical clarification is succinct. There is no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, no output schema, no nested objects), the description provides sufficient context. It explains what the tool does and the result of the action. The lack of explicit return-value documentation is acceptable for a simple side-effect operation, and the description is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'id', with a description 'Identifiant de la mémoire'. The tool description does not add any further semantics beyond the schema, which is acceptable given the high schema coverage. The baseline of 3 applies since the schema already documents the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (archive a memory) and specifies the exact scope: it no longer appears in searches but remains in the database. This is a specific verb plus resource and distinguishes the tool from deletion or permanent removal, which are plausible alternatives among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you want to archive a memory so it stops appearing in searches while retaining it in the database. It does not explicitly name alternative tools or exclusion criteria, but the behavior is distinct enough to guide an agent. It implies that this is not for permanent deletion, which is a useful implicit guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_indexIndex de routageA
Régénère et renvoie l'index de la mémoire (fichier ~/.memsem/memory-index.md) : thèmes avec mots-clés, épinglées, faits sans thème. Le fichier est injecté automatiquement au début de chaque session — cet appel sert à le rafraîchir.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of disclosing behavior. It states that the tool regenerates and returns the index, and explains the auto-injection behavior, which adds context about the file's role and how the call fits into the workflow. It does not mention potential side effects like overwriting, but 'régénère' sufficiently implies a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first defines the core function and file path, the second explains the automatic injection context and the refresh use case. Every sentence adds value, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description is remarkably complete. It covers what the tool does, what the index contains, and when to use it (to refresh the session-injected index). The list of contents gives the agent a clear expectation of the return value, so no additional output documentation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline score is 4 per the rubric. The description adds no parameter information because none exist, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Régénère et renvoie') with a precise resource (the memory index file ~/.memsem/memory-index.md) and enumerates its contents (themes, keywords, pinned items, facts). This clearly distinguishes it from sibling tools like memory_list or memory_search, which focus on searching or listing memory entries rather than regenerating the index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the index is automatically injected at the start of each session and that this call is used to refresh it, providing clear usage context. It implies the primary use case (manual refresh) but does not explicitly name alternatives or exclusions, which is why it does not earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listLister les mémoiresA
Liste les mémoires actives d'un projet et/ou d'un thème, triées par priorité (épinglées en tête). À utiliser pour injecter le contexte pertinent au démarrage d'une session ou au changement de sujet.
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | Lister l'état valide à une date ISO 8601 | |
| focus | No | Thèmes focaux : les mémoires des thèmes listés restent prioritaires, les autres sont atténuées | |
| limit | No | ||
| theme | No | Filtre par thème et sous-thèmes ; avec project, reste dans ce projet sauf crossProject=true | |
| project | No | ||
| crossProject | No | Avec un projet + thème, autorise explicitement la liste inter-projets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that only 'active' memories are returned and that they are sorted by priority with pinned memories first. However, it does not explain default behavior when no filters are given, pagination, or meaning of 'active', leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first defines the operation, the second gives usage guidance. It is concise, front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description should clarify return format and parameter interactions (e.g., crossProject, focus, asOf). It does not mention what a memory entry looks like, what the default limit is, or whether all memories are listed if no filters are provided. This leaves the tool incomplete for a 6-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so some parameters (limit, project) lack descriptions. The description only mentions filtering by project/theme generically and does not explain any parameter semantics beyond the schema. It does not compensate for the missing parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists active memories for a project and/or theme, sorted by priority with pinned items first. This specific verb+resource+scope distinguishes it from sibling tools like memory_search or memory_verify.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage context: 'à utiliser pour injecter le contexte pertinent au démarrage d'une session ou au changement de sujet.' It does not mention alternatives or exclusions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_purgePurger une mémoireB
Supprime définitivement le contenu d'une mémoire et ses historiques. Requiert confirm=true ; l'audit conserve uniquement une trace redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | No | ||
| confirm | Yes | Confirmation explicite de la suppression irréversible |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses permanent deletion, required confirmation, and that audit only keeps a redacted trace. It does not mention reversibility (though 'définitivement' implies irreversible) or potential side effects on related memories, but the key destructive behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main action and then key behavioral constraints. No wasted words; every phrase contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers core aspects (permanence, confirm, audit). However, it omits how id selects the target, the purpose/format of reason, and any return/error behavior. It is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, and the description only adds meaning for 'confirm' ('confirmation explicite de la suppression irréversible' is already in schema). The 'id' parameter is implied but not explained, and 'reason' is entirely absent. The description insufficiently compensates for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Supprime définitivement le contenu d'une mémoire et ses historiques') with scope, and the title 'Purger une mémoire' reinforces the purpose. It does not explicitly contrast with siblings like memory_forget, though the emphasis on 'définitivement' and audit redaction implies a distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a requirement ('Requiert confirm=true') but provides no guidance on when to choose this tool over alternatives such as memory_forget or memory_unsuppress. There are no exclusions or context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_scoreRecalibrer l'importanceA
Ajuste l'importance d'une mémoire (calibrage par le sub-agent de scoring, comparaisons par paires). Garde-fous : faits épinglés et importance ≥ 0.9 intouchables, variation plafonnée à ±0.15 (par appel et par passe cumulée via passId), bornes 0.4–0.85. dryRun: true logue sans appliquer. Ne pas utiliser pour écrire un fait — uniquement pour recalibrer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la mémoire | |
| dryRun | No | true : journalise le changement prévu sans l'appliquer | |
| passId | No | Identifiant de la passe du juge : cumule le plafond ±0.15 sur toute la passe | |
| reason | No | Pourquoi (journal d'audit), ex: 'paire: X bat Y' | |
| importance | Yes | Importance cible (0..1), plafonnée à ±0.15 de la valeur actuelle |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly reveals key guardrails: pinned facts and importance ≥0.9 untouchable, variation capped at ±0.15 per call/pass via passId, and bounds 0.4–0.85. It also explains dryRun behavior ('logue sans appliquer'), which is critical for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the primary action stated first. The list of safeguards is dense but each phrase carries meaningful information. The final warning is direct and effective. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, constraints, dryRun behavior, and usage boundaries well. However, since there is no output schema, it does not mention what is returned on success or failure, which would be helpful for agents to interpret results. Still, the description is quite complete for a recalibration tool with such detailed guardrails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all 5 parameters (100% coverage), so the baseline is 3. The description adds value by explaining the cumulative cap via passId and clarifying the +/-0.15 constraint, which is not fully detailed in the schema. It also gives a concrete example for 'reason' ('paire: X bat Y'), enriching the meaning of that parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: 'Ajuste l'importance d'une mémoire' (adjusts the importance of a memory). It also explicitly distinguishes this from writing a fact with 'Ne pas utiliser pour écrire un fait — uniquement pour recalibrer', setting it apart from sibling tools like memory_add.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool: for recalibration only, and explicitly warns 'Ne pas utiliser pour écrire un fait'. This exclusion is clear and directly addresses alternatives, even though it does not name sibling tools explicitly. The mention of 'calibrage par le sub-agent de scoring, comparaisons par paires' gives context for the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchChercher dans la mémoireA
Recherche stricte par défaut : seules les correspondances lexicales réelles (seuil 50% des mots de la requête) remontent, classées par priorité. Pas de propagation de graphe : avec une grande mémoire, on ne part pas dans les associations. relax=true : explore les associations par le graphe (2 sauts) — à n'utiliser que pour explorer, pas pour répondre.
| Name | Required | Description | Default |
|---|---|---|---|
| asOf | No | Rechercher l'état valide à une date ISO 8601 passée ou future | |
| focus | No | Thèmes focaux de la conversation (liste vivante) : les mémoires d'un thème focal gardent leur score, les autres sont atténuées (×0.35). Ajoute un thème quand le sujet dévie, retire-le quand il retombe — ne baisse jamais un thème encore actif | |
| limit | No | Nombre max de résultats | |
| query | Yes | Requête libre, ex: lait, intolérance, architecture | |
| relax | No | false (défaut) : strict, lexical uniquement. true : associations par le graphe + index sémantique local (Ollama si présent) | |
| theme | No | Filtre par thème et sous-thèmes ; avec project, reste dans ce projet sauf crossProject=true | |
| project | No | Restreindre à un projet | |
| crossProject | No | Avec un projet + thème, autorise explicitement la recherche inter-projets (défaut: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and fully discloses key behaviors: default lexical matching at 50% query word threshold, no graph propagation, ranking by priority, and relax mode performing 2-hop graph associations. This is more than sufficient for a non-mutating search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight three-sentence paragraph with no redundant details. It front-loads the default behavior, then explains the relax exception, and ends with a usage warning. Every sentence contributes information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter search tool with no output schema, the description covers the essential search semantics and usage caveats. It could go further by describing the result format or ranking details, but the priority ranking is already mentioned and the core behavior is well specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 8 parameters (100% coverage), but the description adds meaningful behavioral context beyond the schema, such as the 50% threshold interpretation for 'query' and the 2-hop graph traversal for 'relax'. This enriches the schema without duplicating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a memory search tool with specific matching behavior (lexical threshold, priority ranking), distinguishing it from sibling tools like memory_list or memory_themes. The verb 'recherche' and resource 'mémoire' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts strict default search (suitable for answering) with relax mode (only for exploration) and warns against using relax for answering. While it doesn't name alternative tools, it gives clear contextual guidance on when to use each mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statsÉtat de la mémoireA
Vue d'ensemble : compteurs (actives, archivées, épinglées, épisodes, arêtes du graphe), top des priorités et historique récent des changements.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 not explicitly state that the tool is read-only, non-mutating, or safe to call. The content-focused description omits any side-effect or access-related context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the purpose ('Vue d'ensemble') and enumerates the key output categories. No wasted words, easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no parameters, and no output schema, the description adequately lists the main return content (counters, top priorities, recent changes). It is reasonably complete for a simple stats tool, though it could explicitly mention the read-only nature for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (trivially). The baseline of 4 applies, and the description adds context about the output structure without needing to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function as providing an overview of memory statistics, listing specific data elements (counters, top priorities, recent changes). It distinguishes itself from sibling tools like memory_list and memory_search by focusing on aggregate stats rather than individual entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an overview of memory health or statistics is needed, but it does not explicitly state when to use this tool versus alternatives. There are no exclusions or explicit references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_themesCarte des thèmesA
L'arbre des thèmes avec leurs effectifs : la carte de routage de la mémoire. À charger au début de session pour savoir où chercher, puis rechercher par thème à chaque changement de sujet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the output (a tree of themes with counts) and its routing purpose, but it does not explicitly state that this is a read-only operation, whether the data is fresh or cached, or any performance characteristics. This is a moderate coverage gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first defines the tool's purpose, the second gives usage guidance. Every sentence earns its place, and the key information is front-loaded. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description adequately describes the return value (a tree of themes with counts) and provides usage context. It could mention whether the tree includes all themes or just those with entries, but overall it is sufficient for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to add parameter information. The baseline for 0 parameters is 4, and the description appropriately focuses on the output rather than inputs, which is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool provides 'the tree of themes with their counts' and positions it as 'the routing map of memory.' This distinguishes it from sibling tools like memory_search or memory_list, though it lacks an explicit verb and could be more explicit about its differentiation from memory_stats or memory_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers explicit guidance: 'Load at the start of session to know where to look, then search by theme at each topic change.' This tells the agent exactly when to use this tool and implies a workflow with other tools (searching by theme), making it highly actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_unsuppressRéautoriser une valeur mémoireA
Retire une suppression durable après une décision explicite. La prochaine écriture pourra à nouveau être évaluée.
| Name | Required | Description | Default |
|---|---|---|---|
| object | Yes | ||
| project | No | ||
| subject | Yes | ||
| predicate | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It states the immediate effect (removes a durable suppression) and the consequence (the next write can be evaluated again). However, it does not disclose potential side effects, reversibility of the unsuppression, permission requirements, or what happens to existing suppressed data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences. The first states the primary action, the second the resulting behavior. No unnecessary words or repetition, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no annotations, and no output schema, the description is too sparse. It explains the core action but omits parameter semantics, usage prerequisites, and edge cases. For a mutating tool, more context is needed to ensure correct invocation by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 4 parameters with 0% description coverage, and the description does not mention any of them. While the parameter names (subject, predicate, object, project) suggest a memory triple structure, the description adds no explicit meaning, failing to compensate for the schema's lack of elaboration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Retire une suppression durable' (removes a durable suppression), and the title clarifies 'Réautoriser une valeur mémoire' (re-authorize a memory value). This clearly distinguishes it from sibling tools like memory_forget or memory_purge, which perform suppression, by being their inverse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'après une décision explicite' (after an explicit decision) implies the tool should be used when deliberately reversing a previous suppression. However, it does not explicitly contrast with alternatives or mention when not to use it, leaving usage guidance only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_verifyVérifier une mémoireB
Marque une mémoire active comme vérifiée et remplace ou ajoute sa preuve courte. L'opération est auditée.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | No | ||
| evidence | Yes | Preuve humaine ou externe courte |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the operation is audited and that evidence is replaced or added, which are important behavioral traits. However, it does not mention permissions, failure modes, or consequences for inactive memories, leaving some transparency gaps given the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action and accompanied by a concise audit note. There is no fluff or redundancy, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations or output schema, the description is not complete enough. It lacks context about when to use the tool, the purpose of the reason parameter, and what constitutes an 'active' memory, leaving an AI agent with insufficient guidance for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only describes one parameter (evidence), and the description adds no meaningful detail about the required 'id' or optional 'reason'. The phrase 'preuve courte' only reinforces the existing schema description, so parameter semantics are minimally enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: marks an active memory as verified and replaces or adds its evidence. This distinguishes it from other memory tools like memory_add or memory_score, and avoids tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. It only implies usage for verifying memories, which is not enough direction for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v1.2.0- Changed
memory_add4 fields changed- added
Input schema / properties / evidenceAdded value: +{ + "description": "Preuve courte ou citation ayant motivé le fait", + "maxLength": 2000, + "type": "string" +} - added
Input schema / properties / trustAdded value: +{ + "description": "Niveau de confiance : inféré ou citation verbatim ; utilisez memory_verify pour verified", + "enum": [ + "inferred", + "verbatim" + ], + "type": "string" +} - added
Input schema / properties / validFromAdded value: +{ + "description": "Début de validité ISO 8601, distinct de l'enregistrement", + "type": "string" +} - added
Input schema / properties / validUntilAdded value: +{ + "description": "Fin de validité ISO 8601 exclusive", + "type": "string" +}
- Changed
memory_add_many4 fields changed- added
Input schema / properties / facts / items / properties / evidenceAdded value: +{ + "maxLength": 2000, + "type": "string" +} - added
Input schema / properties / facts / items / properties / trustAdded value: +{ + "enum": [ + "inferred", + "verbatim" + ], + "type": "string" +} - added
Input schema / properties / facts / items / properties / validFromAdded value: +{ + "type": "string" +} - added
Input schema / properties / facts / items / properties / validUntilAdded value: +{ + "type": "string" +}
- Added
memory_audit - Added
memory_candidate_add - Added
memory_candidate_list - Added
memory_candidate_review - Changed
memory_list3 fields changed- added
Input schema / properties / asOfAdded value: +{ + "description": "Lister l'état valide à une date ISO 8601", + "type": "string" +} - added
Input schema / properties / crossProjectAdded value: +{ + "description": "Avec un projet + thème, autorise explicitement la liste inter-projets", + "type": "boolean" +} - changed
Input schema / properties / theme / descriptionPrevious value: -"Filtre par thème (et sous-thèmes), traverse tous les projets (prime sur project)"New value: +"Filtre par thème et sous-thèmes ; avec project, reste dans ce projet sauf crossProject=true"
- Added
memory_purge - Changed
memory_search4 fields changed- added
Input schema / properties / asOfAdded value: +{ + "description": "Rechercher l'état valide à une date ISO 8601 passée ou future", + "type": "string" +} - added
Input schema / properties / crossProjectAdded value: +{ + "description": "Avec un projet + thème, autorise explicitement la recherche inter-projets (défaut: false)", + "type": "boolean" +} - changed
Input schema / properties / project / descriptionPrevious value: -"Restreindre à un projet (ignoré si theme est fourni)"New value: +"Restreindre à un projet" - changed
Input schema / properties / theme / descriptionPrevious value: -"Filtre par thème (et ses sous-thèmes), ex: alimentation. Le thème traverse tous les projets (il prime sur project)"New value: +"Filtre par thème et sous-thèmes ; avec project, reste dans ce projet sauf crossProject=true"
- Added
memory_unsuppress - Added
memory_verify
1 tool update
v1.1.0- Changed
memory_score4 fields changed- added
Input schema / properties / dryRunAdded value: +{ + "description": "true : journalise le changement prévu sans l'appliquer", + "type": "boolean" +} - changed
Input schema / properties / importance / descriptionPrevious value: -"Nouvelle importance (0..1)"New value: +"Importance cible (0..1), plafonnée à ±0.15 de la valeur actuelle" - added
Input schema / properties / passIdAdded value: +{ + "description": "Identifiant de la passe du juge : cumule le plafond ±0.15 sur toute la passe", + "type": "string" +} - added
Input schema / properties / reasonAdded value: +{ + "description": "Pourquoi (journal d'audit), ex: 'paire: X bat Y'", + "type": "string" +}
11 tool updates
v1.0.0- First observed
memory_add - First observed
memory_add_many - First observed
memory_episode_add - First observed
memory_episode_search - First observed
memory_forget - First observed
memory_index - First observed
memory_list - First observed
memory_score - First observed
memory_search - First observed
memory_stats - First observed
memory_themes
TDQS
Most tools have clearly distinct purposes (add vs candidate_add vs episode_add, search vs list vs themes), and descriptions clarify boundaries. However, pairings like memory_add/memory_add_many and memory_forget/memory_purge could cause initial confusion, though the descriptions resolve it.
All tools share the memory_ prefix, but the suffix pattern is mixed: verbs (add, search, list, verify, score, forget, purge) coexist with nouns (themes, stats, audit, index) and compound actions (candidate_add, episode_search). This inconsistency reduces predictability.
At 18 tools, the server is slightly above the ideal 3-15 range but each tool addresses a specific aspect of memory management, from candidate review to episode tracking to scoring. The count feels justified by the domain's complexity rather than redundant.
The tool set covers the full memory lifecycle: write (add, add_many), review (candidate_*), retrieval (search, list, episode_search), maintenance (verify, score, unsuppress), and deletion (forget, purge), plus auxiliary views (themes, stats, audit, index). No obvious gaps for a semantic memory system.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP memory server. One memory your agents share — across models, devices and apps.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSemantic memory for AI agents — local-first MCP server with hybrid search, knowledge graph, contradiction detection, and plan-then-commit consolidation.3904AGPL 3.0
- FlicenseNot gradedqualityDmaintenanceA local MCP server that provides semantic memory storage and retrieval for coding and AI agents, enabling durable context across chat sessions.524-
- FlicenseNot gradedqualityBmaintenancePersistent semantic memory MCP server for AI agents with hybrid search, LLM scoring, and decay engine, fully local.2-
- AlicenseNot gradedqualityBmaintenanceMCP server that provides semantic memory with search, related-content traversal, and write-back capabilities, all powered by local embeddings of your notes, documents, and chat histories.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/WindSeries83/memsem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server