Agentic Memory
The Agentic Memory server provides a persistent, local-first memory and knowledge management system for AI agents, combining core memory operations, advanced hybrid search, a temporal knowledge graph, multi-agent coordination, skills management, feedback-driven ranking, maintenance, and monitoring.
Core Memory Operations: Save, read, update, delete, restore, supersede, and patch memories with structured Markdown content, categories (lessons, decisions, etc.), tags, importance, and pinning; soft-delete with recovery and hard-delete safeguards.
Advanced Search: Hybrid 14‑phase pipeline merging semantic (embedding), full-text (FTS5), knowledge graph, and fact retrieval; supports temporal filtering, reranking, and click-through feedback to continuously improve relevance.
Knowledge Graph: Explore, traverse, find shortest paths, and retrieve stats for a temporal, contradiction-aware graph with belief tracking, entity extraction, and low‑confidence belief review.
Multi-Agent Coordination: Manage tasks (create, claim, update, release, complete), lock/unlock files, exchange inter-agent messages, and share project state.
Session & Context: Generate structured cold‑start briefings; recall context for session continuity with pinned memories, user profiles, recent digests, and high‑importance items.
Skills Management: Extract skills from memories, list them by usage, and compile lesson notes into validated, executable agent rule files.
Feedback & Reinforcement: Record implicit click-through feedback and explicit success/failure signals to improve future search ranking.
Audit & Revision History: Review recent activity, errors, and full revision logs for supersede, amend, revert, and delete events.
Maintenance & Organization: Safely compact databases, consolidate and deduplicate entries, purge expired data, rewrite links, and curate auto‑saved tool invocations.
Health Monitoring: Multi‑dimensional health dashboard (database, search, workers, crons, auto‑save, disk) with detailed JSON health checks.
Sharing: Share specific memories between agents and manage the shared memory pool.
Advanced & Profiling: Power‑user maintenance escape hatch; view system profiles, agent scopes, Adaptive Resonance Theory (ART/ARC) statistics, and cached skills.
Provides a search tool for CrewAI agents, allowing them to access Agentic Memory's knowledge base.
Provides tools for integrating Agentic Memory with LangChain agents, enabling search and save operations within LangChain workflows.
Supports exporting memories to an Obsidian vault using the Open Knowledge Format (OKF), enabling easy integration with Obsidian note-taking.
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., "@Agentic Memoryremember that I prefer dark mode"
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.
Agentic Memory
Quick Start · Features · Architecture · MCP Server · SDKs · Comparison · Docs · Contributing
What is Agentic Memory?
Agentic Memory gives AI agents persistent, cross-session, local-first memory — no cloud, no vendor lock-in, no API keys required. Memories are stored as human-readable Markdown files. A derived SQLite index enables fast full-text, semantic, and knowledge-graph search.
Built for Claude Code, OpenCode, the Agentic Memory IDE, and any MCP-compatible agent harness.
graph TD
A[Agentic Memory] --> B[Markdown - source]
A --> C[SQLite FTS5 - derived]
A --> D[14-Phase Search Pipeline]
B --> E[.md files - Git-ready]
C --> F[Temporal Knowledge Graph]
D --> G[CQRS + CRDT Multi-Agent Sync]
A --> H[19 MCP tools]
A --> I[55 cron scripts -> 1 scheduler]
A --> J[9 hooks]
A --> K[Python SDK + TypeScript SDK + REST API]Related MCP server: mem-persistence
Quick Start
Python SDK (Recommended)
from agentic_memory import MemoryClient
mc = MemoryClient()
mc.save("User prefers dark mode", category="preferences")
results = mc.search("dark mode")
for r in results:
print(f"[{r.score:.2f}] {r.content}")Agent Scoping
from agentic_memory import AgentMemory
coder = AgentMemory(agent_id="coder")
coder.save("Frontend uses React with TypeScript")
designer = AgentMemory(agent_id="designer")
designer.save("Brand colors are #FF5733 and #33FF57")MCP Server
# Add to your MCP config
{
"agentic-memory": {
"command": "agentic-memory-server"
}
}REST API
agentic-memory api --port 9878
curl http://localhost:9878/api/v1/search?q=dark+modeFeatures
Search — 14-Phase Hybrid Pipeline
Phase | Technique | Purpose |
1 | Query parsing + expansion | Normalization, reasoning expansion |
2 | Skill-first lookup | Conditional early return on skill match |
3 | Cache check | Return cached results if fresh |
4 | DB setup + filter construction | Open connection, build filters |
5 | FTS5 BM25 + KG facts | Keyword + fact retrieval |
6 | Embedding fallback | Semantic vector search (usearch + model2vec) |
7 | Hybrid fusion (RRF) | Merge sparse + dense results |
8 | Temporal filtering | Decay old memories, exclude outdated |
9 | Chunk enhancement + session clustering | Enrich with sub-document chunks |
10 | KG boost + multi-hop traversal | Concept centrality, graph expansion |
11 | Reranking | Cross-encoder + ColBERT late-interaction |
12 | Build output items | Assemble result objects |
13 | Postprocessing | Safety gates, quality filters, profiling |
14 | Finalization | Access recording, telemetry, envelope |
Each phase is independently isolated — no single failure kills the search.
Write — Crash-Safe, Conflict-Preserving
Saga transactions — Crash-consistent writes with undo/redo
CQRS write journal — Lock-free multi-agent writes via journal.db
CRDT field-level LWWES — Concurrent edits to different fields both win
Safe atomic write — POSIX rename, conflict file preservation
Knowledge Graph — Temporal + Contradiction-Aware
Entity extraction with Jaccard fuzzy matching
Temporal edges with
valid_at/invalid_atContradiction detection and supersession chains
Graph analytics (centrality, community detection)
Neural Forget Curve
Surprise-based retention formula considering access patterns, query relevance, recency, and importance:
retention = sigmoid(w_acc × access + w_surp × surprise + w_imp × importance + w_fit × fitness - w_rec × recency - bias)Cron Consolidation
39 crontab entries replaced with 1 consolidated scheduler that runs every 5 minutes, checks which jobs are due by frequency tier, and runs them sequentially.
System Health Dashboard
memory_system_health MCP tool returns green/yellow/red across 6 dimensions with actionable next steps: database, search, worker, crons, auto-save, disk.
Architecture
agentic-memory/
├── agentic_memory/ # Python SDK (pip installable)
│ ├── client.py # MemoryClient (save/search/CRUD)
│ ├── temporal.py # TemporalKG
│ ├── kg.py # KnowledgeGraph
│ ├── integrations/ # LangChain + CrewAI adapters
│ └── models.py # 8 typed dataclasses
├── search/ # 14-phase search pipeline
│ ├── orchestrator.py # Main pipeline (2,825 LOC)
│ ├── scoring.py # RRF, temporal decay, KG boost
│ ├── rerankers.py # Cross-encoder, ColBERT
│ ├── chunk_index.py # Semantic chunking
│ └── synthesis.py # Answer synthesis
├── save/ # Write path
│ ├── pipeline.py # Saga-wrapped save
│ ├── backlinks.py # Wiki-style backlinks
│ └── post_save_hooks.py # Post-save operations
├── infra/ # Infrastructure
│ ├── db.py # Connection pool + WAL
│ ├── write_journal.py # CQRS write journal
│ ├── embedding_search.py # Semantic embeddings
│ ├── reranker.py # Neural reranker
│ ├── vector_store.py # ANN index abstraction
│ ├── api_server.py # REST + WebSocket
│ └── cache.py # Multi-level caching
├── knowledge_graph/ # KG extraction + search
├── kg/ # Temporal KG + analytics
├── crdt/ # Field-level CRDT merge
├── fact/ # Fact extraction + temporal
├── background/ # Daemon + worker + circuit breaker
├── cron/ # 47+ cron jobs + consolidated scheduler
├── hooks/ # 6 lifecycle hooks
├── migrations/ # 57 reversible migrations
├── eval/ # 363 test files, 5,703+ test functions
├── ts-sdk/ # TypeScript SDK
├── mcp_*.py # 31 MCP modules
├── mcp_health.py # System health MCP tool
└── dashboard.py # Streamlit observabilityProduction stats: ~147K LOC, 365 test files, 5,735+ test functions, schema v76, 77 reversible migrations, 25 CORE MCP tools, 1 consolidated scheduler, 7 lifecycle hooks.
SDKs
Python
pip install agentic-memoryfrom agentic_memory import MemoryClient, AgentMemory, TemporalKG
mc = MemoryClient()
mc.save("Important context", category="lessons")
results = mc.search("context")
stats = mc.stats()TypeScript
npm install @agentic-memory/sdkimport { MemoryClient } from '@agentic-memory/sdk';
const client = new MemoryClient();
await client.add('Important context');
const results = await client.search('context');REST API
agentic-memory api --port 9878curl -X POST http://localhost:9878/api/v1/memories \
-H "Content-Type: application/json" \
-d '{"content": "Important context"}'MCP Server
17 CORE tools always visible to your agent. 95 ADMIN + 3 DEPRECATED behind memory_maintenance(operation="...").
CORE Tools
memory_search memory_save memory_delete
memory_recall memory_note memory_learn
memory_audit memory_organize memory_share
memory_graph memory_profile memory_session_start
memory_advanced memory_review_beliefs memory_curate_autosave
memory_health_check memory_system_healthSetup
{
"agentic-memory": {
"command": "agentic-memory-server",
"env": {
"MEMORY_KNOWLEDGE_GRAPH": "1",
"MEMORY_DB_PATH": "./memory.db"
}
}
}Integrations
LangChain
from agentic_memory.integrations.langchain.tool import search_tool, save_tool
agent = create_react_agent(llm, tools=[search_tool, save_tool])CrewAI
from agentic_memory.integrations.crewai.tool import AgenticMemorySearchTool
agent = Agent(..., tools=[AgenticMemorySearchTool()])OKF (Open Knowledge Format)
mc.okf_export("~/ObsidianVault/agent-memory")Configuration
Install Extras
pip install agentic-memory # Core
pip install agentic-memory[embeddings] # + semantic search
pip install agentic-memory[reranker] # + cross-encoder
pip install agentic-memory[langchain] # + LangChain
pip install agentic-memory[crewai] # + CrewAI
pip install agentic-memory[all] # EverythingKey Environment Variables
Variable | Default | Description |
|
| Database path |
|
| Markdown directory |
|
| Enable KG extraction |
|
| Enable semantic search |
|
| Enable LLM fact extraction |
Comparison
Feature | Agentic Memory | Mem0 | Letta | Zep |
Local-first | Yes | No | No | No |
MCP-native | 17 CORE tools | No | No | 1 tool |
14-phase search | Yes | No | No | No |
Temporal KG | Yes | Partial | No | Yes |
CRDT sync | Field-level | No | No | No |
CQRS journal | Yes | No | No | No |
Neural forget | Yes | No | No | No |
Python SDK | Yes | Yes | Yes | Yes |
TypeScript SDK | Yes | Yes | Yes | Yes |
LangChain | Yes | Yes | Yes | Yes |
CrewAI | Yes | Yes | Yes | No |
OKF support | Yes | No | No | No |
Test coverage | 5,703+ tests | ~500 | ~2,000 | ~300 |
License | Apache 2.0 | Apache 2.0 | Apache 2.0 | Apache 2.0 |
Documentation
Section | Description |
Get running in 5 minutes | |
Full API reference | |
Full API reference | |
HTTP endpoints | |
System design | |
Integration guide | |
Integration guide | |
Search pipeline, KG, CRDT, tiers | |
Integration, debugging, cron setup | |
MCP tools, configuration, schema |
Contributing
See CONTRIBUTING.md for dev setup, coding conventions, and PR guidelines.
Issues and PRs welcome. For security vulnerabilities, see SECURITY.md.
License
Available Tools
24 toolsmemory_advancedA
Power user escape hatch — pass through to any memory_maintenance operation.
Use this when a verb doesn't cover your use case.
Args: operation: Any memory_maintenance operation name. tenant_id: Tenant identity for tenant-scoped operations. **kwargs: Operation-specific parameters.
Security: this delegates to memory_maintenance, so the confirmation
gate on destructive operations applies here too. A destructive op
(e.g. purge_expired, okf_export, crdt_sync) called without
confirm=True is refused; pass confirm=True to proceed.
| Name | Required | Description | Default |
|---|---|---|---|
| kwargs | Yes | ||
| operation | Yes | ||
| tenant_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool delegates to memory_maintenance, that destructive ops require confirm=True, and mentions the confirmation gate. This is sufficient for transparency, though a bit more detail on what happens during delegation could help.
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 concise with clear sections (args, security) and is front-loaded with purpose. Every sentence adds value, though the 'Args' block could be slightly more compact.
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 generic nature and the existence of an output schema (not shown but signaled), the description provides essential information: the purpose, usage guidance, security warnings, and parameter explanations. It is complete enough for an escape hatch 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 0%, so description must add meaning. It explains 'operation' as any operation name, 'kwargs' as operation-specific parameters, and 'tenant_id' as tenant identity. However, 'kwargs' is a string but not clarified whether it expects JSON or other format, leaving some ambiguity.
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 labels it as an 'escape hatch' for memory_maintenance operations, distinguishing it from sibling tools by stating 'use when a verb doesn't cover your use case.' This provides specific verb+resource context.
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 states when to use the tool (when a specific verb is unavailable) and provides security guidelines about confirm=True for destructive operations. It lacks explicit when-not-to-use but the context implies using specific verbs when possible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_auditA
Review recent memory activity, errors, and system health.
Combines audit_query + circuit_breaker_status into one call.
Args: hours: Look back window (default 24h). limit: Max results (default 20). include_errors: Include error entries (default True).
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| limit | No | ||
| include_errors | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions combining two functions and reviewing health, but does not disclose read-only nature, permissions, or error behavior. The existence of an output schema reduces the need for describing return values, but more behavioral context would be helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is succinct with a summary line followed by a well-organized argument list. Every sentence adds value with no wasted words.
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 low complexity (3 optional params) and an output schema, the description provides sufficient purpose and parameter details. It distinguishes from siblings by mentioning the combined nature. Minor gaps remain in behavioral aspects, but overall it is complete for its context.
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 0%, meaning the schema only provides type and default. The description adds clear explanations for all three parameters (hours, limit, include_errors), fully compensating for the lack of schema 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 reviews recent memory activity, errors, and system health, and that it combines audit_query and circuit_breaker_status. This provides a specific verb+resource and distinguishes it from similar siblings like memory_system_health and memory_health_check.
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 use when both audit and circuit breaker status are needed, but does not explicitly state when not to use it or provide alternatives. It lacks explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_compile_skillC
Compile a lesson note into a validated executable agent skill rule file in ~/.agents/skills/.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_name | Yes | ||
| lesson_slug | Yes | ||
| primary_triggers | Yes | ||
| secondary_triggers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides some behavioral context (output is a validated executable file saved to a specific path) but does not disclose side effects like overwriting, validation failures, or required permissions.
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 sentence, making it concise. However, it sacrifices important details like parameter explanations and usage context, which could have been added without significant verbosity.
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 complexity (4 parameters, output schema exists) and the presence of many sibling tools, the description is incomplete. It lacks parameter semantics, usage guidelines, and sufficient behavioral transparency for safe 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 fails to explain any of the four parameters. Terms like 'lesson note' loosely relate to lesson_slug but primary_triggers and secondary_triggers are not mentioned, leaving the agent without sufficient guidance to fill parameters correctly.
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 compiles a lesson note into a validated executable agent skill rule file, specifying the output location (~/.agents/skills/). This distinguishes it from sibling tools like memory_learn or memory_extract_skills.
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 on when to use this tool versus alternatives, no prerequisites (e.g., lesson note existence), and no exclusions. An agent cannot determine the appropriate context from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_coordinateA
Multi-agent coordination tool for task management, file locking, and messaging.
Actions: create_task: Create a new task claim_task: Reserve a task for this agent update_task_status: Update task status (the primary coordination primitive) release_task: Release a task back to the pool complete_task: Mark task done, share result list_tasks: List tasks for a project lock_file: Acquire exclusive lock on a file unlock_file: Release file lock check_lock: Check if a file is locked send_message: Send message to another agent read_messages: Read pending messages get_project_state: See what others are doing update_project_state: Share what you're doing
Coordination model: Messages are notifications. Task status transitions are the ack. When Agent B reads a message and calls update_task_status, that IS the acknowledgement. No separate ack channel needed.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| value | No | ||
| action | No | get_project_state | |
| status | No | ||
| payload | No | ||
| task_id | No | ||
| to_agent | No | ||
| file_path | No | ||
| task_type | No | ||
| project_id | No | default | |
| assigned_to | No | ||
| description | No | ||
| message_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the coordination model and lists all actions with brief explanations. It discloses the relationship between messages and task status updates. However, it lacks details on error handling or side effects.
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 front-loaded with purpose and well-structured with a bullet list and a concluding paragraph. It is somewhat verbose but organized, with each sentence adding value.
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 13 parameters, 0% schema coverage, and no annotations, the description should provide detailed parameter guidance. It only gives high-level action descriptions and lacks specifics on required fields, return values, or behavior per action.
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%. The description lists actions but does not specify which parameters are required for each action or their formats. The agent must infer parameter usage from action names.
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 is for multi-agent coordination, including task management, file locking, and messaging. It distinguishes from sibling tools which are primarily memory operations.
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 for multi-agent coordination but does not explicitly state when to use this tool versus alternatives. No when-not or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_curate_autosaveA
Review auto-saved tool invocations and promote or discard them.
The agent can list auto-saved notes, then batch-promote them into
intentional lessons or decisions with epistemic_source='agent'.
Args: start_date: ISO date filter start (e.g. "2026-06-01"). Empty = no start bound. end_date: ISO date filter end (e.g. "2026-07-01"). Empty = no end bound. action: "list" | "promote" | "discard". note_ids: List of note IDs to promote/discard (required for promote/discard). category: Target category for promotion (default "lessons").
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list | |
| category | No | lessons | |
| end_date | No | ||
| note_ids | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adds some behavioral context: it notes that promotion sets `epistemic_source='agent'`, which is a specific side effect. It also clarifies that `note_ids` are required for promote/discard actions. However, it does not disclose whether discarding deletes auto-saves permanently or other side effects, leaving some 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two paragraphs. The first sentence captures the core purpose, and the 'Args:' block lists parameters efficiently. While it is not overly verbose, the structure could be slightly improved by front-loading the action parameter more prominently.
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 (curating auto-saves) and the presence of an output schema, the description does not need to detail return values. It explains the primary operations and their effects. However, it could be more complete by clarifying the state changes (e.g., whether promoted notes replace auto-saves or are created separately).
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 0% description coverage, but the tool's 'Args:' block provides clear, concise explanations for all 5 parameters: start_date, end_date, action (with valid values), note_ids (required for promote/discard), and category (default 'lessons'). This adds significant meaning beyond the schema's titles and defaults.
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 reviews auto-saved tool invocations and allows promoting or discarding them. It specifies the actions (list, promote, discard) and the resource (auto-saved notes). This distinguishes it from sibling memory tools like memory_save or memory_recall, which serve different purposes.
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 agent can list auto-saved notes, then batch-promote or discard them. It implies a sequence of use and sets context for when to use this tool (for curating auto-saves). However, it does not explicitly state when not to use it or mention alternatives, though the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_deleteA
Delete a memory note by ID. Soft-delete by default (recoverable for 30 days).
Args: note_id: The note ID (e.g. "lessons/my-note"). hard: If True, permanently delete immediately (default False). confirm: Required to be True to allow a hard (permanent) delete. This is a safety gate: hard deletes cannot be recovered, so they must be explicitly confirmed. Soft-deletes (hard=False, the default) are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| hard | No | ||
| confirm | No | ||
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description effectively discloses key behaviors: default soft-delete with 30-day recoverability, and the confirm parameter as a mandatory safety gate for irreversible hard deletes. It does not mention error handling but covers the main behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one introductory sentence followed by a well-structured Args list. Every sentence is informative with no redundancy or fluff.
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 behavior, parameter semantics, and safety mechanisms thoroughly. It does not mention error handling or idempotency, but given the presence of an output schema and the simplicity of a delete operation, it is largely 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?
Given 0% schema description coverage, the description compensates fully by providing detailed explanations for all three parameters: note_id with an example, hard with default and effect, and confirm with its critical safety role. This adds significant meaning beyond the schema.
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 'Delete a memory note by ID' and distinguishes between soft and hard delete, making its purpose unambiguous among a broad set of sibling memory 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 explains soft vs hard delete and the required confirm safety gate, but does not explicitly compare to other memory tools or provide guidance on when to use this tool instead of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_extract_skillsA
Manually trigger skill extraction.
P0 fix #5: lets the operator re-run the lower-threshold extractor
on a specific memory (memory_id="lessons/foo") or on every
memory when memory_id is empty. Uses the cron implementation
so the same code path runs in both places.
Args: memory_id: when non-empty, extract a skill from just this single memory. When empty, run the full extraction pass (same as cron_skill_extraction.py). dry_run: when True, count what would be extracted without writing to the DB.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| memory_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions that extraction uses the cron code path and that dry_run prevents writes, but it does not state whether the operation is destructive, idempotent, or requires specific permissions. The internal P0 fix comment adds developer context but does not help the agent.
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 structured with an Args block, but it includes a developer-oriented note ('P0 fix #5') that is irrelevant for an AI agent. This noise reduces conciseness. The first sentence is clear, but the internal reference should be removed.
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 an output schema present, the description does not need to detail return values. However, it lacks information about prerequisites, error conditions, or side effects beyond the dry_run flag. For a simple two-parameter tool, the description is adequate but not thorough.
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%, meaning no parameter info in the schema. The description compensates fully by explaining both parameters: memory_id determines scope (specific vs all) and dry_run controls writing. This adds essential meaning beyond the raw schema.
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 action ('Manually trigger skill extraction') and specifies the two modes of operation (single memory or full pass). This verb+resource combination is unambiguous and distinguishes it from sibling tools like memory_list_skills or memory_compile_skill.
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 guidance on when to use each parameter: memory_id for a specific memory or empty for full extraction, and dry_run for testing without writing. However, it does not explicitly state when not to use this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_graphC
Explore the knowledge graph.
Args: query: Natural language KG query (for action=explore). start: Starting entity/node ID (for action=traverse). edge_patterns: Edge type filter (for action=traverse). max_depth: Max traversal depth (default 2). action: "explore" | "traverse" | "shortest_path" | "stats".
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| start | No | ||
| action | No | explore | |
| max_depth | No | ||
| edge_patterns | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only lists parameters and actions, omitting side effects, performance considerations, authorization needs, or read-only nature. The tool's behavior (e.g., whether it modifies data) is 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 short and includes a structured args list. It is front-loaded with the main purpose, though the 'Args' block could be integrated more smoothly. No superfluous text.
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 (5 parameters, 4 actions, many siblings), the description is incomplete. It does not explain when to use each action, error conditions, or how it compares to similar tools. Output schema exists but not mentioned, though not required per rules.
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 description adds basic parameter explanations (e.g., query for explore, start for traverse) beyond the schema (which has 0% description coverage). However, it lacks detail on formats (e.g., edge_patterns syntax) and does not clarify parameters for shortest_path and stats actions.
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 'Explore the knowledge graph' and lists four specific actions (explore, traverse, shortest_path, stats), clarifying it is a multi-purpose graph query tool. However, it does not distinguish from sibling tools like memory_search or memory_recall, missing explicit differentiation.
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 on when to use this tool versus alternatives (e.g., memory_search for semantic search, memory_recall for specific facts). The description lacks when-to-use, when-not-to-use, or prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_health_checkB
Unified health-check: returns a JSON dict summarising subsystem state.
Checks DB availability, row counts, vec-index drift, FTS sync status, connection-pool depth, background-worker liveness, disk space, and CQRS write-journal health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It fails to mention idempotency, side effects, latency, or safety. It only lists subsystems checked, but not behavioral traits like whether queries are destructive or read-only, or if network access is required.
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 short and front-loaded with the main purpose. Each subsystem check is listed in a bullet-like format, which is easy to parse. Every sentence adds value, though the list could be slightly more concise.
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 0 parameters, no annotations, but an output schema exists, the description covers the subsystems checked but does not mention error handling, performance implications, or what happens when a subsystem is unavailable. It is somewhat complete but lacks edge-case context.
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 0 parameters, and schema coverage is 100%. The description cannot add parameter meaning beyond the schema because there are none. Baseline score of 4 is appropriate given no parameters exist.
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 it is a unified health check returning a JSON dict summarizing subsystem state. It lists specific subsystems checked, providing a specific verb and resource. However, it does not differentiate from sibling tool 'memory_system_health', which likely has overlapping 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?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusion criteria. It simply describes what it does without context on appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_learnA
Save a lesson or compile a skill from content.
Auto-categorizes and tags the memory. Optionally compiles a skill.
Args: content: The lesson/skill content. as_skill: If True, compile as a skill (default False). skill_name: Skill directory name (required if as_skill=True). category: Target category (default: lessons). tags: Additional tags.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| content | Yes | ||
| as_skill | No | ||
| category | No | lessons | |
| skill_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses auto-categorization and tagging behavior, but without annotations, it does not cover side effects, permissions, or destructive potential. For a tool with no annotations, more detail is needed.
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 well-structured with a summary and Arg list, front-loading the purpose. It is slightly longer than necessary but remains clear and effective.
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 5 parameters fully explained and an output schema presumably provided, the description is largely complete. It could mention prerequisites (e.g., memory system state) but is sufficient for use.
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 description includes an 'Args' section that explains each parameter in detail, adding meaning beyond the schema's titles. Given the 0% schema description coverage, this fully compensates and provides clear parameter semantics.
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 'Save a lesson or compile a skill from content,' which clearly defines the verb and resource. However, it does not explicitly differentiate from sibling tools like memory_save or memory_compile_skill, which may cause confusion.
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 lacks explicit guidance on when to use this tool versus alternatives. It mentions optional skill compilation but does not provide context for choosing this over memory_save for lessons or memory_compile_skill for skills.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_list_revisionsA
List revision-log entries for a memory or across the store.
Surfaces supersede / amend / revert / delete events recorded in
memory_revision_log so the operator can audit what changed.
Args: memory_id: Filter to a specific memory id (empty = all). limit: Max results (default 20). revision_type: Filter by type: supersede, amend, revert, delete (empty = all types).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| memory_id | No | ||
| revision_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool surfaces supersede/amend/revert/delete events from a specific log table, but it does not explicitly state that it is a read-only operation, does not mention permission requirements, rate limits, or whether it returns historical data only. The description lacks critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose in the first sentence, then provides structured details in a docstring format. It is concise with no redundant information, though the Args section could be integrated more seamlessly.
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 has three parameters, none required, and an output schema exists, the description provides sufficient context for a list/filter tool. It explains the log events and filtering options. The absence of required parameters reduces complexity, making this description complete enough 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?
Schema description coverage is 0%, but the description compensates well by listing each parameter with its purpose: 'memory_id: Filter to a specific memory id (empty = all),' 'limit: Max results (default 20),' 'revision_type: Filter by type: supersede, amend, revert, delete (empty = all types).' This adds meaning beyond the schema, which only defines type and default.
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 'List revision-log entries for a memory or across the store' with a specific verb ('list') and resource ('revision-log entries'). It also defines the domain (memory revision log) and distinguishes from sibling tools like memory_search or memory_recall, which serve different purposes.
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 for auditing ('so the operator can audit what changed') but does not explicitly state when to use this tool versus alternatives, nor does it mention when not to use it. The parameter descriptions provide some filtering guidance but no exclusions or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_list_skillsA
List extracted skills, ordered by hit_count desc.
P0 fix #5: gives the operator a way to inspect what the lower-threshold extractor actually pulled in. The list includes the topic, hit count, last-used timestamp, and a preview of the description so it's easy to spot good vs bad extractions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It discloses that skills are ordered by hit_count desc and lists included fields: topic, hit count, last-used timestamp, and description preview. This goes beyond a simple 'list' and gives behavioral insight into output format and ordering, though it lacks mentions of side effects or permissions (likely none for a list 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 brief (two sentences plus a note) and front-loaded with the core purpose. The note adds contextual value for a specific fix, but could be considered slightly extraneous. Overall, it is efficiently structured and easy to parse.
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 that an output schema exists (as indicated by context signals), the description does not need to detail return values. It already mentions key output fields. However, it does not explain pagination behavior for the `limit` parameter or total count. For a simple list tool, the description is largely 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?
The input schema has one parameter, `limit`, with a default of 50 and zero schema description coverage. The description does not mention `limit` or its purpose. Although the parameter is common for pagination, the description fails to add meaning beyond the schema, leaving the agent to guess its role.
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 "List extracted skills, ordered by hit_count desc." This makes the action (list) and resource (extracted skills) explicit, and the ordering distinguishes it from other memory tools like memory_extract_skills (extraction) and memory_compile_skill (compilation), which are siblings.
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 includes a note about "P0 fix #5: gives the operator a way to inspect what the lower-threshold extractor actually pulled in." This provides usage context (after extraction, for inspection) and implies when to use it. It does not explicitly mention when not to use or compare to alternatives, but the context is clear enough for an AI agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_noteA
CRUD operations on a specific memory note.
Sprint 2 additions: patch, revert_supersede actions + rationale capture.
Args: note_id: The note ID (e.g. "lessons/my-note"). action: "read" | "update" | "delete" | "restore" | "supersede" | "patch" | "revert_supersede". content: New content (required for update). category: New category (for update). title_slug: New slug (for update/supersede target). tags: New tags (for update). rationale: Reason for the action (required for supersede, patch, revert_supersede; recommended for delete). additions: Text segments to insert (for patch action). deletions: Text segments to remove by content match (for patch action).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| action | No | read | |
| content | No | ||
| note_id | Yes | ||
| category | No | ||
| additions | No | ||
| deletions | No | ||
| rationale | No | ||
| title_slug | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It lists actions and parameters but does not disclose side effects, idempotency, permissions, or what happens on supersede (e.g., versioning). Minimal behavioral insight beyond action enumeration.
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 front-loaded with the purpose, then lists actions and parameters. It includes meta notes (Sprint 2) which add context but could be more streamlined. Generally efficient with minimal 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 complex tool with 9 parameters and multiple actions, the description covers all actions and required parameters. Output schema exists so return value explanation is unnecessary. Lacks some context on constraints (e.g., max length) but is largely 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 coverage is 0%, meaning parameters lack schema descriptions. The description compensates fully by explaining each parameter's purpose (e.g., note_id format, additions/deletions for patch). Adds significant value beyond the raw schema.
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 it performs CRUD operations on a specific memory note, listing multiple actions like read, update, delete, etc. It is specific and distinguishes from siblings that operate on collections or other aspects.
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 per-action parameter requirements (e.g., rationale for supersede) but does not explicitly compare to sibling tools or specify when to avoid using this tool. Usage context is implied but not fully elucidated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_organizeA
Run safe memory maintenance batch.
Targets: safe_default: compact + consolidate + rewrite_links full: safe_default + backfill + dedup + purge_expired compact: FTS5 compact only dedup: KG entity dedup only
Args: target: Which batch to run (default: safe_default). dry_run: Preview without changes (default False). confirm: Required when target='full' and dry_run=False (purge is destructive).
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | safe_default | |
| confirm | No | ||
| dry_run | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 is 'safe' by default but notes that the 'full' target can be destructive (purge) and requires confirmation. It also explains the dry_run option for previewing changes. This provides good insight into the tool's behavior, though it could further detail what each operation does (e.g., compact, dedup).
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 concise and well-structured. It starts with the main purpose, then lists targets and arguments in a clear bullet-point format. Every sentence provides necessary information without 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?
Given the complexity of the tool (multiple targets, destructive potential) and the lack of schema descriptions, the description is complete. It covers what the tool does, the available targets, argument details, and safety considerations. The presence of an output schema means return values need not be described.
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 0% description coverage, so the description must compensate. It does so excellently: it explains the possible values for 'target' (safe_default, full, compact, dedup) and conditions for 'confirm' (required when target='full' and dry_run=False). This adds meaning far beyond the schema's bare type definitions.
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 purpose: 'Run safe memory maintenance batch.' It specifies the verb 'run' and the resource 'memory maintenance batch'. The listing of different targets (safe_default, full, compact, dedup) further clarifies the scope. This distinguishes it from sibling tools, which have names like memory_save, memory_search, etc., indicating different functions.
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?
While the description does not explicitly compare this tool to alternatives, it provides clear context on when to use it by detailing the available targets and their compositions. It implies that this tool is for automated batch maintenance, which is distinct from individual operations like save or delete. However, no explicit guidance on when not to use it or contrasts with siblings is given, preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_profileB
View user profile, agent scopes, ARC stats, and cached skills.
Args: action: "stats" | "user" | "agents" | "skills" | "arc". agent_id: Agent ID (for action=agents).
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | stats | |
| agent_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It states 'View' which implies read-only, but it does not explicitly confirm non-destructive behavior, authentication needs, or error conditions. This is insufficient for a tool with no 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 front-loaded with a concise summary of the tool's purpose, followed by a clear Args list. It is efficient with no extraneous text, earning high marks for structure.
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 presence of an output schema (which explains return values), the description adequately covers the tool's inputs. However, it lacks guidance on edge cases (e.g., invalid action) and does not fully compensate for the lack of annotations, leaving some behavioral aspects unclear.
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 description adds meaning to the parameters by listing the allowed values for 'action' (stats, user, agents, skills, arc) and explaining that 'agent_id' is used only for action=agents. This compensates somewhat for 0% schema description coverage, but it could be more detailed (e.g., behavior of other actions, default behavior).
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 purpose: 'View user profile, agent scopes, ARC stats, and cached skills.' This is a specific verb and resource, and it distinguishes this tool from sibling tools that perform other memory operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It lists the actions but does not explain use cases or when to choose this over other memory tools like memory_recall_context or memory_system_health.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recallB
Recall context for the current session or a named thread.
Combines session_start + recall_context into one call. If no query is given, returns recent session activity.
Args: query: What to recall (default: recent activity). session_id: Specific session/thread to recall.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| tenant_id | No | default | |
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It mentions combining operations but does not specify read-only nature or side effects. The behavior is implied to be safe but not confirmed.
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 concise, with a clear opening sentence. The 'Args' section adds value, though it could be more tightly integrated. No unnecessary words.
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?
An output schema exists but the description does not reference it or describe return values. For a recall tool with 3 optional parameters and many siblings, more detail on when to use and what to expect 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?
Schema coverage is 0%, so the description's 'Args' section adds meaning to query and session_id, but it omits tenant_id entirely. The parameter meaning is partially addressed but incomplete.
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 recalls context for a session or thread and that it combines two other tools. It distinguishes itself from siblings like memory_session_start and memory_recall_context.
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 notes that no query returns recent activity, but it does not provide explicit guidance on when to use this tool versus its siblings, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_recall_contextC
Assemble a structured memory recall briefing for agent cold-start or session continuity.
deep_rerank: when True, runs the Qwen3-0.6B / BGE-m3 deep reranker on
the relevant-memories section (1-5s extra CPU, best ranking quality).
Default False so the briefing is bounded to <100ms. ON APPLE SILICON
(MPS) the deep reranker can hang indefinitely in a PyTorch MPS kernel
(2026-06-19 incident: PIDs 68335, 10086). If you don't need the
best-quality ranking, leave this False. If you do need it and the call
hangs, set the MEMORY_RERANKER_DISABLED env var or
reranker_disabled = true in memory.toml to fully disable the
reranker (falls back to the lightweight weak cross-encoder).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| action | No | ||
| days_recent | No | ||
| deep_rerank | No | ||
| include_pinned | No | ||
| include_user_profile | No | ||
| include_recent_digests | No | ||
| include_high_importance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It thoroughly explains the deep_rerank parameter's behavior, including performance implications and a known hang incident on Apple Silicon. However, it omits other behavioral traits such as whether the tool is read-only, side effects, or the structure of the output briefing.
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 front-loaded with the purpose, which is good. However, the lengthy and highly specific deep_rerank details (incident report, env var workaround) make the description overly verbose for a general tool definition. Some content could be shortened or moved to the parameter description.
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 9 parameters with no schema descriptions, no annotations, and an existing output schema, the description should provide a high-level overview of the tool's behavior and parameters. It fails to explain most parameters and does not describe the output briefing structure, leaving the agent under-informed.
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%, so the description must compensate. It only documents one parameter (deep_rerank) in detail, leaving the other 8 parameters (limit, query, action, days_recent, include_pinned, etc.) completely unexplained. This is a significant gap for an agent to correctly invoke the tool.
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 first sentence clearly states the tool's purpose: 'Assemble a structured memory recall briefing for agent cold-start or session continuity.' The verb 'assemble' and specific resource 'structured memory recall briefing' provide clarity. However, it does not explicitly differentiate from the sibling tool 'memory_recall', which may have overlapping functionality.
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 usage context ('agent cold-start or session continuity') but provides no guidance on when to use this tool versus alternatives like 'memory_recall' or other siblings. There is no explicit when-not-to-use or mention of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_record_ctr_feedbackA
Record click-through rate feedback for a search result.
G4 fix (2026-06-22): memory_record_ctr_feedback (this tool)
and memory_reinforce (mcp_memory.py) record two different
signals on purpose — they are not interchangeable.
memory_record_ctr_feedbackrecords the implicit signal: "the user saw this result in the response." Writes a row toctr_feedbackwith action=returned/clicked/etc. The search re-ranker reads this table to adjust ranking over time. Use this when a search result is delivered to the user, regardless of whether the user does anything with it.memory_reinforcerecords the explicit signal: "the user judged this memory useful (or not)." Updatessuccess_scoreand recomputesfitness_score. Use this when a user acts on a memory — e.g. cites it in a lesson, marks a decision as right, or undoes a save because the memory was wrong. Skippingmemory_reinforceon every "user saw it" event would over-credit the success score.
In short: record_ctr_feedback = "delivered to user",
reinforce = "user acted on it positively". Call both when
a user follows up on a search hit. Call only
record_ctr_feedback when the user just sees the result.
Call only reinforce when the success/failure signal comes
from outside the search path (e.g. a downstream agent confirms
the memory was correct).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| action | No | returned | |
| source | No | ||
| query_id | Yes | ||
| returned_at | No | ||
| ranking_params | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains the tool writes a row to ctr_feedback with action=returned/clicked/etc., and that the search re-ranker reads this table. It does not mention side effects like permissions or idempotency, but it covers the core behavior well.
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?
Despite length, every sentence adds value. Clear section labeling (G4 fix, bullet lists) and front-loaded with purpose. No 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?
Tool is simple, and description provides good purpose and usage context. However, it lacks parameter details and does not explain what the tool returns (output schema exists but not described). With 6 parameters and 0% schema coverage, more parameter-level information is needed 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?
Schema coverage is 0%, so description should explain parameters. It only briefly mentions 'action=returned/clicked/etc.' and implies 'id' and 'query_id' are required, but does not describe 'source', 'returned_at', or 'ranking_params'. Agent would have to infer or guess their meaning.
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?
Description clearly states the tool records click-through rate feedback for a search result. It distinguishes itself from memory_reinforce by explaining the difference between implicit and explicit signals, making the purpose unmistakable.
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?
Provides explicit guidance on when to use this tool vs. memory_reinforce, including concrete scenarios like 'delivered to user', 'user acted on it', and 'call both when...'. No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_review_beliefsA
Review beliefs that may need agent attention — low confidence, old, or stale.
Returns a structured list of belief assertions with subject/predicate/object for the agent to confirm, supersede, retract, or reinforce.
Args: min_confidence: Maximum confidence threshold (returns beliefs BELOW this). belief_status: Filter by status (default "active"). older_than_days: Only return beliefs last reviewed more than this many days ago. limit: Max results (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| belief_status | No | active | |
| min_confidence | No | ||
| older_than_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that it returns a structured list and filters, but does not explicitly state whether it modifies state or requires permissions. It is a read operation, but not explicitly flagged.
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 concise, front-loads the purpose, then describes return structure, then lists parameters. No unnecessary words.
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 optional parameters and an output schema (not shown but present), the description covers the tool's purpose, filters, and return structure. It is complete for a review 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 description coverage is 0%, but the description fully explains each parameter: min_confidence (returns beliefs below threshold), belief_status, older_than_days, limit. It adds key semantics like 'maximum confidence threshold' and default behavior.
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 verb 'Review' and the resource 'beliefs that may need agent attention', specifying low confidence, old, or stale beliefs. It distinguishes from other memory tools by focusing on attention-needing beliefs.
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 when to use (for reviewing beliefs needing attention) but does not explicitly state when not to use or provide alternative tool names. The context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_saveA
Save a memory note with sensible defaults.
Args: content: The memory content (markdown). category: lessons / decisions / projects / preferences / sessions (default: lessons). title_slug: URL-friendly slug (auto-generated if empty). tags: Optional keyword tags. pinned: Pin to hot tier (default False). importance: 1-5 (default 3). is_global: Save to global memory (default False). safety_wiring: If False, skip prompt-injection scanning (default True). Set to False for legitimate structured content with section headers and requirement keywords that may trigger false positives.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| pinned | No | ||
| content | Yes | ||
| category | No | lessons | |
| is_global | No | ||
| importance | No | ||
| title_slug | No | ||
| safety_wiring | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully details each parameter's behavior, including defaults and special notes (e.g., auto-generation of title_slug, safety_wiring scanning). It does not describe the return value or side effects, but an output schema exists, so this is acceptable.
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 longer but well-organized with a summary sentence followed by parameter details in a bullet-style list. Every sentence adds value, though it could be slightly more terse.
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 parameter count (8, 1 required) and the presence of an output schema, the description covers all necessary aspects for effective use. It explains parameter behaviors and constraints, leaving no critical gaps for an agent to infer.
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%, so the description compensates excellently. Each parameter is explained with its type, default, and constraints (e.g., category options, importance range, safety_wiring purpose). This adds significant meaning beyond the schema's raw JSON.
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 'Save a memory note with sensible defaults,' providing a specific verb and resource. It lists all parameters but does not explicitly differentiate from sibling tools like memory_note or memory_learn, though the purpose is distinct enough.
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 includes guidance on safety_wiring parameter (when to set False) but lacks explicit instructions on when to use this tool versus alternatives. It implies usage through defaults but does not provide context for choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchA
Search memories by semantic + FTS5 hybrid search.
The primary recall tool. Returns ranked memories matching the query. When the CQRS write journal is enabled, pending (not-yet-materialized) entries are also checked and surfaced as a supplement when the main search returns no results.
Args: query: Natural-language search query (required). category: Filter to a category (e.g. "lessons", "decisions"). limit: Max results (default 10). include_global: Include global memories (default True for default agent, scoped for non-default agents). mode: "hybrid" (default), "semantic", "fts", "facts", "graph". belief_status: Filter KG facts by belief status (active, retracted, deprecated, unconfirmed). epistemic_source: Filter KG facts by epistemic source (agent, auto_save, hook, import, cron). fact_type: Filter KG facts by type (observation, agent_inference, external_stated, hypothesis, derived). memory_source: Filter memories by source type ("agent", "auto_save", "import"). Only returns memories whose source file category matches the given type. shared_with_me: If True, also include memories explicitly shared with the current agent (via the shared pool's target_agent_id).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fts | |
| limit | No | ||
| query | Yes | ||
| category | No | ||
| fact_type | No | ||
| tenant_id | No | default | |
| belief_status | No | ||
| memory_source | No | ||
| include_global | No | ||
| shared_with_me | No | ||
| epistemic_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains hybrid search, CQRS journal supplementation, and parameter effects (like include_global defaults). It does not mention destructive actions, auth needs, or rate limits, which is acceptable for a read-only 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 somewhat lengthy (13 lines) but well-structured, starting with the core purpose and then detailing parameters. It could be more concise, but the structure aids readability.
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 complexity (11 params, many filters) and existence of an output schema, the description is thorough. It covers all parameter behaviors, including edge cases (CQRS journal, default scoping for include_global). No major 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 0%, so the description must compensate. It provides detailed explanations for all 11 parameters, including defaults, effects (e.g., mode options, belief_status values), and behavior (e.g., shared_with_me). This fully compensates for the lack of schema 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 'Search memories by semantic + FTS5 hybrid search' and 'The primary recall tool. Returns ranked memories matching the query.' This provides a specific verb-resource combination and distinguishes it from siblings like memory_recall and memory_recall_context.
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 identifies it as 'The primary recall tool' but does not explicitly state when to use alternatives or when not to use this tool. It provides context for the CQRS journal behavior but lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_session_startB
Retrieve the session startup briefing.
Args: query: Optional topic to scope the briefing to.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It only states the purpose, not whether it is read-only, what it returns, or any side effects. Very limited transparency.
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 extremely concise with two sentences, no redundancy, and front-loaded purpose.
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 is simple with one optional param and an output schema exists, the description is adequate but lacks context about what the briefing contains or when to use it.
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 0% description coverage, so the description's line 'query: Optional topic to scope the briefing to' adds some meaning beyond the schema, but it is minimal.
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 'Retrieve the session startup briefing', which is a clear verb+resource. However, it does not differentiate from sibling tools like memory_recall_context, and 'session startup briefing' is somewhat ambiguous.
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 includes the optional query parameter but provides no guidance on when to use this tool versus alternatives, or when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_system_healthA
Comprehensive system health: green/yellow/red with actionable next steps.
Consolidates 6 health dimensions into one response:
Database: accessibility, schema, vec index drift
Search: semantic search probe
Worker: background worker liveness
Crons: cron job execution success rate
Auto-Save: circuit breaker and recent activity
Disk: free space
Each subsystem returns green/yellow/red with details and action.
| Name | Required | Description | Default |
|---|---|---|---|
| conn | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It details each subsystem checked and the output format (green/yellow/red with details and action). It implies a read-only diagnostic behavior but does not explicitly state read-only or mention auth/rate limits.
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 concise and well-structured. It front-loads the health status summary and then lists the six dimensions in bullet-point format. Every sentence serves a purpose with no waste.
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 presence of an output schema, the description does not need to detail return values. It covers the tool's purpose and subsystems thoroughly. The only gap is the unexplained 'conn' parameter, but it's optional and likely minor.
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 one optional parameter 'conn' with no description (0% coverage), and the tool description does not explain what 'conn' is or how it affects behavior. The description adds no meaning beyond the schema.
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 'Comprehensive system health: green/yellow/red with actionable next steps' and lists six specific health dimensions. This differentiates it from the sibling 'memory_health_check' by being more comprehensive.
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 for checking overall system health but does not explicitly state when to use this tool versus alternatives like 'memory_health_check'. No direct guidance on context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes, but there is overlap between `memory_recall_context` and `memory_recall`, and between `memory_system_health` and `memory_health_check`. Descriptions help differentiate, but these overlaps could cause minor confusion.
All tools follow a consistent `memory_<verb>_<noun>` pattern in snake_case. The naming is predictable and uniform across the entire set.
With 24 tools, the set is on the larger side but each tool serves a specific function within the memory management domain. A few tools could potentially be merged, but the count is still reasonable.
The tool surface covers all major aspects of memory management: CRUD, search, revision, beliefs, skills, health, coordination, sharing, and graph. No obvious gaps are present.
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
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
An MCP memory server. One memory your agents share — across models, devices and apps.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Persistent personal memory for AI assistants — save, search, and recall across every MCP client.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.51Apache 2.0
- AlicenseNot gradedqualityBmaintenancePersistent memory MCP server that stores and retrieves memories in Markdown files, enabling shared context across multiple AI agents with hybrid search and deduplication.MIT
- AlicenseBqualityBmaintenanceLocal-first memory server for AI coding agents that stores work sessions, tasks, and durable memories in Markdown files, exposed through MCP tools for session management and memory retrieval.10111MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that provides agentic memory management for markdown vaults, enabling hybrid search, governed writing, and maintenance of episodic, semantic, procedural, and working memories for LLM agents.MIT
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/ArkaAiAdmin/Agentic-Memory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server