Skip to main content
Glama

MemoryMesh

PyPI License Python CI Tests v0.8.0

SQLite for AI memory. Persistent memory layer for MCP agents and coding copilots β€” local-first, zero cloud, works in 5 minutes.

See it in action: Claude Code remembering project decisions across sessions.

πŸ’» Coding copilots

πŸ€– MCP agents

πŸ“š Research assistants

Remember architecture decisions, bugs, and preferences across sessions

Persistent memory across any MCP-compatible client

Semantic recall over your notes, papers, and docs


Up and running in 5 minutes

pip install memorymesh-mcp
cp config.example.yaml ~/.memorymesh/config.yaml
# edit config.yaml β€” point at your folders
memorymesh index ~/Documents
memorymesh search "how did I configure the debounce"

Wire it into Claude Desktop. Find the config file at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "memorymesh": {
      "command": "uv",
      "args": [
        "run",
        "--directory", "/absolute/path/to/memory-mesh",
        "memorymesh", "start"
      ]
    }
  }
}

Restart Claude Desktop. The 15 tools appear automatically.


Related MCP server: NOUZ MCP Server

Why it exists

Every AI conversation starts from zero. Claude doesn't know which architecture decision you made last week. Cursor doesn't remember the bug you fixed yesterday. The context dies when the session ends.

Mem0 requires a cloud account. Zep needs a running server and a database. LangMem ties you to the LangChain ecosystem. None of them speak MCP natively.

MemoryMesh runs entirely on your machine. It indexes your files into a local SQLite + ChromaDB store and exposes them through 15 MCP tools. It never touches the network unless you configure a connector. Any MCP client β€” Claude Desktop, Cursor, your own agent β€” gets persistent memory with one config change.


How it works

The indexer watches your files, chunks them with format-aware parsers, and stores embeddings locally. The search engine fuses dense and sparse results, then a cross-encoder reranker scores the candidates.

                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  MCP clients ───▢ β”‚         MemoryMesh           β”‚
(Claude Desktop,   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 Cursor, agents)   β”‚  β”‚ MCP Tools (FastMCP):   β”‚  β”‚
                   β”‚  β”‚  search_memory         β”‚  β”‚
                   β”‚  β”‚  list_sources          β”‚  β”‚
                   β”‚  β”‚  get_document          β”‚  β”‚
                   β”‚  β”‚  index_now             β”‚  β”‚
                   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                   β”‚             β–Ό                 β”‚
                   β”‚     Search Engine             β”‚
                   β”‚   dense + BM25 β†’ RRF          β”‚
                   β”‚             β”‚                 β”‚
                   β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
                   β”‚   β–Ό                    β–Ό      β”‚
                   β”‚ ChromaDB            BM25      β”‚
                   β”‚ (embeddings)     (sparse)     β”‚
                   β”‚   β–²                    β–²      β”‚
                   β”‚   └──────── Indexer β”€β”€β”€β”˜      β”‚
                   β”‚                β–²              β”‚
                   β”‚           Watchdog            β”‚
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β–Ό
                             Your filesystem

Indexing: file watcher detects changes β†’ SHA-256 dedup skips unchanged files β†’ parser (txt/md/pdf/docx/code/obsidian/email/calendar/browser) β†’ chunker (tree-sitter for code, by-heading for markdown, recursive for text) β†’ sentence-transformers embeddings β†’ ChromaDB + BM25.

Search: query β†’ query expansion (lexical variants + HyDE) β†’ parallel dense + sparse search β†’ Reciprocal Rank Fusion (k=60) β†’ bge-reranker-v2-m3 reranker β†’ top-k results with path, preview, score, and metadata.

RAG (optional): ask_memory β†’ search_memory retrieval β†’ Ollama generate() β†’ grounded answer with cited sources.


What's included

MemoryMesh ships with hybrid search (dense embeddings + BM25 + RRF + cross-encoder reranker), hot/warm/cold memory tiers with configurable forgetting decay, and an episodic event timeline. 47 connectors pull data from Jira, Notion, GitHub, Slack, email, browser history, Spotify, and more. 15 MCP tools expose everything to any MCP-compatible client. A real-time file watcher re-indexes changed files within seconds, without a manual trigger.

Feature

Status

Local file indexing (txt, md, code, pdf, docx)

βœ…

Obsidian vault parser (frontmatter + wikilinks)

βœ…

Notion HTML export parser

βœ…

AI conversation exports (Claude, ChatGPT JSON)

βœ…

Email indexing (.mbox via stdlib)

βœ…

Calendar indexing (.ics / iCalendar)

βœ…

Browser history (Chrome / Firefox / Brave SQLite)

βœ…

Hybrid search β€” dense + BM25 + RRF

βœ…

Cross-encoder reranker (bge-reranker-v2-m3)

βœ…

Query expansion β€” lexical variants + HyDE

βœ…

RAG with local LLM via Ollama (ask_memory tool)

βœ…

Multi-vector summary indexing for abstract recall

βœ…

MCP server β€” 15 tools, stdio + streamable-http

βœ…

Real-time incremental indexing (watchdog + debounce)

βœ…

Tree-sitter code chunking (Python, JS, TS, Go, Rust…)

βœ…

Parent Document Retriever (extended_preview)

βœ…

Cross-platform β€” Windows / Linux / macOS

βœ…

Post-crash reconciliation

βœ…

Optional OCR for scanned PDFs (Tesseract / EasyOCR)

βœ…

Privacy audit log (query hashes only, no cleartext)

βœ…

GitHub Actions CI (Ubuntu / Windows / macOS)

βœ…

Docker + docker-compose

βœ…

Per-agent permission layer (ACL + rate limiting + revocation)

βœ…

Hierarchical memory (hot / warm / cold tiers + forgetting policy)

βœ…

Episodic memory timeline (query_timeline, record_event tools)

βœ…

Memory control tools (pin_memory, forget_memory)

βœ…

Embedding LRU cache (CachedEmbeddingProvider)

βœ…

Health endpoint (GET /health on :8766)

βœ…

Real CLIP image embeddings (memorymesh[multimodal])

βœ…

Real Whisper audio transcription (memorymesh[multimodal])

βœ…

Knowledge Graph β€” entity co-occurrence (/graph, graph_memory tool)

βœ…

Encryption at rest (Fernet AES-128, memorymesh keygen)

βœ…

REST API (11 endpoints at /api, OpenAPI docs at /api/docs)

βœ…

VS Code extension (extensions/vscode/)

βœ…

Browser extension β€” Manifest V3 (extensions/browser/)

βœ…

47 data source connectors (Jira, Notion, GitHub, Slack, Spotify…)

βœ…

Unit + integration test suite

βœ…


MCP Tools

Once running, these tools are available to any MCP-compatible client:

Tool

Description

search_memory(query, top_k, mode, source)

Hybrid search over all indexed content. Returns path, preview, score, file type, source, and optional extended_preview for wider context.

list_sources()

List all configured sources with file counts and index status.

get_document(path, max_bytes)

Read the full content of an indexed file (up to 1 MB by default).

index_now(path)

Force immediate re-index of a file or directory, bypassing the watcher.

ask_memory(question, top_k, model)

RAG: retrieves relevant passages and sends them to a local Ollama model for a grounded answer. Requires Ollama running locally.

pin_memory(chunk_id)

Pin a chunk to the hot tier β€” never demoted, never score-decayed.

forget_memory(chunk_id)

Suppress a chunk from future search results without deleting the source file.

query_timeline(since_days, event_type, limit)

Query the episodic event log: what was retrieved / indexed in the last N days?

sync_source(source_type, dry_run)

Pull and index documents from a configured external connector (Jira, Notion, GitHub…).

get_entity(name, entity_type)

Look up a named entity (person, project, concept) and its associated chunk IDs.

related_documents(path, top_k, exclude_self)

Find documents semantically similar to the given file path.

search_by_date(since_days, until_days, source, limit)

Search indexed chunks by last-modified date range.

forget_source(source, dry_run)

Remove all indexed data for a named source from the index.

summarize_source(source, max_chunks)

Generate a brief summary of the most recent content in a source (requires Ollama).

graph_memory(min_mentions, entity_type)

Return the entity co-occurrence knowledge graph as nodes and edges.

All tools are backwards-compatible β€” new fields are added without changing existing signatures.


How MemoryMesh compares

How MemoryMesh compares to similar projects:

Feature

MemoryMesh

LangChain

LlamaIndex

PrivateGPT

AnythingLLM

MemGPT

Haystack

MCP native

βœ…

❌

❌

❌

❌

❌

❌

Hybrid search (dense + BM25 + RRF)

βœ…

Partial

Partial

❌

❌

❌

βœ…

Real-time watcher + SHA-256 dedup

βœ…

❌

❌

❌

❌

❌

❌

Post-crash reconciliation

βœ…

❌

❌

❌

❌

❌

❌

100% local, zero telemetry

βœ…

βœ…

βœ…

βœ…

βœ…

βœ…

βœ…

Cross-platform (Win/Linux/Mac)

βœ…

βœ…

βœ…

Partial

Partial

βœ…

βœ…

No framework dependency

βœ…

β€”

β€”

❌

❌

❌

β€”

Per-agent permissions

βœ…

❌

❌

❌

❌

❌

❌

MCP native means it was built for MCP from day one β€” not bolted on after. The 15 tools follow additive versioning β€” new fields are added without removing existing ones.

Per-agent permissions means per-client identity, ACL by source and operation, token-bucket rate limiting, and token revocation are built into the core β€” not added as middleware.


Configuration

Everything lives in config.yaml. See config.example.yaml for a fully commented reference. Key highlights:

sources:
  - name: documents
    path: ~/Documents
    recursive: true
    extensions: [.txt, .md, .pdf, .docx]

  - name: projects
    path: ~/Projects
    recursive: true
    extensions: [.py, .js, .ts, .go, .rs, .md]

  - name: obsidian
    path: ~/obsidian-vault
    source_type: obsidian     # activates wikilink + frontmatter parser

  - name: emails
    path: ~/Mail
    source_type: email        # parses .mbox files

embeddings:
  model: all-MiniLM-L6-v2    # swap to paraphrase-multilingual-MiniLM-L12-v2 for PT/EN

search:
  default_top_k: 10
  hybrid:
    enabled: true
  reranker:
    enabled: true             # cross-encoder reranker (recommended)
    model: BAAI/bge-reranker-v2-m3
  query_expansion:
    enabled: true
    n_lexical_variants: 1

# Optional: local LLM for ask_memory tool + HyDE query expansion
ollama:
  enabled: false              # set true after: ollama pull llama3
  model: llama3

server:
  transport: stdio            # stdio | streamable-http

Global ignore list protects sensitive paths by default: .env, *.key, id_rsa*, secrets/, .ssh/, .aws/, .git/, node_modules/.


Benchmarks

Benchmark results will be published here. Scripts are already in benchmarks/ and runnable locally β€” contributions with reproducible numbers are welcome.

  • bench_indexing.py β€” indexing throughput (chunks/s, MB/s) on a synthetic corpus

  • bench_search_latency.py β€” p50/p95/p99 search latency across hybrid/dense/sparse modes

  • bench_embedding_models.py β€” speed vs. quality comparison across three embedding models


Privacy & security

Three commitments that do not change across versions:

  1. No data leaves your machine. No telemetry. No external API calls unless you explicitly opt in β€” and even then, there is a WARNING in the log.

  2. HTTP listener binds to 127.0.0.1 only by default. Exposing to other interfaces requires an explicit config override.

  3. Logs never contain document content or queries in cleartext. The audit log records query hashes, not queries.

Encryption at rest is available as of v0.8.0. Run memorymesh keygen to generate a key, then enable encryption.enabled: true in config.yaml. The SQLite metadata store can be exported as an encrypted backup with memorymesh backup.


Roadmap

Version

Focus

Status

v0.1

Core: hybrid search, 4 MCP tools, stdio transport, indexer

βœ… shipped

v0.2

CI/CD, Parent Document Retriever, Docker, security hardening

βœ… shipped

v0.3

Reranker, query expansion + HyDE, RAG (Ollama), 6 new parsers, eval framework

βœ… shipped

v0.5

Per-agent permissions (ACL/rate-limit/revocation), hot/warm/cold tiers, episodic timeline, memory control tools, embedding cache, health endpoint, CLIP/Whisper stubs

βœ… shipped

v0.8

Real CLIP+Whisper, Knowledge Graph, Encryption at rest, REST API (11 endpoints), VS Code + browser extensions, 47 connectors, 15 MCP tools

βœ… shipped

v1.0

Agent OS integration β€” memory layer for multi-agent systems

~6 months

v2.0

Hardware agents β€” ESP32/Arduino querying the hub over BLE/WiFi

~12 months

Full details in ROADMAP.md.


Troubleshooting

  • UnicodeDecodeError on a text file β€” MemoryMesh tries UTF-8, UTF-8 BOM, cp1252, latin-1 in order. If a file still fails, it is logged and skipped.

  • Watcher doesn't fire on a network drive / WSL mount β€” set watcher.use_polling: true in config.yaml.

  • Tesseract not found β€” install it system-wide and ensure it is in PATH. Windows: UB-Mannheim installer.

  • Embedding model mismatch after changing config β€” run memorymesh reindex --all. The CLI refuses to start if the model ID stored in ChromaDB does not match the config.


Contributing

Contributions are welcome β€” bug reports, new connectors, integration examples, and documentation improvements all help. Open an issue to discuss before submitting a large PR.


Acknowledgements

Architecture informed by studying LlamaIndex, LangChain, PrivateGPT, AnythingLLM, MemGPT, and Haystack β€” understanding what each does well and what it does not. And to chroma-mcp and the MCP Python SDK for showing what MCP-native looks like in practice.


MIT. See LICENSE.

Available Tools

17 tools
ask_memoryA

Search the knowledge base and generate an answer using a local LLM.

    Retrieves the top-k most relevant passages via hybrid search, builds a
    RAG prompt, and calls the local Ollama LLM to generate an answer.

    When Ollama is unavailable the ``answer`` field is ``null`` and a
    ``hint`` field explains how to install Ollama and pull a model.

    Args:
        question: The question to answer.
        top_k: How many passages to retrieve (clamped to 1-20).
        model: Optional model override.

    Returns:
        Dict with keys ``answer``, ``sources``, ``model``, ``ollama_available``.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
questionYes
top_kNo
modelNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses key behaviors: top_k clamping (1-20), hybrid search, RAG prompt building, and the null answer with hint when Ollama is unavailable. However, it doesn't cover edge cases like no relevant passages found or other error conditions.

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 concise yet thorough, with clear sections for parameters and return values. Every sentence adds value, and the structure (bullet points, code block) enhances readability without wasted words.

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

Completeness4/5

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

Given no output schema, the description explains return keys well. It covers input, behavior, and a key failure mode (Ollama unavailable). However, it could address more error scenarios or mention performance considerations like rate limits.

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 adds significant meaning: question is the query, top_k is clamped 1-20 with default 5, model is an optional override. This fully compensates for the schema's lack of descriptions.

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 it searches the knowledge base and generates an answer using a local LLM, distinguishing it from sibling tools like search_memory that likely only retrieve passages. The verb+resource combination 'search and generate an answer' is specific and 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?

The description provides context on when Ollama is unavailable and explains the fallback behavior. While it doesn't explicitly state when to use versus siblings, the name and description imply it's for question-answering. It lacks explicit exclusions or alternative tool references.

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

forget_memoryA

Forget a chunk from memory using either instant suppression or gradual decay.

    Two modes are available:

    - **suppress** (default): chunk is added to the suppression list and
      immediately hidden from all search results.  Use when you never want
      to see this chunk again.
    - **cold**: chunk is demoted to the cold memory tier so its relevance
      score decays over time.  The chunk stays visible but becomes less
      prominent on each query.  Use when you prefer gradual fading.

    Use ``pin_memory`` to reverse a cold demotion and restore full relevance.
    A suppressed chunk can only be unsuppressed by direct database access
    (intentionally β€” suppression is permanent).

    Args:
        chunk_id: Stable chunk identifier ``<path>:<chunk_index>``.
        mode: ``"suppress"`` or ``"cold"``.  Defaults to ``"suppress"``.

    Returns:
        Confirmation dict with ``chunk_id``, ``mode``, and result fields.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
chunk_idYes
modeNosuppress

TDQS

A5/5.0
Behavior5/5

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

Despite no annotations, the description discloses key behaviors: suppress is permanent and requires direct DB access to reverse, cold decays over time and is reversible via pin_memory. This is thorough behavioral 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?

Well-structured with clear sections, bullet points, and front-loaded purpose. Every sentence adds value without redundancy.

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

Completeness5/5

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

No output schema exists, but the description specifies return format (confirmation dict with fields). Covers all aspects: purpose, modes, parameters, reversal, and permanence consequences.

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 coverage is 0%, but the description fully compensates by explaining chunk_id format (<path>:<chunk_index>) and mode enum values with their effects, adding meaning beyond 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 clearly states the tool forgets a memory chunk using two modes (suppress and cold). It uses specific verbs and distinguishes from sibling tools like pin_memory by explaining cold can be reversed.

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

Usage Guidelines5/5

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

Explicitly explains when to use each mode (suppress for permanent removal, cold for gradual fading) and mentions pin_memory as a reversal for cold. Provides clear guidance on selection.

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

forget_sourceA

Remove all indexed content from a named source.

    Deletes every document belonging to *source* from the vector store,
    BM25 index, and SQLite metadata.  This is irreversible unless the
    source is re-synced.

    Args:
        source: Source name as it appears in the index (e.g. ``"jira"``).
        dry_run: Preview without deleting.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
dry_runNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, description fully discloses that it deletes from multiple stores, is irreversible, and includes a dry_run option. No contradictions.

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 concise paragraphs: purpose, behavior details, parameter descriptions. No wasted words, every sentence adds value.

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?

Complete for a deletion tool: covers purpose, behavior, consequences, and parameters. No output schema needed for this action.

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 coverage is 0%, but description adds full meaning: source is 'Source name as it appears in the index' with example, and dry_run is 'Preview without deleting.' Exceeds minimal requirement.

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?

Clearly states 'Remove all indexed content from a named source' with specific verb and resource, and lists what gets deleted (vector store, BM25 index, SQLite metadata). Distinguishes from siblings like 'forget_memory' and 'sync_source'.

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?

Provides context by noting that the action is irreversible unless re-synced. Does not explicitly exclude scenarios or mention alternatives, but implied usage is clear.

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

get_documentA

Read and return the contents of an indexed file.

    The file must currently exist on disk and must have been indexed by
    MemoryMesh (i.e. its path must be present in the metadata store).

    Args:
        path: Absolute file path.
        max_bytes: Content is truncated to this many bytes when the file
            is large (``truncated: true`` is set in the response).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
max_bytesNo

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses truncation behavior with a truncated flag in the response and preconditions. Could mention error handling for missing files, but overall sufficient.

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?

Concise and well-structured. The main action is front-loaded, and the argument descriptions are bulleted. No unnecessary words.

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

Completeness4/5

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

Given no output schema or annotations, the description covers preconditions, parameter semantics, and truncation. It is reasonably complete for a read tool, though missing error behavior details.

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 has 0% description coverage. Description adds meaning to both parameters: path as absolute file path, and max_bytes with truncation behavior. No enum or nested objects, but coverage is good.

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 reads and returns the contents of an indexed file. It specifies the preconditions (file must exist on disk and be indexed) and the parameter meanings, distinguishing it from other 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 when to use the tool (file must be indexed) but does not explicitly state when not to use it or compare with sibling tools like related_documents or search_by_date.

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

get_entityA

Retrieve a named entity and its associated document chunks.

    Returns the entity's name, type, and the IDs of all chunks that
    mention it.  Requires entity extraction to have been enabled when
    the documents were indexed (``indexing.entity_extraction.enabled``).

    Args:
        name: Entity name (case-insensitive).
        entity_type: Optional type constraint.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
entity_typeNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It conveys it is a retrieval operation with a prerequisite, but does not explicitly state that it is read-only or safe. This is a minor gap, but overall acceptable.

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 concise, with a clear structure: purpose, return value, prerequisite, and parameter details. Every sentence adds value 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 simple retrieval tool with 2 parameters and no output schema, the description covers purpose, return, prerequisite, and parameter meaning. It lacks error handling or differentiation from related sibling tools, but overall is fairly complete.

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%, but the description includes an Args section that adds detail: 'name' is case-insensitive, 'entity_type' is optional. This provides meaning beyond the schema's type information.

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 it retrieves a named entity and its associated document chunks, specifying the return fields (name, type, chunk IDs) and case-insensitivity. It distinguishes from siblings like get_document which retrieves entire documents.

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

Usage Guidelines4/5

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

The description explicitly mentions a prerequisite (entity extraction enabled during indexing), which sets clear context for when the tool is usable. However, it does not discuss when not to use it or suggest alternatives among siblings.

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

graph_memoryA

Return the entity co-occurrence knowledge graph.

    Nodes are named entities extracted from the indexed corpus.  An edge
    between two entities means they were mentioned in the same document
    chunk; the edge weight is the number of shared chunks.

    Args:
        min_mentions: Minimum mention count for a node to appear.
        entity_type: Optional entity type filter (e.g. ``"PERSON"``).

    Returns:
        Dict with ``"nodes"`` (id, label, type, mentions) and ``"edges"``
        (source, target, weight, shared_chunks) lists.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
min_mentionsNo
entity_typeNo

TDQS

A3.8/5.0
Behavior4/5

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

Despite no annotations, the description details the graph structure: nodes are entities from indexed corpus, edges represent co-occurrence in document chunks, and edge weight is shared chunk count. It also specifies return format. However, it does not mention destructive behavior, rate limits, or required permissions.

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

Conciseness3/5

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

The description is well-structured with sections but is somewhat verbose (multiple lines). It could be trimmed without losing clarity, e.g., combining the edge definition more succinctly.

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?

Covers purpose, parameters, and return format (nodes and edges with fields). Given no output schema, this is adequate. However, it lacks details on default behavior, limits, or error conditions.

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

Parameters4/5

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

Schema coverage is 0%, but the description explains both parameters: min_mentions as 'minimum mention count for a node to appear' and entity_type as 'optional entity type filter (e.g. PERSON)'. This adds meaningful context beyond the schema's type and default.

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?

Clearly states it returns the entity co-occurrence knowledge graph, explaining nodes and edges with specific definitions. The verb 'return' and resource 'knowledge graph' are precise, and it distinguishes itself from sibling tools like get_entity by focusing on graph structure.

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 explicit guidance on when to use this tool versus alternatives like get_entity or search_memory. It describes parameters but does not indicate use cases or scenarios where this tool is preferred.

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

index_nowA

Trigger an immediate (re-)index of a file, directory, or all sources.

    Args:
        path: Target path.  When ``None``, all :attr:`AppContext.config.sources`
            are scanned.
        force: Skip hash comparison and always re-index.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
forceNo

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It explains the indexing action and parameter effects (force skips hash comparison) but does not disclose potential side effects, return values, or rate limits. Basic behavior is covered.

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 concise, front-loads the main action, and uses a clear Args list. Every sentence is meaningful with no wasted words.

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?

The tool has no output schema and the description does not mention what the tool returns (e.g., success status, job ID). For a tool with 2 parameters, this missing information reduces completeness, though the action and parameters are well explained.

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?

Since schema description coverage is 0%, the description fully compensates by explaining both parameters: 'path' can be None to scan all sources, and 'force' skips hash comparison. This adds essential 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 tool triggers an immediate (re-)index of a file, directory, or all sources. The verb 'trigger' and resource 'index' are explicit, and it distinguishes from siblings like 'sync_source' and 'forget_source' by focusing on indexing.

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 (when you want to re-index) but provides no explicit guidance on when to use this tool versus alternatives (e.g., 'sync_source'). No 'when-not-to-use' statements are included.

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

list_sourcesA

List all configured source directories with indexing statistics.

    Returns a summary for each source: file counts by status, total chunk
    count, and aggregate disk size.
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 burden. It discloses the return format (file counts, chunk count, disk size) but does not mention any side effects, performance characteristics, or data freshness. For a read-only listing, this is minimally adequate.

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 concise with two sentences, front-loading the main purpose and then detailing the return summary. No unnecessary words.

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

Completeness4/5

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

Given no parameters and no output schema, the description provides a good overview of what the tool returns. However, it does not specify whether results are paginated or if there is a limit, which could be relevant for many sources.

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?

There are no parameters, so the schema provides full coverage. The description does not add extra meaning beyond the schema, but that is acceptable. Baseline for zero parameters is 4.

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 it lists configured source directories with indexing statistics, using specific verb and resource. It distinguishes itself from sibling tools that perform memory or modification 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?

No explicit when-to-use or when-not-to-use guidance is provided. While the context implies use for overview of sources, there is no comparison with sibling tools like 'summarize_source' or 'sync_source'.

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

pin_memoryA

Pin a specific chunk to the hot memory tier.

    Pinned chunks are never demoted during maintenance runs and always
    receive full relevance scores (no decay) regardless of how long ago
    they were last accessed.

    Args:
        chunk_id: Stable chunk identifier ``<path>:<chunk_index>``.

    Returns:
        Confirmation dict with ``chunk_id``, ``tier``, and ``pinned`` fields.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
chunk_idYes

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. It clearly discloses key behaviors: pinned chunks are never demoted and receive no decay in relevance scores. It also specifies the return fields. However, it does not mention potential side effects or access requirements.

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 concise, front-loading the purpose in the first sentence, and organized with Args/Returns sections. Every sentence adds value 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 simple tool with one parameter and no output schema, the description covers purpose, behavior, parameter format, and return structure. It assumes domain knowledge (e.g., 'hot memory tier'), but overall it is sufficiently complete for an agent.

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 only parameter 'chunk_id' has no description in the schema (0% coverage). The description provides a specific format: 'Stable chunk identifier <path>:<chunk_index>', adding valuable meaning beyond 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 clearly states the tool's purpose: 'Pin a specific chunk to the hot memory tier.' The verb 'pin' and resource 'chunk' are specific, and the sibling 'unpin_memory' further distinguishes it as an inverse operation.

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 explains the behavioral consequences of pinning (no demotion, full relevance scores) but does not explicitly state when to use this tool versus alternatives. No guidance on prerequisites or scenarios where pinning is appropriate.

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

query_timelineA

Query the episodic memory timeline for recent activity.

    Returns a chronological log of retrieval and indexing events, allowing
    an agent to reconstruct what the user was working on during a given
    period.

    Args:
        since_days: How many days back to look.
        event_type: Optional category filter.
        limit: Maximum results.

    Returns:
        Dict with ``events`` list (each event has ``event_id``, ``timestamp``,
        ``event_type``, ``source``, ``chunk_ids``, ``client_id``,
        ``metadata``), ``total`` count, and ``since_ts`` / ``until_ts`` bounds.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
since_daysNo
event_typeNo
limitNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It describes the output structure and purpose clearly, implying a read-only operation. However, it does not explicitly state that it is non-destructive or address any safety concerns, such as no side effects.

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

Conciseness5/5

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

The description is well-structured with a clear front-loaded purpose, followed by Args and Returns sections. Every sentence adds value, and there is no extraneous information.

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 no output schema or annotations, the description provides comprehensive information: purpose, parameter explanations, and detailed return structure. It is sufficient for an agent to use the tool 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?

Input schema has 0% description coverage, but the description's Args section adds meaningful semantics to all three parameters, compensating for the lack. Baseline for 0 params is 4, and the description meets that.

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 clearly states it queries the episodic memory timeline for recent activity, with a specific verb and resource. It explicitly mentions returning chronological events to reconstruct user activity, differentiating it from siblings like search_memory or graph_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?

Context is given: 'reconstruct what the user was working on during a given period.' This suggests when to use the tool. However, it does not explicitly state when not to use it or mention alternatives, so it falls 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.

record_eventA

Record a custom episodic event in the memory timeline.

    Useful for agents to annotate significant moments (e.g. "user reviewed
    this document", "agent summarised this file") without triggering a
    search.

    Args:
        event_type: Category string for the event.
        source: Associated file path or source name.
        note: Free-text annotation stored in ``metadata.note``.
        chunk_ids: Chunk identifiers involved.

    Returns:
        The persisted event dict with its generated ``event_id``.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
event_typeYes
sourceNo
noteNo
chunk_idsNo

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It explicitly states the tool creates a persisted event dict and returns an event_id. No destructive behavior implied. Adequately covers creation behavior without needing to mention auth or rate limits.

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

Conciseness5/5

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

The description is short and well-structured: one-line summary, contextual usage note, then parameter list. Every sentence adds value without redundancy. Front-loaded with the core action.

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 no annotations or output schema, the description provides complete information: what it does, when to use, parameter meanings, and return value (persisted event dict with event_id). No gaps for this tool's complexity.

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 has 0% description coverage, but the description's Args section explains each parameter meaningfully: event_type as 'Category string', source as 'Associated file path or source name', note as 'Free-text annotation stored in metadata.note', chunk_ids as 'Chunk identifiers involved'. Adds substantial value beyond names.

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 records a custom episodic event in the memory timeline, with examples of usage. It distinguishes from search-related siblings (e.g., search_memory) by noting it 'without triggering a search', making the purpose specific and 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?

The description indicates when to use: for annotating significant moments without triggering a search. It gives context (e.g., 'user reviewed this document') but does not explicitly state when not to use or list alternatives like ask_memory. However, the sibling list provides implicit differentiation.

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

search_by_dateB

List indexed documents within a date range.

    Returns file records matching the given date window.  Useful for
    discovering recently indexed content or auditing what was indexed in
    a specific period.

    Args:
        after: Only include documents indexed/modified after this date.
        before: Only include documents indexed/modified before this date.
        source: Restrict to this source name.
        file_type: Restrict to this file type (e.g. ``".pdf"``).
        limit: Maximum records to return.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
beforeNo
sourceNo
file_typeNo
limitNo

TDQS

B3.4/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 transparency. It only states the basic operation without disclosing details like result ordering, pagination, date format expectations, or whether the operation is read-only.

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 fairly concise and front-loaded with the main purpose. The parameter documentation is bulleted and readable, though minor redundancy exists (e.g., repeating 'Only include documents').

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

Completeness2/5

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

Despite good parameter coverage, the description omits critical details: no output schema explanation, no mention of date format or inclusiveness, no pagination or limit behavior, and no error cases. For a tool with five params and no annotations, this is insufficient.

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 input schema has 0% description coverage, and the tool's description adds meaningful explanations for all five parameters (after, before, source, file_type, limit), including examples and clarifications like indexing/modification semantics.

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 it lists indexed documents within a date range and mentions use cases like discovery and auditing. However, it does not explicitly differentiate from sibling tools like query_timeline, which may also handle date-based retrieval.

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 a general context ('useful for discovering recently indexed content or auditing') but does not give explicit guidance on when to use this tool versus alternatives or when not to use it.

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

search_memoryB

Search the personal knowledge base for passages relevant to query.

    Returns a ranked list of matching text passages with file paths,
    relevance scores, and short previews.  When ``search.parent_window_chars``
    is configured, each hit also includes an ``extended_preview`` with wider
    context around the matched chunk.

    Args:
        query: Natural-language question or phrase.
        top_k: Number of results (clamped to 1-50).
        mode: ``hybrid`` | ``dense`` | ``sparse``.
        source: Optional source name filter.
        modality: ``all`` | ``text`` | ``image``.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
modeNohybrid
sourceNo
modalityNoall

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description reveals that the tool returns a ranked list of passages with file paths, scores, and previews, plus an optional extended preview. It does not explicitly state read-only nature or side effects, but the behavior is clear for a search tool.

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

Conciseness5/5

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

The description is concise with a brief summary followed by a bulleted Args list. Every sentence adds value, no redundancy, and the purpose is front-loaded.

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?

The description adequately covers inputs, outputs, and a config-dependent behavior. However, it lacks details on error handling, empty results, or how this tool fits among siblings, making it somewhat incomplete for full context.

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

Parameters4/5

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

Schema coverage is 0%, but the description explains each parameter's purpose and possible values (e.g., query is a natural-language question, top_k clamped 1-50, mode options). It adds meaningful semantics 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 it searches a personal knowledge base for passages matching a query, listing returned elements. While it is distinct from siblings like query_timeline or search_by_date, it does not explicitly differentiate itself, hence not 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 only explains what the tool does, with no guidance on when to use it vs alternatives like ask_memory or search_by_date. No when-not-to-use or context for selection.

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

summarize_sourceB

Return indexing statistics for one or all named sources.

    Reports the number of indexed documents, total chunks, file type
    breakdown, and most recent indexed-at timestamp for each source.

    Args:
        source: Source name, or ``null`` for all sources.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must cover behavioral traits. It describes the output but does not disclose side effects, permissions, or whether the operation is safe (read-only). Since it only states what it returns, it lacks transparency about potential impacts or requirements.

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 structured as a docstring with a brief summary and an Args section. It is clear and to the point, though slightly verbose with the Args format. Every sentence contributes meaning, making it 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 simple tool with one parameter and no output schema, the description adequately explains the return value (statistics) and parameter semantics. It covers what the user needs to know to call the tool, though it could mention potential errors or response format.

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 has 0% description coverage, so the description's explanation of the parameter adds essential meaning. It clarifies that 'source' accepts a string or null, and that null returns data for all sources. This goes beyond the raw schema, compensating for the lack of schema descriptions.

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

Purpose4/5

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

The description clearly states it returns indexing statistics for sources, listing specific metrics like indexed documents, total chunks, file type breakdown, and most recent timestamp. While it distinguishes itself from siblings like get_document (retrieves a single document) and list_sources (just lists names), it does not explicitly contrast itself, missing the highest bar for differentiation.

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 explicit guidance is provided on when to use this tool versus alternatives. The description implies use for retrieving source statistics, but it does not mention exclusions (e.g., when to use get_document instead) nor suggest context.

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

sync_sourceB

Fetch documents from one or all configured external connectors.

    Runs the enabled connectors defined in ``config.yaml`` and indexes
    each fetched document into the search index.

    Args:
        source_type: Connector type key to run, or ``null`` for all.
        dry_run: Fetch without indexing.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
source_typeNo
dry_runNo

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 must fully disclose behavior. It mentions fetching and indexing, and the dry_run option skips indexing, but does not discuss side effects (e.g., whether indexing is additive or replaces), required permissions, idempotency, or error handling. Minimal transparency.

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 concise, front-loaded with the main purpose, and structured with argument descriptions. It avoids unnecessary words, though the docstring format could be slightly more compact. Overall efficient.

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

Completeness1/5

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

Given no output schema and no annotations, the description should cover return values, side effects on the search index, error conditions, and concurrency. It does not mention what the tool returns, whether it is destructive, or how it interacts with other tools like index_now. The description is inadequate for a state-modifying sync operation.

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?

The schema coverage is 0% (no parameter descriptions), so the description must add meaning. It explains source_type as connector key or null for all, and dry_run as fetch without indexing, which provides value. However, it lacks specifics on valid source_type values or further details, so it only partially compensates for the schema 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 description clearly states the action ('Fetch documents from one or all configured external connectors') and the resource (external connectors). It differentiates from siblings like forget_source or list_sources by specifying it fetches and indexes, making the purpose specific and distinct.

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 explains when to use the tool (to run enabled connectors and index documents) and how to specify arguments (source_type and dry_run). However, it does not explicitly guide when not to use it or compare with alternatives like forget_source, leaving implicit usage.

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

unpin_memoryA

Remove the manual pin from a chunk, allowing normal tiering.

    The chunk stays in the hot tier until the next maintenance run, after
    which it will be promoted or demoted based on its access history.

    Args:
        chunk_id: Stable chunk identifier ``<path>:<chunk_index>``.

    Returns:
        Confirmation dict with ``chunk_id`` and ``pinned`` fields.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
chunk_idYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It reveals that the chunk stays in hot tier until next maintenance run, which is additional behavioral insight beyond just the action. No contradictions.

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?

Description is clear and well-structured with Args/Returns sections. Slightly wordy but front-loaded with the main action. Efficient for the 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?

With only one parameter and no output schema, the description fully covers input format and return type. It also explains the behavioral effect on tiering, making it complete for this simple tool.

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

Parameters4/5

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

Schema coverage is 0% despite one parameter, but the description includes a docstring for 'chunk_id' with format '<path>:<chunk_index>', adding value beyond the schema's minimal type definition.

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 specific verb 'Remove' and identifies the resource ('chunk'), clearly stating the action of unpinning. It distinguishes from sibling tool pin_memory by contrasting the 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?

Description implies when to use (to reverse a pin) but lacks explicit exclusions or alternatives beyond pin_memory. Mentions the effect on tiering, which provides context.

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

TDQS

A3.9/5.0
Disambiguation5/5

All 17 tools serve distinct purposes: ask/generate, search passages, manage memory chunks/sources, retrieve documents/entities, graph, index, list, pin, timeline events, etc. No overlapping functionality.

Naming Consistency4/5

Predominantly verb_noun snake_case (e.g., ask_memory, forget_source, list_sources). Minor deviations like 'related_documents' (adjective+noun) and 'index_now' (adverb) slightly break the pattern, but overall clear.

Tool Count4/5

17 tools is slightly above the typical 3-15 range for a coherent set, but the memory management domain warrants many operations (indexing, search, forgetting, pinning, timeline, etc.). Still reasonable.

Completeness4/5

Covers indexing, search (various modes), memory manipulation (forget, pin), source management, entity/graph, document retrieval, timeline/event logging. Missing operations like editing memory chunks, but the surface is largely complete.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A custom Memory MCP Server that acts as a cache for Infrastructure-as-Code information, allowing users to store, summarize, and manage notes with a custom URI scheme and simple resource handling.
    23
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Memento is a local-first MCP server that gives AI coding agents durable project memory β€” facts, decisions, patterns, and architecture notes β€” so they stop re-learning the same context every session. Runs locally on Node.js 18+ with SQLite storage and optional cloud embeddings; works with Claude Code, Cursor, Windsurf, and any MCP client.
    19
    20
    2
    MIT

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/kilhubprojects/memory-mesh'

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