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 또는 직접 만든 에이전트)는 데이터를 클라우드로 단 1바이트도 전송하지 않고도 사용자가 실제로 소유한 데이터에 대해 의미론적 질문을 할 수 있습니다.

이것은 단일 목적의 RAG가 아닌 허브입니다. 전송, 임베딩 모델, 파서, 청킹 전략 모두 깔끔한 인터페이스 뒤에서 교체 가능하므로, 동일한 허브가 "내 메모 검색"에서 "내 에이전트 OS를 위한 모든 것 기억하기"로 성장할 수 있습니다.


왜 이 프로젝트가 존재하는가

개인 데이터는 수십 개의 앱에 파편화되어 있습니다. 어떤 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, 마크다운용 제목별, 텍스트용 재귀적) → sentence-transformers를 통한 임베딩 → ChromaDB + BM25 인덱스에 upsert.

검색 파이프라인: 쿼리 → dense 검색(ChromaDB) + sparse 검색(BM25) 오버패치 → Reciprocal Rank Fusion (k=60) → 경로, 미리보기, 점수 및 메타데이터가 포함된 상위 k개 결과.


차별점

대부분의 유사 도구들은 최적화할 한 가지 차원만 선택합니다. MemoryMesh는 다음 모든 요소를 동시에 충족하는 유일한 도구입니다:

기능

MemoryMesh

LangChain

LlamaIndex

PrivateGPT

AnythingLLM

MemGPT

Haystack

MCP 네이티브

✅

❌

❌

❌

❌

❌

❌

하이브리드 검색 (dense + BM25 + RRF)

✅

부분

부분

❌

❌

❌

✅

실시간 감시자 + SHA-256 중복 제거

✅

❌

❌

❌

❌

❌

❌

충돌 후 복구

✅

❌

❌

❌

❌

❌

❌

100% 로컬, 제로 텔레메트리

✅

✅

✅

✅

✅

✅

✅

크로스 플랫폼 (Win/Linux/Mac)

✅

✅

✅

부분

부분

✅

✅

프레임워크 의존성 없음

✅

—

—

❌

❌

❌

—

인프라로 설계됨

✅

❌

❌

❌

❌

❌

❌

MCP 네이티브란 나중에 덧붙인 것이 아니라 처음부터 MCP를 위해 구축되었음을 의미합니다. 4개의 도구(search_memory, list_sources, get_document, index_now)는 버전 간에 깨지지 않는 안정적인 API를 가집니다.

인프라로 설계됨이란 아키텍처가 다중 에이전트 액세스, 에이전트별 권한, 동일한 허브를 쿼리하는 하드웨어 에이전트(ESP32, Arduino)를 예상하고 있음을 의미합니다. 로드맵을 참조하세요.


상태

기능

상태

로컬 파일 인덱싱 (txt, md, 코드, pdf, docx)

✅

하이브리드 검색 — dense + 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 리랭커

🔜 v0.3

평가 프레임워크 (Precision@k, MRR, NDCG)

🔜 v0.3

로컬 LLM을 사용한 RAG (Ollama)

🔜 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을 재시작하세요. 4개의 도구가 자동으로 나타납니다.


MCP 도구

도구

설명

search_memory(query, top_k, mode, source)

모든 인덱싱된 콘텐츠에 대한 하이브리드 검색. 경로, 미리보기, 점수, 파일 유형 및 소스를 반환합니다.

list_sources()

파일 수와 인덱스 상태를 포함하여 구성된 모든 소스를 나열합니다.

get_document(path, max_bytes)

인덱싱된 파일의 전체 내용을 읽습니다 (기본값 최대 1MB).

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 — 합성 코퍼스에서의 인덱싱 처리량 (청크/초, MB/초)

  • bench_search_latency.py — 하이브리드/dense/sparse 모드 전반의 p50/p95/p99 검색 지연 시간

  • bench_embedding_models.py — 세 가지 임베딩 모델 간의 속도 대 품질 비교


개인정보 보호 및 보안

버전이 바뀌어도 변하지 않는 세 가지 확고한 약속:

  1. 데이터는 기기를 떠나지 않습니다. 텔레메트리 없음. 명시적으로 동의하지 않는 한 외부 API 호출이 없으며, 호출하더라도 로그에 WARNING이 표시됩니다.

  2. HTTP 리스너는 기본적으로 127.0.0.1에만 바인딩됩니다. 다른 인터페이스에 노출하려면 명시적인 구성 재정의가 필요합니다.

  3. 로그에는 일반 텍스트로 된 문서 내용이나 쿼리가 포함되지 않습니다. 감사 로그는 쿼리가 아닌 쿼리 해시를 기록합니다.

저장 데이터 암호화는 로드맵에 있습니다. OS 수준에서 디스크가 암호화되어 있다면 MemoryMesh가 설계된 위협 모델에 대해 보호받고 있는 것입니다.


로드맵

버전

초점

예상 시기

v0.2

보안 강화 + CI/CD + 부모 문서 검색기

곧

v0.3

평가 프레임워크 (Precision@k, MRR) + 리랭커 + 쿼리 확장

—

v0.4

Ollama를 통한 로컬 LLM (전체 RAG) + 이메일/캘린더 소스

—

v0.5

에이전트별 권한 + 계층적 메모리 (핫/웜/콜드)

—

v1.0

에이전트 OS 통합 — 다중 에이전트 시스템을 위한 메모리 계층

~6개월

v2.0

하드웨어 에이전트 — BLE/WiFi를 통해 허브를 쿼리하는 ESP32/Arduino

~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이 코드를 제안하고, 아키텍트가 정확성, 설계 격차, 사양 위반을 검토하며, 테스트 스위트가 확인합니다. (재조정 시스템의 시작 순서, BM25 캡슐화 위반, CLI의 잘못된 생성자 kwargs 등) 빠져나간 버그들은 프로덕션에서 실행되기 전에 검토 과정에서 포착되었습니다.

이것이 검토 단계를 진지하게 받아들일 때의 바이브 코딩 모습입니다: 172개의 테스트 스위트, 실제 하이브리드 검색 파이프라인, 재조정 시스템, 그리고 에이전트 OS로 이어지도록 설계된 아키텍처.


기여

MemoryMesh는 아직 외부 기여를 받지 않습니다. 아직 CI나 기여 가이드가 마련되지 않았습니다. 이는 v0.2에서 변경될 예정입니다. 저장소를 지켜보거나 그때 다시 확인해 주세요.


라이선스

MIT. LICENSE를 참조하세요.


감사의 말

아키텍처는 LlamaIndex, LangChain, PrivateGPT, AnythingLLM, MemGPT, Haystack을 연구하여 각 도구가 무엇을 잘하고 무엇을 못하는지 이해함으로써 정보를 얻었습니다. 또한 MCP 네이티브가 실제로 어떤 모습인지 보여준 chroma-mcp와 MCP Python SDK에 감사드립니다.

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