Skip to main content
Glama

Recall

Long-term memory system for MCP-compatible AI assistants with semantic search and relationship tracking.

Features

  • Persistent Memory Storage: Store preferences, decisions, patterns, and session context

  • Semantic Search: Find relevant memories using natural language queries via ChromaDB vectors

  • MLX Hybrid Embeddings: Native Apple Silicon support via MLX for ~5-10x faster embeddings (automatic fallback to Ollama)

  • Memory Relationships: Create edges between memories (supersedes, relates_to, caused_by, contradicts)

  • Namespace Isolation: Global memories vs project-scoped memories

  • Context Generation: Auto-format memories for session context injection

  • Deduplication: Content-hash based duplicate detection

Installation

# Clone the repository
git clone https://github.com/yourorg/recall.git
cd recall

# Install with uv
uv sync

# On Apple Silicon: MLX embeddings work automatically (fastest option)
# On other platforms or as fallback: ensure Ollama is running
ollama pull mxbai-embed-large  # Required if not using MLX
ollama pull llama3.2           # Optional: session summarization for auto-capture hook
ollama serve

Usage

Run as MCP Server

uv run python -m recall

CLI Options

uv run python -m recall --help

Options:
  --sqlite-path PATH      SQLite database path (default: ~/.recall/recall.db)
  --chroma-path PATH      ChromaDB storage path (default: ~/.recall/chroma_db)
  --collection NAME       ChromaDB collection name (default: memories)
  --ollama-host HOST      Ollama server URL (default: http://localhost:11434)
  --ollama-model MODEL    Embedding model (default: mxbai-embed-large)
  --ollama-timeout SECS   Request timeout (default: 30)
  --log-level LEVEL       DEBUG, INFO, WARNING, ERROR, CRITICAL (default: INFO)

meta-mcp Configuration

Add Recall to your meta-mcp servers.json:

{
  "recall": {
    "command": "uv",
    "args": [
      "run",
      "--directory",
      "/path/to/recall",
      "python",
      "-m",
      "recall"
    ],
    "env": {
      "RECALL_LOG_LEVEL": "INFO",
      "RECALL_OLLAMA_HOST": "http://localhost:11434",
      "RECALL_OLLAMA_MODEL": "mxbai-embed-large"
    },
    "description": "Long-term memory system with semantic search",
    "tags": ["memory", "context", "semantic-search"]
  }
}

Or for Claude Code / other MCP clients (claude.json):

{
  "mcpServers": {
    "recall": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/recall",
        "python",
        "-m",
        "recall"
      ],
      "env": {
        "RECALL_LOG_LEVEL": "INFO"
      }
    }
  }
}

Environment Variables

Variable

Default

Description

RECALL_SQLITE_PATH

~/.recall/recall.db

SQLite database file path

RECALL_CHROMA_PATH

~/.recall/chroma_db

ChromaDB persistent storage directory

RECALL_COLLECTION_NAME

memories

ChromaDB collection name

RECALL_EMBEDDING_BACKEND

ollama

Embedding backend: mlx (Apple Silicon) or ollama

RECALL_MLX_MODEL

mlx-community/mxbai-embed-large-v1

MLX embedding model identifier

RECALL_OLLAMA_HOST

http://localhost:11434

Ollama server URL

RECALL_OLLAMA_MODEL

mxbai-embed-large

Ollama embedding model name

RECALL_OLLAMA_TIMEOUT

30

Ollama request timeout in seconds

RECALL_LOG_LEVEL

INFO

Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)

RECALL_DEFAULT_NAMESPACE

global

Default namespace for memories

RECALL_DEFAULT_IMPORTANCE

0.5

Default importance score (0.0-1.0)

RECALL_DEFAULT_TOKEN_BUDGET

4000

Default token budget for context

MCP Tool Examples

memory_store_tool

Store a new memory with semantic indexing. Uses fast daemon path when available (<10ms), falls back to sync embedding otherwise.

{
  "content": "User prefers dark mode in all applications",
  "memory_type": "preference",
  "namespace": "global",
  "importance": 0.8,
  "metadata": {"source": "explicit_request"}
}

Response (fast path via daemon):

{
  "success": true,
  "queued": true,
  "queue_id": 42,
  "namespace": "global"
}

Response (sync path fallback):

{
  "success": true,
  "queued": false,
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "content_hash": "a1b2c3d4e5f67890"
}

daemon_status_tool

Check if the recall daemon is running:

{}

Response:

{
  "running": true,
  "status": {
    "pid": 12345,
    "store_queue": {"pending_count": 5},
    "embed_worker_running": true
  }
}

memory_recall_tool

Search memories by semantic similarity:

{
  "query": "user interface preferences",
  "n_results": 5,
  "namespace": "global",
  "memory_type": "preference",
  "min_importance": 0.5,
  "include_related": true
}

Response:

{
  "success": true,
  "memories": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "content": "User prefers dark mode in all applications",
      "type": "preference",
      "namespace": "global",
      "importance": 0.8,
      "created_at": "2024-01-15T10:30:00",
      "accessed_at": "2024-01-15T14:22:00",
      "access_count": 3
    }
  ],
  "total": 1,
  "score": 0.92
}

memory_relate_tool

Create a relationship between memories:

{
  "source_id": "mem_new_123",
  "target_id": "mem_old_456",
  "relation": "supersedes",
  "weight": 1.0
}

Response:

{
  "success": true,
  "edge_id": 42
}

memory_context_tool

Generate formatted context for session injection:

{
  "query": "coding style preferences",
  "project": "myproject",
  "token_budget": 4000
}

Response:

{
  "success": true,
  "context": "# Memory Context\n\n## Preferences\n\n- User prefers dark mode [global]\n- Use 2-space indentation [project:myproject]\n\n## Recent Decisions\n\n- Decided to use FastAPI for the backend [project:myproject]\n",
  "token_estimate": 125
}

memory_forget_tool

Delete memories by ID or semantic search:

{
  "memory_id": "550e8400-e29b-41d4-a716-446655440000",
  "confirm": true
}

Or delete by search:

{
  "query": "outdated preferences",
  "namespace": "project:oldproject",
  "n_results": 10,
  "confirm": true
}

Response:

{
  "success": true,
  "deleted_ids": ["550e8400-e29b-41d4-a716-446655440000"],
  "deleted_count": 1
}

Architecture

┌─────────────────────────────────────────────────────────────┐
│                     MCP Server (FastMCP)                     │
│  memory_store │ memory_recall │ memory_relate │ memory_forget │
└───────────────────────────┬─────────────────────────────────┘
                            │
              ┌─────────────┴─────────────┐
              │                           │
    ┌─────────▼─────────┐       ┌─────────▼─────────┐
    │   FAST PATH       │       │   SYNC PATH       │
    │   <10ms           │       │   MLX: <100ms     │
    └─────────┬─────────┘       │   Ollama: 10-60s  │
              │                 └─────────┬─────────┘
    ┌─────────▼─────────┐                 │
    │  recall-daemon    │       ┌─────────▼─────────┐
    │  (Unix socket)    │       │   HybridStore     │
    │                   │       └─────────┬─────────┘
    │  ┌─────────────┐  │                 │
    │  │ StoreQueue  │  │     ┌───────────┼───────────┐
    │  │ EmbedWorker │  │     │           │           │
    │  └─────────────┘  │     │           │           │
    └─────────┬─────────┘   ┌─▼─────┐ ┌───▼───┐ ┌─────▼─────┐
              │             │SQLite │ │Chroma │ │ Embedding │
              └─────────────►Store  │ │ Store │ │  Factory  │
                            └───────┘ └───────┘ └─────┬─────┘
                                                      │
                                          ┌───────────┴───────────┐
                                          │                       │
                                    ┌─────▼─────┐           ┌─────▼─────┐
                                    │    MLX    │           │  Ollama   │
                                    │  (Apple)  │           │ (Fallback)│
                                    └───────────┘           └───────────┘

The daemon provides fast (<10ms) memory storage by queueing operations and processing embeddings asynchronously. When the daemon is unavailable, the MCP server falls back to synchronous embedding via MLX (~100ms on Apple Silicon) or Ollama (10-60s on other platforms).

Daemon Setup (macOS)

The recall daemon provides fast (<10ms) memory storage by processing embeddings asynchronously. Without the daemon, each store operation blocks for 10-60 seconds waiting for Ollama embeddings.

Quick Install

# From the recall directory
./hooks/install-daemon.sh

This will:

  1. Copy hook scripts to ~/.claude/hooks/

  2. Install the launchd plist to ~/Library/LaunchAgents/

  3. Start the daemon automatically

Manual Install

# 1. Copy hook scripts
cp hooks/recall*.py ~/.claude/hooks/
chmod +x ~/.claude/hooks/recall*.py

# 2. Create logs directory
mkdir -p ~/.claude/hooks/logs

# 3. Install plist with path substitution
sed "s|{{HOME}}|$HOME|g; s|{{RECALL_DIR}}|$(pwd)|g" \
  hooks/com.recall.daemon.plist.template > ~/Library/LaunchAgents/com.recall.daemon.plist

# 4. Load the daemon
launchctl load ~/Library/LaunchAgents/com.recall.daemon.plist

Daemon Commands

# Check status
echo '{"cmd": "status"}' | nc -U /tmp/recall-daemon.sock | jq

# Stop daemon
launchctl unload ~/Library/LaunchAgents/com.recall.daemon.plist

# Start daemon
launchctl load ~/Library/LaunchAgents/com.recall.daemon.plist

# View logs
tail -f ~/.claude/hooks/logs/recall-daemon.log

Hooks Configuration

Add recall hooks to your Claude Code settings (~/.claude/settings.json). See hooks/settings.example.json for the full configuration.

Development

# Install dev dependencies
uv sync --dev

# Run tests
uv run pytest tests/

# Run tests with coverage
uv run pytest tests/ --cov=recall --cov-report=html

# Type checking
uv run mypy src/recall

# Run specific integration tests
uv run pytest tests/integration/test_mcp_server.py -v

Requirements

  • Python 3.13+

  • For Apple Silicon (recommended): MLX embeddings work automatically with mlx-embeddings package

  • For other platforms: Ollama with:

    • mxbai-embed-large model (required for semantic search)

    • llama3.2 model (optional, for session auto-capture hook)

  • ~500MB disk space for ChromaDB indices

License

MIT

Available Tools

19 tools
daemon_status_toolA

Check if the recall daemon is running and healthy.

The daemon provides fast (<10ms) memory storage by queueing operations and processing embeddings asynchronously.

Returns: Dictionary with: - running: Boolean indicating if daemon is running - status: Detailed status if running (uptime, queue stats, cache stats) - error: Error message if not running

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing behavioral traits: it describes the daemon's function (fast memory storage, queuing, async embeddings), and specifies the return structure with details like uptime and queue stats. It lacks explicit rate limits or auth needs, but covers core behavior adequately.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by relevant context and a clear return format. Every sentence adds value without redundancy, making it efficient and well-structured.

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

Completeness5/5

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

Given the tool's low complexity (0 parameters), no annotations, but an output schema exists, the description is complete. It explains what the tool does, why it matters (daemon role), and details the return values, compensating for the lack of annotations and leveraging the output schema.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing instead on the tool's function and output, which aligns with the baseline for zero parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb ('Check') and resource ('recall daemon'), including its health aspect. It distinguishes from siblings by focusing on daemon status rather than memory operations, file activities, or validations.

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

Usage Guidelines4/5

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

The description implies usage context by explaining the daemon's role in memory storage and asynchronous processing, suggesting this tool should be used to monitor its operational state. However, it does not explicitly state when to use it versus alternatives or provide exclusions.

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

file_activity_addA

Record a file activity event.

Used by PostToolUse hooks to track what files have been accessed.

Args: file_path: Path to the file that was accessed action: Type of action (read, write, edit, multiedit) session_id: Optional session ID for grouping activities project_root: Optional project root directory file_type: Optional file type (e.g., 'python', 'typescript') metadata: Optional additional metadata

Returns: Result dictionary with success status and activity_id

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
actionYes
session_idNo
project_rootNo
file_typeNo
metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It states this is for 'recording' events, implying a write operation, and mentions it's used by PostToolUse hooks. However, it doesn't disclose important behavioral traits like whether this requires specific permissions, if it's idempotent, what happens on duplicate entries, or any rate limits. The description provides basic context but lacks depth for a mutation tool.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It begins with the core purpose, provides usage context, then documents parameters and returns in clear sections. Every sentence earns its place, with no redundant information. The formatting with 'Args:' and 'Returns:' sections enhances readability.

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

Completeness4/5

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

Given the tool has an output schema (returns result dictionary), the description doesn't need to explain return values in detail. It provides the purpose, usage context, and comprehensive parameter documentation. For a mutation tool with no annotations, it could benefit from more behavioral transparency, but overall it's quite complete for its complexity level.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation. It explains all 6 parameters with clear semantics: what each parameter represents, which are optional, and example values for 'action' and 'file_type'. This adds significant value beyond the bare schema.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Record a file activity event' with the specific verb 'record' and resource 'file activity event'. It distinguishes from sibling tools like 'file_activity_recent' by focusing on adding new records rather than retrieving recent ones. However, it doesn't explicitly contrast with all siblings, keeping it at 4 instead of 5.

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

Usage Guidelines4/5

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

The description provides clear context: 'Used by PostToolUse hooks to track what files have been accessed.' This gives a specific use case and indicates it's for tracking purposes. It doesn't explicitly state when NOT to use it or name alternatives among siblings, but the context is sufficiently clear for appropriate usage.

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

file_activity_recentB

Get recently accessed files with aggregated activity.

Args: project_root: Filter by project root (optional) limit: Maximum number of files to return (default: 20) days: Look back this many days (default: 14)

Returns: Dictionary with success status and list of recent files

ParametersJSON Schema
NameRequiredDescriptionDefault
project_rootNo
limitNo
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions that the tool returns aggregated activity and a dictionary with success status, which adds some behavioral context. However, it lacks details on permissions, rate limits, error handling, or what 'aggregated activity' entails, leaving significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It starts with a clear purpose statement, followed by a bullet-point list for arguments and returns. Every sentence adds value without redundancy, making it easy to scan and understand.

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

Completeness3/5

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

Given no annotations, 0% schema coverage, and an output schema present, the description is moderately complete. It covers purpose and parameter semantics adequately but lacks behavioral details like error cases or aggregation specifics. The output schema reduces the need to explain return values, but more context on tool behavior would improve completeness.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all three parameters: 'project_root' filters by project root, 'limit' sets the maximum number of files, and 'days' defines the lookback period. This adds meaningful context beyond the schema's basic titles and types, though it doesn't specify formats or constraints.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get recently accessed files with aggregated activity.' This specifies the verb ('Get'), resource ('recently accessed files'), and scope ('with aggregated activity'). However, it doesn't explicitly differentiate from sibling tools like 'file_activity_add' or other memory-related tools, which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'file_activity_add' for adding activity or memory tools for different purposes, nor does it specify prerequisites or exclusions. Usage is implied only by the purpose statement.

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

memory_analyze_healthA

Analyze the health of memories in the system.

Checks for unresolved contradictions, low-confidence memories, and stale memories that haven't been validated recently.

Args: namespace: Limit analysis to specific namespace (optional) include_contradictions: Check for contradictions (default: True) include_low_confidence: Find low-confidence memories (default: True) include_stale: Find stale memories (default: True) stale_days: Days without validation to consider stale (default: 30)

Returns: Dictionary with categorized issues and recommendations

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNo
include_contradictionsNo
include_low_confidenceNo
include_staleNo
stale_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It describes what the tool checks but doesn't mention whether it's read-only or has side effects, performance characteristics, permission requirements, or error handling. The description states it 'returns a dictionary' but doesn't explain the structure or format of recommendations.

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

Conciseness4/5

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

The description is well-structured with a purpose statement followed by categorized parameter documentation and return value information. Every sentence adds value, though the initial purpose statement could be slightly more concise. The Args/Returns sections provide clear organization without redundancy.

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

Completeness4/5

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

Given the tool's moderate complexity (5 parameters, health analysis function) and the presence of an output schema (which covers return values), the description provides good coverage. It explains all parameters thoroughly and states the return type. However, without annotations and with behavioral aspects unexplained, it's not fully complete for a diagnostic tool.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing clear documentation for all 5 parameters. It explains each parameter's purpose, optional status, and default values, adding significant value beyond the bare schema. The stale_days parameter gets specific context about what 'stale' means (days without validation).

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('analyze', 'checks for') and resources ('memories in the system'), listing the three specific health issues it examines. It distinguishes itself from sibling tools like memory_detect_contradictions (which only finds contradictions) and memory_validate_tool (which validates rather than analyzes health).

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

Usage Guidelines3/5

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

The description implies usage context through the types of issues checked (contradictions, low-confidence, stale memories), suggesting it's for system maintenance or debugging. However, it lacks explicit guidance on when to use this tool versus alternatives like memory_detect_contradictions or memory_validate_tool, and doesn't mention prerequisites or exclusions.

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

memory_apply_toolA

Record that a memory is being applied.

Creates a validation event to track when a memory is used in practice. This starts the TRY phase of the validation loop.

Args: memory_id: ID of the memory being applied context: Description of how/where the memory is being applied session_id: Optional session identifier

Returns: Result with event ID or error

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
contextYes
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's action (creates a validation event) and mentions the return format (result with event ID or error), which is helpful. However, it doesn't disclose important behavioral traits like whether this is a read-only or destructive operation, authentication requirements, rate limits, or what happens during errors. The description adds some value but leaves significant gaps.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It starts with a clear purpose statement, explains the tool's role in the validation loop, lists parameters with brief explanations, and notes the return format. Every sentence earns its place with no wasted words, and information is front-loaded effectively.

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

Completeness4/5

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

Given that there's an output schema (which handles return values), no annotations, and moderate complexity (3 parameters with 0% schema coverage), the description does a reasonably complete job. It explains what the tool does, its parameters, and mentions the return format. However, for a tool that creates validation events (likely a write operation), it should ideally mention permission requirements or side effects, which are missing.

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

Parameters4/5

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

The schema description coverage is 0%, so the description must compensate. It provides clear explanations for all three parameters: memory_id ('ID of the memory being applied'), context ('Description of how/where the memory is being applied'), and session_id ('Optional session identifier'). This adds meaningful semantics beyond the bare schema, though it doesn't specify formats or constraints for these parameters.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Record that a memory is being applied' and 'Creates a validation event to track when a memory is used in practice.' It specifies the verb (record/create) and resource (memory/validation event). However, it doesn't explicitly differentiate from sibling tools like memory_validate_tool or memory_outcome_tool, which may have related validation functions.

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

Usage Guidelines3/5

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

The description provides some implied usage context by stating 'This starts the TRY phase of the validation loop,' suggesting it should be used when beginning memory validation. However, it doesn't explicitly state when to use this tool versus alternatives like memory_validate_tool or memory_outcome_tool, nor does it provide exclusion criteria or prerequisites.

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

memory_check_supersedesA

Check if a memory should supersede another based on validation history.

A newer memory supersedes an older one when it consistently succeeds where the older one failed on similar topics.

Args: memory_id: ID of the (potentially newer) memory to check create_edge: Whether to create SUPERSEDES edge (default: True)

Returns: Result with superseded memory ID if applicable

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
create_edgeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: the tool evaluates supersedence based on validation history and can optionally create a SUPERSEDES edge. However, it lacks details on permissions, rate limits, error conditions, or what 'consistently succeeds' means quantitatively, leaving gaps in behavioral understanding.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a clarifying explanation, then a structured Args/Returns section. Every sentence adds value without redundancy, making it efficient for an AI agent to parse.

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

Completeness4/5

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

Given the tool's moderate complexity (2 parameters, no annotations, but has output schema), the description is mostly complete. It covers purpose, usage, parameters, and return value, but lacks details on behavioral nuances like error handling or validation criteria. The output schema existence reduces the need to explain return values, but some operational context is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for both parameters: 'memory_id' is explained as 'ID of the (potentially newer) memory to check', and 'create_edge' as 'Whether to create SUPERSEDES edge (default: True)'. This clarifies purpose beyond the schema's basic types, though it doesn't detail edge creation mechanics or ID format.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('Check if a memory should supersede another') and resource ('based on validation history'), distinguishing it from siblings like memory_detect_contradictions or memory_validate_tool by focusing on supersedence evaluation rather than contradiction detection or validation itself.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool ('when a newer memory consistently succeeds where the older one failed on similar topics'), but does not explicitly mention when not to use it or name specific alternatives among the sibling tools, though the context implies it's for supersedence checks rather than other memory operations.

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

memory_context_toolB

Fetch relevant memories and format them for context injection.

Args: query: Optional search query to filter relevant memories project: Project namespace (auto-detected from cwd if not specified) token_budget: Maximum tokens for context (default from RECALL_DEFAULT_TOKEN_BUDGET config)

Returns: Dictionary with success status and formatted markdown context

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
projectNo
token_budgetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool fetches and formats memories, implying a read-only operation, but doesn't clarify permissions, rate limits, or side effects. The mention of 'auto-detected from cwd' for the project parameter adds some context, but overall, behavioral traits like error handling, data sources, or formatting specifics are missing.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by structured Args and Returns sections. Each sentence adds value, with no redundant information. The structure is clear, though the separation into sections might slightly reduce flow compared to a single paragraph.

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

Completeness3/5

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

Given 3 parameters with 0% schema coverage and no annotations, the description partially compensates by explaining parameter semantics and mentioning a default config. However, it lacks details on behavioral aspects like error cases or formatting specifics. The presence of an output schema means return values don't need explanation, but overall completeness is moderate due to missing usage guidelines and transparency.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics: 'query' filters relevant memories, 'project' is a namespace auto-detected from cwd, and 'token_budget' sets a maximum token limit with a default from config. This clarifies each parameter's role beyond the schema's basic titles. However, it doesn't detail the format of 'query' or 'project', leaving some gaps.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Fetch relevant memories and format them for context injection.' This specifies the verb ('fetch' and 'format'), resource ('memories'), and output ('context injection'). It distinguishes from siblings like memory_list_tool (list) or memory_recall_tool (recall) by emphasizing formatting for context. However, it doesn't explicitly differentiate from memory_apply_tool or memory_outcome_tool, which might have overlapping purposes.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling memory tools (e.g., memory_list_tool, memory_recall_tool, memory_store_tool), there's no indication of when this context-focused fetching is preferred over other memory operations. The Args and Returns sections describe parameters and output but don't offer usage context or exclusions.

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

memory_count_toolA

Count memories with optional filters.

Provides a quick count of memories in the system, optionally filtered by namespace and/or memory type.

Args: namespace: Filter by namespace (optional, e.g., 'global' or 'project:myapp') memory_type: Filter by type (optional, e.g., 'preference', 'decision', 'golden_rule')

Returns: Dictionary with count and applied filters

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNo
memory_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that this is a read operation ('count') and mentions optional filtering, but lacks details on permissions, rate limits, performance characteristics, or error handling. The description doesn't contradict any annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by details on parameters and returns. Every sentence adds value: the first states the purpose, the second elaborates on filtering, and the parameter/return sections provide essential usage information without redundancy.

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

Completeness4/5

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

Given the tool's low complexity (2 optional parameters) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers purpose, parameters with examples, and return structure. However, it lacks behavioral details like performance or error handling, which would be beneficial despite the output schema.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for both parameters: 'namespace' and 'memory_type', including examples ('global', 'project:myapp', 'preference', 'decision', 'golden_rule'). This adds significant value beyond the bare schema, though it doesn't cover all possible values or constraints.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Count memories with optional filters' and 'Provides a quick count of memories in the system'. It specifies the verb ('count') and resource ('memories'), but doesn't explicitly differentiate from sibling tools like 'memory_list_tool' or 'memory_recall_tool', which might also involve memory operations.

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

Usage Guidelines3/5

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

The description implies usage context by mentioning 'optional filters' and 'quick count', suggesting this is for obtaining counts rather than detailed listings. However, it doesn't explicitly state when to use this tool versus alternatives like 'memory_list_tool' or provide any exclusion criteria.

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

memory_detect_contradictionsA

Detect memories that contradict a given memory.

Uses semantic search to find similar memories, then LLM reasoning to determine if they actually contradict each other.

Args: memory_id: ID of the memory to check for contradictions similarity_threshold: Minimum similarity for considering contradictions (default: 0.7) create_edges: Whether to create CONTRADICTS edges (default: True)

Returns: Result with list of contradicting memory IDs and edges created

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
similarity_thresholdNo
create_edgesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's two-step process (semantic search, then LLM reasoning), default behavior for edge creation, and the return format. However, it lacks details on rate limits, error handling, or performance characteristics that would be helpful for an agent.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args and Returns. Every sentence earns its place by explaining functionality, parameters, or outputs without redundancy. The formatting with bullet-like sections enhances readability.

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

Completeness4/5

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

Given the tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is largely complete. It covers purpose, process, parameters, and returns, though it could benefit from more behavioral context like error cases or limitations. The output schema reduces the need to detail return values, but some operational guidance is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides meaningful context for all three parameters: 'memory_id' is explained as the memory to check, 'similarity_threshold' is given a default and purpose, and 'create_edges' is clarified with its default and effect. This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('detect memories that contradict a given memory') and distinguishes it from siblings by focusing on contradiction detection rather than storage, recall, or analysis. It specifies the two-step process (semantic search + LLM reasoning), making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for contradiction detection but doesn't explicitly state when to use this tool versus alternatives like 'memory_check_supersedes' or 'memory_validate_tool'. No guidance is provided on prerequisites, edge cases, or exclusion criteria, leaving the agent to infer context from the purpose alone.

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

memory_edge_forget_toolA

Delete edges (relationships) between memories.

Supports three deletion modes:

  1. Direct ID: Delete a specific edge by its ID

  2. Memory-based: Delete all edges connected to a memory

  3. Pair: Delete edge(s) between two specific memories

Args: edge_id: Specific edge ID to delete (direct deletion mode) memory_id: Memory ID to delete all connected edges (memory-based mode) source_id: Source memory ID for pair deletion mode target_id: Target memory ID for pair deletion mode relation: Filter by relation type (optional). Valid: relates_to, supersedes, caused_by, contradicts direction: For memory_id mode: 'outgoing', 'incoming', or 'both' (default: 'both')

Returns: Result dictionary with: - success: Boolean indicating operation success - deleted_ids: List of edge IDs that were deleted - deleted_count: Number of edges deleted - error: Error message (if failed)

Examples: Delete by edge ID: edge_id=42 Delete all edges for memory: memory_id="mem_123" Delete specific relation: source_id="mem_123", target_id="mem_456", relation="contradicts"

ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idNo
memory_idNo
source_idNo
target_idNo
relationNo
directionNoboth

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by explaining the destructive nature ('Delete'), outlining three deletion modes with their behaviors, specifying optional filtering parameters, and detailing the return structure. It doesn't mention authentication needs, rate limits, or error conditions beyond the 'error' field, but covers core behavioral aspects adequately.

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

Conciseness4/5

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

The description is well-structured with clear sections (overview, modes, args, returns, examples) and front-loads the core purpose. While comprehensive, some sentences in the parameter explanations could be slightly more concise, but overall it's efficient with minimal waste.

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

Completeness5/5

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

Given the tool's complexity (multiple deletion modes, 6 parameters), no annotations, and the presence of an output schema, the description is remarkably complete. It explains the tool's purpose, usage patterns, all parameters with semantics, and the return structure, leaving little ambiguity for an AI agent.

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

Parameters5/5

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

With 0% schema description coverage and 6 parameters, the description fully compensates by explaining each parameter's purpose, mapping them to deletion modes, listing valid relation values, and providing default values. The examples further clarify parameter usage, adding significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Delete edges between memories') and distinguishes this tool from siblings like 'memory_forget_tool' (which likely deletes memories themselves rather than edges). The verb 'delete' is precise and the resource 'edges (relationships) between memories' is well-defined.

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

Usage Guidelines4/5

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

The description provides clear context about three deletion modes, which implicitly guides when to use each approach. However, it doesn't explicitly state when to choose this tool over alternatives like 'memory_forget_tool' or 'memory_relate_tool', nor does it mention prerequisites or exclusions.

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

memory_forget_toolA

Delete memories by ID or semantic search.

Golden rules (type=golden_rule or confidence >= 0.9) are protected from deletion unless force=True is specified.

Args: memory_id: Specific memory ID to delete (direct deletion mode). query: Search query to find memories to delete (search deletion mode). input: Smart parameter that auto-detects if value is an ID or query. namespace: Filter deletion to specific namespace (optional). n_results: Number of search results to delete in query mode (default: 5). confirm: If True, proceed with deletion (default: True). force: If True, allow deletion of golden rules (default: False).

Returns: Result dictionary with success status, deleted_ids, and deleted_count.

Note: If both memory_id and query are None but input is provided, the function auto-detects whether input is a memory ID or search query.

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idNo
queryNo
inputNo
namespaceNo
n_resultsNo
confirmNo
forceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it describes the protection mechanism for golden rules, the auto-detection behavior of the 'input' parameter, the default values for optional parameters, and the confirmation requirement. It doesn't mention error conditions or rate limits, but covers the essential mutation behavior thoroughly.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, golden rules, Args, Returns, Note) and every sentence adds value. It could be slightly more concise by combining some parameter explanations, but overall it's efficiently organized with no wasted text.

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

Completeness5/5

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

Given the complexity of a 7-parameter deletion tool with no annotations, the description provides complete context. It explains the tool's purpose, behavioral constraints (golden rules), all parameters, return values, and special behaviors. The presence of an output schema means the description doesn't need to detail return format, which it appropriately references without redundancy.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining all 7 parameters in detail. It clarifies the purpose of each parameter, distinguishes between memory_id, query, and input modes, explains default values, and describes the interaction between parameters (e.g., force=True for golden rules). This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Delete memories by ID or semantic search') and distinguishes it from siblings like memory_list_tool (read) and memory_store_tool (create). It identifies the resource (memories) and two distinct deletion modes.

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

Usage Guidelines4/5

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

The description provides clear context about when to use different modes (direct deletion vs. search deletion) and when force=True is needed for golden rules. However, it doesn't explicitly mention when to use this tool versus alternatives like memory_edge_forget_tool or memory_validate_tool, which are also deletion-related siblings.

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

memory_inspect_graph_toolA

Inspect the graph structure around a memory node.

Performs read-only breadth-first search from the origin memory, collecting all nodes and edges within max_depth hops. Returns structured data for visualization including Mermaid diagram generation.

Args: memory_id: ID of the memory to start inspection from max_depth: Maximum number of hops to traverse (default: 2) direction: Edge traversal direction - "outgoing", "incoming", or "both" (default: "both") edge_types: Optional list of edge types to include (None means all). Valid types: relates_to, supersedes, caused_by, contradicts include_scores: If True, compute relevance scores for paths (default: True) decay_factor: Factor by which relevance decays per hop (default: 0.7) output_format: Output format - "json" or "mermaid" (default: "json")

Returns: Dictionary with: - success: Boolean indicating operation success - origin_id: The starting memory ID - nodes: List of node dicts with id, content_preview, type, confidence, importance - edges: List of edge dicts with id, source_id, target_id, edge_type, weight - paths: List of path dicts with node_ids, edge_types, total_weight, relevance_score - stats: Dict with node_count, edge_count, max_depth_reached, origin_id - mermaid: Mermaid diagram string (only when output_format='mermaid') - error: Error message (if failed)

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
max_depthNo
directionNoboth
edge_typesNo
include_scoresNo
decay_factorNo
output_formatNojson

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool as 'read-only', specifies the traversal algorithm (breadth-first search), and outlines the return structure including success indicators and error handling. However, it does not mention performance characteristics, rate limits, or authentication requirements, leaving some behavioral aspects uncovered.

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

Conciseness4/5

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

The description is well-structured with a clear purpose statement, parameter explanations, and return value details. It is appropriately sized for a complex tool with many parameters, though the parameter list is lengthy. Every sentence adds value, but the formatting could be more front-loaded to emphasize core functionality before detailing all parameters.

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

Completeness5/5

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

Given the tool's complexity (7 parameters, no annotations, but has output schema), the description is highly complete. It covers the purpose, parameters, return structure, and includes an output schema that details the response format. The combination of description and output schema provides all necessary context for an agent to understand and invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides detailed semantics for all 7 parameters, including default values, valid options (e.g., direction values, edge types), and functional explanations (e.g., decay_factor for relevance scoring). This adds significant meaning beyond the bare schema, making parameter purposes and usage clear.

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

Purpose5/5

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

The description clearly states the tool performs a 'read-only breadth-first search from the origin memory' to 'inspect the graph structure around a memory node', distinguishing it from siblings like memory_list_tool (listing) or memory_recall_tool (retrieving content). It specifies verb ('inspect'), resource ('graph structure'), and scope ('around a memory node'), making the purpose unambiguous and distinct from related tools.

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

Usage Guidelines3/5

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

The description implies usage for visualization and graph analysis, but does not explicitly state when to use this tool versus alternatives like memory_context_tool or memory_analyze_health. It mentions returning data 'for visualization including Mermaid diagram generation', which provides some context, but lacks explicit guidance on prerequisites, exclusions, or comparative scenarios with sibling tools.

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

memory_list_toolA

List memories with filtering and pagination.

Browse memories in the system with optional filters and pagination. Useful for auditing, exploring, or debugging memory contents.

Args: namespace: Filter by namespace (optional) memory_type: Filter by type (optional) limit: Maximum number of results (default: 100, max: 1000) offset: Number of results to skip for pagination (default: 0) order_by: Field to sort by (default: 'created_at', options: 'created_at', 'accessed_at', 'importance', 'confidence') descending: Sort in descending order (default: True)

Returns: Dictionary with list of memories and pagination info

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNo
memory_typeNo
limitNo
offsetNo
order_byNocreated_at
descendingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses behavioral traits like filtering, pagination, and sorting, and mentions the return format as a dictionary with list and pagination info. However, it doesn't cover critical aspects such as rate limits, authentication needs, error handling, or whether the operation is read-only or has side effects, leaving gaps for a mutation-heavy context with siblings like memory_store_tool.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, starting with a clear purpose and usage context, followed by detailed parameter explanations. Every sentence adds value, but it could be slightly more concise by integrating the 'Args' and 'Returns' sections more seamlessly, though the structure is logical and efficient.

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

Completeness4/5

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

Given the complexity (6 parameters, no annotations, output schema exists), the description is mostly complete. It covers purpose, usage, parameters, and return format, and the output schema handles return values. However, it lacks details on behavioral aspects like side effects or error cases, which are important in a server with mutation tools, preventing a perfect score.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains each parameter's purpose, optionality, defaults, and constraints (e.g., 'limit: Maximum number of results (default: 100, max: 1000)', 'order_by: Field to sort by (default: 'created_at', options: ...)'). This fully compensates for the schema's lack of descriptions, providing clear semantics for all 6 parameters.

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

Purpose4/5

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

The description clearly states the tool's purpose as 'List memories with filtering and pagination' and 'Browse memories in the system with optional filters and pagination,' which specifies the verb (list/browse) and resource (memories). It distinguishes from siblings like memory_store_tool (store) and memory_forget_tool (forget), but doesn't explicitly differentiate from similar tools like memory_recall_tool or memory_context_tool, which might also involve retrieving memories.

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

Usage Guidelines4/5

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

The description provides clear context for usage with 'Useful for auditing, exploring, or debugging memory contents,' which helps an agent understand when to apply this tool. However, it lacks explicit guidance on when not to use it or alternatives among siblings, such as comparing to memory_recall_tool for specific recall vs. general listing, which would be needed for 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_outcome_toolA

Record the outcome of a memory application and adjust confidence.

Records whether applying a memory succeeded or failed, creating a validation event and adjusting confidence accordingly.

Args: memory_id: ID of the memory that was applied success: Whether the application was successful error_msg: Optional error message if failed session_id: Optional session identifier

Returns: Result with updated confidence and promotion status

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
successYes
error_msgNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions creating a 'validation event' and adjusting confidence, which hints at mutation effects, but doesn't specify permissions required, whether changes are reversible, rate limits, or error handling. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

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

Conciseness4/5

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

The description is well-structured with a purpose statement, parameter explanations, and return value note. It's appropriately sized—each sentence adds value. Minor improvement could be front-loading the return info, but overall it's efficient with zero waste.

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

Completeness4/5

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

Given the tool's moderate complexity (mutation with 4 parameters), no annotations, but with an output schema (implied by 'Returns' note), the description is fairly complete. It covers purpose, parameters, and return values, though behavioral aspects like side effects or error cases could be more explicit. The output schema reduces the need to detail return formats.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It provides clear semantics for all four parameters: memory_id ('ID of the memory that was applied'), success ('Whether the application was successful'), error_msg ('Optional error message if failed'), and session_id ('Optional session identifier'). This adds substantial value beyond the bare schema.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Record the outcome of a memory application and adjust confidence.' It specifies the verb ('record'), resource ('outcome of a memory application'), and effect ('adjust confidence'). However, it doesn't explicitly differentiate this from sibling tools like memory_validate_tool or validation_history_tool, which appear related to validation events.

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

Usage Guidelines3/5

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

The description implies usage context ('Records whether applying a memory succeeded or failed') but doesn't provide explicit guidance on when to use this tool versus alternatives like memory_validate_tool or validation_history_tool. No exclusions or prerequisites are mentioned, leaving the agent to infer usage from the purpose alone.

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

memory_recall_toolA

Recall memories using semantic search with optional multi-hop graph expansion.

Performs semantic search using ChromaDB vector similarity, applies filters, and optionally expands results via graph edges using configurable multi-hop traversal.

Args: query: Search query text (will be embedded with mxbai query prefix) n_results: Maximum number of primary results (default: 5) namespace: Filter by namespace (optional, e.g., 'global' or 'project:myapp') memory_type: Filter by memory type (optional, e.g., 'preference', 'decision') min_importance: Minimum importance score filter (0.0 to 1.0, optional) include_related: If True, include related memories via graph edges (default: False) max_depth: Maximum number of hops for graph expansion (default: 1) max_expanded: Maximum number of expanded memories to return (default: 20) decay_factor: Factor by which relevance decays per hop (default: 0.7) include_edge_types: Optional list of edge types to include (None means all). Valid types: relates_to, supersedes, caused_by, contradicts exclude_edge_types: Optional list of edge types to exclude (None means none). Valid types: relates_to, supersedes, caused_by, contradicts

Returns: Dictionary with: - success: Boolean indicating operation success - memories: List of primary memory dicts with id, content, type, etc. - total: Total count of primary memories returned - score: Average similarity score of primary memories (or None) - expanded: List of expanded memory dicts (when include_related=True) with: - id: Memory ID - content: Memory content - type: Memory type - relevance_score: Combined relevance score (0.0 to 1.0) - hop_distance: Number of edges traversed to reach this memory - path: List of edge types in traversal order - explanation: Human-readable relevance explanation

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
n_resultsNo
namespaceNo
memory_typeNo
min_importanceNo
include_relatedNo
max_depthNo
max_expandedNo
decay_factorNo
include_edge_typesNo
exclude_edge_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it uses 'ChromaDB vector similarity' for search, applies filters, and optionally expands results via 'graph edges' with 'configurable multi-hop traversal.' It also details the return structure, including success status, memory lists, and expanded data. However, it lacks information on potential side effects (e.g., if this is read-only or has performance impacts) and error handling, which would elevate the score.

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

Conciseness4/5

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

The description is well-structured with a concise purpose statement, followed by detailed parameter and return explanations. Every sentence earns its place by adding value, such as clarifying search mechanics and parameter defaults. However, it could be more front-loaded by summarizing key capabilities before diving into details, and the 'Returns' section is lengthy but necessary given the output complexity.

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

Completeness5/5

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

Given the tool's complexity (11 parameters, no annotations, but with an output schema), the description is highly complete. It covers the purpose, detailed parameter semantics, and behavioral aspects like search method and graph expansion. The output schema exists, so the description appropriately explains return values without redundancy. This provides sufficient context for an agent to use the tool effectively.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must compensate fully. It does so excellently by providing detailed semantics for all 11 parameters in the 'Args' section, explaining each parameter's purpose, defaults, optionality, and valid values (e.g., 'memory_type' examples, 'decay_factor' meaning, edge type lists). This adds significant meaning beyond the bare schema, making parameters clear and actionable for an agent.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Recall memories using semantic search with optional multi-hop graph expansion.' It specifies the verb ('recall'), resource ('memories'), and method ('semantic search' with 'graph expansion'). However, it doesn't explicitly differentiate from sibling tools like memory_list_tool or memory_context_tool, which likely serve different recall purposes.

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

Usage Guidelines3/5

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

The description implies usage through its parameter explanations (e.g., 'optional multi-hop graph expansion'), suggesting it's for advanced recall with filtering and relationship traversal. However, it doesn't explicitly state when to use this tool versus alternatives like memory_list_tool (which might list without search) or memory_context_tool (which might provide context without expansion), leaving the guidelines somewhat implicit.

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

memory_relate_toolA

Create a relationship between two memories.

Args: source_id: ID of the source memory target_id: ID of the target memory relation: Type of relationship (relates_to, supersedes, caused_by, contradicts) weight: Edge weight (default: 1.0)

Returns: Result dictionary with success status and edge_id

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes
target_idYes
relationYes
weightNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states 'Create a relationship' implying a write/mutation operation, but lacks details on permissions, side effects (e.g., if it overwrites existing relationships), error handling, or rate limits. The return value is mentioned but not elaborated beyond 'success status and edge_id'.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by organized sections for Args and Returns. Every sentence earns its place by defining parameters and outcomes without redundancy, making it efficient and easy to parse.

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

Completeness3/5

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

Given no annotations, 4 parameters with 0% schema coverage, and an output schema (implied by 'Returns'), the description is moderately complete. It covers parameter semantics well and mentions the return structure, but lacks behavioral context (e.g., mutation effects, error cases) and usage guidelines, leaving gaps for a tool that modifies data.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all 4 parameters: source_id and target_id are IDs of memories, relation specifies the type with enumerated examples (relates_to, supersedes, caused_by, contradicts), and weight has a default value. This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Create a relationship') and the resources involved ('between two memories'), distinguishing it from sibling tools like memory_store_tool (store memories) or memory_list_tool (list memories). The verb 'create' is precise and the scope is well-defined.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. While it's clear this creates relationships, there's no mention of prerequisites (e.g., existing memories), when not to use it, or how it differs from related tools like memory_check_supersedes or memory_detect_contradictions, which might involve similar concepts.

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

memory_store_toolA

Store a new memory with semantic indexing, deduplication, and automatic relationship inference.

FAST PATH: If daemon is running, queues for async embedding (<10ms response). The daemon handles embedding and storage in the background.

Auto-linking behavior:

  • ALWAYS works using embedding similarity (no LLM required)

  • Creates 'relates_to' edges for memories above similarity_threshold

  • If LLM available, upgrades edge types to supersedes/contradicts/caused_by

  • Set auto_link=False to disable automatic edge creation

Args: content: The memory content text memory_type: Type of memory (preference, decision, pattern, session) namespace: Scope of the memory (default from RECALL_DEFAULT_NAMESPACE config) importance: Importance score from 0.0 to 1.0 (default from RECALL_DEFAULT_IMPORTANCE config) metadata: Optional additional metadata as dict auto_link: If True, automatically create edges to similar memories (default: True) similarity_threshold: Minimum similarity for auto-linking, 0.0-1.0 (default: 0.6) max_auto_links: Maximum auto-created edges per memory (default: 5) use_llm_classification: If True, use LLM to refine edge types (default: True)

Returns: Result dictionary with: - success: Boolean indicating operation success - queued: True if queued via daemon (fast path) - queue_id: Queue ID if queued via daemon - id: Memory ID (if sync path used) - content_hash: Content hash for deduplication (sync path only) - auto_relationships: List of automatically inferred relationships (sync path only) - error: Error message (if failed)

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
memory_typeNosession
namespaceNo
importanceNo
metadataNo
auto_linkNo
similarity_thresholdNo
max_auto_linksNo
use_llm_classificationNo
queue_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and delivers comprehensive behavioral information. It explains the dual execution paths (fast async vs sync), auto-linking behavior with embedding similarity and optional LLM upgrades, default values, and return structure. This covers performance characteristics, side effects, and operational details that annotations would typically provide.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, fast path, auto-linking behavior, Args, Returns) and front-loads the core purpose. While comprehensive, it's appropriately sized for a complex tool with 10 parameters. Minor points deducted for some redundancy between the auto-linking description and parameter explanations.

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

Completeness5/5

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

Given the tool's complexity (10 parameters, no annotations, no output schema initially), the description provides complete context. It explains the tool's purpose, behavioral characteristics, all parameters with semantics, and the return structure. The 'Returns' section effectively serves as an output schema, making the description self-contained and comprehensive.

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

Parameters5/5

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

With 0% schema description coverage and 10 parameters, the description fully compensates by providing detailed explanations for all parameters in the 'Args' section. Each parameter gets a clear semantic explanation beyond just the parameter name, including defaults, ranges, and behavioral implications (e.g., 'auto_link=False to disable automatic edge creation').

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Store a new memory with semantic indexing, deduplication, and automatic relationship inference.' It specifies the verb ('store') and resource ('memory') with distinguishing features (semantic indexing, deduplication, relationship inference) that differentiate it from siblings like memory_list_tool or memory_recall_tool.

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

Usage Guidelines4/5

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

The description provides clear context about when to use the tool (storing new memories with specific features) and mentions the 'FAST PATH' behavior with daemon. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the many sibling tools, which would be needed for 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_validate_toolA

Validate a memory and adjust its confidence score.

Adjusts confidence based on whether the memory was useful:

  • Success: confidence += adjustment (max 1.0)

  • Failure: confidence -= adjustment * 1.5 (min 0.0)

Automatically promotes to GOLDEN_RULE when confidence reaches 0.9.

Args: memory_id: ID of the memory to validate success: Whether the memory application was successful adjustment: Base confidence adjustment (default: 0.1)

Returns: Result with old/new confidence, promotion status, or error

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
successYes
adjustmentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: how confidence is adjusted based on success/failure (including formulas and min/max bounds), automatic promotion to GOLDEN_RULE at a confidence threshold of 0.9, and the return structure. This provides comprehensive insight into the tool's behavior beyond basic input/output.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, starting with the core purpose followed by behavioral details and parameter explanations. While efficient, the bullet points for success/failure outcomes could be slightly more integrated, but overall it avoids waste and maintains clarity.

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

Completeness5/5

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

For a tool with 3 parameters, no annotations, and an output schema, the description is complete enough. It covers purpose, behavioral rules (confidence adjustments, promotion logic), parameter semantics, and hints at return values, providing sufficient context for an agent to use the tool effectively without needing to rely solely on structured fields.

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

Parameters5/5

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

Given 0% schema description coverage, the description compensates fully by explaining all three parameters: memory_id identifies the target, success indicates application outcome, and adjustment defines the base confidence change with a default value. This adds essential meaning beyond the bare schema, clarifying each parameter's role in the validation process.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('validate a memory', 'adjust its confidence score') and distinguishes it from sibling tools like memory_apply_tool or memory_analyze_health by focusing on validation and confidence adjustment rather than application or health analysis.

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

Usage Guidelines4/5

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

The description implies usage context through the explanation of success/failure outcomes and confidence adjustments, suggesting it should be used after memory application to evaluate usefulness. However, it does not explicitly state when to use this tool versus alternatives like memory_outcome_tool or validation_history_tool, nor does it provide exclusions.

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

validation_history_toolA

Get validation event history for a memory.

Shows the history of validation events (applied, succeeded, failed) for a specific memory. Useful for understanding why a memory has its current confidence score.

Args: memory_id: ID of the memory to get history for event_type: Filter by event type (optional: 'applied', 'succeeded', 'failed') limit: Maximum number of events to return (default: 50)

Returns: Dictionary with validation events and summary statistics

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_idYes
event_typeNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool retrieves historical data (a read operation) and mentions event types and a default limit, but lacks details on permissions, rate limits, pagination, or error handling. It adds some behavioral context but not comprehensively.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by useful context, and then detailed parameter and return information. Every sentence earns its place without redundancy, making it efficient and easy to parse.

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

Completeness5/5

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

Given the tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is complete enough. It explains the purpose, usage, parameters, and return value, and the presence of an output schema means it doesn't need to detail return values further. It covers all necessary aspects for effective use.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It fully documents all three parameters: memory_id (required), event_type (optional with enum values), and limit (default value). This adds significant meaning beyond the bare schema, explaining usage and constraints clearly.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get validation event history') and resources ('for a memory'), distinguishing it from siblings like memory_validate_tool (which performs validation) or memory_list_tool (which lists memories). It explains what validation events are and their relevance to confidence scores.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Useful for understanding why a memory has its current confidence score'), but does not explicitly state when not to use it or name alternatives among siblings. It implies usage for diagnostic purposes related to validation history.

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

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes focused on different aspects of memory management (storage, retrieval, analysis, relationships, validation), but there is some potential overlap between memory_validate_tool and memory_outcome_tool (both adjust confidence based on success/failure) and between memory_forget_tool and memory_edge_forget_tool (both handle deletion). The descriptions help clarify differences, but an agent might occasionally confuse these pairs.

Naming Consistency5/5

Tool names follow a highly consistent snake_case pattern with clear verb_noun structure (e.g., memory_store_tool, memory_recall_tool, file_activity_add). All tools start with a category prefix (daemon_, file_, memory_, validation_) followed by an action and sometimes a suffix like _tool, creating a predictable and readable naming scheme throughout the set.

Tool Count3/5

With 19 tools, the count is on the higher side for a memory management system, bordering on heavy. While the tools cover a broad range of functionalities (storage, retrieval, analysis, relationships, validation, file tracking, daemon status), some could potentially be consolidated (e.g., validation-related tools) to reduce complexity without losing capability.

Completeness5/5

The tool set provides comprehensive coverage for memory management, including full CRUD operations (store, list, recall, forget), relationship management (relate, edge_forget, inspect_graph), validation lifecycle (apply, outcome, validate, history), health analysis, and file activity tracking. There are no obvious gaps; agents can perform complete workflows from memory creation to validation and cleanup.

Related MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/blueman82/recall'

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