Skip to main content
Glama

MemoryMesh

用于个人数据的通用 MCP 中心。本地优先,默认私有,旨在成为您未来构建的智能体的记忆层。

CI PyPI License Python MCP Tests v0.1.0

MemoryMesh 会索引您的本地文件(未来版本将支持电子邮件、日历、浏览器历史记录和聊天记录),并通过 Model Context Protocol 将其暴露出来。任何支持 MCP 的客户端(Claude Desktop、Cursor、Claude Code 或您自己的智能体)都可以对您实际拥有的数据进行语义提问,而无需向云端发送任何字节。

它是一个中心,而不是单一用途的 RAG。传输协议、嵌入模型、解析器和分块策略都在清晰的接口后可互换,因此同一个中心可以从“搜索我的笔记”扩展到“为我的智能体操作系统记住一切”。


为什么存在这个项目

个人数据分散在数十个应用程序中。没有任何 AI 智能体能以统一、私密的方式访问所有这些数据。Anthropic 的 MCP 定义了协议;MemoryMesh 填补了连接一切的中心空白——在本地运行,并将隐私作为前提而非设置。


Related MCP server: NOUZ MCP Server

工作原理

                   ┌──────────────────────────────┐
  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

索引流水线: 文件监视器检测更改 → SHA-256 去重跳过未更改的文件 → 解析器(txt/md/pdf/docx/代码) → 智能分块器(代码使用 tree-sitter,Markdown 按标题,文本递归分块) → 通过 sentence-transformers 生成嵌入 → 插入 ChromaDB + BM25 索引。

搜索流水线: 查询 → 密集搜索 (ChromaDB) + 稀疏搜索 (BM25) 过度获取 → 倒数排名融合 (RRF, k=60) → 返回包含路径、预览、分数和元数据的前 k 个结果。


有何不同

大多数同类工具只优化一个维度。MemoryMesh 是唯一同时满足以下所有维度的工具:

特性

MemoryMesh

LangChain

LlamaIndex

PrivateGPT

AnythingLLM

MemGPT

Haystack

MCP 原生

✅

❌

❌

❌

❌

❌

❌

混合搜索 (密集 + BM25 + RRF)

✅

部分

部分

❌

❌

❌

✅

实时监视器 + SHA-256 去重

✅

❌

❌

❌

❌

❌

❌

崩溃后恢复

✅

❌

❌

❌

❌

❌

❌

100% 本地,零遥测

✅

✅

✅

✅

✅

✅

✅

跨平台 (Win/Linux/Mac)

✅

✅

✅

部分

部分

✅

✅

无框架依赖

✅

—

—

❌

❌

❌

—

设计为基础设施

✅

❌

❌

❌

❌

❌

❌

MCP 原生意味着它是从第一天起就为 MCP 构建的,而不是事后添加的。这 4 个工具(search_memory、list_sources、get_document、index_now)拥有稳定的 API,不会在版本更新中中断。

设计为基础设施意味着其架构预见到了多智能体访问、按智能体权限控制以及硬件智能体(ESP32、Arduino)查询同一中心的需求。请参阅 路线图。


状态

特性

状态

本地文件索引 (txt, md, code, pdf, docx)

✅

混合搜索 — 密集 + BM25 + RRF

✅

MCP 服务器 — 4 个工具,stdio + streamable-http

✅

实时增量索引 (watchdog + debounce)

✅

Tree-sitter 代码分块 (Python, JS, TS, Go, Rust…)

✅

跨平台 — Windows / Linux / macOS

✅

崩溃后恢复

✅

可选的扫描版 PDF OCR (Tesseract / EasyOCR)

✅

隐私审计日志 (仅查询哈希,无明文)

✅

172 个测试 — 单元 + 集成

✅

父文档检索器 (extended_preview)

🔜 v0.2

GitHub Actions CI (Ubuntu / Windows / macOS)

🔜 v0.2

Docker + docker-compose

🔜 v0.2

交叉编码器重排序 (Cross-encoder reranker)

🔜 v0.3

评估框架 (Precision@k, MRR, NDCG)

🔜 v0.3

使用本地 LLM (Ollama) 进行 RAG

🔜 v0.4

电子邮件 / 日历 / 浏览器源

🔜 v0.4

按智能体权限层

🔜 v0.5


快速入门

前提条件: Python 3.11+ 和 uv。

# Install from PyPI
pip install memorymesh-mcp

或者克隆以进行开发:

# Clone and install
git clone https://github.com/kilhubprojects/memory-mesh.git
cd memory-mesh
uv sync

# Initialize state directory and copy example config
uv run memorymesh init

# Edit config.yaml — point it at the folders you want indexed
# (see Configuration section below)

# Index a folder
uv run memorymesh index ~/Documents

# Test a search
uv run memorymesh search "how did I configure the debounce"

作为守护进程运行(实时索引)

uv run memorymesh start --transport streamable-http --detach
uv run memorymesh status
# edit a file in one of your sources — it gets indexed within ~2s
uv run memorymesh search "the sentence you just typed"
uv run memorymesh stop

集成到 Claude Desktop

添加到您的 Claude Desktop 配置文件中:

  • 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", "serve", "--stdio"
      ]
    }
  }
}

重启 Claude Desktop。这四个工具将自动出现。


MCP 工具

工具

描述

search_memory(query, top_k, mode, source)

对所有已索引内容进行混合搜索。返回路径、预览、分数、文件类型和来源。

list_sources()

列出所有已配置的源及其文件计数和索引状态。

get_document(path, max_bytes)

读取已索引文件的全部内容(默认最大 1 MB)。

index_now(path)

强制立即重新索引文件或目录,绕过监视器。

所有工具均向后兼容。v0.1 的签名已冻结 — 在 v0.2 中添加 extended_preview 是增量式的,不会破坏兼容性。


配置

所有配置都在 config.yaml 中。请参阅 config.example.yaml 获取带有完整注释的参考。主要亮点:

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]

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

search:
  mode: hybrid               # hybrid | dense | sparse
  top_k: 10

server:
  transport: stdio           # stdio | streamable-http

全局忽略列表默认保护敏感路径:.env, *.key, id_rsa*, secrets/, .ssh/, .aws/, .git/, node_modules/。


基准测试

基准测试将在 v0.2 在所有三个平台上落地 CI 后发布。目标是可复现的数据,而不是“在我机器上很快”。

脚本已在 benchmarks/ 中,可在本地运行:

  • bench_indexing.py — 合成语料库上的索引吞吐量 (chunks/s, MB/s)

  • bench_search_latency.py — 混合/密集/稀疏模式下的 p50/p95/p99 搜索延迟

  • bench_embedding_models.py — 三种嵌入模型之间的速度与质量对比


隐私与安全

三个在版本更新中保持不变的硬性承诺:

  1. 数据不出本地。 无遥测。除非您明确选择加入,否则不会进行外部 API 调用 — 即使加入,日志中也会有 WARNING 提示。

  2. HTTP 监听器默认仅绑定到 127.0.0.1。 暴露给其他接口需要明确的配置覆盖。

  3. 日志绝不包含明文的文档内容或查询。 审计日志记录的是查询的哈希值,而非查询本身。

静态加密在 路线图 中。如果您的磁盘在操作系统层面已加密,那么您已处于 MemoryMesh 设计的威胁模型保护之下。


路线图

版本

重点

预计时间

v0.2

安全加固 + CI/CD + 父文档检索器

即将推出

v0.3

评估框架 (Precision@k, MRR) + 重排序 + 查询扩展

—

v0.4

通过 Ollama 使用本地 LLM (完整 RAG) + 电子邮件/日历源

—

v0.5

按智能体权限 + 分层记忆 (热/温/冷)

—

v1.0

智能体操作系统集成 — 多智能体系统的记忆层

~6 个月

v2.0

硬件智能体 — ESP32/Arduino 通过 BLE/WiFi 查询中心

~12 个月

详细信息请参阅 ROADMAP.md。


故障排除

  • 文本文件出现 UnicodeDecodeError — MemoryMesh 会按顺序尝试 UTF-8, UTF-8 BOM, cp1252, latin-1。如果文件仍然失败,它会被记录并跳过,不会导致程序崩溃。

  • 监视器在网络驱动器 / WSL 挂载上不触发 — 在 config.yaml 中设置 watcher.use_polling: true。

  • 找不到 Tesseract — 请在系统层面安装它并确保其在 PATH 中。Windows 用户:UB-Mannheim 安装程序。

  • 更改配置后嵌入模型不匹配 — 运行 memorymesh reindex --all。如果 ChromaDB 中存储的模型 ID 与配置不匹配,CLI 将拒绝启动。


关于本项目

MemoryMesh 是一个使用 vibe coding(与 LLM 高速紧密协作编写代码)构建的个人项目,并在每个阶段进行了结构化的架构审查。流程:LLM 提出代码,架构师审查正确性、设计缺陷和规范违规,测试套件确认。漏掉的 Bug(协调系统中的启动顺序、BM25 封装违规、CLI 中错误的构造函数参数)在运行到生产环境之前就在审查中被捕获了。

这就是当你认真对待审查步骤时 vibe coding 的样子:一个 172 个测试的套件、一个真正的混合搜索流水线、一个协调系统,以及一个旨在延续到智能体操作系统的架构。


贡献

MemoryMesh 暂不接受外部贡献 — 目前还没有 CI 或贡献指南。这将在 v0.2 中改变。请关注仓库或届时查看。


许可证

MIT。请参阅 LICENSE。


致谢

架构参考了 LlamaIndex、LangChain、PrivateGPT、AnythingLLM、MemGPT 和 Haystack 的研究 — 理解了它们各自的优缺点。感谢 chroma-mcp 和 MCP Python SDK 展示了 MCP 原生在实践中是什么样子。

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.

Tool Schema Changelog

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

  1. 17 tool updatesv0.8.14
    • First observedask_memory
    • First observedforget_memory
    • First observedforget_source
    • First observedget_document
    • First observedget_entity
    • First observedgraph_memory
    • First observedindex_now
    • First observedlist_sources
    • First observedpin_memory
    • First observedquery_timeline
    • First observedrecord_event
    • First observedrelated_documents
    • First observedsearch_by_date
    • First observedsearch_memory
    • First observedsummarize_source
    • First observedsync_source
    • First observedunpin_memory

TDQS

A3.9/5.0

Scored across 17 tools

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
ResponsivenessUnresponsive

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
    32 npm
    2
    MIT