agent-memory-mcp
This server provides a programmable memory store with search, CRUD, entity/graph management, import/export, and maintenance operations for an MCP client.
Memory search & retrieval: filter by namespace, project, type, source, tags, importance, dates, and full-text/fuzzy search.
Memory management: create/update/delete/restore memories, get by ID, and manage metadata, tags, importance, expiration, and soft-delete state.
Entities & relationships: create/update/delete entities, link memories to entities, manage relationships, and search the entity/relation graph.
Knowledge graph: retrieve graph context (neighbors, relationships) for a memory or entity, and get summaries/statistics.
Import/export: export memories as JSON or lossless Markdown with filters; import memories from JSON/Markdown with conflict policy (skip, update, copy).
Maintenance and stats: get memory counts, database stats, and run maintenance actions like expire, purge deleted, FTS rebuild, graph consistency check, duplicate detection, vacuum, and enrichment tasks.
Advanced capabilities: soft delete/restore, config retrieval, dev-only commands (list, clear).
Provides optional LLM and embedding enhancement through an OpenAI-compatible HTTP API, enabling semantic search and AI-powered memory enrichment when explicitly enabled.
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., "@agent-memory-mcpRemember that we chose Node.js built-in SQLite for storage."
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.
Agent Memory MCP
基于 Node.js 24、TypeScript、官方 MCP TypeScript SDK 和 SQLite 的本地长期记忆服务。
当前版本:0.2.7,一期 + 二期核心实现。 共 27 个 MCP 工具,包含图谱、时间事实、语义/混合检索、去重合并、可选 LLM 增强、维护与本地 HTTP。二期使用方式见 PHASE2_GUIDE.md,验证与边界见 IMPLEMENTATION_STATUS.md。PR #1 已合并;合并后重新对照需求检视代码,并补上启用模型的 MCP → HTTP Provider → SQLite → 整库恢复端到端验证。当前本地类型检查、构建和 153 项测试通过;代码 2bdb5ee 的 Windows/Ubuntu CI 各 153/153 通过,规模基准与 release-gate 也已通过;完整覆盖和结果见 复验报告。用户实际 Windows 客户端和真实模型仍需联调,不视为已完成正式 Release 验收。
0.2.7 修复脱敏替换后越过大小限制的问题:正文仍须满足配置限制和 64 KiB 上限,标题不超过 512 字符,metadata 不超过 16 KiB。超过限制时明确拒绝并回滚,不截断内容;无新配置、依赖或迁移,schema 仍为 105。
本次 Windows 50k 英文 FTS P95 为 159.98ms、100k 并发 stats 为 122.80ms,仍超过相应 150/100ms 建议值;性能目标尚未全部达成。
导入来源的时钟若快于本机,后续更新、删除、恢复和未显式提供更新时间的导入更新会保持时间单调,不把 updated_at 写到 created_at 或上次更新时间之前;deleted_at 仍记录实际删除时间,来源显式提供的倒序时间仍被拒绝。
核心运行不需要 Docker、WSL、虚拟机、外部数据库、Python、JDK、VC++ 构建工具或 API Key。默认使用 stdio,不监听端口,不发送遥测。Embedding/LLM 默认关闭;只有显式启用后,相应操作才会把输入发送到所配置的服务。本地 HTTP 也需要显式配置并启用。
0.2.5 按独立审查优先级修复:合并复活失效图谱事实、HTTP 取消请求导致并发名额泄漏、独立 token 字段漏检。新增 12 项回归,全量 136 项通过。详见 REVIEW_FIXES-v0.2.5.md。该版本未新增配置或迁移,schema 为 104。合并自定义改写的正文不会自动认证旧关系;HTTP 已开始的任务在结束前仍占用名额,服务关闭会等候这些任务完成。
0.2.6 将两阶段 FTS 查询用于正式检索,并以单个只读工作线程执行 MCP/CLI 词法搜索,保持协议线程响应;统计增加覆盖索引。全量 145 项测试通过。从 schema 104 升级到 105 会先自动备份;原始记录和历史迁移不变,旧版回退使用升级前备份恢复至新路径。运行 pnpm benchmark:search 可重现 5 万/10 万条旧新查询对照和独立进程 HTTP 并发测量,5 万条英文 FTS P95:Ubuntu 76ms、Windows 78ms;Windows 10 万条并发 stats 约 105ms,略超新增 100ms 建议目标。完整结果与边界见 PERFORMANCE_PLAN.md。
search.workerEnabled 默认 true;首次异步词法查询时才启动线程,无模型或网络依赖。workerQueueLimit=20 限制执行中与排队总数;workerTimeoutMs=30000 包含排队时间,超限返回可重试的 DATABASE_BUSY。同步程序接口 memory.search() 保留,MCP/CLI 和 lexical/fallback 使用 searchAsync();真正 hybrid 的向量融合路径仍保留现有执行方式。
0.2.1 是前一轮代码审查修订版:强化仓储 scope 校验、同步事务契约和诊断,修复熔断计数,统一配置与版本来源。逐项结论见 REVIEW_FIXES-v0.2.1.md。该版本从 0.2.0 升级不新增数据库迁移,schema 为 v104;新增配置均有默认值。
从 0.1.0 升级:先停止旧 memory 进程,保留原数据目录,用新源码安装、构建并运行 doctor。首次启动自动备份并将 schema v3 升级至 v105,原 Memory 保留。旧版本会拒绝新版 schema;回退需使用升级前备份恢复到新路径。二期默认配置可直接启动,不要求先填模型信息。
快速开始:Windows PowerShell
前置条件:Node.js 24.x。开发和首次安装使用 pnpm 11.19.0。
node --version
npm install -g pnpm@11.19.0
# 从 GitHub 获取源码(也可使用已解压的源码包)
git clone https://github.com/lixia3987-netizen/agent-memory-mcp.git
cd agent-memory-mcp
pnpm install --frozen-lockfile
pnpm build
pnpm test
node dist/index.js doctor已交付的 v0.2.1 ZIP 源码包附带 dist/;GitHub 仓库需先按上面的步骤构建。使用附带构建产物的 ZIP 时,可以在解压后的目录执行:
pnpm install --prod --frozen-lockfile
node dist/index.js doctor
node dist/index.js serveserve 等待 MCP 客户端通过标准输入输出通信。没有普通启动横幅是正常行为。node dist/index.js 与 serve 相同。诊断信息输出到 stderr;stdout 保留给 MCP 协议。
首次运行自动创建数据库、应用顺序迁移并检查 FTS5。初始化、诊断、迁移也可显式运行:
node dist/index.js init
node dist/index.js migrate
node dist/index.js doctor
node dist/index.js help默认数据目录:Windows 为 %LOCALAPPDATA%\AgentMemoryMCP,Linux/macOS 为 ~/.agent-memory-mcp。目录下包含 data/、backup/、logs/、config/。当前结构化日志直接使用 stderr;logs/ 预留给后续文件日志。
Related MCP server: CoreMemory-MCP
接入 MCP 客户端
在客户端的本地 stdio MCP 配置入口中设置 command、args 和 env。使用真实的绝对路径;带空格的路径作为 args 数组中的单个元素即可,不要添加额外引号。下面的 JSON 适用于采用 mcpServers 格式的客户端:
{
"mcpServers": {
"memory": {
"command": "node",
"args": ["C:\\tools\\agent-memory-mcp\\dist\\index.js", "serve"],
"env": {
"AGENT_MEMORY_HOME": "C:\\AgentMemoryData",
"AGENT_MEMORY_NAMESPACE": "work",
"AGENT_MEMORY_PROJECT": "memory-mcp"
}
}
}
}Claude Code、Cursor 等客户端支持本地 stdio MCP。Codex、Hermes 或其他客户端若采用不同配置格式,在其 MCP 设置中填入相同的进程参数与环境变量即可。客户端配置文件的位置、语法与启用命令以各客户端当前文档为准;本项目不自动改写客户端配置。可复制 examples/mcp-config.json 后修改路径。
多个客户端的 AGENT_MEMORY_HOME 或 AGENT_MEMORY_DB 指向同一个位置即可共享存储;namespace/project 决定每次请求的默认作用域。
作用域与字段约定
API 使用
snake_case,时间使用带时区的 ISO 8601,返回统一为 UTC。北京时间可传2026-09-08T16:00:00+08:00。未传 namespace/project 时使用进程配置。默认 namespace 为
global,project 为null。project: null只匹配未分配项目的记录;不会搜索全部项目。查询其他项目需显式传
project。同一 namespace 内跨项目查询需传all_projects: true,不能同时传 project。namespace 始终精确匹配。访问其他 namespace 也需显式指定,global 记忆不会隐式混入项目结果。
按 ID 获取、更新、删除、恢复同样验证作用域。作用域是数据选择规则,并非多租户认证或操作系统权限隔离。
type 是自由字符串,默认
note;importance 默认为 5;source 默认取 MCP 客户端名称,CLI 写入默认manual。正文最多 64 KiB UTF-8;metadata 最多 16 KiB;最多 64 个标签。
MCP 工具
下表是保持兼容的 8 个核心工具。二期新增的 19 个工具、调用示例与参数见 PHASE2_GUIDE.md。memory_export 继续导出 schemaVersion 1 的 Memory;图谱、向量、合并快照和任务通过整个数据库的 backup/restore 保存。
工具 | 主要参数 | 结果与行为 |
|
| 返回 |
|
| 返回 |
|
| 返回完整 Memory 和 |
|
| 更新允许字段;移动项目使用 |
|
| 软删除,返回 ID 和删除时间,可通过 CLI 恢复 |
| 过滤条件、 | 返回 |
|
| 默认预览;返回文件数、记录数、添加/更新/跳过/复制统计 |
|
| 返回 |
搜索/列表过滤条件:namespace、project、all_projects、type、source、tag、tags、importance_min、created_after、created_before、include_expired、include_deleted。tags 为全部匹配。limit 默认 10、最大 100(可通过配置进一步收紧)。sort 支持 updated_desc、created_desc、created_asc、importance_desc;相同值用 ID 稳定排序。
{
"namespace": "work",
"project": "memory-mcp",
"type": "decision",
"title": "核心存储选型",
"content": "使用 Node.js 24 内置 SQLite,避免 Windows 上的原生 npm 编译依赖。",
"tags": ["architecture", "sqlite", "windows"],
"importance": 8
}对应搜索参数:
{"namespace":"work","project":"memory-mcp","query":"SQLite","limit":10}FTS 使用 BM25,并对重要度和新近程度作小幅乘法加权,只有满足全部查询词的记录能参与排序。query 中空白分隔的词采用字面量 AND 查询,不开放原始 FTS 运算符。常规检索用 unicode61;含汉字时,至少三个 Unicode 字符的词用 trigram,较短词用字面子串过滤,保留 AND 语义。例如 AI 大模型 可以匹配这是AI大模型的说明。全是短词的中文查询扫描已过滤作用域,按重要度/新近度排序,未做完整中文分词;大库建议加入至少三个字符的词以使用索引。短词过滤支持 ASCII 大小写折叠,%/_ 不作为通配符。score 仅用于同次查询排序,不应视为跨查询的概率。
软删除与过期记录默认从列表、搜索、导出排除。get 可以读取过期记录并标记状态。去重将 NFC Unicode 和连续空白标准化,仅用于 hash,原始正文保持原样;已删除或已过期记录不阻止重新添加;过期记录保留原 ID,新添加的活跃记录使用新 ID。若要延续原记录,请显式更新其 TTL。
导入与导出
CLI 导入默认 dry-run,只有 --apply 才提交。MCP 使用 dry_run: false 提交。
# 预览与正式导入(可选导入前备份)
node dist/index.js import --format markdown --path "C:\notes" --namespace work --project demo
node dist/index.js import --format markdown --path "C:\notes" --namespace work --project demo --apply --backup
# Claude Code:显式指定 projects 根目录或某个 memory 目录
node dist/index.js import --format claude-code --path "$env:USERPROFILE\.claude\projects" --namespace work
node dist/index.js import --format claude-code --path "$env:USERPROFILE\.claude\projects" --namespace work --apply
# JSON 导入
node dist/index.js import --format json --path "C:\exports\memories.json" --apply
# 导出当前作用域;输出文件必须尚不存在
node dist/index.js export --format json --namespace work --project demo --output "C:\exports\demo.json"
node dist/index.js export --format markdown --namespace work --project demo --include-expired --include-deleted --output "C:\exports\demo.md"Claude importer 仅扫描 memory 目录中的 Markdown,忽略无关项目文件;按二级、三级标题切分,识别代码围栏,保留路径、mtime、hash、frontmatter。未显式指定 project 时保留各个源项目目录名作为项目标识。Claude 的目录名可能编码过真实路径;本项目不猜测解码规则。可通过 --project 显式映射单个项目。
冲突策略:
策略 | 行为 |
| 已导入同一文件版本、相同来源项、相同 ID 或标准化正文冲突时跳过 |
| 文件内容变化后更新对应记录,保留 ID;导入的时间和 metadata 存在时按输入保存;缺失的 TTL/importance 保留旧值 |
| 冲突时创建新 ID,metadata 记录 copiedFromId;相同文件版本再次执行仍跳过 |
文件路径、分段 key、文件 hash 和目标作用域共同记录导入来源。不同作用域已占用的 ID 不会被覆盖;可用 copy 显式重新分配。被手动删除的记录不会因为原文件再次导入而自动复活。update 遇到软删记录时跳过且不修改,统计为 skipped;只有显式 deleted_at: null 才恢复,并重新校验活跃正文去重。导入来源保留软删记录以阻止隐式重建;新导入的导出快照仍可保留其删除状态。同一文件 hash 只有在目标当前正文 hash 仍匹配时才跳过,因此 A→B→A 可通过 update 回退。
所有记录先完成格式校验,之后每 100 条一个短事务;数据库冲突导致后续批次失败时,先前已提交批次保留,错误说明已提交数量。重新执行使用来源记录避免重复。dry-run 使用回滚事务模拟同批去重与冲突,期间短暂持有写锁,适合分批预览。
JSON 格式为 {"schemaVersion":1,"exportedAt":"...","memories":[...]}。Markdown 导出采用带 schemaVersion 的 YAML frontmatter 存放完整 records,正文是便于阅读的视图;重导入时以 frontmatter 为准。这样可以无损保留换行、元数据、ID 和时间,避免正文分隔符碰撞。普通 Markdown 文件也可以直接导入。允许空 frontmatter;以第一个独占整行的关闭分隔符结束,不把正文中的后续横线当作头部内容。
导入默认限制:每文件 10 MiB、1000 文件、10000 记录、单次总输入 50 MiB、扫描深度 16。只接受 UTF-8 普通文件,拒绝符号链接/junction,支持配置允许目录。导出最多 100000 记录,默认最大 16 MiB;超限请缩小过滤条件。导入小于 10 MiB 的 JSON/Markdown 导出可按默认配置直接往返,更大文件需提高 maxFileBytes 后导入。
维护与恢复
node dist/index.js stats --namespace work --project demo
node dist/index.js backup
node dist/index.js restore --namespace work --project demo --id "MEMORY_ID"
# 数据库恢复到一个尚不存在的新文件
node dist/index.js restore --from "C:\backup\memory-backup.db" --output "C:\AgentMemoryData\data\recovered.db"
# 只物理清理指定作用域内、在该时间之前软删除的记录
node dist/index.js purge --namespace work --project demo --before "2026-09-01T00:00:00+08:00" --yes数据库恢复先验证源文件和 schema,再为可读取的当前数据库创建备份,然后生成并验证新数据库。若当前库已损坏,CLI 跳过正常启动和当前库快照,返回 current_backup: null,原 DB/WAL/SHM 保留用于后续排查。完成后停止各 MCP 客户端的 memory 进程,将 AGENT_MEMORY_DB 改为恢复结果的路径,再重新启动。不支持直接覆盖正在使用的 SQLite/WAL 文件。
SQLite 使用 WAL、foreign_keys、busy_timeout 和短事务。迁移在 BEGIN IMMEDIATE 锁内重读版本;升级前在写事务之外自动备份,再次加锁后用同一连接的 data_version 校验期间是否有并发提交。数据变化时重新备份,连续 3 次变化则返回可重试 DATABASE_BUSY;实际迁移全程同步执行,失败回滚并终止启动。FTS 索引由触发器维护,删除/恢复操作留有不含正文的审计事件。DATABASE_BUSY 可稍后重试;发现损坏请从备份恢复到新路径。
配置
优先级:CLI > 环境变量 > JSON 配置文件 > 默认值。默认配置路径为数据目录中的 config/config.json,也可 --config FILE 或 AGENT_MEMORY_CONFIG 指定。
环境变量 | 用途 |
| 数据根目录 |
| 数据库文件路径 |
| 默认 namespace |
| 默认 project |
| error/warn/info/debug |
| 显式配置文件 |
完整配置示例见 examples/config.json。相对路径相对于进程工作目录解析;客户端配置建议使用绝对路径。--no-project 将默认项目显式设为 null。
默认不会扫描任何目录。每次导入都必须给出路径或内联数据;配置 imports.allowedRoots 后,文件导入仅允许这些目录。imports 段未知字段、空白 homeDir/dbPath/config 路径会明确报错;读取配置的权限或 IO 错误与 JSON 语法错误分开报告。记忆正文默认不写日志。二期增加基于规则的秘密信息检测,默认拒绝匹配的凭据,也可配置正文/metadata 脱敏;这不是完整 DLP,调用方仍应避免写入秘密。内置规则只豁免完整的 [REDACTED] 占位值;带真实值后缀或相邻凭据仍会拒绝,自定义规则仍生效。脱敏按引号边界处理,保留有效 JSON 的外层结构、排版和未改动的数值。Provider Key 通过环境变量读取,不存数据库。
开发与验证
pnpm install --frozen-lockfile
pnpm typecheck
pnpm build
pnpm test
pnpm test:smoke测试使用 Node 自带 test runner 和临时 SQLite,包含真实 SDK 客户端握手与调用、四进程并发、迁移备份/回滚、范围隔离、TTL、删除恢复、文件安全与导入导出。contract 测试运行已构建的 dist,测试前必须 build。
.github/workflows/ci.yml 提供 Ubuntu/Windows Node 24 矩阵及 release-gate 汇总门禁,在 push、pull request 或手动触发时运行;仓库管理员需将该检查设为必需状态。源码仓库为 lixia3987-netizen/agent-memory-mcp,执行结果见 GitHub Actions。当前未发布 npm 包。
架构按 MCP → service → repository interface → SQLite 分层。Importer 支持版本检测和代码注册;EmbeddingProvider/LlmProvider 可替换,内置 OpenAI-compatible HTTP 实现。模型调用在事务之外,持久化时检查正文版本。详细状态、已知限制和后续验证见 IMPLEMENTATION_STATUS.md。原始规格保存在 REQUIREMENTS.md 和 ARCHITECTURE.md。
实现参考:官方 MCP TypeScript SDK 文档、Node.js SQLite 文档、SQLite FTS5 文档。本次依赖已通过 pnpm-lock.yaml 锁定,构建使用 TypeScript 5.9.3。
Available Tools
27 toolsentity_addC
Add an entity with aliases and attributes in an exact scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | Other | |
| aliases | No | ||
| project | No | ||
| namespace | No | ||
| attributes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Aside from the annotations (not readOnly, not destructive), the description provides no behavioral details such as whether adding an existing name errors, whether scope is required, how IDs are assigned, or what the response contains. The description adds little beyond the schema annotations.
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 a single compact sentence and is not padded. It loses a point only because 'exact scope' is vague and the sentence does not carry enough useful 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 mutating creation tool with six parameters and no output schema, the description omits key context: whether the operation is idempotent, what uniqueness rules apply, how scope is determined, and what success/failure looks like. It is not complete enough for reliable autonomous use.
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 and six parameters, the description only hints at aliases, attributes, and scope. It does not explain namespace, project nullability, uniqueness constraints, or default type behavior, so parameter semantics are mostly underspecified.
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 identifies the action ('Add') and resource ('entity'), and mentions aliases, attributes, and scope. It distinguishes from related tools like entity_get/entity_update, though 'exact scope' is somewhat vague.
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 guidance is given about when to use entity_add versus sibling tools such as entity_update or memory_add. An agent must infer that entity_add is for creating new entities rather than modifying or searching existing ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_getCRead-onlyIdempotent
Get an entity and aliases in the selected scope.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| namespace | No | ||
| include_deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and non-destructive behavior, and the description's 'Get' wording is consistent with those. The description adds only that aliases are included in the result, but does not disclose anything else about behavior such as error cases or scope resolution.
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 a single sentence with no filler, and the primary action is front-loaded. It is concise but sacrifices enough parameter detail that it is not maximally useful.
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 four parameters, no schema descriptions, and many similar sibling tools, the description is too terse to give an agent enough context for correct invocation. It does not explain the meaning of 'selected scope', the optional parameters, or how this tool relates to entity_search and memory_get.
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%, and the description does not compensate by explaining the role of 'id', 'project', 'namespace', or 'include_deleted'. 'Selected scope' is the only vague nod to project/namespace parameters, but it does not map clearly to the actual parameters.
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 names the action ('Get') and the resource ('entity and aliases') and references a 'selected scope', which makes the basic purpose clear. It is less explicit about whether this is a direct ID lookup versus a search, but the required 'id' parameter helps distinguish it from tools like entity_search.
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 does not say when to prefer entity_get over sibling tools such as entity_search, memory_get, or entity_link. It also does not explain what 'selected scope' means in terms of project/namespace usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_linkB
Link/unlink a memory and entity in the same scope for graph-assisted retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | mentions | |
| unlink | No | ||
| project | No | ||
| entity_id | Yes | ||
| memory_id | Yes | ||
| namespace | No | ||
| confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool can link or unlink, which aligns with the readOnlyHint=false annotation. However, it does not explain side effects, idempotency, whether unlink is destructive, or any permissions/namespace implications. The annotations provide some transparency, but the description adds little beyond the basic operation.
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 a single focused sentence that communicates the primary action and purpose without filler. It is concise and well-structured for a tool description.
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 seven parameters, no output schema, and no parameter descriptions, yet the description only addresses the core linking action. It omits return behavior, parameter semantics, and edge cases such as unlink behavior or scope handling. The description is too sparse to fully support an agent in using 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?
Only memory_id and entity_id are indirectly explained by the description; role, unlink, project, namespace, and confidence are not described at all. The schema names and types hint at meanings, but with 0% schema description coverage the description fails to clarify important parameters like role and confidence. This makes correct invocation harder than necessary.
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 ('Link/unlink') and the resources involved ('memory and entity'), which distinguishes it from entity-only or memory-only tools. The phrase 'for graph-assisted retrieval' adds context about why this link matters. It could be slightly more explicit about creating or removing a graph edge, but the core purpose is understandable.
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 gives no explicit guidance on when to use this tool versus alternatives like relation_add or memory_update. It mentions graph-assisted retrieval but does not explain when linking is preferable or what scenarios require it. The 'same scope' constraint is mentioned but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_searchCRead-onlyIdempotent
Search entity names/aliases in one exact scope.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| query | No | ||
| offset | No | ||
| project | No | ||
| namespace | No | ||
| include_deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent behavior. The description adds minimal behavioral context by mentioning 'exact scope' but does not explain side effects, return format, or pagination behavior, which would be valuable beyond the annotations.
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 a single concise sentence with no redundant words. It efficiently conveys the core purpose without unnecessary elaboration.
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 tool has 7 parameters and no output schema, the description is severely incomplete. It does not explain what 'exact scope' means, how parameters interact, what results look like, or any edge cases. The agent would need to infer or test extensively.
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 7 parameters with 0% description coverage, and the description does not explain any of them. The meaning of 'query', 'limit', 'offset', 'include_deleted', 'type', 'project', and 'namespace' is entirely unspecified, leaving the agent without critical usage 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 the verb 'Search' and the resource 'entity names/aliases', making the primary purpose obvious. However, 'one exact scope' is vague and does not specify what scope means (e.g., namespace, project), slightly reducing clarity.
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 no guidance on when to use this tool versus alternatives like memory_search or relation_search. It does not mention specific conditions or exclusions, leaving the agent to infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entity_updateA
Update entity fields, aliases, or set updates.deleted to soft-delete/restore.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| updates | Yes | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals the soft-delete/restore behavior via the deleted flag, adding context beyond the annotations. However, it does not disclose whether updates are merged or replaced, or mention side effects like validation or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly conveys the tool's purpose without unnecessary detail.
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 tool's simplicity, the description covers the core update behavior but lacks information about return values, partial vs. full updates, and the meaning of project/namespace in context. These gaps could lead to ambiguity 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 description partially explains the 'updates' parameter by mentioning fields, aliases, and deleted, but does not clarify the roles of 'id', 'project', or 'namespace'. Schema coverage is low, but the description adds meaning to the most important update fields.
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 updates entity fields, aliases, or the deleted flag for soft-delete/restore, distinguishing it from sibling tools like entity_add or entity_get.
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 such as entity_add or entity_update (though entity_update is unique). It does not mention prerequisites or scenarios where this should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_neighborsARead-onlyIdempotent
Bounded BFS up to depth 3 with node/edge limits and temporal filters; reports truncation.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| project | No | ||
| direction | No | both | |
| entity_id | Yes | ||
| max_depth | No | ||
| max_nodes | No | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions reporting truncation, which is a concrete behavioral detail. Combined with annotations (readOnlyHint, idempotentHint, destructiveHint), it provides good transparency about side effects and outcome reporting. However, it does not explain edge cases like empty results or error handling.
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 a single, compact sentence with no superfluous words. It front-loads the core behavior (bounded BFS) and then specifies constraints and reporting, making it optimally concise yet informative.
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 graph traversal tool, the description covers key aspects: traversal type, depth bound, limits, temporal filtering, and truncation reporting. It does not specify the exact output format (e.g., whether nodes, edges, or both are returned), but given the simplicity and common patterns, this is a minor gap.
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%, and the description does not clarify parameter meanings. While names like entity_id, max_depth, and max_nodes are self-explanatory, others like project, namespace, and at are ambiguous without elaboration. The tool description fails to compensate for the lack of schema documentation.
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 performs a bounded BFS up to depth 3 with node/edge limits and temporal filters, and reports truncation. This unambiguously conveys its primary function of traversing graph neighbors, distinguishing it from sibling tools like graph_path which focus on pathfinding.
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 does not explicitly state when to use this tool versus alternatives (e.g., graph_path or memory_search). While the name and behavior imply use for neighbor exploration with constraints, there is no direct guidance on selection criteria, leaving some inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_pathBRead-onlyIdempotent
Find a bounded directed/undirected path within one scope and temporal snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| project | No | ||
| direction | No | both | |
| max_depth | No | ||
| max_nodes | No | ||
| namespace | No | ||
| source_entity_id | Yes | ||
| target_entity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent behavior. The description adds no further behavioral details such as side effects, authentication, or rate limits, so it does not go beyond the annotations.
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 a single, focused sentence with no redundancy or filler. It conveys the core functionality efficiently without unnecessary detail.
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 provides high-level purpose but omits critical context such as parameter interpretations, expected output format, and edge cases (e.g., what happens when no path exists or when max_nodes is reached). Given the complexity of 8 parameters, this level of detail is insufficient for confident use.
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 lists 8 parameters but none are described in the tool description. With 0% schema description coverage, the description provides no guidance on the meaning or usage of parameters like 'at', 'project', 'namespace', or 'max_depth', leaving users to infer from names alone.
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: finding a path between two entities within a bounded scope and temporal snapshot. It distinguishes itself from sibling tools like graph_neighbors and memory_search by focusing on pathfinding with directional and depth constraints.
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 for path queries but does not explicitly mention when to prefer this over alternatives like graph_neighbors or memory_search. It lacks explicit guidance on conditions or exclusions, so usage context is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_addCIdempotent
Add durable memory. Exact normalized duplicates in the same scope return the existing ID.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| type | No | ||
| title | No | ||
| source | No | ||
| content | Yes | ||
| project | No | ||
| metadata | No | ||
| namespace | No | ||
| expires_at | No | ||
| importance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by mentioning 'durable' and the normalized duplicate handling. It does not contradict the annotations (idempotentHint=true, readOnlyHint=false). The added details are useful but not extensive.
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 extremely concise, consisting of two short sentences. It avoids unnecessary detail and gets straight to the point. No fluff or 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?
While the tool is simple, the description omits critical context such as what the return value is for new entries (only mentions duplicates), what 'scope' refers to, and whether any side effects occur (e.g., persistence guarantees). Given the complexity of the schema, more context is needed.
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 fails to explain any of the 10 parameters. It only vaguely references 'same scope' without mapping to actual fields like namespace or project. This does not compensate for the lack of schema documentation.
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 primary action: adding durable memory. It also highlights the unique duplicate-handling behavior, which distinguishes it from other memory-related tools. However, it does not explicitly differentiate it from similar operations like memory_import or memory_restore.
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 an idempotent behavior (duplicate returns existing ID) but does not provide explicit guidance on when to choose this tool over alternatives such as memory_import or memory_update. No direct comparison or conditional usage is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_at_timeARead-onlyIdempotent
Query graph facts valid at a specific ISO timestamp; preserves superseded history.
| Name | Required | Description | Default |
|---|---|---|---|
| at | Yes | ||
| limit | No | ||
| offset | No | ||
| project | No | ||
| namespace | No | ||
| predicate | No | ||
| include_stale | No | ||
| include_deleted | No | ||
| include_inactive | No | ||
| source_entity_id | No | ||
| source_memory_id | No | ||
| target_entity_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds that the tool preserves superseded history, implying it returns historical versions of facts, and filters by a timestamp. This goes beyond the annotations but does not detail default inclusion of stale/deleted/inactive records or pagination behavior.
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 a single, focused sentence that immediately conveys the core action and key behavior. It is concise, front-loaded, and free of unnecessary details or repetition.
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 provides the essential purpose but omits critical contextual details like the default return set (e.g., whether stale or deleted facts are included by default) and the exact output format. Given the tool's complexity (12 parameters, temporal filtering), a bit more context would help an agent use it correctly, though the core behavior is clear.
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 12 parameters with zero description coverage, and the tool description does not explain any of them. While parameter names like 'limit', 'offset', and 'at' are somewhat self-explanatory, ambiguous flags such as 'include_stale', 'include_deleted', and 'include_inactive' receive no clarification, leaving the agent to guess their meaning or defaults.
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 that the tool queries graph facts valid at a specific ISO timestamp and preserves superseded history, which distinguishes it from other memory query tools that return current facts. The verb 'query' and the specific temporal filtering make the purpose 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 does not explicitly state when to use this tool versus alternatives like memory_search or memory_get. It implies temporal usage via 'specific ISO timestamp' and 'preserves superseded history,' but lacks direct guidance on scenarios or trade-offs (e.g., performance, current vs. historical queries).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_deleteBIdempotent
Soft-delete a memory in the selected scope. Restore is available through the maintenance CLI.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| namespace | No | ||
| include_deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations indicate idempotent and non-destructive, the description clarifies it is a soft-delete and mentions that restore is available via maintenance CLI, adding useful behavioral context beyond annotations.
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?
Short, single-sentence description with no unnecessary fluff.
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 fails to provide enough context for correct usage, such as what 'selected scope' means, which parameters are needed, and what happens to linked data. The restore note helps but doesn't compensate for missing parameter explanations.
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 description does not explain any of the four parameters (id, project, namespace, include_deleted). 'Selected scope' is vague and doesn't map to parameters.
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 soft-deletes a memory, with a specific verb and resource. Also mentions restore via maintenance CLI, providing useful context.
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 over alternatives like memory_update or memory_remove. The mention of restore is about recovery, not about usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_enrichC
Run/get/enqueue optional validated LLM suggestions. action:apply explicitly materializes suggested graph facts without overwriting original memory fields.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| action | No | run | |
| project | No | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate it is not read-only but not destructive. The description only discloses behavior for the apply action (materializes without overwriting). It does not explain side effects of run, get, or enqueue, leaving the agent unsure whether these mutate state. With no annotation detail beyond false flags, the description carries the burden and fails to cover the action variants.
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?
Two sentences, no filler, and the most important behavioral detail (apply without overwriting) is placed second. It is appropriately concise, though the first sentence is somewhat dense with four verbs packed together.
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 4 parameters, no output schema, and no parameter descriptions. The description does not explain what each action does, what the id targets, or how 'validated LLM suggestions' are produced or used. It also fails to distinguish from memory_add/memory_update. Given the complexity and lack of structured metadata, the description is insufficient for correct invocation.
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%, so the description must explain parameters. It only adds meaning for the action enum (specifically apply), but does not clarify what id refers to, or the purpose of project/namespace. The main phrase 'run/get/enqueue optional validated LLM suggestions' gives context but not parameter-level semantics. It fails to compensate 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 states the tool operates on optional validated LLM suggestions, with verbs run/get/enqueue/apply. It clarifies that apply materializes graph facts without overwriting, which distinguishes it from direct memory tools like memory_add or memory_update. However, it doesn't explicitly contrast with siblings or define the overall 'enrich' concept beyond suggestion handling.
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 guidance on when to use this tool versus alternatives. It never mentions siblings like memory_update or memory_add, nor does it provide conditions for choosing this over direct memory operations. The only hint is that apply materializes suggestions without overwriting, but there is no explicit when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_exportCRead-onlyIdempotent
Return schemaVersion:1 JSON or lossless Markdown in data. Apply filters to limit size. Does not write arbitrary files.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| tags | No | ||
| type | No | ||
| format | No | json | |
| source | No | ||
| project | No | ||
| namespace | No | ||
| all_projects | No | ||
| created_after | No | ||
| created_before | No | ||
| importance_min | No | ||
| include_deleted | No | ||
| include_expired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds a useful note that it does not write arbitrary files, reinforcing non-destructive behavior, but does not cover other potential side-effects or limitations.
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?
Two short sentences with no redundant wording. Information is efficiently presented.
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 lacks critical context: it does not explain the meaning of the many optional filters, the structure of the returned data beyond format, or the relationship to the memory system. Given the large parameter set and no output schema, this is insufficient for correct use.
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 description gives no explanation of any of the 13 parameters. It only generically says 'Apply filters', which does not help map to specific fields like tag, source, or created_after. With zero schema coverage and no parameter descriptions, the agent has virtually no guidance.
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?
States a specific verb ('Return') and a resource (JSON or Markdown data), distinguishing it as an export tool. However, the phrase 'in data' is vague and the description does not explicitly name the underlying memory store, though it is clear from context.
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?
Mentions applying filters to limit size but provides no guidance on when to use this tool versus alternatives like memory_list or memory_search. No explicit conditions or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_find_duplicatesARead-onlyIdempotent
Suggest duplicates using text and/or cached embedding similarity within one scope. Never modifies memories.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| mode | No | text | |
| limit | No | ||
| project | No | ||
| namespace | No | ||
| threshold | No | ||
| max_candidates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the read-only and non-destructive nature by stating 'Never modifies memories,' which complements the annotations. It does not mention rate limits or permission requirements, but the annotations already cover idempotency and lack of 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 a single, concise sentence that directly states the action and its constraints. It is front-loaded with the primary purpose and avoids unnecessary elaboration.
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 lacks information about return values and parameter usage. Given that there is no output schema, an agent cannot predict the response format, and parameter semantics are undocumented, making the tool incomplete for complex use.
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 defines seven parameters (id, mode, limit, project, namespace, threshold, max_candidates) but the description provides no explanations for any of them. Since schema coverage is 0%, the description fails to compensate, leaving parameter meanings ambiguous.
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 function: suggesting duplicates using text or embedding similarity within a scope. It also explicitly notes that it never modifies memories, which disambiguates its side-effect-free nature.
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 this tool—when you need to find duplicate memories—but it does not explicitly contrast it with alternatives like memory_search or memory_list. However, the unique purpose of duplicate detection is clear enough for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getARead-onlyIdempotent
Get a full memory by ID in the selected scope. Returns expired state; deleted records require include_deleted:true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| namespace | No | ||
| include_deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond the annotations, such as returning expired state and the requirement for include_deleted to access deleted records. This complements the readOnly and idempotent hints.
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 compact and to the point, with two sentences that deliver key information without redundancy or unnecessary detail.
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 absence of an output schema, the description sufficiently covers the essential context: what is retrieved, the scope behavior, and the special case of deleted records. It does not address error handling or return format, but these are not critical for a straightforward get 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 description only implicitly covers 'id' (as the identifier) and 'include_deleted' (as the flag for deleted records). It does not explain 'project' or 'namespace' parameters, leaving their role vague ('selected scope'). Schema coverage is 0%, so the description carries limited parameter meaning.
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 verb 'Get', the resource 'memory by ID', and the scope 'selected scope'. It also distinguishes itself from list/search operations by focusing on a single memory 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?
It specifies the 'selected scope' and the behavior for deleted records ('deleted records require include_deleted:true'), giving clear conditions for use. While it doesn't explicitly name alternatives, the singular retrieval intent is evident from the phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_importADestructive
Import versioned JSON, Markdown, or Claude Code memory from an explicit path (or inline data for JSON/Markdown). Defaults to preview; set dry_run:false to commit. Conflicts: skip/update/copy.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| path | No | ||
| backup | No | ||
| format | Yes | ||
| dry_run | No | ||
| project | No | ||
| conflict | No | skip | |
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently discloses the preview/commit workflow and conflict resolution options, which aligns with the destructiveHint annotation. It adds useful context beyond the schema about default dry-run behavior and potential overwrites via 'update' conflicts.
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 and well-structured in two sentences, covering the core action, input modes, default behavior, and conflict handling without redundant text.
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 tool's moderate complexity and no output schema, the description covers the main behavioral aspects needed to invoke it correctly. It could mention side effects more explicitly, but the dry_run and conflict details provide sufficient operational 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?
The description explains key parameters like path, data, dry_run, conflict, and format, but leaves namespace, project, and backup undefined. Since the schema provides no descriptions and these parameters are relevant for scoping and safety, the coverage is incomplete.
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 imports memory data in specific formats (JSON, Markdown, Claude Code) from a path or inline, and explains the commit/preview behavior. It also distinguishes the action from siblings like memory_export and memory_add by focusing on importing external/versioned 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?
The description explains how to use the tool (path vs inline, dry_run, conflict modes) but does not explicitly state when to prefer this over alternatives such as memory_add or memory_restore. It gives operational guidance but lacks direct comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_listBRead-onlyIdempotent
Browse memories by exact filters, pagination and sort. Multiple tags mean all tags must match.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| sort | No | ||
| tags | No | ||
| type | No | ||
| limit | No | ||
| offset | No | ||
| source | No | ||
| project | No | ||
| namespace | No | ||
| all_projects | No | ||
| created_after | No | ||
| created_before | No | ||
| importance_min | No | ||
| include_deleted | No | ||
| include_expired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful filter-matching semantics, but discloses no additional side-effect information beyond what annotations provide.
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?
Two concise sentences with no fluff. The purpose is front-loaded and the additional tag-matching detail is placed efficiently.
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 15 optional parameters and no output schema, the description lacks output information and detailed parameter semantics. It is not fully complete for confident invocation without additional 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?
The description gives a high-level sense of filters, pagination, sort, and tag AND behavior, but schema description coverage is 0%. With 15 parameters and no individual descriptions, the description only partially compensates for the missing parameter-level guidance.
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 uses a specific verb ('browse'), names the resource ('memories'), and mentions exact filters, pagination, and sort. It does not explicitly differentiate from sibling search/list tools beyond implying exact matching.
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 implicit usage context by describing browsing with filters and sorting, and clarifies multi-tag AND semantics. However, it does not explicitly state when to use this tool versus alternatives like memory_search or memory_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_maintenanceADestructive
Explicit bounded maintenance. Defaults to dry-run. expire/orphans soft-delete; FTS rebuild and vacuum affect the whole DB. Physical purge is CLI-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| limit | No | ||
| action | Yes | ||
| dry_run | No | ||
| project | No | ||
| after_id | No | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by clarifying that expire/orphans perform soft-delete and that physical purge is not available here. It also discloses the dry-run default, making the tool's safety profile transparent.
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 no filler. Key facts are front-loaded: bounded maintenance, dry-run default, soft-delete, whole-DB effects, and CLI-only physical purge. Each 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?
While the description covers the main maintenance actions and safety constraints, it omits details about other parameters, output behavior, or specific use cases for each action. Given the tool's complexity (7 params, 9 enum values), the description provides a good starting point but is not fully 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?
The description explains the meaning of some enum values (expire/orphans soft-delete, FTS rebuild/vacuum whole DB) and the dry_run default, but does not cover parameters like id, limit, project, after_id, or namespace. Schema coverage is 0%, so the description partially compensates but leaves many parameters unexplained.
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 indicates a maintenance tool with specific actions (expire, orphans, FTS rebuild, vacuum, etc.) and notes it is bounded and defaults to dry-run. While 'explicit bounded maintenance' is somewhat abstract, the action list and scope statement make the purpose understandable.
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?
It mentions that expire/orphans soft-delete and that FTS rebuild/vacuum affect the whole DB, and that physical purge is CLI-only, which gives some guidance on when to use this tool vs. alternatives. However, it does not explicitly state scenarios for choosing this over other memory operations or detail prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_mergeADestructive
Preview a merge, then pass proposal_token with dry_run:false to apply. Source records are soft-deleted; original snapshots and provenance are retained.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| content | No | ||
| dry_run | No | ||
| project | No | ||
| namespace | No | ||
| target_id | Yes | ||
| source_ids | Yes | ||
| proposal_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses the destructive nature (soft-deletion of sources) and the retention of snapshots and provenance, aligning with the destructiveHint=true annotation. It also highlights the dry_run safety mechanism.
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 a single, concise sentence that flows logically from preview to apply. It avoids unnecessary detail and effectively conveys 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?
While the two-step process is clear, the description does not specify what the preview returns, how to handle errors or conflicts, or the role of the remaining parameters. This leaves gaps for an agent to invoke the tool effectively, especially without an output schema.
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 lists 8 parameters but the description only clarifies dry_run and proposal_token in the context of the workflow. It leaves target_id/source_ids inferred as the merge targets/sources, and omits any explanation for title, content, project, and namespace. With 0% schema description coverage, parameter semantics are largely undefined.
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 explicitly states the tool merges memory records, with a preview step and an apply step using a proposal token. It is distinct from sibling tools like add, update, delete, and search.
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?
It describes a two-step workflow: preview with dry_run, then apply with proposal_token. It also warns that source records are soft-deleted and originals retained, guiding safe usage. However, it does not compare to alternatives or specify when merge is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_reindexB
Explicitly embed active memories using the configured provider. Optional IDs or bounded batch; unchanged indexes are reused unless force:true.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| force | No | ||
| limit | No | ||
| project | No | ||
| after_id | No | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains meaningful side effects beyond annotations: it explicitly embeds memories, can operate on a bounded batch, and reuses unchanged indexes unless force is true. This adds useful behavioral context, though it omits error conditions, rate limits, or cost implications.
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 a single, compact sentence that packs the core purpose and key behavior without unnecessary words. It is well-structured and easy to parse.
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 six parameters and no output schema, the description does not provide enough context to understand how parameters relate (e.g., after_id vs. limit pagination, namespace vs. project scoping). An agent would likely need external documentation to call this 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?
Schema description coverage is 0%, and the description only vaguely hints at 'Optional IDs or bounded batch'. The roles of limit, after_id, project, namespace, and force are not clearly explained, leaving substantial ambiguity for callers.
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 identifies the tool's action ('Explicitly embed active memories') and resource ('active memories using the configured provider'). It also distinguishes reindexing from plain add/update/search operations by mentioning index reuse and force behavior, though it does not directly name sibling alternatives.
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 gives some usage hints ('Optional IDs or bounded batch', 'unchanged indexes are reused unless force:true') but does not explicitly state when to prefer this tool over memory_add, memory_update, or other sibling tools. The intended invocation scenarios remain largely inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_restoreA
Restore a soft-deleted memory in the selected scope.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| namespace | No | ||
| include_deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the action as restore, implying a state change, consistent with readOnlyHint=false and destructiveHint=false. Does not detail side effects but no contradiction.
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?
Single, clear sentence with no unnecessary words, well-structured for a tool description.
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?
Lacks necessary parameter descriptions and output information, making it incomplete for an agent to use correctly without additional 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?
Description provides no explanation for any of the four parameters (id, project, namespace, include_deleted), leaving their meaning and usage completely unclear.
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 the specific action (restore) and resource (soft-deleted memory), distinguishing it from other memory operations in the sibling 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?
Lacks explicit guidance on when to use this over alternatives, though the purpose is evident. No mention of prerequisites or conditions for restoration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchARead-onlyIdempotent
Search FTS5 with literal AND terms, BM25 and small importance/recency boosts. Deleted and expired memories are excluded by default.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| sort | No | ||
| tags | No | ||
| type | No | ||
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| source | No | ||
| project | No | ||
| namespace | No | ||
| all_projects | No | ||
| created_after | No | ||
| created_before | No | ||
| importance_min | No | ||
| include_deleted | No | ||
| include_expired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide read-only, idempotent, and non-destructive hints. The description adds that deleted and expired memories are excluded by default, which is behavioral information not covered by annotations. This goes beyond the annotation baseline, demonstrating transparency about default behavior.
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 two concise sentences that convey the essential search mechanism and default exclusions. There is no verbosity or irrelevant information, and the structure is clear and to the point.
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 lacks information about the return format or output structure, as there is no output schema. It also does not explain the many filtering parameters or pagination controls. While the search behavior is described, the missing context about what the tool returns and how to utilize the parameters makes it incomplete.
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 16 parameters with 0% coverage from the description. The description does not explain any parameter, such as query, tags, sort, or filters. Given the low coverage, the description fails to compensate by providing any parameter semantics, making it extremely difficult for an agent to use the parameters effectively.
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 that the tool searches using FTS5 with literal AND terms and BM25 ranking, which precisely defines its purpose. It also mentions small importance/recency boosts, providing a specific and unambiguous function. This is sufficient for an agent to understand what the tool does.
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 through its search behavior but does not explicitly compare with alternatives like memory_search_hybrid. It mentions the default exclusion of deleted and expired memories, which gives some guidance on when to use it or adjust parameters, but it lacks a clear 'when to use this tool vs others' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_search_hybridBRead-onlyIdempotent
Lexical, semantic or RRF hybrid search with optional graph context. Provider unavailable or unindexed scope falls back to lexical. Results indicate candidate limits and fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| mode | No | hybrid | |
| sort | No | ||
| tags | No | ||
| type | No | ||
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| source | No | ||
| project | No | ||
| namespace | No | ||
| all_projects | No | ||
| created_after | No | ||
| graph_context | No | ||
| created_before | No | ||
| importance_min | No | ||
| include_deleted | No | ||
| include_expired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the fallback mechanism and mentions that results indicate candidate limits and fallback status, offering useful behavioral context. Annotations already flag readOnly and idempotent, so the added detail about fallback is sufficient for this dimension.
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 brief and to the point, containing only three sentences. It conveys the essential behavior without verbosity, making it easy to parse and consume.
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 complexity of the 18-parameter schema and lack of output schema, the description is highly incomplete. It fails to clarify the meaning of key parameters, expected response structure, or the exact semantics of 'candidate limits' and 'fallback.' This leaves significant contextual gaps 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 description provides no explanation of any of the 18 parameters. Schema coverage is 0%, and the description does not compensate by describing obvious or critical parameters such as query, mode, or filters. This leaves agents with minimal understanding of parameter meanings.
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 identifies this as a hybrid search tool (lexical, semantic, or RRF) with optional graph context, which distinguishes it from sibling search tools like memory_search or entity_search. The core purpose is evident.
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?
It explains the fallback behavior when provider is unavailable or scope is unindexed, which gives some guidance on when the tool might be used. However, it does not explicitly compare to alternative search tools or state preconditions for choosing this hybrid variant over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statsBRead-onlyIdempotent
Scope counts, provider state, and database-wide aggregate latency/error/import metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint, idempotentHint, and destructiveHint annotations already convey that this is a safe, non-mutating operation. The description adds no behavioral details beyond that, but it also does not contradict the annotations.
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 a single concise sentence that covers the main metric categories without extraneous words. It is easy to parse and front-loads the tool's purpose.
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 enumerates the kinds of metrics returned but does not specify the output shape or provider-state details, and there is no output schema. It is enough to attempt a call, especially with no required parameters, but the return format remains underspecified.
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 two optional parameters, project and namespace, are named clearly but the description does not explain how they affect results. With 0% schema description coverage, the text should have compensated by describing filtering or scoping behavior, which it does not.
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 lists the resource's output areas—scope counts, provider state, and aggregate latency/error/import metrics—so the tool's purpose is evident. It is distinct from sibling memory tools by focusing on statistics rather than individual entries or 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?
The description does not state when to call this tool instead of the many sibling tools, nor does it explain whether project/namespace arguments are needed for scoped versus database-wide stats. No alternative or selection guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_updateCDestructive
Update a memory in the selected original scope. Supply changes in updates; moving projects uses updates.project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| updates | Yes | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context about moving projects via updates.project, but does not disclose whether the update is partial or full replacement, what happens to omitted fields, or the destructive overwrite potential hinted by annotations. It neither contradicts the destructiveHint annotation nor meaningfully elaborates on it.
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 very concise and front-loaded with the primary verb and object. Every sentence carries some information, though 'selected original scope' is slightly unclear and could be simplified. It avoids redundancy and unnecessary detail.
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 complex nested updates object and lack of an output schema, the description is too thin. It does not explain partial update semantics, the relationship between top-level project and updates.project, namespace/project scoping, or the destructive nature of overwriting existing fields. The single helpful note about project moves is not enough for a tool of this 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?
With 0% schema description coverage, the description must compensate for parameter meaning, but it only explains updates.project. It leaves id, namespace, top-level project, and most fields inside updates (tags, type, title, source, content, metadata, expires_at, importance) to be inferred from names and schema constraints. This is insufficient for a nested update object.
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 the action (update), the resource (memory), and includes a useful note about moving projects via updates.project. The phrase 'selected original scope' is slightly awkward but does not obscure the core purpose. It is distinguishable from sibling tools like memory_add and memory_delete.
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 minimal guidance on how to supply changes and mentions project moves, but does not say when to use this tool versus alternatives such as memory_add, memory_merge, memory_enrich, or entity_update. There is no mention of when updating is appropriate or what preconditions should exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relation_addB
Add a temporal fact. preserve marks overlapping alternatives as conflicts; parallel allows coexistence; supersede requires an explicit old relation ID.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| valid_to | No | ||
| namespace | No | ||
| predicate | Yes | ||
| attributes | No | ||
| confidence | No | ||
| supersedes | No | ||
| valid_from | No | ||
| source_entity_id | Yes | ||
| source_memory_id | No | ||
| target_entity_id | Yes | ||
| conflict_strategy | No | preserve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the conflict resolution behaviors: preserve marks overlapping alternatives as conflicts, parallel allows coexistence, and supersede requires an explicit old relation ID. This is useful side-effect disclosure beyond the schema, though it does not describe return values or what happens after a conflict is marked.
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 a single focused sentence with no redundant wording. It packs key behavioral information about conflict strategies into a compact form.
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 12-parameter tool with no output schema, the description is too sparse. It omits the temporal validity semantics, namespace/project scoping, confidence meaning, attribute usage, and the response/error behavior, leaving important context unspecified.
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 zero schema description coverage, the description must compensate for parameter meanings, but it only clarifies conflict_strategy and supersedes. Most parameters (valid_from, valid_to, namespace, project, attributes, confidence, source_memory_id) are left to inference from their 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 action ('Add') and the object ('a temporal fact'), and the tool name relation_add reinforces that this creates a relation. It does not explicitly mention 'relation' or contrast with entity_add/memory_add, but the intent is still 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 gives no explicit guidance on when to use relation_add instead of relation_update or relation_search. It does explain the conflict_strategy behaviors, but it stops short of stating use cases or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relation_searchBRead-onlyIdempotent
Query current facts or history with explicit scope, intervals, stale/deleted/inactive filters. Validity uses [valid_from,valid_to).
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | ||
| limit | No | ||
| offset | No | ||
| history | No | ||
| project | No | ||
| namespace | No | ||
| predicate | No | ||
| include_stale | No | ||
| include_deleted | No | ||
| include_inactive | No | ||
| source_entity_id | No | ||
| source_memory_id | No | ||
| target_entity_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful behavior: the validity interval semantics ([valid_from,valid_to)) and the availability of stale/deleted/inactive filters. However, it does not clarify default filtering behavior (e.g., whether stale records are excluded by default) or pagination/return format. It adds some value beyond annotations but lacks depth.
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 two concise sentences with no fluff. It front-loads the primary purpose and immediately adds the key validity interval detail. Every word contributes to understanding the tool's scope and key behavior.
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 tool's complexity (13 parameters, no output schema, no schema descriptions), the description is incomplete. It does not explain parameter semantics, default filter behavior, pagination, or the response format. The mention of validity interval is helpful but not sufficient for an agent to call this tool correctly across all its options.
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%, so the description must compensate for explaining the 13 parameters. It mentions 'scope, intervals, stale/deleted/inactive filters', which loosely maps to parameters like source_entity_id, at, include_stale, etc., but does not explain the meaning of parameters such as 'project', 'namespace', 'predicate', or how 'at' and 'history' work together. The description provides only a high-level overview, insufficient for correct parameter usage.
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 function: querying current facts or history, with filters for scope, intervals, and stale/deleted/inactive states. The verb 'Query' and the resource (facts/relations) are explicit, and it distinguishes from modifying siblings like relation_add/relation_update. However, the term 'facts' is somewhat vague without explicit mention of 'relations', though the tool name clarifies this.
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 no explicit guidance on when to use this tool versus alternatives like entity_search or memory_search. It mentions specific filter capabilities, but does not state exclusions or alternatives. The context of relation searching is implied by the name, but no clear 'use this for X, not Y' guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relation_updateA
Update fact confidence, attributes, status, end time or soft deletion. Superseded intervals cannot be reopened.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No | ||
| updates | Yes | ||
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description conveys that this is a mutating operation and mentions soft deletion and the inability to reopen superseded intervals. It does not disclose side effects like whether partial updates are atomic, what happens if the id is missing, or any additional effects beyond the listed field updates.
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 brief and to the point, with two sentences that list affected fields and state a key constraint. No unnecessary words or redundant details.
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 nested update object and no output schema, the description is somewhat thin. It gives the core intent and a constraint but omits guidance on how to use the required id/updates combination, what namespace/project mean, and what happens on invalid input or after soft deletion.
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 description covers several nested update fields (confidence, attributes, status, valid_to as 'end time', deleted as 'soft deletion'), but it does not explain top-level parameters like id, project, namespace, or the nested source_memory_id. The schema provides names but no semantic descriptions, so the prose adds only partial clarity.
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 operation is an update on a fact/relation, enumerating the fields it affects (confidence, attributes, status, end time, soft deletion). This distinguishes it from add/search siblings, though it does not explicitly say 'relation' or 'fact' in a way that fully disambiguates from memory_update.
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?
It implies use when modifying an existing fact/relation rather than creating one, and the constraint 'Superseded intervals cannot be reopened' gives some context. However, it does not explicitly compare with relation_add or memory_update, nor state prerequisites like the fact must already exist.
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.
27 tool updates
v0.2.1- First observed
entity_add - First observed
entity_get - First observed
entity_link - First observed
entity_search - First observed
entity_update - First observed
graph_neighbors - First observed
graph_path - First observed
memory_add - First observed
memory_at_time - First observed
memory_delete - First observed
memory_enrich - First observed
memory_export - First observed
memory_find_duplicates - First observed
memory_get - First observed
memory_import - First observed
memory_list - First observed
memory_maintenance - First observed
memory_merge - First observed
memory_reindex - First observed
memory_restore - First observed
memory_search - First observed
memory_search_hybrid - First observed
memory_stats - First observed
memory_update - First observed
relation_add - First observed
relation_search - First observed
relation_update
TDQS
Scored across 27 tools
Each tool targets a distinct resource-action pair: memory, entity, relation, graph, or maintenance operations are clearly separated. Even overlapping capabilities like memory_search, memory_search_hybrid, and memory_at_time are differentiated by lexical vs hybrid vs historical graph query semantics.
The dominant pattern is resource_action (memory_add, entity_update, relation_search) with clear prefixes for each subsystem. Minor deviations like memory_at_time, memory_maintenance, and memory_search_hybrid break the strict pattern but are still readable and predictable.
27 tools is above the comfortable range and will likely overload agents browsing the tool surface. The breadth is understandable for a memory/entity/relation/graph system, but the count still feels heavy for practical agent use.
The toolset covers the full lifecycle for memories, entities, and relations, including CRUD, search, import/export, maintenance, and graph traversal. Soft deletion, restore, duplicate handling, merging, enrichment, and temporal queries are all present, leaving no obvious dead ends.
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
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent memory for AI agents — log and recall conversation context over MCP.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.11Apache 2.0
- AlicenseNot gradedqualityCmaintenanceProvides a local, persistent long-term memory service for MCP-compatible AI agents, enabling them to store, search, and recall information across sessions.1GPL 3.0
- AlicenseNot gradedqualityCmaintenanceMCP server for zero-config, traceable long-term memory using SQLite, enabling agents to store, search, trace, and monitor memory with tools like memory_store, memory_search, and memory_health.MIT
- AlicenseAqualityBmaintenanceA long-term memory MCP server for AI agents that stores memories (facts, decisions, etc.) in a single SQLite database with hybrid search and full edit history, ensuring consistency across sessions.24MIT