MemoryMesh
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MemoryMeshfind my notes about project architecture"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MemoryMesh
SQLite for AI memory. Persistent memory layer for MCP agents and coding copilots β local-first, zero cloud, works in 5 minutes.
See it in action: Claude Code remembering project decisions across sessions.
π» Coding copilots | π€ MCP agents | π Research assistants |
Remember architecture decisions, bugs, and preferences across sessions | Persistent memory across any MCP-compatible client | Semantic recall over your notes, papers, and docs |
Up and running in 5 minutes
pip install memorymesh-mcp
cp config.example.yaml ~/.memorymesh/config.yaml
# edit config.yaml β point at your folders
memorymesh index ~/Documents
memorymesh search "how did I configure the debounce"Wire it into Claude Desktop. Find the config file at:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"memorymesh": {
"command": "uv",
"args": [
"run",
"--directory", "/absolute/path/to/memory-mesh",
"memorymesh", "start"
]
}
}
}Restart Claude Desktop. The 15 tools appear automatically.
Related MCP server: NOUZ MCP Server
Why it exists
Every AI conversation starts from zero. Claude doesn't know which architecture decision you made last week. Cursor doesn't remember the bug you fixed yesterday. The context dies when the session ends.
Mem0 requires a cloud account. Zep needs a running server and a database. LangMem ties you to the LangChain ecosystem. None of them speak MCP natively.
MemoryMesh runs entirely on your machine. It indexes your files into a local SQLite + ChromaDB store and exposes them through 15 MCP tools. It never touches the network unless you configure a connector. Any MCP client β Claude Desktop, Cursor, your own agent β gets persistent memory with one config change.
How it works
The indexer watches your files, chunks them with format-aware parsers, and stores embeddings locally. The search engine fuses dense and sparse results, then a cross-encoder reranker scores the candidates.
ββββββββββββββββββββββββββββββββ
MCP clients ββββΆ β MemoryMesh β
(Claude Desktop, β ββββββββββββββββββββββββββ β
Cursor, agents) β β MCP Tools (FastMCP): β β
β β search_memory β β
β β list_sources β β
β β get_document β β
β β index_now β β
β ββββββββββββ¬ββββββββββββββ β
β βΌ β
β Search Engine β
β dense + BM25 β RRF β
β β β
β βββββββββββ΄βββββββββββ β
β βΌ βΌ β
β ChromaDB BM25 β
β (embeddings) (sparse) β
β β² β² β
β βββββββββ Indexer ββββ β
β β² β
β Watchdog β
ββββββββββββββββββ¬βββββββββββββββ
βΌ
Your filesystemIndexing: file watcher detects changes β SHA-256 dedup skips unchanged files β parser (txt/md/pdf/docx/code/obsidian/email/calendar/browser) β chunker (tree-sitter for code, by-heading for markdown, recursive for text) β sentence-transformers embeddings β ChromaDB + BM25.
Search: query β query expansion (lexical variants + HyDE) β parallel dense + sparse search β Reciprocal Rank Fusion (k=60) β bge-reranker-v2-m3 reranker β top-k results with path, preview, score, and metadata.
RAG (optional): ask_memory β search_memory retrieval β Ollama generate() β grounded answer with cited sources.
What's included
MemoryMesh ships with hybrid search (dense embeddings + BM25 + RRF + cross-encoder reranker), hot/warm/cold memory tiers with configurable forgetting decay, and an episodic event timeline. 47 connectors pull data from Jira, Notion, GitHub, Slack, email, browser history, Spotify, and more. 15 MCP tools expose everything to any MCP-compatible client. A real-time file watcher re-indexes changed files within seconds, without a manual trigger.
Feature | Status |
Local file indexing (txt, md, code, pdf, docx) | β |
Obsidian vault parser (frontmatter + wikilinks) | β |
Notion HTML export parser | β |
AI conversation exports (Claude, ChatGPT JSON) | β |
Email indexing ( | β |
Calendar indexing ( | β |
Browser history (Chrome / Firefox / Brave SQLite) | β |
Hybrid search β dense + BM25 + RRF | β |
Cross-encoder reranker ( | β |
Query expansion β lexical variants + HyDE | β |
RAG with local LLM via Ollama ( | β |
Multi-vector summary indexing for abstract recall | β |
MCP server β 15 tools, stdio + streamable-http | β |
Real-time incremental indexing (watchdog + debounce) | β |
Tree-sitter code chunking (Python, JS, TS, Go, Rustβ¦) | β |
Parent Document Retriever ( | β |
Cross-platform β Windows / Linux / macOS | β |
Post-crash reconciliation | β |
Optional OCR for scanned PDFs (Tesseract / EasyOCR) | β |
Privacy audit log (query hashes only, no cleartext) | β |
GitHub Actions CI (Ubuntu / Windows / macOS) | β |
Docker + docker-compose | β |
Per-agent permission layer (ACL + rate limiting + revocation) | β |
Hierarchical memory (hot / warm / cold tiers + forgetting policy) | β |
Episodic memory timeline ( | β |
Memory control tools ( | β |
Embedding LRU cache ( | β |
Health endpoint ( | β |
Real CLIP image embeddings ( | β |
Real Whisper audio transcription ( | β |
Knowledge Graph β entity co-occurrence ( | β |
Encryption at rest (Fernet AES-128, | β |
REST API (11 endpoints at | β |
VS Code extension ( | β |
Browser extension β Manifest V3 ( | β |
47 data source connectors (Jira, Notion, GitHub, Slack, Spotifyβ¦) | β |
Unit + integration test suite | β |
MCP Tools
Once running, these tools are available to any MCP-compatible client:
Tool | Description |
| Hybrid search over all indexed content. Returns path, preview, score, file type, source, and optional |
| List all configured sources with file counts and index status. |
| Read the full content of an indexed file (up to 1 MB by default). |
| Force immediate re-index of a file or directory, bypassing the watcher. |
| RAG: retrieves relevant passages and sends them to a local Ollama model for a grounded answer. Requires Ollama running locally. |
| Pin a chunk to the hot tier β never demoted, never score-decayed. |
| Suppress a chunk from future search results without deleting the source file. |
| Query the episodic event log: what was retrieved / indexed in the last N days? |
| Pull and index documents from a configured external connector (Jira, Notion, GitHubβ¦). |
| Look up a named entity (person, project, concept) and its associated chunk IDs. |
| Find documents semantically similar to the given file path. |
| Search indexed chunks by last-modified date range. |
| Remove all indexed data for a named source from the index. |
| Generate a brief summary of the most recent content in a source (requires Ollama). |
| Return the entity co-occurrence knowledge graph as nodes and edges. |
All tools are backwards-compatible β new fields are added without changing existing signatures.
How MemoryMesh compares
How MemoryMesh compares to similar projects:
Feature | MemoryMesh | LangChain | LlamaIndex | PrivateGPT | AnythingLLM | MemGPT | Haystack |
MCP native | β | β | β | β | β | β | β |
Hybrid search (dense + BM25 + RRF) | β | Partial | Partial | β | β | β | β |
Real-time watcher + SHA-256 dedup | β | β | β | β | β | β | β |
Post-crash reconciliation | β | β | β | β | β | β | β |
100% local, zero telemetry | β | β | β | β | β | β | β |
Cross-platform (Win/Linux/Mac) | β | β | β | Partial | Partial | β | β |
No framework dependency | β | β | β | β | β | β | β |
Per-agent permissions | β | β | β | β | β | β | β |
MCP native means it was built for MCP from day one β not bolted on after. The 15 tools follow additive versioning β new fields are added without removing existing ones.
Per-agent permissions means per-client identity, ACL by source and operation, token-bucket rate limiting, and token revocation are built into the core β not added as middleware.
Configuration
Everything lives in config.yaml. See config.example.yaml for a fully commented reference. Key highlights:
sources:
- name: documents
path: ~/Documents
recursive: true
extensions: [.txt, .md, .pdf, .docx]
- name: projects
path: ~/Projects
recursive: true
extensions: [.py, .js, .ts, .go, .rs, .md]
- name: obsidian
path: ~/obsidian-vault
source_type: obsidian # activates wikilink + frontmatter parser
- name: emails
path: ~/Mail
source_type: email # parses .mbox files
embeddings:
model: all-MiniLM-L6-v2 # swap to paraphrase-multilingual-MiniLM-L12-v2 for PT/EN
search:
default_top_k: 10
hybrid:
enabled: true
reranker:
enabled: true # cross-encoder reranker (recommended)
model: BAAI/bge-reranker-v2-m3
query_expansion:
enabled: true
n_lexical_variants: 1
# Optional: local LLM for ask_memory tool + HyDE query expansion
ollama:
enabled: false # set true after: ollama pull llama3
model: llama3
server:
transport: stdio # stdio | streamable-httpGlobal ignore list protects sensitive paths by default: .env, *.key, id_rsa*, secrets/, .ssh/, .aws/, .git/, node_modules/.
Benchmarks
Benchmark results will be published here. Scripts are already in
benchmarks/and runnable locally β contributions with reproducible numbers are welcome.
bench_indexing.pyβ indexing throughput (chunks/s, MB/s) on a synthetic corpusbench_search_latency.pyβ p50/p95/p99 search latency across hybrid/dense/sparse modesbench_embedding_models.pyβ speed vs. quality comparison across three embedding models
Privacy & security
Three commitments that do not change across versions:
No data leaves your machine. No telemetry. No external API calls unless you explicitly opt in β and even then, there is a
WARNINGin the log.HTTP listener binds to
127.0.0.1only by default. Exposing to other interfaces requires an explicit config override.Logs never contain document content or queries in cleartext. The audit log records query hashes, not queries.
Encryption at rest is available as of v0.8.0. Run memorymesh keygen to generate a key, then enable encryption.enabled: true in config.yaml. The SQLite metadata store can be exported as an encrypted backup with memorymesh backup.
Roadmap
Version | Focus | Status |
v0.1 | Core: hybrid search, 4 MCP tools, stdio transport, indexer | β shipped |
v0.2 | CI/CD, Parent Document Retriever, Docker, security hardening | β shipped |
v0.3 | Reranker, query expansion + HyDE, RAG (Ollama), 6 new parsers, eval framework | β shipped |
v0.5 | Per-agent permissions (ACL/rate-limit/revocation), hot/warm/cold tiers, episodic timeline, memory control tools, embedding cache, health endpoint, CLIP/Whisper stubs | β shipped |
v0.8 | Real CLIP+Whisper, Knowledge Graph, Encryption at rest, REST API (11 endpoints), VS Code + browser extensions, 47 connectors, 15 MCP tools | β shipped |
v1.0 | Agent OS integration β memory layer for multi-agent systems | ~6 months |
v2.0 | Hardware agents β ESP32/Arduino querying the hub over BLE/WiFi | ~12 months |
Full details in ROADMAP.md.
Troubleshooting
UnicodeDecodeErroron a text file β MemoryMesh tries UTF-8, UTF-8 BOM, cp1252, latin-1 in order. If a file still fails, it is logged and skipped.Watcher doesn't fire on a network drive / WSL mount β set
watcher.use_polling: trueinconfig.yaml.Tesseract not found β install it system-wide and ensure it is in
PATH. Windows: UB-Mannheim installer.Embedding model mismatch after changing config β run
memorymesh reindex --all. The CLI refuses to start if the model ID stored in ChromaDB does not match the config.
Contributing
Contributions are welcome β bug reports, new connectors, integration examples, and documentation improvements all help. Open an issue to discuss before submitting a large PR.
Acknowledgements
Architecture informed by studying LlamaIndex, LangChain, PrivateGPT, AnythingLLM, MemGPT, and Haystack β understanding what each does well and what it does not. And to chroma-mcp and the MCP Python SDK for showing what MCP-native looks like in practice.
MIT. See LICENSE.
Available Tools
17 toolsask_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``.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | ||
| top_k | No | ||
| model | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chunk_id | Yes | ||
| mode | No | suppress |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| dry_run | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_bytes | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| entity_type | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| min_mentions | No | ||
| entity_type | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| force | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chunk_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| since_days | No | ||
| event_type | No | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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``.
| Name | Required | Description | Default |
|---|---|---|---|
| event_type | Yes | ||
| source | No | ||
| note | No | ||
| chunk_ids | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| source | No | ||
| file_type | No | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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``.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| mode | No | hybrid | |
| source | No | ||
| modality | No | all |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source_type | No | ||
| dry_run | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| chunk_id | Yes |
TDQS
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.
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.
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.
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.
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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies when to use (to reverse a pin) but lacks explicit exclusions or alternatives beyond pin_memory. Mentions the effect on tiering, which provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
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.
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.
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.
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Related MCP Servers
- AlicenseAqualityFmaintenanceA 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.231MIT
- AlicenseAqualityAmaintenanceMCP Server for local knowledge management. Semantic + keywords + tags818MIT
- AlicenseAqualityCmaintenanceRecord development decisions as structured JSON, embed them as vectors via Gemini, and search semantically over MCP. Works with Claude Code, Cursor, Windsurf, and any MCP client.91283MIT
- AlicenseAqualityCmaintenanceMemento 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.19202MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kilhubprojects/memory-mesh'
If you have feedback or need assistance with the MCP directory API, please join our Discord server