Skip to main content
Glama
arunkumars-mf

mem0-agent-memory

Mem0 Agent Memory

PyPI version PyPI Downloads PyPI Downloads Python versions License: MIT

A Model Context Protocol (MCP) server that provides persistent memory capabilities for AI agents using Mem0. Store, search, and manage contextual information across conversations with support for multiple backends and LLM providers.

Features

Core Capabilities:

  • 🧠 Persistent Memory: Store and retrieve contextual information across sessions

  • 🔍 Semantic Search: Find relevant memories using natural language queries

  • 📚 Document Ingestion: Import PDFs, DOCX, Markdown, and text files as knowledge base

  • 🏷️ Metadata Filtering: Organize and filter memories by type, priority, status, and custom fields

  • 📊 Memory Management: Full CRUD operations with history tracking and bulk operations

Backend Support:

  • Vector Stores: FAISS (local), Qdrant (embedded/server), OpenSearch (AWS), Mem0 Platform (cloud)

  • LLM Providers: AWS Bedrock (Claude, Titan), Ollama (local), LM Studio (local)

  • Graph Store: KuzuDB integration for relationship tracking (experimental)

Developer Experience:

  • Auto-configuration: Automatic user/agent detection from system context

  • 🎯 Memory-First Workflows: One-command setup for Kiro IDE integration

  • 🔧 Performance Tuning: Configurable inference, relevance filtering, and connection pooling

  • 📦 Session Partitioning: Isolate memories by run_id for multi-session management

Related MCP server: MCP-Mem0

Quick Start

Installation

pip install mem0-agent-memory

Basic Setup

Add to your MCP client configuration:

Kiro: .kiro/settings/mcp.json Amazon Q CLI: ~/.aws/amazonq/mcp.json or .amazonq/mcp.json

{
  "mcpServers": {
    "mem0-agent-memory": {
      "command": "uvx",
      "args": ["mem0-agent-memory"],
      "env": {
        "AWS_ACCESS_KEY_ID": "your-key",
        "AWS_SECRET_ACCESS_KEY": "your-secret",
        "AWS_REGION": "us-west-2"
      }
    }
  }
}

Enable Memory-First Workflows (Kiro Only)

In your first chat session:

setup steering for memory

This configures the AI to automatically check memory before tasks and store important outcomes.

Configuration

LLM Providers

Choose your LLM backend by setting the appropriate environment variables:

export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-west-2"

# Optional: Customize models
export BEDROCK_LLM_MODEL="us.anthropic.claude-3-5-haiku-20241022-v1:0"
export BEDROCK_EMBED_MODEL="amazon.titan-embed-text-v2:0"
export BEDROCK_MAX_TOKENS="1500"  # Default: 1500

Performance: Built-in optimizations include connection pooling (50 connections), adaptive retries, and reduced latency settings.

export OLLAMA_HOST="http://localhost:11434"
export OLLAMA_LLM_MODEL="llama3.2"           # Default
export OLLAMA_EMBED_MODEL="nomic-embed-text" # Default

# Pull models first:
ollama pull llama3.2
ollama pull nomic-embed-text

Note: For Nomic embeddings, set NOMIC_USE_PREFIXES=true for better search accuracy.

export LMSTUDIO_HOST="http://localhost:1234"
export LMSTUDIO_LLM_MODEL="llama-3.2-3b-instruct"
export LMSTUDIO_EMBED_MODEL="text-embedding-nomic-embed-text-v1.5"

Vector Store Backends

export FAISS_PATH="/path/to/.mem0/memory"  # Optional, defaults to .mem0/memory

Best for: Development, small-medium datasets (<100k memories), single-user scenarios.

Embedded Mode (No Docker):

export QDRANT_PATH=".mem0/qdrant"

Server Mode (Production):

export QDRANT_HOST="localhost"
export QDRANT_PORT="6333"  # Optional

Benefits: Native metadata filtering, better performance for complex queries, production-ready clustering. See Qdrant Setup Guide for details.

export OPENSEARCH_HOST="your-opensearch-endpoint"
export AWS_REGION="us-west-2"

Best for: Large datasets (>100k memories), complex filtering, enterprise deployments.

export MEM0_API_KEY="your-api-key"

Best for: Managed service, no infrastructure management, built-in features.

Additional Settings

# User/Agent ID (optional - auto-detected if not set)
export MEM0_USER_ID="custom-user-id"      # Defaults to system username
export MEM0_AGENT_ID="custom-agent-id"    # Defaults to workspace name
export MEM0_RUN_ID="session-123"          # Optional: session partitioning

# Performance
export MEM0_INFER_DEFAULT="true"          # LLM inference for fact extraction
export MEM0_MIN_RELEVANCE_SCORE="0.7"     # Search result threshold (0.0-1.0)

# Response Optimization (v1.3.0+)
export MEM0_VERBOSE="false"               # Compact responses (default) vs verbose
export MEM0_MAX_RELATIONS="20"            # Max graph relations in compact mode

# Nomic embeddings (Ollama only)
export NOMIC_USE_PREFIXES="true"          # Improves search accuracy

Response Modes (v1.3.0+):

  • Compact (default): Returns only essential fields (id, memory, metadata, score). Reduces token usage by ~55% per memory.

  • Verbose: Returns all fields including hash, timestamps, user_id, agent_id, etc.

  • Graph relations: Preserved in both modes, truncated to 20 in compact mode to prevent token bloat

  • Control per-call with verbose parameter or globally with MEM0_VERBOSE environment variable.

Available Tools

Core Operations

Tool

Description

store_memory

Store memory with optional metadata and inference control

search_memories

Semantic search with relevance filtering

list_memories

List all memories with pagination

get_memory

Retrieve specific memory by ID

get_recent_memories

Get recently added/updated memories

Advanced Operations

Tool

Description

update_memory

Update existing memory directly (no LLM processing)

search_by_metadata

Filter memories by metadata fields (type, priority, status)

get_memory_history

View change history for a memory

get_memory_stats

Get memory usage statistics

Bulk Operations

Tool

Description

delete_memory

Delete single memory (permanent)

delete_all_memories

Delete all memories for a scope (permanent)

bulk_delete_memories

Delete multiple memories by filter (dry-run supported)

Import/Export

Tool

Description

export_memories

Export to JSON or Markdown format

import_memories

Import memories from JSON export

ingest_documents

Ingest PDF, DOCX, MD, TXT files as knowledge base

Utilities

Tool

Description

health_check

Verify backend connectivity

reset_memory

Reset entire memory store (destructive)

setup_steering

Create Kiro memory-first steering file

For detailed parameter documentation, see the tool descriptions in your MCP client.

Usage Examples

Basic Memory Operations

# Store a memory
store_memory(
    content="User prefers React over Vue for frontend development",
    metadata={"type": "preference", "priority": "high"}
)

# Search memories
search_memories(query="React preferences", limit=5)

# Get recent memories
get_recent_memories(days=7, limit=10)

# Filter by metadata
search_by_metadata(type="preference", priority="high")

Document Ingestion

# Ingest single file
ingest_documents(path="/path/to/manual.pdf")

# Ingest directory recursively
ingest_documents(
    path="/path/to/docs",
    recursive=True,
    chunk_size=2048,
    chunk_overlap=400,
    file_metadata={"type": "documentation", "version": "2.0"}
)

# Search ingested documents
search_memories(query="how to configure authentication")

Session Partitioning

# Store memory for specific session
store_memory(
    content="Current task: Implementing user authentication",
    run_id="session-123",
    metadata={"type": "task", "status": "in_progress"}
)

# Search within session
search_memories(query="authentication", run_id="session-123")

# Clean up session
delete_all_memories(run_id="session-123")

Performance Optimization

# Fast storage (no LLM inference)
store_memory(
    content="Completed: API refactoring - 30% faster response times",
    metadata={"type": "task_completion"},
    infer=False  # 5-10x faster
)

# Smart storage (with deduplication)
store_memory(
    content="User mentioned they prefer TypeScript for type safety",
    metadata={"type": "preference"},
    infer=True  # Extracts facts, prevents duplicates
)

# Compact response (default - saves tokens)
search_memories(query="React preferences", limit=5)
# Returns: {"memories": [{"id": "...", "memory": "...", "metadata": {...}}], "count": 5}

# Verbose response (full details)
search_memories(query="React preferences", limit=5, verbose=True)
# Returns: Full details including hash, timestamps, user_id, agent_id, etc.

Performance Tips

Storage Speed:

  • Use infer=false for 5-10x faster writes when you don't need deduplication

  • Use infer=true (default) for important information to prevent duplicates

Response Optimization:

  • Use verbose=false (default) for 55% token reduction per memory

  • Compact mode returns only: id, memory, metadata, score

  • Graph relations preserved and truncated to 20 in compact mode

  • Verbose mode returns all fields including timestamps, hashes, etc.

  • Set MEM0_VERBOSE=true globally or use verbose parameter per-call

  • Configure relations limit with MEM0_MAX_RELATIONS (default: 20)

Search Optimization:

  • FAISS uses L2 distance: lower scores = higher similarity

  • Adjust MEM0_MIN_RELEVANCE_SCORE to filter less relevant results

  • Use metadata filtering for precise queries

Backend Selection:

  • FAISS: Best for <100k memories, single-user, development

  • Qdrant: Best for metadata-heavy queries, production deployments

  • OpenSearch: Best for >100k memories, enterprise scale

LLM Provider:

  • Bedrock: Fastest with built-in optimizations, production-ready

  • Ollama: Good for local development, privacy-focused

  • LM Studio: Alternative local option with UI

Advanced Features

KuzuDB Graph Store (Experimental)

Track relationships between entities (people, companies, technologies) alongside vector embeddings. See docs/KUZU_GRAPH_STORE.md for details.

Known Limitations

  • Amazon Nova Models: Now fully compatible via bedrock_patch.py

  • Metadata Filtering: mem0 v1.0.x only supports implicit AND operations (flat dictionary)

  • Platform Features: Some features (custom_categories, expiration_date) only available in Mem0 Platform

For troubleshooting, see TROUBLESHOOTING.md

Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Submit a pull request

See CONTRIBUTING.md for guidelines.

Documentation

Citation

If you use this project in your research or work, please cite:

@software{selvam_mem0_agent_memory_2025,
  author = {Selvam, Arunkumar},
  title = {Mem0 Agent Memory - MCP Server},
  url = {https://github.com/arunkumars-mf/mem0-agent-memory},
  version = {1.3.0},
  year = {2025}
}

See CITATION.cff for more formats.

License

MIT License - see LICENSE for details.

Available Tools

18 tools
bulk_delete_memoriesA

Delete multiple memories matching filter criteria. PERMANENT deletion.

OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'run_id' - filter by session/run identifier OPTIONAL: 'metadata_type' - delete memories with this metadata type (e.g., "test", "note") OPTIONAL: 'older_than_days' - delete memories older than this many days OPTIONAL: 'dry_run' - if True, returns what would be deleted without actually deleting (default: True)

⚠️ WARNING: Set dry_run=False to actually delete. This cannot be undone.

Examples:

  • Preview test cleanup: {"metadata_type": "test", "dry_run": true}

  • Delete old memories: {"older_than_days": 90, "dry_run": false}

  • Delete by type: {"metadata_type": "note", "dry_run": false}

Returns: List of deleted (or would-be-deleted) memory IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNo
dry_runNo
user_idNo
verboseNo
agent_idNo
metadata_typeNo
older_than_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It clearly warns that deletion is permanent and cannot be undone, explains that dry_run defaults to True and must be set to False to actually delete, and describes the return value as a list of deleted or would-be-deleted IDs. This is exemplary transparency for a destructive 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 front-loaded with the purpose and permanence warning, followed by a concise bullet-style list of optional parameters, clear examples, and a return-value note. The redundancy of the permanence warning reinforces safety rather than cluttering the message. Every section earns its place.

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

Completeness4/5

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

For a destructive bulk operation with no annotations and a 0% schema-description coverage, the description is largely complete: it covers filters, dry-run behavior, irreversibility, examples, and return values. The main gaps are the undocumented 'verbose' parameter and the lack of explicit routing guidance against sibling tools like delete_all_memories.

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 explain parameters. It does explain user_id, agent_id, run_id, metadata_type, older_than_days, and dry_run with helpful examples. However, the 'verbose' parameter in the schema is not mentioned at all, leaving one parameter unexplained.

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

Purpose5/5

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

Description states a specific verb and resource: 'Delete multiple memories matching filter criteria.' It also highlights 'PERMANENT deletion,' which distinguishes it from read-only or reversible operations. The plural scope and filter-based behavior differentiate it clearly from singular delete_memory and define its role relative to bulk operations.

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 usage context via optional filter criteria, dry-run preview, and practical examples such as previewing test cleanup and deleting old memories. However, it does not explicitly state when to prefer this tool over delete_memory or delete_all_memories, leaving some sibling differentiation to inference.

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

delete_all_memoriesA

Delete all memories for a specific scope. PERMANENT deletion.

OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'run_id' - delete all memories for this session/run

⚠️ WARNING: This permanently removes ALL memories matching the scope. Cannot be undone.

Examples:

  • Delete all user memories: {"user_id": "john"}

  • Delete session memories: {"run_id": "session_123"}

Returns: Confirmation of deletion with count.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNo
user_idNo
verboseNo
agent_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 behavioral burden and succeeds: it flags 'PERMANENT deletion' in bold, warns with '⚠️ Cannot be undone', discloses the scope-matching behavior, the auto-detection of the current user, and the return shape (confirmation with count). For a destructive tool, this is exemplary disclosure.

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

Conciseness5/5

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

The description is compact and front-loaded: the permanence warning leads, followed by scannable OPTIONAL bullets, two concrete examples, and a one-line return note. Every sentence earns its place, and the length is justified given how destructive the operation is.

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

Completeness3/5

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

For a 4-parameter destructive tool with no annotations and an output schema, the description covers the essential invocation semantics well (scope, fallback, permanence, return). But it leaves real gaps: the verbose parameter is undocumented, it doesn't state what happens if both user_id and agent_id are provided, and it doesn't explain how it differs from bulk_delete_memories or delete_memory, which an agent could plausibly confuse it with.

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, and it does for 3 of 4 parameters: it explains user_id and agent_id as alternative scopes ('OR'), run_id as a session/run scope, and the fallback when neither is provided. However, the 'verbose' parameter is entirely undocumented, which prevents a 5.

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

Purpose4/5

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

The description states a specific verb and resource: 'Delete all memories for a specific scope. PERMANENT deletion.' The scope qualifier (user/agent/run) makes the operation well-defined. However, it does not explicitly distinguish itself from the closely named sibling 'bulk_delete_memories' or the singular 'delete_memory', which cost it the top score.

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 gives clear invocation context via the OPTIONAL scope bullets and concrete examples ({"user_id": "john"}, {"run_id": "session_123"}), explaining how to select a scope and the auto-detection fallback. But it never says when to prefer this tool over siblings like delete_memory, bulk_delete_memories, or reset_memory, so tool-selection guidance is left to inference.

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

delete_memoryA

Delete memory by its unique ID. PERMANENT deletion.

REQUIRED: 'memory_id' - the UUID of the memory to delete

⚠️ WARNING: This permanently removes the memory and cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNo
memory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and explicitly discloses the critical behavioral trait: 'PERMANENT deletion' and 'cannot be undone.' This clearly warns the agent about irreversibility, which is the most important behavior for a destructive 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 short and front-loaded: action, required parameter, and warning. Every sentence adds information, and the warning is placed prominently.

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

Completeness4/5

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

The tool is simple and destructive, and the description covers purpose, required input, and irreversibility. The output schema exists, so return values are not the description's responsibility. Missing guidance about the verbose parameter and sibling differentiation prevents a perfect score.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains memory_id as a required UUID, adding value beyond the schema. However, it completely ignores the second parameter 'verbose', leaving its effect undocumented.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Delete memory by its unique ID.' It clearly identifies the operation scope (single memory by ID) and distinguishes it from sibling tools like bulk_delete_memories or delete_all_memories, which operate on multiple 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 clearly implies when to use the tool: when you have a specific memory_id and want to delete that one memory. It also states the required precondition (memory_id must be provided) but does not explicitly name alternatives or when-not-to-use conditions relative to sibling delete tools.

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

export_memoriesA

Export memories to JSON or Markdown format for backup or migration.

OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'format' - output format: "json" (default) or "markdown" OPTIONAL: 'include_metadata' - include metadata in export (default: True) OPTIONAL: 'output_path' - custom file path (default: .mem0/exports/memories_.) OPTIONAL: 'return_content' - if True, returns content instead of writing to file (default: False)

Returns: File path where export was saved, or content if return_content=True.

Use for: Backup, migration between backends, documentation, sharing.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson
user_idNo
verboseNo
agent_idNo
output_pathNo
return_contentNo
include_metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations available, the description carries the full behavioral burden. It discloses that by default a file is written to a specific path, that return_content changes behavior to return content, that user_id/agent_id auto-detect when omitted, and what the return value is. This is strong disclosure, though it doesn't mention side effects like overwriting or directory creation.

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 efficient: a one-sentence purpose statement, followed by compact OPTIONAL parameter lines and a short return/use summary. Every line adds value and the key behavior is front-loaded.

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

Completeness4/5

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

For a tool with 7 optional parameters and no annotations, the description covers nearly everything an agent needs: the main behavior, defaults, return values, and common use cases. It is incomplete only in omitting the verbose parameter and not detailing potential file overwrite behavior, but overall it is robust enough for correct invocation.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains format values, auto-detection for user_id/agent_id, the default output path, include_metadata default, and return_content behavior. However, the 'verbose' parameter is never mentioned, which is a gap given that the schema provides no description for any parameter.

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

Purpose5/5

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

The description states a specific verb and resource: 'Export memories to JSON or Markdown format for backup or migration.' It clearly distinguishes export from the many read/search/mutation siblings by immediately naming the output formats and the use cases of backup and migration.

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 'Use for' line gives explicit contexts: backup, migration between backends, documentation, sharing. It does not explicitly say when to avoid this tool or mention alternatives like import_memories, but the intended usage is clear enough that an agent can decide when it is appropriate.

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

get_memoryA

Get specific memory by its unique ID.

REQUIRED: 'memory_id' - the UUID of the memory to retrieve

Returns: Complete memory details including content, metadata, timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNo
memory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the Returns line provides the main behavioral disclosure: the operation yields complete memory details including content, metadata, and timestamps. The verb 'Get' implies a non-mutating read, but failure behavior, authentication requirements, and read-only guarantees are not stated.

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

Conciseness5/5

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

Three short sections cover purpose, required parameter, and return value. The core action is front-loaded, the required argument is clearly emphasized, and there is no filler.

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

Completeness4/5

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

For a simple get-by-ID operation, the description covers the required input, summarizes the output, and the output schema fills in return structure. The main gaps are the unexplained verbose parameter and lack of explicit sibling routing, but neither prevents a correct basic invocation.

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

Parameters3/5

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

Schema description coverage is 0%, but the description compensates for memory_id by specifying it must be the UUID of the memory to retrieve. The optional 'verbose' parameter is never mentioned, leaving its purpose to inference from the parameter name. This is partial compensation: strong on the required field, weak on the optional one.

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?

Opens with a specific verb and object—'Get specific memory'—and scopes it by 'unique ID', immediately distinguishing it from search_memories, list_memories, and get_recent_memories. The purpose is unambiguous.

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

Usage Guidelines4/5

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

Makes clear this is the tool to use when the agent has a memory UUID and needs that exact record, explicitly marking memory_id as REQUIRED. It doesn't name exclusions or alternatives, but the ID-based scoping supplies clear context.

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

get_memory_historyA

Get change history for a specific memory by ID.

REQUIRED: 'memory_id' - the UUID of the memory to get history for

Returns: Chronological list of all changes made to the memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNo
memory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations are absent, so the description carries the burden of behavioral disclosure. It explicitly says the result is a 'chronological list of all changes', which tells the agent what to expect. It does not describe verbose effects or failure behavior, but the read-only nature is clear from 'Get' and 'Returns'.

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 compact and front-loaded with the required parameter. The 'REQUIRED' and 'Returns' labels make it scannable, though the memory_id line slightly repeats the earlier phrasing.

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

Completeness4/5

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

For a simple read tool with an output schema, the required ID and return style are sufficient for basic invocation. The only notable gap is the undocumented verbose parameter and lack of explicit error semantics, but neither blocks correct use.

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

Parameters3/5

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

Schema coverage is 0%, so the description must add meaning. It adds UUID semantics for memory_id and marks it REQUIRED, but it entirely omits the verbose parameter, leaving its effect unexplained.

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

Purpose5/5

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

States a specific verb and resource: 'Get change history for a specific memory by ID.' The phrase 'change history' cleanly distinguishes this from get_memory, which would return the current state.

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 given on when to use this tool versus siblings like get_memory or search_memories. There is no mention of alternatives, exclusions, or conditions that should trigger use.

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

get_memory_statsA

Get statistics about stored memories.

OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user)

Returns: Memory counts by metadata type, date ranges, and storage summary.

Use for: Understanding memory usage, identifying cleanup opportunities, monitoring growth.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idNo
verboseNo
agent_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It discloses auto-detection of the current user and what the response summarizes, which is useful. However, it never explicitly states that this is a read-only operation, nor does it mention any permissions or side effects, leaving some behavioral burden unaddressed.

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

Conciseness5/5

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

The description is compact, scannable, and front-loaded with the core purpose. The optional parameter note, return summary, and use cases each occupy one short line with no filler.

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

Completeness4/5

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

For a stats tool with an output schema, the description conveys scope, output categories, and use cases without needing to enumerate return fields. The only notable gap is the undocumented 'verbose' parameter and the implied but not enforced mutual exclusivity of user_id and agent_id.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains user_id and agent_id as optional filters with auto-detection fallback, adding real meaning. However, the 'verbose' parameter is not mentioned at all, leaving one of three parameters semantically undocumented.

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?

Description opens with 'Get statistics about stored memories,' a specific verb and resource that clearly differentiates it from sibling list/get/search tools. It also states the return categories (counts by metadata type, date ranges, storage summary), reinforcing the purpose. It does not explicitly name a sibling, so it stops short of a 5.

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

Usage Guidelines4/5

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

The description provides explicit use cases: 'Understanding memory usage, identifying cleanup opportunities, monitoring growth.' It also gives scoping guidance for user_id/agent_id and the auto-detection fallback. It does not state when not to use it or explicitly compare with alternatives such as search_memories or list_memories.

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

get_recent_memoriesA

Get recently added or updated memories for session continuity.

OPTIONAL: 'days' - how many days back to search (default: 7) OPTIONAL: 'limit' - max memories to return (default: 10) OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'run_id' - filter by session/run identifier

Returns: Most recently added/updated memories sorted by newest first

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
limitNo
run_idNo
user_idNo
verboseNo
agent_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It communicates that the operation is a read ('Get'), that results are sorted newest first, and that user/agent detection happens automatically when neither ID is supplied. This is meaningful behavioral context beyond the schema.

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: a clear purpose sentence, a compact optional-parameter list, and a return statement. Each line adds value, though the repeated 'OPTIONAL:' prefix is slightly redundant and could be trimmed without losing clarity.

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

Completeness4/5

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

The description covers the tool's main behavior, key parameters, and return ordering. An output schema exists, so detailed return fields are not required here. The main gap is the undocumented 'verbose' parameter and the lack of explicit guidance on choosing among sibling memory tools.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains days, limit, run_id, user_id, and agent_id with defaults and mutual exclusivity, adding real semantics. However, it omits the 'verbose' parameter, so parameter documentation is incomplete.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Get recently added or updated memories.' It also states the output ordering ('sorted by newest first'), which clearly separates this tool from siblings like get_memory, list_memories, or search_memories.

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

Usage Guidelines3/5

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

The phrase 'for session continuity' gives some usage context, but the description does not explicitly say when to use this tool instead of list_memories, search_memories, or get_memory. The intended selection criteria are mostly implied by the tool name and the word 'recently.'

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

health_checkA

Check the health and connectivity of the memory backend.

Returns: Backend type, connection status, and basic diagnostics.

Use for: Troubleshooting connection issues, verifying configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It communicates the action and what will be returned ('Backend type, connection status, and basic diagnostics'), but it does not explicitly say that the tool is read-only or describe side effects. The check/connectivity wording implies safety but leaves the guarantee implicit.

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

Conciseness5/5

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

The description is three short, front-loaded sections: action, return value, and use cases. Every sentence contributes useful information and there is no redundancy or fluff.

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 parameterless, simple diagnostic tool, the description is complete: it states what is checked, what is returned, and when to use it. The presence of an output schema covers detailed return-field definitions, so nothing necessary is missing.

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

Parameters4/5

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

The tool has zero parameters, and the schema is complete and empty. Per the baseline for no-parameter tools, the description adds sufficient context by outlining the returned health-check details.

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

Purpose5/5

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

The description uses a specific verb-resource pairing: 'Check the health and connectivity of the memory backend.' It clearly defines a diagnostic operation and is immediately distinguishable from all sibling tools, which handle memory/storage operations.

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

Usage Guidelines5/5

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

The 'Use for:' section explicitly lists two intended scenarios: 'Troubleshooting connection issues, verifying configuration.' None of the sibling tools cover this diagnostic purpose, so the tool is uniquely positioned for these cases.

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

import_memoriesA

Import memories from exported JSON file.

REQUIRED: 'file_path' - path to the JSON export file OPTIONAL: 'user_id' OR 'agent_id' - override the user/agent from the export file OPTIONAL: 'skip_existing' - if True, skip memories that already exist (default: True) OPTIONAL: 'infer' - use LLM processing during import (default: False for speed)

Imports memories from a JSON file created by export_memories tool. Useful for backup restoration, migration between backends, or sharing memory sets.

Examples:

  • Import from backup: {"file_path": ".mem0/exports/memories_john_20250113.json"}

  • Import to different user: {"file_path": "export.json", "user_id": "jane"}

  • Force reimport: {"file_path": "export.json", "skip_existing": false}

Returns: Import summary with success/failure counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
inferNo
user_idNo
verboseNo
agent_idNo
file_pathYes
skip_existingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and covers meaningful details: skip_existing semantics, infer defaulting to false for speed, user/agent override, and a return summary. It does not discuss potential side effects when skip_existing is false, but the additive bulk-import nature is reasonably clear.

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 structure is clearly front-loaded with REQUIRED/OPTIONAL sections followed by examples and return info. Minor redundancy appears because 'Import memories from exported JSON file' is restated later as 'Imports memories from a JSON file created by export_memories tool,' so it is not maximally tight.

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

Completeness4/5

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

For a file-based bulk import with an output schema, the description covers purpose, source format, parameter semantics, use cases, and examples. The undocumented verbose parameter is the main omission, but it is a minor behavioral flag and likely self-explanatory.

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%, and the description compensates well by explaining file_path, user_id/agent_id, skip_existing, and infer with defaults and examples. The only schema parameter not mentioned is verbose, which leaves a small but real gap.

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

Purpose5/5

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

The opening line uses a specific verb ('Import') and resource ('memories') and identifies the source format ('exported JSON file'). It clearly differentiates from siblings like export_memories or store_memory by framing this as a bulk file-based restore operation.

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 names the companion tool (export_memories) and lists concrete scenarios: backup restoration, migration between backends, and sharing memory sets. It does not explicitly state when to avoid using it, such as preferring store_memory for single additions, so it stops short of full when/when-not routing.

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

ingest_documentsA

Ingest documents into memory as a knowledge base using LlamaIndex.

Supports: PDF, DOCX, TXT, MD, HTML, and more. Automatically chunks and stores content.

REQUIRED: 'path' - file path or directory path to ingest OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'run_id' - session/run identifier for partitioning OPTIONAL: 'recursive' - recursively process subdirectories (default: False) OPTIONAL: 'chunk_size' - max characters per chunk (default: 1024, min: 100, max: 8192) OPTIONAL: 'chunk_overlap' - overlap between chunks (default: 200, min: 0, max: chunk_size-1) OPTIONAL: 'file_metadata' - additional metadata to attach to all chunks OPTIONAL: 'infer' - use LLM for fact extraction (default: False for speed)

Examples:

  • Ingest single file: {"path": "/path/to/document.pdf"}

  • Ingest directory: {"path": "/path/to/docs", "recursive": true}

  • With metadata: {"path": "manual.pdf", "file_metadata": {"type": "documentation", "version": "2.0"}}

  • Custom chunking: {"path": "large.pdf", "chunk_size": 2048, "chunk_overlap": 400}

Returns: Summary of ingested documents with chunk counts and memory IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
inferNo
run_idNo
user_idNo
verboseNo
agent_idNo
recursiveNo
chunk_sizeNo
chunk_overlapNo
file_metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/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 disclosure burden and does substantial work: it states automatic chunking and storage, auto-detection of the current user when user_id/agent_id are absent, default values, the min/max constraints on chunking, and the performance rationale for infer=False. It omits idempotency/overwrite behavior and failure modes, but for a no-annotation tool this is strong coverage.

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

Conciseness4/5

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

The description is long but every section earns its place: purpose, supported formats, parameter spec, examples, and return value. It is front-loaded with the core purpose and uses a clear label-per-line structure. Some redundancy exists between the parameter list and the examples, but given 10 parameters at 0% schema coverage, the length is justified.

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

Completeness4/5

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

For a 10-parameter tool at 0% schema coverage, the description covers formats, all key parameter semantics, defaults, examples, and a brief return summary. An output schema exists, so deep return-value documentation isn't required. Remaining gaps — the undocumented verbose flag, no error conditions, no note on whether re-ingesting the same path overwrites or duplicates — are minor rather than blocking.

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, and it does: it documents 9 of 10 parameters with defaults, ranges, and conditionals — including min/max constraints on chunk_size and chunk_overlap that the schema itself lacks, and the user_id OR agent_id fallback logic. Only 'verbose' is left undocumented, a minor miss against otherwise exceptional compensation.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Ingest documents into memory as a knowledge base using LlamaIndex.' This clearly distinguishes it from sibling tools like search_memories, get_memory, and delete_memory, and its document-chunking role is distinct from store_memory. The supported format list reinforces the scope.

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?

Four concrete examples (single file, directory, metadata, custom chunking) plus REQUIRED/OPTIONAL parameter guidance give an agent clear invocation context. However, it never explicitly contrasts with alternatives like store_memory or import_memories, so an agent must infer when document ingestion is the right sibling choice.

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

list_memoriesA

List all memories for a user or agent with pagination.

OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'run_id' - filter by session/run identifier OPTIONAL: 'page', 'page_size' - pagination controls (default: page_size=25)

Returns: All memories belonging to the specified user/agent, sorted by creation date.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
run_idNo
user_idNo
verboseNo
agent_idNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description must convey behavioral traits itself. It usefully discloses read-only listing, auto-detection, pagination default, run_id filtering, and creation-date sorting. However, it omits sort direction, behavior when both user_id and agent_id are provided, and the meaning of the 'verbose' flag.

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 organized: a plain-language first sentence, scannable OPTIONAL bullets for parameters, and a final returns line with ordering information. Every line adds value and nothing is redundant.

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 an output schema exists, the description does not need to explain return values in prose. It covers scope, filters, pagination defaults, and ordering. Minor gaps remain around 'verbose' semantics and user_id/agent_id exclusivity, but the tool is still actionable.

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 for the bare schema. It adds meaningful semantics for user_id/agent_id auto-detection, run_id filtering, and page_size default. The only parameter left completely unexplained is 'verbose', which keeps this from a perfect score.

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

Purpose4/5

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

The description clearly states a specific verb ('List'), resource ('memories'), and scope ('for a user or agent with pagination'), and closes with a concrete result statement. It does not explicitly differentiate itself from sibling tools like search_memories or get_recent_memories, so it stops short of a 5.

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

Usage Guidelines4/5

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

The description gives clear usage context: list all memories for a user/agent, with optional filters and auto-detection of the current user when no scope is provided. It does not mention when to prefer an alternative tool, but the intended scenario is well implied.

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

reset_memoryA

Reset the entire memory store. DESTRUCTIVE operation.

⚠️ CRITICAL WARNING: This deletes ALL memories in the backend, regardless of user/agent/app. Only use this for testing or when you need to completely clear the memory store.

This operation cannot be undone.

Returns: Confirmation of reset.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly communicates that the operation is destructive, affects all memories globally, is irreversible, and returns a confirmation of reset. This is comprehensive and unambiguous.

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

Conciseness5/5

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

The description is compact and well-structured, with the destructive warning front-loaded and critical details in short, scannable sentences. Every sentence adds essential information without filler.

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

Completeness5/5

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

For a zero-parameter tool with an output schema, the description covers purpose, scope, when to use, irreversibility, and return behavior. No critical information is missing, making it complete for an AI agent to decide whether and how to invoke it.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantics to explain. The baseline of 4 is appropriate because the description cannot add meaning beyond the empty schema, and nothing is missing.

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

Purpose5/5

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

The description opens with 'Reset the entire memory store' and labels it a 'DESTRUCTIVE operation,' giving a clear verb and resource. It further specifies that it deletes 'ALL memories in the backend, regardless of user/agent/app,' which distinguishes its global scope from targeted sibling tools like delete_memory.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool: 'Only use this for testing or when you need to completely clear the memory store.' It also warns that the operation cannot be undone. It does not explicitly name alternatives or contrast with delete_all_memories, but the usage boundary is clear.

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

search_by_metadataA

Search memories by metadata fields without semantic search.

OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'type' - filter by metadata type (e.g., "decision", "preference", "task_completion") OPTIONAL: 'priority' - filter by priority (e.g., "high", "medium", "low") OPTIONAL: 'status' - filter by status (e.g., "complete", "in_progress", "blocked") OPTIONAL: 'custom_filters' - dict of additional metadata key-value pairs to match OPTIONAL: 'page' - page number for pagination (default: 1) OPTIONAL: 'page_size' - results per page (default: 50, max: 100)

Returns: Memories matching all specified filters with pagination.

Examples:

  • Find decisions: {"type": "decision"}

  • Find high priority: {"priority": "high"}

  • Find blocked items: {"status": "blocked"}

  • Custom filter: {"custom_filters": {"category": "api"}}

  • Paginated: {"type": "documentation", "page": 2, "page_size": 20}

Note: Uses native Qdrant filtering when available, falls back to post-filtering for other backends.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
typeNo
statusNo
user_idNo
verboseNo
agent_idNo
priorityNo
page_sizeNo
custom_filtersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses useful behaviors: auto-detecting the current user when user_id/agent_id are absent, AND-style matching across filters, pagination behavior, and backend-specific filtering strategy. It does not explicitly state read-only semantics, but the word 'search' strongly implies it and no side effects are suggested.

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-organized with a clear opening sentence, grouped OPTIONAL parameter bullets, a returns line, concrete examples, and a backend note. Every part serves a purpose and the structure makes the information easily scannable for an agent.

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

Completeness4/5

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

For a tool with 9 optional parameters and no schema descriptions, the description is nearly complete: it explains filters, pagination defaults, user/agent scoping, and example invocations. The main gap is the omitted 'verbose' parameter, which prevents full self-sufficiency in all contexts.

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 documents nearly every parameter with types, defaults, constraints, and examples, adding substantial meaning beyond the raw schema. However, the 'verbose' parameter is not mentioned at all, leaving one parameter undocumented.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Search memories by metadata fields' and immediately distinguishes the tool from semantic search. This makes its role clear and separates it from siblings like search_memories without needing to inspect schemas.

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

Usage Guidelines4/5

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

The phrase 'without semantic search' clearly implies the intended use case: metadata-based lookup rather than semantic similarity. It gives usage examples for common filters, though it does not explicitly name an alternative tool for semantic search or state when not to use this tool.

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

search_memoriesA

Search memories with semantic similarity and relevance filtering.

REQUIRED: 'query' - what to search for (natural language) OPTIONAL: 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) OPTIONAL: 'run_id' - filter by session/run identifier OPTIONAL: 'limit' - max results to return (default: 10, also sets page_size if not specified) OPTIONAL: 'page' - page number for pagination (default: 1) OPTIONAL: 'page_size' - results per page (default: uses limit value)

Returns: Relevant memories filtered by maximum score threshold (configurable via MEM0_MAX_RELEVANCE_SCORE, default: 1000)

Score interpretation (FAISS uses L2 distance - lower is more similar):

  • 0-100: Very high similarity (near-exact matches)

  • 100-400: High similarity (closely related)

  • 400-600: Moderate similarity (somewhat related)

  • 600-1000: Low similarity (loosely related)

  • 1000+: Very low similarity (likely unrelated)

Note: Default threshold of 1000 keeps reasonably similar results. Lower to 400-600 for stricter filtering.

Examples:

  • Search user memories: {"query": "React patterns", "user_id": "john"}

  • Auto-detect user: {"query": "my project status"}

  • Limit results: {"query": "API endpoints", "limit": 3}

  • Session-scoped: {"query": "current task", "run_id": "session_123"}

  • Pagination: {"query": "all tasks", "page": 2, "page_size": 5}

Use for: Finding relevant code, recalling user preferences, retrieving project context.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
queryYes
run_idNo
user_idNo
verboseNo
agent_idNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so excellently. It explains FAISS L2 distance scoring, the relevance threshold default of 1000, the MEM0_MAX_RELEVANCE_SCORE configuration, auto-detection of the current user when neither user_id nor agent_id is supplied, and the limit/page_size interaction.

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 long but well-structured, front-loading required and optional parameters before adding examples and score interpretation. Every section serves a purpose: parameter semantics, score guidance, and usage context. The formatting with bold labels makes it easy for an agent 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 complexity, eight parameters, and existing output schema, the description is thorough. It covers filtering behavior, pagination, user scoping, examples, threshold configuration, and practical use cases. The only minor omission, 'verbose', does not prevent correct invocation since it is an optional boolean with a schema default.

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 add meaning to the raw parameter schema. It does this well for query, user_id, agent_id, run_id, limit, page, and page_size, including defaults and behavior. However, the 'verbose' parameter is not explained at all, leaving one parameter without semantic context.

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

Purpose5/5

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

The description opens with a specific verb and resource: "Search memories with semantic similarity and relevance filtering." This clearly distinguishes it from sibling tools like list_memories and search_by_metadata by specifying the semantic similarity mechanism.

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

Usage Guidelines4/5

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

The description gives explicit parameter expectations (REQUIRED vs OPTIONAL), tangible examples, and a 'Use for' section naming concrete scenarios like finding code, recalling preferences, and retrieving project context. It does not explicitly compare against sibling alternatives such as search_by_metadata, so it falls just short of a 5.

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

setup_steeringA

Setup the memory-first steering file for Kiro.

Creates a steering file at .kiro/steering/memory-first.md that instructs the AI to always check memory before starting tasks and store important outcomes.

OPTIONAL: 'workspace_path' - path to workspace root (default: current directory)

Call this once after adding the MCP server to enable memory-first workflows.

Returns: Success message with file path created.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_pathNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It states the file path created, what the file instructs the AI to do, and the return value. It does not mention behavior if the file already exists or whether it overwrites, but for a simple setup tool the core behavior is disclosed well.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose first, then file details, then the optional parameter, then the call timing, then the return value. Every sentence adds useful 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?

For a low-complexity setup tool with one optional parameter, the description covers the what, where, when, and return value. The only notable gap is the lack of guidance on repeated calls or behavior when the steering file already exists. Overall, it is sufficiently complete for an agent to invoke correctly.

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 explains 'workspace_path' as 'path to workspace root (default: current directory)', which adds meaning beyond the raw schema. It could go further by clarifying how workspace_path affects the file location, but the parameter's role is reasonably 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's purpose: it creates a steering file at a specific path (.kiro/steering/memory-first.md) with a defined role. This is distinct from the sibling memory CRUD and health-check tools, so an agent can identify that this is a one-time setup operation.

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

Usage Guidelines4/5

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

The description gives an explicit trigger condition: 'Call this once after adding the MCP server to enable memory-first workflows.' It does not explicitly discuss when not to use it or name alternatives, but the one-time setup context is clear and distinguishes it from the ongoing memory operations in the sibling list.

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

store_memoryA

Store memory content with metadata support.

REQUIRED: Either 'user_id' OR 'agent_id' (if neither provided, auto-detects current user) REQUIRED: 'content' - the information to remember

OPTIONAL: 'metadata' - structured data about the memory (JSON object) OPTIONAL: 'infer' - if True (default), uses LLM to extract facts and dedupe. Set False for faster raw storage. OPTIONAL: 'run_id' - session/run identifier for temporary context OPTIONAL: 'custom_instructions' - per-call instructions to control what gets stored OPTIONAL: 'verbose' - if True, return full details. If False (default), return compact response.

Examples:

  • Store personal info: {"content": "User prefers React over Vue", "user_id": "john"}

  • Store with metadata: {"content": "API endpoint changed", "metadata": {"type": "technical", "priority": "high"}}

  • Fast storage (no LLM): {"content": "Quick note", "infer": false}

  • Session-scoped: {"content": "Current task context", "run_id": "session_123"}

Use for: Storing code patterns, user preferences, project details, technical knowledge.

Note: With infer=True (default), mem0 uses an LLM to extract key facts and intelligently update existing memories. This is slower (~5-15s) but smarter. Use infer=False for faster raw storage (~1-2s) without deduplication.

Config: Set MEM0_INFER_DEFAULT=false in env to disable infer by default. Config: Set MEM0_VERBOSE=true in env to enable verbose responses by default.

Returns: Success message with memory ID (compact) or full details (verbose).

ParametersJSON Schema
NameRequiredDescriptionDefault
inferNo
run_idNo
contentYes
user_idNo
verboseNo
agent_idNo
metadataNo
custom_instructionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it delivers. It discloses auto-detection of user/agent when neither is supplied, LLM-based fact extraction and deduplication behavior, expected latency differences (5-15s vs 1-2s), environment configuration defaults, and return-behavior compact vs verbose. This is rich, non-obvious behavioral context.

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

Conciseness5/5

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

Despite covering eight parameters plus examples and configs, the description is organized with clear REQUIRED/OPTIONAL sections, examples, use-case guidance, and notes. Every section earns its place; no filler or repeated schema metadata.

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

Completeness5/5

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

Given a high-parameter tool, zero schema descriptions, and no annotations, the description is remarkably complete. It covers parameter semantics, edge-case behavior, configuration, performance tradeoffs, and return values, leaving an agent with everything needed to 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 compensate for all 8 parameters, and it does. It explains the conditional user_id/agent_id requirement, content as required, metadata as a JSON object, infer and verbose booleans, run_id for session scoping, and custom_instructions for per-call control, supplemented with concrete input examples.

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

Purpose5/5

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

Description opens with a specific verb and resource: 'Store memory content with metadata support.' It explicitly lists use cases ('storing code patterns, user preferences, project details, technical knowledge'), clearly distinguishing the write-focused intent from the many retrieval/manipulation sibling tools such as search_memories, get_memory, and delete_memory.

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

Usage Guidelines4/5

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

The description gives concrete when-to-use context with examples and a 'Use for' list, and it explains the infer=True vs infer=False tradeoff. It does not explicitly name alternatives or when-not-to-use conditions, but the context is strong enough for an agent to select this tool for storing rather than retrieving or deleting memories.

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

update_memoryA

Update an existing memory's content and/or metadata directly.

REQUIRED: 'memory_id' - the UUID of the memory to update REQUIRED: 'content' - the new content for the memory

OPTIONAL: 'metadata' - new metadata to replace existing (JSON object)

Unlike store_memory with infer=true, this directly updates the specified memory without LLM processing or deduplication. Preserves memory history.

Examples:

  • Update content: {"memory_id": "abc-123", "content": "Updated preference: Vue over React"}

  • Update with metadata: {"memory_id": "abc-123", "content": "New content", "metadata": {"priority": "high"}}

Returns: Updated memory details.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
verboseNo
metadataNo
memory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 explains that the update is direct, bypasses LLM inference and deduplication, and preserves memory history. It also clarifies that metadata is replaced, not merged. This is meaningful behavioral context beyond the schema, though it does not cover error cases or permissions.

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 with clear REQUIRED/OPTIONAL sections, a contrast to the sibling tool, concrete examples, and a return-value note. Every sentence adds value and the most important information is front-loaded.

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

Completeness4/5

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

For a tool with 4 parameters and no annotations, this description covers the main behaviors, parameter semantics, and purpose well. Examples and the store_memory contrast further help an agent. It falls short only by omitting the verbose parameter and not addressing failure behavior when the memory_id does not exist.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It documents memory_id, content, and metadata well, including the UUID type and the 'replace existing metadata' semantics. However, the 'verbose' boolean parameter is completely undocumented, leaving the agent without guidance on an available input. The phrase 'content and/or metadata' is also slightly misleading since content is required by the schema.

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

Purpose5/5

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

The description uses a specific verb ('Update') with a clear resource ('existing memory') and explicitly states what can be modified ('content and/or metadata'). It also names the key alternative, store_memory, and distinguishes this tool from it, so an agent can tell them apart immediately.

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

Usage Guidelines4/5

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

The description clearly contrasts this tool with 'store_memory with infer=true', noting that update_memory works directly without LLM processing or deduplication. This gives an agent a clear sense of when to use it. It could be slightly more explicit about when not to use it, but the contrast is strong enough.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv1.3.2
    • First observedbulk_delete_memories
    • First observeddelete_all_memories
    • First observeddelete_memory
    • First observedexport_memories
    • First observedget_memory
    • First observedget_memory_history
    • First observedget_memory_stats
    • First observedget_recent_memories
    • First observedhealth_check
    • First observedimport_memories
    • First observedingest_documents
    • First observedlist_memories
    • First observedreset_memory
    • First observedsearch_by_metadata
    • First observedsearch_memories
    • First observedsetup_steering
    • First observedstore_memory
    • First observedupdate_memory

TDQS

A4.2/5.0

Scored across 18 tools

Disambiguation4/5

The tools are largely distinct, with clear separation between CRUD, semantic search, metadata search, bulk operations, and export/import. The main potential confusion is among the multiple deletion tools (delete_memory, delete_all_memories, bulk_delete_memories, reset_memory) and between list_memories and get_recent_memories, but the descriptions clarify scope well.

Naming Consistency5/5

Tool names consistently follow a verb_noun snake_case pattern, with plural nouns for collection operations and singular nouns for single-item operations. Minor outliers like health_check and setup_steering are still readable and do not break the overall convention.

Tool Count4/5

Eighteen tools is slightly above the ideal range, but each tool occupies a reasonable niche in a comprehensive memory-management workflow. The count feels justified given coverage of CRUD, search, bulk deletion, import/export, stats, history, ingestion, and health checks.

Completeness5/5

The tool surface covers the full memory lifecycle: create, read, update, delete, search, bulk operations, backup/restore, analytics, and history. No critical dead ends are apparent for the stated purpose of agent/assistant memory management.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers