Skip to main content
Glama
bubua12

memos-mcp-server

by bubua12

memos-mcp-server

让 AI 助手(Claude Code、Claude Desktop、Cursor、Cherry Studio 等任意 MCP 客户端)通过 个人访问令牌(PAT) 读写你的 Memos 笔记。

  • 面向任务的工具:用关键词 / 标签 / 时间范围("上周"、7d、2026-09)检索,而不是手写 CEL 表达式;精确编辑(追加、替换片段)不必重写整条 memo;待办清单汇总与勾选;标签批量重命名。

  • 本地能力:上传本地文件或网页 URL 为附件、把附件存到本地、导出为 Markdown(带 YAML front matter,可直接放进 Obsidian)或官方 ZIP 备份。

  • 模型能"看"附件:图片附件以图片内容返回(默认 ≤600px 预览,省 token),文本附件直接返回文本。

  • Prompts 与 Resources:daily-review、weekly-report、tidy-tags 三个斜杠命令;每条 memo 也是一个可 @ 引用的资源 memos://memos/<id>。

  • 安全开关:只读模式、按名禁用工具、限制可访问的本地目录;删除类工具带 destructiveHint,客户端会要求确认。

  • 支持 stdio(本地,默认)和 Streamable HTTP(部署在服务器上,每个请求携带自己的 PAT,天然多用户)。

基于 Memos v0.31.0 的 API 开发,并在 v0.31.0 实例上做了端到端测试。更早的版本(没有 Spaces / Views 的版本)不受支持。

快速开始

1. 创建访问令牌

Memos → 设置 → 访问令牌 → 创建。令牌只显示一次,形如 memos_pat_...。建议为 MCP 单独建一个令牌,便于随时吊销。

2. 构建

git clone https://github.com/bubua12/memos-mcp-server.git
cd memos-mcp-server
npm install
npm run build

3. 接入客户端

Claude Code

claude mcp add memos --scope user -e MEMOS_URL=https://memos.example.com -e MEMOS_TOKEN=memos_pat_xxx -- node /path/to/memos-mcp-server/dist/index.js

Claude Desktop / Cursor / Cherry Studio 等(JSON 配置)

{
  "mcpServers": {
    "memos": {
      "command": "node",
      "args": ["/path/to/memos-mcp-server/dist/index.js"],
      "env": {
        "MEMOS_URL": "https://memos.example.com",
        "MEMOS_TOKEN": "memos_pat_xxx",
        "TZ": "Asia/Shanghai"
      }
    }
  }
}

调试可以用 MCP Inspector:MEMOS_URL=... MEMOS_TOKEN=... npm run inspect。

Related MCP server: Memos MCP Server

工具

工具

作用

修改 Memos

get_overview

一次拿到账号、实例版本、统计、写作连续天数、热门标签、Spaces、已保存视图

search_memos

关键词(支持 "短语")、标签(all/any,父标签匹配子标签)、时间范围、置顶、可见性、属性(有待办 / 链接 / 代码 / 位置)、Space、已保存视图、原始 CEL;分页;可返回全文

get_memo

单条全文 + 元数据、附件、双向链接、评论

list_todos

跨 memo 汇总 - [ ] 待办,按 memo 分组并编号

list_tags

标签及数量

list_attachments / read_attachment

列附件;读取附件(图片返回可见图片,文本返回内容)

download_attachment

把附件原文件存到本地(默认不覆盖已有文件,仅 stdio)

export_memos

导出为 Markdown 文件夹(可按条件筛选、下载附件)或官方 ZIP(仅 stdio)

create_memo

新建(可附加标签、置顶、放进 Space、回填创建时间、上传本地文件、关联其它 memo)

✓

update_memo

改可见性、置顶、归档/恢复、Space、创建时间,或整体替换内容

✓

edit_memo_content

追加 / 前插 / 精确替换片段

✓

set_task_status

按编号或文字勾选/取消待办

✓

add_comment

评论(默认沿用原 memo 的可见性和 Space)

✓

link_memos

增加 / 移除 / 设置 memo 之间的引用关系

✓

share_memo

生成免登录分享链接,可设置过期天数

✓

rename_tag

全量重命名标签(含子标签、跳过代码块和 URL、保留"更新时间"),默认只预览

✓

upload_attachment

上传本地文件 / URL / 文本为附件,可直接挂到 memo

✓

delete_memo / delete_attachment

永久删除(会提示优先归档)

✓

Prompts:daily-review(某天回顾)、weekly-report(周报)、tidy-tags(标签整理方案,确认后调用 rename_tag)。 Resources:memos://memos/{id},列出最近更新的 50 条。

时间参数支持:today、yesterday、this week、last week、this month、last month、this year、2026、2026-09、2026-09-28、2026-09-28 14:30、ISO 时间,以及相对量 30min、24h、7d、2w、3mo、1y。日期按进程时区解释,可用 TZ 环境变量指定。

配置

环境变量

命令行

说明

MEMOS_URL

--url

实例地址,如 https://memos.example.com(结尾的 /api/v1 会被忽略)

MEMOS_TOKEN

--token

个人访问令牌。优先用环境变量,命令行参数会被本机其它进程看到

MEMOS_TOKEN_FILE

--token-file

从文件读取令牌(适合 Docker secrets)

MEMOS_READ_ONLY

--read-only

true 时只注册不会修改 Memos 的工具

MEMOS_DISABLED_TOOLS

--disable-tools

逗号分隔,隐藏指定工具,如 delete_memo,delete_attachment

MEMOS_DEFAULT_VISIBILITY

--default-visibility

新 memo 默认可见性;不设置时沿用你在 Memos 偏好设置里的默认值

MEMOS_FILE_ROOTS

--file-roots

逗号分隔的目录白名单,限制上传/下载/导出能访问的本地路径

MEMOS_TIMEOUT_MS

--timeout

请求超时,默认 30000

MEMOS_MCP_TRANSPORT

--transport

stdio(默认)或 http

MEMOS_MCP_HOST / MEMOS_MCP_PORT

--host / --port

HTTP 监听地址,默认 127.0.0.1:8787

HTTP 模式

node dist/index.js --transport http --port 8787   # MCP 端点:http://127.0.0.1:8787/mcp,健康检查:/healthz
claude mcp add --transport http memos http://127.0.0.1:8787/mcp --header "Authorization: Bearer memos_pat_xxx"
  • 每个请求用自己的 Authorization: Bearer <PAT> 访问 Memos,服务端不需要保存令牌,多人可共用一个部署。

  • 只有监听回环地址时,才会在请求未带令牌的情况下退回使用 MEMOS_TOKEN;监听 0.0.0.0 等地址时,未带令牌的请求一律 401。

  • 回环地址上启用 Host/Origin 校验(防 DNS rebinding),其它地址拒绝跨域的浏览器请求。

  • 会读写本机文件的能力(file_path/url 上传、download_attachment、export_memos)在 HTTP 模式下自动禁用,避免远程调用者读取服务器上的文件。

Docker(镜像默认 HTTP 模式、监听 0.0.0.0:8787,因此客户端必须自带令牌):

docker build -t memos-mcp-server .
docker run -d -p 127.0.0.1:8787:8787 -e MEMOS_URL=https://memos.example.com memos-mcp-server

与 Memos 内置 /mcp 的区别

Memos v0.31 自带一个 /mcp 端点:从 OpenAPI 自动生成的约 36 个工具,1:1 对应 REST 接口,只有 HTTP 传输、只有 tools。它适合"原样调用 API"。本项目则是面向任务的封装:结构化检索参数自动编译成 CEL、紧凑的 Markdown 输出(省上下文)、待办/标签/导出等组合操作、读写本地文件、prompts 与 resources,以及 stdio 支持。两者可以同时使用。

安全提示

  • 令牌拥有与你账号相同的权限(管理员账号还可以读写其他用户的 memo)。为 MCP 单独创建令牌,最好设置过期时间。

  • 上传工具能读取本机文件并存入 Memos。如果会让 AI 处理不可信的内容(网页、邮件等),建议设置 MEMOS_FILE_ROOTS,或用 MEMOS_READ_ONLY / MEMOS_DISABLED_TOOLS 收紧权限。

  • share_memo 生成的链接任何人都能打开,吊销要到 Memos 网页里操作。

开发

npm run dev          # tsx 直接运行源码
npm test             # 单元测试
npm run typecheck

端到端测试需要一个全新的本地 Memos 实例(初始化脚本只允许 localhost):

docker run -d --name memos-e2e -p 127.0.0.1:5231:5230 neosmemo/memos:0.31.0
node scripts/e2e-setup.mjs http://127.0.0.1:5231   # 创建测试管理员和 PAT,写入 .env.e2e
npm run test:e2e                                   # 构建后运行全部工具和 stdio/HTTP 传输测试

目录结构:

src/
  index.ts          CLI 入口(stdio / http)
  config.ts         参数与环境变量
  context.ts        每个令牌的上下文:API 客户端、当前用户/可见性/Space 缓存、本地路径校验
  server.ts         组装 McpServer(工具、resources、prompts、instructions)
  http.ts           Streamable HTTP 传输
  memos/            REST 客户端、类型、资源名解析、CEL 过滤器构造
  lib/              时间解析、Markdown(待办/标签)、输出格式、MIME
  tools/            各组工具
test/unit, test/e2e

Available Tools

20 tools
add_commentComment on memoA

Add a comment to a memo. The comment gets the same visibility (and space) as the memo unless you set one.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL
contentYesComment text in Markdown
visibilityNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare the generic profile (not read-only, not idempotent, not destructive), so the description carries real burden — and it delivers the key non-obvious behavior: the comment inherits the memo's visibility and space by default. It stops short of covering permissions, failure modes, or repetition semantics for a non-idempotent tool.

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

Conciseness4/5

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

Two sentences with the core action front-loaded and the default-behavior caveat second. Nothing is wasted, though the parenthetical '(and space)' is slightly compressed phrasing that takes a moment to parse.

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

Completeness4/5

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

For a 3-parameter, no-output-schema mutation tool, the definition covers the action and the one non-obvious default. It lacks error/edge behavior and does not enumerate what the enum values mean, but an agent has enough to invoke it correctly in the common case.

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

Parameters4/5

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

Schema coverage is 67%, below the high-coverage baseline, and the 'visibility' parameter has an enum with no per-value description. The description compensates by explaining the default inheritance behavior for that parameter, which the schema does not state; memo and content are already well documented in the schema.

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

Purpose4/5

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

States a specific verb and resource ('Add a comment to a memo'), which is unambiguous and clearly separable from sibling write tools like create_memo or share_memo. It does not explicitly differentiate itself from other tools because no sibling also handles comments, so no differentiation is needed.

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

Usage Guidelines3/5

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

The description implies when the tool applies (you have a memo and want to comment) but never states preconditions, when not to use it, or an alternative. The 'unless you set one' clause gestures at a decision the caller makes but is about parameter defaults, not usage routing.

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

create_memoCreate memoA

Create a new memo from Markdown. Tags are written inline as #tag (or pass tags to append them). Task lists use "- [ ] item". Visibility defaults to your Memos preference (usually PRIVATE); memos placed in a space default to SPACE visibility. Local files in attachments are uploaded and attached.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags to append as #tag if not already in the content
spaceNoSpace title or id to place the memo in
pinnedNo
contentYesMemo body in Markdown
link_toNoMemos this memo references
created_atNoBackdate the memo: "2026-09-01 09:30", "yesterday", ISO timestamp
visibilityNoPRIVATE (only you), PROTECTED (signed-in users), PUBLIC, or SPACE (space members)
attachmentsNoLocal file paths to upload, or existing attachment names ("attachments/…")

TDQS

A4.1/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds genuinely useful behavior: visibility default resolution (preference, usually PRIVATE, vs SPACE when placed in a space), inline tag handling, and that local attachment files get uploaded. It stops short of stating auth requirements or what happens on failure.

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

Conciseness4/5

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

Four compact sentences, front-loaded with the core action, then conditional details (tags, task lists, visibility, attachments). Dense but each sentence carries actionable information with no filler.

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

Completeness4/5

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

For an 8-parameter mutation tool with only 1 required parameter, 88% schema coverage, and no output schema, the description supplies the defaulting rules that an agent could not infer from the schema alone. Remaining gaps (auth, error behavior) are minor given the annotation coverage.

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

Parameters4/5

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

Schema coverage is already 88%, so the baseline would be 3, but the description adds semantics the schema does not: tags are appended as #tag only if not already present, and local file paths in attachments are uploaded and attached. That is meaningful clarification beyond the property descriptions.

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

Purpose5/5

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

States a specific verb and resource ('Create a new memo') plus the input format ('from Markdown'), which immediately separates it from update_memo, edit_memo_content, and the read siblings. An agent knows exactly what this tool produces without opening the schema.

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

Usage Guidelines3/5

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

The description implies usage through behavioral defaults (visibility falls back to preference, space placement changes visibility) but never states when to choose this over update_memo or edit_memo_content, nor any prerequisites. Context is implied rather than given.

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

delete_attachmentDelete attachmentA
DestructiveIdempotent

Permanently delete an attachment file (it disappears from its memo). Cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
attachmentYesAttachment name ("attachments/…"), id, or file URL

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real value beyond that: permanence and the side effect that the attachment vanishes from its memo, plus an explicit 'Cannot be undone' warning.

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

Conciseness5/5

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

One compact sentence with zero filler; the permanence warning is front-loaded and every clause carries information.

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

Completeness4/5

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

For a one-parameter destructive tool with annotations covering safety and a fully documented schema, this is nearly complete. Only minor gaps remain, such as error behavior when the attachment does not exist.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the single 'attachment' parameter as name, id, or file URL. The description says nothing about accepted identifier formats, so it adds no meaning over the schema. Baseline 3 is correct.

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

Purpose5/5

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

States a specific verb (delete) and resource (attachment file) and adds the consequence (it disappears from its memo). This implicitly separates it from siblings like delete_memo and download_attachment without ambiguity.

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

Usage Guidelines3/5

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

Usage is only implied – an agent infers this is for removing an attachment. No explicit when-to-use, when-not, or named alternatives (e.g., it never says to use download_attachment first to archive a copy).

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

delete_memoDelete memoA
DestructiveIdempotent

Permanently delete a memo. This cannot be undone. Prefer update_memo with archived=true unless the user explicitly asked to delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is partly covered; the description adds the non-recoverable consequence ('This cannot be undone'), which is value beyond the annotations. It stops short of stating auth/ownership requirements or whether linked comments and attachments are also removed.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and consequence, then the routing advice. No filler or repetition of the title.

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

Completeness4/5

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

For a one-parameter destructive tool with no output schema and annotations covering destructiveness/idempotency, the description supplies the two things an agent most needs: irreversibility and the safer alternative. It leaves unaddressed whether related artifacts (comments, attachments) are cascaded.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'memo' parameter is fully documented in the schema (id, resource name, or URL), so the description adds nothing about the argument. Baseline 3 applies when the schema does the work.

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

Purpose5/5

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

States a specific verb and resource ('Permanently delete a memo') with the scope adverb 'permanently' that separates it from soft-delete siblings. An agent can distinguish it from delete_attachment and archive-style operations without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the preferred alternative ('Prefer update_memo with archived=true') and the condition that overrides it ('unless the user explicitly asked to delete'). This is exactly the when/when-not/alternative guidance that prevents accidental destructive calls.

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

download_attachmentDownload attachmentA
Idempotent

Save the original file of an attachment to a local path. Existing files are not overwritten unless overwrite=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
save_toYesLocal folder (the original file name is kept) or full file path
overwriteNo
attachmentYesAttachment name ("attachments/…"), id, or file URL

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false); the description usefully adds the non-clobbering default ('Existing files are not overwritten unless overwrite=true'), which is the key behavioral risk an agent needs. It stops short of covering permission requirements or error behavior.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and scope, then the one safety-relevant caveat. No wasted words.

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

Completeness3/5

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

Adequate for a simple 3-parameter tool with annotations covering safety, but with no output schema the description never says what is returned (e.g., the saved path) or what happens if the attachment does not exist or the path is invalid.

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

Parameters4/5

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

Schema coverage is 67%: save_to and attachment are documented in the schema, but overwrite carries no schema description. The description compensates by explaining overwrite's effect, so all three parameters have meaning somewhere.

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

Purpose4/5

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

States a specific verb and resource ('Save the original file of an attachment to a local path'), clearly distinguishing the file-download action from siblings like read_attachment and upload_attachment. It does not, however, explicitly name or route against those siblings.

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

Usage Guidelines3/5

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

The purpose implies when to use it (when the raw file is needed locally), but there is no explicit when-to-use guidance, no exclusions, and no reference to alternatives such as read_attachment.

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

edit_memo_contentEdit memo contentA
Destructive

Make a targeted edit without resending the whole memo: append text at the end, prepend it at the start, or replace an exact snippet. append/prepend join with a single newline (start text with "\n" for a blank line). For replace, old_text must match exactly once unless replace_all=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL
textYesText to insert, or the replacement text
old_textNoExact existing text to replace (operation=replace)
operationYes
replace_allNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds real behavioral detail beyond that: the exact single-match precondition for replace and the newline joining semantics for append/prepend. It does not warn that edits are irreversible or describe failure behavior when old_text matches zero or many times, so it falls short of full disclosure.

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

Conciseness5/5

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

Two sentences, front-loaded with the operation list and then the two subtle rules that matter most. No filler or restatement of the name/title.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers the operations, the key preconditions and the joining behavior, which is enough to call it correctly. Minor omissions remain: no mention of permission requirements or what happens when the match fails.

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

Parameters4/5

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

Schema coverage is 60%, so the description has to carry weight and largely does: it explains the append/prepend newline-joining rule (including the leading "\n" blank-line trick), the exact-match-single-occurrence rule for old_text, and the replace_all override. It doesn't tie these rules explicitly to the operation parameter's other two values, but the added semantics go well beyond the bare schema.

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

Purpose5/5

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

States a specific verb (edit) and resource (memo content) and enumerates the three operations in a way that separates it from the sibling update_memo: it is a targeted edit, not a full rewrite. An agent can pick this over update_memo without opening either schema.

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

Usage Guidelines4/5

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

"Make a targeted edit without resending the whole memo" gives clear context for when this tool is the right choice versus a whole-memo update, but it never names update_memo as the alternative nor states an explicit exclusion. The guidance is clear but inferred rather than spelled out.

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

export_memosExport memosA

Back up memos to a local folder. format=markdown writes one .md file per memo (YAML front matter with id, times, tags, visibility; attachments downloaded next to it) and accepts the same filters as search_memos — handy for Obsidian or offline analysis. format=zip saves the official Memos export archive of ALL your memos (filters ignored), which Memos can import again.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive upper time bound, same formats as `from` ("2026-09-30" includes that whole day)
hasNoContent properties that must be present: task_list, incomplete_tasks, link, code, location
fromNoInclusive lower time bound: "2026-09-01", "2026-09", "today", "this week", "last month", "7d", "24h", or an ISO timestamp
tagsNoTags without "#". A parent tag also matches its children ("work" matches #work/project).
viewNoTitle or id of a saved Memos view; its filter is applied too (see get_overview)
queryNoKeywords that must all appear in the content (case-insensitive). Wrap phrases in double quotes.
spaceNoSpace title or id; "none" for memos outside any space. Omit for all.
filterNoAdvanced: raw Memos CEL filter ANDed with the rest. Fields: content, creator, created_ts, updated_ts, pinned, visibility, space, tags, has_task_list, has_link, has_code, has_incomplete_tasks, has_location. Example: `content.matches("^TODO") || size(tags) == 0`
formatNomarkdown
pinnedNoOnly pinned (true) or unpinned (false) memos
tag_modeNoRequire all listed tags (default) or any of themall
output_dirYesLocal folder; a timestamped sub-folder or file is created inside it
time_fieldNoWhether from/to apply to the creation or last-update timecreated
visibilityNo
include_archivedNo
include_attachmentsNo

TDQS

A4.6/5.0
Behavior4/5

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

Discloses behavior well beyond the annotations: one .md file per memo, YAML front matter contents (id, times, tags, visibility), attachments downloaded alongside, a timestamped sub-folder created in output_dir, and the critical gotcha that zip ignores filters and is re-importable. The annotations only say it is not read-only, not destructive, not idempotent, so the description is doing real work here. It could still mention whether the destination is overwritten on repeat runs.

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

Conciseness5/5

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

Two sentences, no filler, front-loaded with the core action and then the format split. Every clause (Obsidian use case, front matter fields, attachment handling, filter behavior) carries information the agent needs.

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

Completeness4/5

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

For a 16-parameter, no-output-schema tool this covers the essential decisions: which format, what gets written, and how filters interact with each format. The remaining gap is the return value — the exact resulting path or manifest is not stated, so the agent must infer how to locate the produced files.

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

Parameters4/5

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

Schema coverage is 75%, and the description adds genuine meaning for the parameters that lack schema text: it gives format semantics (markdown vs zip), notes that filters are ignored in zip mode, and states the filters match search_memos. It does not annotate individual filter params, leaving that to the schema, but the format/output_dir semantics are clarified.

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

Purpose5/5

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

States a specific verb and resource ('Back up memos to a local folder') and then splits the behavior by the two export modes, which makes it immediately distinguishable from search_memos and download_attachment. An agent can tell what this does and how the output differs by format without opening the schema.

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

Usage Guidelines5/5

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

Explicitly routes usage: format=markdown is recommended for Obsidian or offline analysis and shares filters with search_memos, while format=zip produces the official Memos archive for re-import and ignores filters. The when-to-use for each mode, plus the sibling that handles filtered queries, is named directly.

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

get_memoGet memoB
Read-onlyIdempotent

Read one memo in full: Markdown content, metadata (times, visibility, pinned, space, tags, open tasks), attachments, linked memos and comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL
include_commentsNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and non-openWorld, so the safety profile is fully covered. The description adds return-content context (metadata fields, linked items, comments) but no additional behavioral detail such as access requirements or behavior on missing/unauthorized memo ids.

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

Conciseness4/5

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

A single front-loaded sentence that opens with the core action ('Read one memo in full') before enumerating returns. No redundant or filler text.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned content, and annotations cover safety. The main gap is the undocumented include_comments parameter, otherwise the definition is adequate for a simple read tool.

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

Parameters2/5

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

Schema coverage is only 50%: the required 'memo' param is documented in the schema, but 'include_comments' has no description anywhere. The description's mention of 'comments' loosely hints at it but never explains the flag's name, default, or effect, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb+resource ('Read one memo in full') and enumerates exactly what is returned (Markdown content, metadata, attachments, linked memos, comments). The 'one memo' phrasing implicitly separates it from search_memos, but does not name or contrast with the sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: fetching the full detail of a single known memo. There is no explicit statement of when to use this versus search_memos (to find memos) or get_overview, nor any listed preconditions.

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

get_overviewMemos overviewA
Read-onlyIdempotent

Orientation in one call: who you are signed in as, the Memos instance and version, memo/task/tag statistics, recent activity, spaces you belong to, and saved views (with their filters). Call this first when you need context.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds value beyond them by disclosing the breadth of returned content (statistics, spaces, saved-view filters), which tells the agent what kind of side-effect-free aggregate call it is getting.

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

Conciseness5/5

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

One front-loaded clause ("Orientation in one call") followed by the content inventory and a one-sentence usage directive. No filler, no repetition of the title, and the highest-value information (what you get, when to call) leads.

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

Completeness5/5

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

With no parameters and no output schema, the description compensates by enumerating the return content, which is precisely what an agent needs to decide whether this call supplies the context it wants. Nothing required to invoke it correctly is absent.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The schema is an empty object with 100% coverage, and no parameter claims in the description are missing or contradictory.

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

Purpose5/5

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

States a specific function (a single aggregate orientation call) and enumerates exactly what it returns: signed-in identity, instance/version, memo/task/tag statistics, recent activity, spaces, and saved views with filters. This is unmistakably distinct from the CRUD-oriented siblings (get_memo, search_memos, list_tags, etc.), which each target one resource.

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

Usage Guidelines4/5

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

"Call this first when you need context" gives a clear, actionable when-to-use directive, which is strong for a zero-parameter bootstrap tool. It does not state any when-not condition or name an alternative, but there is no real alternative among the siblings for aggregate orientation, so the omission is minor.

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

list_attachmentsList attachmentsA
Read-onlyIdempotent

List attachments of one memo, or search all your attachments by file name, MIME type or unlinked status, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoNoOnly attachments of this memo (other filters are ignored)
typeNoSubstring of the MIME type, e.g. "image/" or "pdf"
limitNo
creatorNoUsername; defaults to you, "*" for every readable attachment
filenameNoSubstring of the file name
page_tokenNo
unlinked_onlyNoOnly uploads not attached to any memo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the genuinely useful ordering behavior ('newest first'), but says nothing about pagination despite a page_token parameter, nor about how the memo scope interacts with result limits.

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

Conciseness5/5

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

A single sentence carries both operating modes, the filter dimensions, and the sort order, with no filler. The primary scoping choice (one memo vs global search) is front-loaded.

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

Completeness4/5

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

For a read-only, idempotent list tool with rich annotations and no output schema, the description covers modes, filters, and ordering adequately. The only real gap is pagination/limit behavior, which an agent would need in order to page through results.

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

Parameters3/5

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

Schema coverage is 71%, with substantive descriptions on memo, type, creator, filename, and unlinked_only. The description reinforces the filterable dimensions (file name, MIME type, unlinked status) but adds no syntax, defaults, or paging detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb (List) and resource (attachments) and spells out the two operating modes: scoping to one memo versus searching all attachments by filename, MIME type, or unlinked status. It also states the default ordering (newest first). It never names a sibling to contrast with, so it stops just short of full sibling differentiation.

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

Usage Guidelines4/5

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

The 'of one memo, or search all your attachments' construction makes the two usage contexts explicit, and the precedence rule (memo wins over other filters) is stated in the schema. There are no exclusions or pointers to alternative tools for fetching attachment content (e.g. download_attachment/read_attachment).

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

list_tagsList tagsA
Read-onlyIdempotent

List the tags used in your active memos with how many memos carry each. Parent tags count their children (#work includes #work/project).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNocount
prefixNoOnly tags starting with this (without "#")

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so credit here is for added value: the description discloses that parent tags aggregate their children's counts (#work includes #work/project), a non-obvious behavioral rule not present in annotations.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action and followed by the one non-obvious rule. Nothing is padded or redundant.

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

Completeness4/5

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

For a simple, read-only tool with no output schema, the description covers what is returned (tags plus per-tag memo counts) and the aggregation rule. Only the parameter layer is left unaddressed.

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

Parameters2/5

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

Schema coverage is only 50%, and the description mentions neither parameter. The 'sort' enum lacks a schema description and gets no help from the description, though 'count'/'name' are fairly self-explanatory; the description fails to compensate for the documentation gap.

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

Purpose5/5

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

States a specific verb and resource (list tags) and narrows the scope to tags on active memos, with the returned payload described (memo counts). This is clearly distinct from the tag-mutating sibling rename_tag and the memo-oriented siblings.

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

Usage Guidelines3/5

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

The purpose implies when you would call it (to survey tags/counts), but there is no explicit when-to-use guidance or mention of alternatives. No exclusions or prerequisites are given, leaving selection to inference.

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

list_todosList to-dosA
Read-onlyIdempotent

Collect task-list items ("- [ ] …") across your memos, grouped by memo, with each task's number for set_task_status. By default shows only open tasks from active memos; narrow with keywords, tags, time range or space.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive upper time bound, same formats as `from` ("2026-09-30" includes that whole day)
fromNoInclusive lower time bound: "2026-09-01", "2026-09", "today", "this week", "last month", "7d", "24h", or an ISO timestamp
tagsNoTags without "#". A parent tag also matches its children ("work" matches #work/project).
viewNoTitle or id of a saved Memos view; its filter is applied too (see get_overview)
queryNoKeywords that must all appear in the content (case-insensitive). Wrap phrases in double quotes.
spaceNoSpace title or id; "none" for memos outside any space. Omit for all.
creatorNoUsername whose memos to search. Defaults to you (or everyone when `space` is set). "*" = every memo you can read.
tag_modeNoRequire all listed tags (default) or any of themall
max_memosNoHow many memos to scan, newest first
time_fieldNoWhether from/to apply to the creation or last-update timecreated
include_doneNoAlso list completed tasks

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low. The description adds genuinely useful behavior not in the structured fields: the default filter (open tasks in active memos) and the by-memo grouping with per-task numbering. Pagination/limits are left to the schema.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and output shape, then defaults and narrowing options. No filler.

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

Completeness4/5

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

For an 11-parameter, no-output-schema read tool, the description covers purpose, defaults and output grouping adequately. Minor gaps remain around pagination/return size, but annotations carry the safety profile and the schema carries the parameters.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter is already documented in the schema itself; the description only gestures at the same filter dimensions and adds no syntax or format detail beyond it. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (collect) and resource (task-list items, i.e. '- [ ] …') scoped across memos, and explains the output grouping and that each task carries a number used by set_task_status. This clearly separates it from search_memos and get_memo.

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

Usage Guidelines4/5

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

Gives concrete defaults ('only open tasks from active memos') and enumerates the narrowing dimensions (keywords, tags, time range, space), plus an implicit hand-off to set_task_status. It lacks an explicit when-not-to-use or a direct comparison to a sibling like search_memos, so it falls just short of a 5.

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

read_attachmentRead attachmentA
Read-onlyIdempotent

Open an attachment: images come back as viewable pictures (a ≤600px preview unless full_size=true), text files as text. To store the original file locally use download_attachment.

ParametersJSON Schema
NameRequiredDescriptionDefault
full_sizeNoReturn the original image instead of the preview
attachmentYesAttachment name ("attachments/…"), id, or file URL

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare this as a safe, read-only, idempotent operation, and the description goes further by disclosing return behavior: images come back as viewable pictures with a ≤600px preview unless full_size=true, while text files come back as text. This is useful context beyond the structured safety hints.

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

Conciseness5/5

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

Two tightly written sentences with zero waste; the core behavior is front-loaded and the sibling routing comes second. Every clause earns its place.

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

Completeness5/5

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

With no output schema, the description still explains what comes back for images and text, which is exactly the information an agent needs to use the tool correctly. Annotations cover the safety profile, so no essential context is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by specifying the ≤600px preview size and how full_size changes that behavior. The attachment parameter's accepted forms are already fully described in the schema.

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

Purpose5/5

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

States a specific verb and resource ('Open an attachment') and directly distinguishes its output from the sibling tool by saying images return as viewable pictures and text as text. An agent can tell it apart from download_attachment without inspecting either schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative ('To store the original file locally use download_attachment'), giving a clear when-to-use-this-vs-that rule. No inference is needed to choose between viewing and storing an attachment.

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

rename_tagRename tagA
Destructive

Rename a tag across all of your memos (active and archived) by rewriting "#old" to "#new" in their content; child tags follow (#old/x → #new/x). Code blocks and URLs are left alone, and each memo keeps its "updated" time. Runs as a preview unless dry_run=false — show the preview to the user first.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesNew tag, without "#"; may be an existing tag to merge into
fromYesExisting tag, without "#"
dry_runNoOnly report what would change (default true)

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, but the description adds substantial context beyond that: it rewrites '#old' to '#new' in memo content, handles child tags, leaves code blocks and URLs untouched, preserves each memo's updated time, and defaults to a preview. This is rich behavioral detail that helps the agent avoid unintended destruction.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core action and scope, then immediately covers the preview constraint. Every clause adds useful information with no filler.

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

Completeness5/5

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

For a 3-parameter mutation tool with no output schema, the description covers scope, side effects, child tags, exclusions, preservation of updated time, and the preview/dry_run workflow. Nothing essential is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents from, to, and dry_run fully, including the 'without #' constraint and dry_run default. The description adds minor clarity by echoing '#old' to '#new' and reinforcing the preview behavior, but offers no new parameter-level semantics beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (rename), resource (tag), and scope (across all memos, active and archived), including child tag behavior. It clearly distinguishes rename_tag from siblings like update_memo or list_tags by focusing solely on tag renaming across content.

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

Usage Guidelines4/5

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

The description gives clear operational guidance: 'Runs as a preview unless dry_run=false — show the preview to the user first.' This tells the agent when and how to invoke safely. It does not name alternative tools for similar tasks, which is why it's not a 5.

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

search_memosSearch memosA
Read-onlyIdempotent

Find memos by keywords, tags, time range, pinned state, visibility, content properties, space or saved view, newest first. By default searches only your own active (non-archived) memos. Each result shows the memo id, time, visibility, tags and a one-line snippet; set full_content=true to get complete Markdown (useful for summarizing). Use next_page_token to page.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive upper time bound, same formats as `from` ("2026-09-30" includes that whole day)
hasNoContent properties that must be present: task_list, incomplete_tasks, link, code, location
fromNoInclusive lower time bound: "2026-09-01", "2026-09", "today", "this week", "last month", "7d", "24h", or an ISO timestamp
sortNonewest
tagsNoTags without "#". A parent tag also matches its children ("work" matches #work/project).
viewNoTitle or id of a saved Memos view; its filter is applied too (see get_overview)
limitNo
queryNoKeywords that must all appear in the content (case-insensitive). Wrap phrases in double quotes.
spaceNoSpace title or id; "none" for memos outside any space. Omit for all.
filterNoAdvanced: raw Memos CEL filter ANDed with the rest. Fields: content, creator, created_ts, updated_ts, pinned, visibility, space, tags, has_task_list, has_link, has_code, has_incomplete_tasks, has_location. Example: `content.matches("^TODO") || size(tags) == 0`
pinnedNoOnly pinned (true) or unpinned (false) memos
creatorNoUsername whose memos to search. Defaults to you (or everyone when `space` is set). "*" = every memo you can read.
archivedNoSearch archived memos instead of active ones
tag_modeNoRequire all listed tags (default) or any of themall
page_tokenNonext_page_token from a previous call with the same criteria
time_fieldNoWhether from/to apply to the creation or last-update timecreated
visibilityNo
full_contentNoReturn full content instead of snippets

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and non-destructive, so the description's value is elsewhere: it discloses the default result scope, the per-result shape (id, time, visibility, tags, one-line snippet), the full_content mode for Markdown, and that results are newest first. Return-shape disclosure is especially valuable because there is no output schema.

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

Conciseness5/5

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

Three dense sentences covering filters, default scope, and result/pagination behavior in roughly seventy words for an 18-parameter tool, with the filter enumeration front-loaded. Nothing is padding; every clause carries information an agent would otherwise have to guess.

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

Completeness4/5

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

For an 18-parameter, zero-required, no-output-schema search tool, the description supplies the two things the schema cannot: what the default query returns and how to page through it. It is not fully complete because it never explains that unpaged results are capped by limit or how the advanced filter interacts, but the safety annotations cover the rest.

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

Parameters3/5

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

Schema description coverage is high (83%), so the baseline is 3; the schema already explains from/to formats, tag parent matching, creator defaults, CEL filter fields and so on. The description adds only a small amount of meaning beyond that (full_content being useful for summarizing, newest-first default ordering) and omits limit, sort, tag_mode, creator and filter entirely.

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

Purpose4/5

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

Opens with a specific verb+resource ('Find memos') and enumerates the filter dimensions (keywords, tags, time range, pinned state, visibility, content properties, space, saved view), which is more than a restatement of the name. It never names a sibling, so an agent must infer the boundary with get_memo/export_memos rather than being told.

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

Usage Guidelines4/5

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

Gives real selection context: default scope is your own active (non-archived) memos, and archived=false/creator/space defaults are implied by the schema. It stops short of stating when NOT to use this tool or pointing at the single-memo and export alternatives, so it is clear context without exclusions.

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

set_task_statusCheck / uncheck taskA
Destructive

Mark one task-list item in a memo as done or not done. Identify it by its number from list_todos/get_memo order (task_index) or by a unique piece of its text (task_text).

ParametersJSON Schema
NameRequiredDescriptionDefault
doneNo
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL
task_textNoText that identifies the task (case-insensitive substring)
task_indexNo1-based task number within the memo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare this a non-read-only, destructive, non-idempotent mutation, so the description only needs to add context. It adds the important scoping fact that exactly one item is affected, but says nothing about what happens on an ambiguous or unmatched task_text, or which behavior wins if both identifiers are passed. No contradiction with 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.

Conciseness5/5

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

Two tight sentences, front-loaded with the action and immediately followed by the addressing rules. Every clause carries information the agent needs; no filler or restatement of the title.

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

Completeness4/5

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

For a simple 4-parameter toggle with no output schema and annotations that already carry the safety profile, the description covers the essentials: what changes, how many items, and how to identify the target. The remaining gap is collision behavior when both task_index and task_text are provided, or when task_text matches multiple items.

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

Parameters4/5

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

Schema coverage is 75%, so the baseline is a 3; the description earns more by clarifying that task_index follows the ordering returned by list_todos/get_memo and that task_text must be a unique fragment of the item's text. It still omits any mention of the `done` flag's default or the memo parameter's accepted id forms, which the schema already covers.

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

Purpose5/5

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

States a specific verb and resource with scope: "Mark one task-list item in a memo as done or not done." The word "one" and "task-list item" distinguish it from sibling mutators like update_memo or edit_memo_content, and it names list_todos as the source of the identifiers, so an agent can place it immediately.

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

Usage Guidelines4/5

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

It gives the two alternative addressing modes (task_index from list_todos/get_memo order, or task_text) and implicitly tells the agent to obtain indices from those listing tools first. It does not state what to do when neither identifier is supplied, nor whether one mode takes precedence over the other.

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

share_memoCreate share linkA

Create a secret share link that lets anyone with the URL read the memo without signing in. Optionally make it expire. Revoke links in the Memos web UI.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL
expires_in_daysNoLink lifetime in days; omit for a link that never expires

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (write, non-destructive, non-idempotent, not open-world). The description adds genuinely useful context beyond that: the link grants anonymous read access, it can be made to expire or never expire, and revocation is only possible through the web UI. It stops short of describing the returned value or repeat-call behavior.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and its access implication. No filler, and the revocation caveat is placed where an agent will see it before calling.

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

Completeness4/5

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

For a two-parameter mutation tool with annotated safety hints, the description covers access semantics, expiry, and the revocation path. The one omission is the return value (presumably the share URL) — with no output schema, that would have been worth stating explicitly.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in the schema. The description only restates the optional-expiry idea without adding format guidance beyond what the schema provides; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Create a secret share link') and immediately qualifies the effect: anyone with the URL can read the memo without signing in. That distinguishes it cleanly from the read/write siblings like get_memo or update_memo.

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

Usage Guidelines4/5

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

Gives clear operating context — optional expiry and the fact that revocation happens in the Memos web UI, not here. It does not explicitly say when to prefer this over another approach, but no sibling tool overlaps, so the routing risk is low.

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

update_memoUpdate memoA
Destructive

Change memo properties — visibility, pinned, archived, space, creation time — and/or replace the ENTIRE content. For small text changes prefer edit_memo_content so the rest of the memo is not rewritten. Only the fields you pass are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoYesMemo id ("VMbe4zNJ…"), resource name ("memos/VMbe4zNJ…") or web URL
spaceNoMove to this space (title or id), or "none" to take it out of its space
pinnedNo
contentNoNew full Markdown content (replaces everything)
archivedNotrue archives the memo (hidden from the main list, reversible); false restores it
created_atNoNew creation time, e.g. "2026-09-01 09:30"
visibilityNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is known. The description adds value beyond them by clarifying that content replaces the ENTIRE memo (the actual destructive act) and that unspecified fields are left untouched, which is non-obvious for a PATCH-style update. It does not mention auth/permission requirements or whether the operation is reversible beyond archive.

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

Conciseness5/5

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

Three short sentences, front-loaded with the mutation scope, followed by the alternative-tool routing and the partial-update rule. No filler, every sentence carries distinct information.

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

Completeness4/5

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

No output schema exists and there are 7 parameters, but the description covers what the tool mutates, how partial updates behave, and when to prefer a sibling. The gaps are minor (no note on permission requirements or return shape), and annotations carry the destructive/idempotency profile.

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

Parameters4/5

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

Schema description coverage is 71% and the schema already documents most fields (content replaces everything, 'none' removed from space, archived is reversible). The description reinforces the partial-update contract and highlights the full-replacement semantics of content, adding meaning to the destructive content parameter. It doesn't add syntax detail for created_at or the visibility enum, which is fine since those are schema-documented.

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

Purpose5/5

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

States a specific verb (change/update) plus the exact resource (memo) and enumerates the mutation surface: visibility, pinned, archived, space, creation time, and full content replacement. It explicitly distinguishes itself from edit_memo_content, so an agent can route without opening either schema.

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

Usage Guidelines5/5

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

Names the alternative tool (edit_memo_content) and the condition that selects it ('For small text changes prefer edit_memo_content so the rest of the memo is not rewritten'). It also sets the partial-update expectation ('Only the fields you pass are changed'), which prevents the most likely misuse.

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

upload_attachmentUpload attachmentA

Upload a local file (file_path), a web URL (url), or inline text as a Memos attachment, optionally attaching it to a memo. Returns the attachment name for use with create_memo.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNohttp(s) URL to download and store
memoNoMemo to attach the file to
textNoText content to store as a file (requires filename)
filenameNoFile name to store; defaults to the source name
file_pathNoLocal file path (~ is expanded)
mime_typeNoMIME type; guessed from the file name when omitted

TDQS

A4.3/5.0
Behavior4/5

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

Annotations cover the safety profile (non-read-only, non-destructive, non-idempotent), and the description adds real behavioral context: it discloses the return value (the attachment name) and that attaching to a memo is optional. It omits auth requirements and any note about remote fetching semantics, which is a minor gap.

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

Conciseness5/5

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

Two tight sentences with zero filler; the source modes and the return value are both front-loaded. Every clause earns its place.

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

Completeness5/5

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

With no output schema, the description compensates by stating what is returned. Six parameters are fully covered by the schema, and the description supplies the workflow link to create_memo, leaving no critical gap for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all six parameters in detail (including the filename requirement for text and MIME guessing). The description only echoes the parameter names as source modes, adding little beyond the schema's own descriptions, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (upload) and resource (Memos attachment), and enumerates the three distinct source modes (file_path, url, text). This clearly distinguishes it from sibling read-side tools like download_attachment and read_attachment.

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

Usage Guidelines4/5

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

The description names the three source modes, which is the primary selection decision an agent faces, and signals a downstream workflow ('for use with create_memo'). It does not explicitly state when *not* to use this tool or contrast it against alternatives such as link_memos.

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

Tool Schema Changelog

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

  1. 20 tool updatesv0.1.0
    • First observedadd_comment
    • First observedcreate_memo
    • First observeddelete_attachment
    • First observeddelete_memo
    • First observeddownload_attachment
    • First observededit_memo_content
    • First observedexport_memos
    • First observedget_memo
    • First observedget_overview
    • First observedlink_memos
    • First observedlist_attachments
    • First observedlist_tags
    • First observedlist_todos
    • First observedread_attachment
    • First observedrename_tag
    • First observedsearch_memos
    • First observedset_task_status
    • First observedshare_memo
    • First observedupdate_memo
    • First observedupload_attachment

TDQS

A3.9/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target distinct resources and actions, and descriptions clarify boundaries (e.g., read_attachment vs download_attachment). The only real overlap is update_memo vs edit_memo_content, which both modify memo content, though the descriptions differentiate their intended use cases.

Naming Consistency5/5

All tool names use consistent snake_case and follow a verb_noun pattern (e.g., create_memo, list_tags, set_task_status). The pattern extends even to multi-word nouns like edit_memo_content and upload_attachment.

Tool Count4/5

20 tools is on the heavy side but each covers a distinct operation across memos, attachments, tags, tasks, comments, links, and sharing. The set feels comprehensive rather than redundant, though slightly over the ideal 3-15 range.

Completeness4/5

Core memo lifecycle (create, read, update, delete, search, edit, share, export) is well covered, along with attachments, tags, and tasks. Minor gaps exist—no tools for deleting or editing comments, revoking share links, or managing spaces/saved views—but these are either delegated to the web UI or less critical for agent workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • Securely search, create, and organize your Mem notes and collections from AI assistants.

  • XMemo is a user-owned Memory OS for AI agents, providing a shared, persistent memory layer across AI assistants, IDEs, CLIs, tools, projects, and sessions. It enables ChatGPT, Claude, Codex, Cursor, Gemini, and other supported AI clients to access authorized long-term context without requiring users to repeatedly explain their preferences, project decisions, or previous work. Beyond basic memory storage and retrieval, XMemo supports semantic search, contextual recall, memory updates and corrections, source attribution, version history, project-scoped context, task tracking, and governed memory lifecycle management. Identity-aware access controls, scoped authorization, and memory isolation help users manage which agents and workflows can access their information. XMemo also provides advanced capabilities for structured knowledge, reusable procedures, and memory consolidation through its broader Memory OS platform. Connect through hosted MCP with OAuth or bearer-token authentication, or integrate directly through REST APIs and supported client tools. Memory remains available across authorized clients and sessions, with user-controlled access, export, and deletion. Website: https://xmemo.dev Documentation: https://xmemo.dev/docs

  • Connect AI to your flomo notes. Search, create, edit notes and manage tags via MCP.

  • Portable AI memory shared across models and harnesses - plain markdown you own.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Memos instances for personal note-taking and knowledge management. Supports creating, searching, updating, and organizing memos with tags, dates, and visibility settings through natural language.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Obsidian vaults for creating, reading, searching, and managing notes, daily notes, TODOs, session reports, and backlinks through both stdio and HTTP/SSE transports.
    10
    3,358 npm
    4
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables to interact with Memos note-taking service, allowing search, creation, retrieval, and updating of notes through natural language.
    4
    5 npm
    4
    -