Skip to main content
Glama
IrisNyx

coweread

by IrisNyx

coweread

微信读书「人机共读」工具层 —— 让 AI 伙伴能真正读同一本书、在同一句话上写下想法。

coweread 是一个不含 LLM 的确定性工具层,把微信读书的「读原文 / 查进度 / 写批注」收成稳定、可复现的接口,供上层 AI(MCP)、程序(REST)与调试(CLI)调用。它不决定想什么、何时读、批注写什么 —— 这些归调用方的模型;它只负责读得到、写得准、不打扰真人

为什么需要它

微信读书的官方能力现状,决定了「AI 陪真人读同一本书」不能只靠现成 API:

  • 官方 Agent API Gateway(i.weread.qq.com/api/agent/gateway)提供搜索/书架/目录/进度/我的想法/热门划线等只读查询,但不提供正文原文,也没有任何写入接口;

  • 网页版有正文,但正文以密文下发、由前端 JS 解密后渲染,无法从 DOM 稳定取到;

  • 要在书里「写想法 / 划线 / 评论」,没有官方开放接口,只能走网页登录态;

  • 打开阅读器会自动上报阅读进度,若由 AI 来翻书,真人进度会被悄悄覆盖。

能力需求

现成吗

coweread 的做法

拿任意章节的明文原文

❌ 官方不给

Playwright 抓解密后的正文 + 字符坐标

把想法/划线挂到正确的句子

❌ 无写接口

原文逐字定位出字符 range 再写

查询进度/想法/热门划线

✅ 官方有

直接走官方网关(稳定优先)

保护真人阅读进度

⚠️ 必须防

幽灵模式:主动拦截进度上报

Related MCP server: EPUB Reader MCP Server

特性

  • 章节明文 + 字符级坐标:未划线的章节也能拿到正文与 data-wr-co 字符索引

  • 写想法 / 章节想法 / 评论 / 划线(增·改·删):自动定位引用文本,abstract 必须在原文中逐字命中才写入,匹配失败即拒绝 —— 绝不硬发错位坐标

  • 查询统一走官方网关:书架、目录、进度、我的想法、热门划线,稳定优先

  • 幽灵模式:阅读会话内按方法拦截进度上报接口,永不覆盖真人进度

  • AI 共读进度与真人进度分离:AI 读到哪一章节独立记录在本地

  • 署名可配置:AI 写的批注默认带署名前缀,COWEREAD_SIGN 可自定义或留空取消

  • 登录态自愈:写入 cookie 过期时自动续期并重试一次,仍失败才提示重新扫码

  • 资源干净:浏览器按需启动、用完即关,章节文本落盘缓存,空闲零占用

  • 三种入口:CLI / MCP(stdio 与 streamable-http)/ REST(FastAPI)

原理 / 架构

三条通道、一个服务层:

通道

实现

用途

鉴权

官方查询

weread/official.py

只读:书架/目录/进度/我的想法/热门划线

官方 Agent API Key(wrk-…)

原文抓取

weread/reader.py + weread/coindex.py

未划线章节明文 + 字符坐标

网页登录态 cookie

写入

weread/client.py

写想法 / 评论 / 划线(官方网关无写能力)

网页登录态 cookie

service.py 把三条通道组装成原子操作(如「抓章节 → 定位 → 写入」),server/mcp.pyserver/api.py 把它暴露给外部。调用方看到的永远是同一套语义,双通道细节被屏蔽。

data-wr-co 坐标系(核心原理)

微信读书网页阅读器把正文每个字符包在带坐标的 span 里:

<span data-wr-co="42">他</span><span data-wr-co="43">人</span>…
  • 坐标是章节内偏移,每章从 0 重新计数;官方划线的 bookmarkId 本身就是 {bookId}_{chapterUid}_{range};

  • 想法/划线上报的 range="start-end" 左闭右开,end = start + 字数;

  • 一个 span 可能含多个字符(常见于标点后跟零宽空格 ),解析必须拆成单字符并跳过零宽字符(Python 的 str.strip() 去不掉 U+200B);

  • 定位算法在字符索引里对引用原文逐字滑窗匹配,命中返回 range,失配返回空 —— 服务层据此拒写。

幽灵模式(保护真人进度)

打开阅读器页面会自动同步阅读进度。coweread 在 Playwright 会话里只按方法拦截 POST /web/book/read 并回假应答(GET 取正文必须放行),这样 AI 翻书不会把真人的进度挪走。这是踩过的坑:若只按 URL 路径拦截,POST 会漏过去,真实覆盖过一次用户进度。AI 自己读到哪,单独存在本地书签文件,与官方进度完全隔离。

登录态与 skey 自愈

写入通道依赖网页登录 cookie(wr_skey),有效期约 3 天且绑定 User-Agent 指纹(保存与重放必须用同一 UA)。检测到过期(-2012)时,coweread 自动开一次官方首页让登录态续期并重试;仍失败才提示重新执行 coweread login 扫码。每次浏览器会话结束都会落盘最新登录态到 state/weread-state.json

坐标系推导、全部接口清单、翻章细节与踩坑记录见 docs/TECHNICAL.md

仓库布局

src/coweread/
  weread/
    official.py    # 官方 Agent Gateway 查询(稳定通道)
    reader.py      # Playwright 正文抓取 + innerHTML hook + 翻章
    coindex.py     # data-wr-co 字符坐标索引 / range 定位
    client.py      # cookie 写通道(想法/评论/划线)
    auth.py        # 扫码登录 + storage_state 持久化
  service.py       # 服务层:三通道组装成原子操作
  server/
    mcp.py         # MCP server(stdio / streamable-http)
    api.py         # REST API(FastAPI)
  cli.py  paths.py
state/             # 登录态、AI 共读书签(gitignore,不入库)
cache/             # 章节文本与坐标缓存(gitignore)
docs/TECHNICAL.md  # 原理与技术细节
tests/

快速开始

需要:Python 3.11+uv(Windows 安装:powershell -c "irm https://astral.sh/uv/install.ps1 | iex")、一个微信读书账号。耗时约 5 分钟。

1. 克隆并安装依赖

git clone https://github.com/IrisNyx/coweread.git
cd coweread
uv sync
uv run playwright install chromium     # 首次安装无头浏览器

2. 申请官方 API Key

前往微信读书官方入口 https://weread.qq.com/r/weread-skills 获取你的 API Key(格式 wrk-xxxx…)。这是腾讯官方渠道;接口与字段约定见官方仓库 Tencent/WeChatReading

只打算「扫码抓原文 + 写批注」的 CLI 用法可以暂时跳过;但书架/目录/进度查询,以及把章节明文与书目、写入关联起来的服务层能力,需要这把 key。

3. 配置环境变量

cp .env.example .env
# 编辑 .env,填入 WEREAD_API_KEY

变量

必填

说明

WEREAD_API_KEY

查询/服务层必需

官方 Agent API Key,wrk- 开头

COWEREAD_SIGN

AI 批注署名前缀,默认 🌕;留空则不加署名

COWEREAD_API_TOKEN

暴露 REST / HTTP MCP 时强烈建议设置;设置后所有请求需带 Authorization: Bearer <token>

COWEREAD_HOME

state/cache/ 所在根目录,默认项目目录

.envstate/cache/ 已在 .gitignore 中——登录 cookie 与 API Key 属于凭据,不要提交、不要外传

4. 扫码登录(首次)

uv run coweread login

弹出浏览器窗口后用微信 App 扫码授权,登录态自动保存到 state/weread-state.json

5. 验证:抓一章节正文

uv run coweread dump-chapter "https://weread.qq.com/web/reader/<encodeId>"

会在 cache/<encodeId>/ 下写出章节 HTML 与 chapter_*.co_index.json(字符坐标索引),并打印明文预览与坐标范围。

使用

CLI

命令

说明

uv run coweread login

扫码登录(默认等 180s,--timeout 可调)

uv run coweread dump-chapter <阅读页URL或encodeId>

抓当前章节明文 + co 索引

… dump-chapter <URL> --chapter "章节标题"

翻到指定章节再抓(--no-headless 可调试观察)

uv run coweread find-range <co_index.json> --text "原文"

在已缓存索引里定位某段原文的 range

uv run coweread mcp

启动 MCP server(stdio)

uv run coweread mcp --http --port 8473 --token XXX

启动 MCP streamable-http,建议带 token

uv run coweread serve --port 8480

启动 REST API

Windows 下可直接双击仓库里的 login.bat / serve.bat(已处理控制台编码)。

MCP(供 AI 调用,17 个工具)

分组

工具

说明

查询

get_shelf / get_toc / get_progress

书架 / 章节目录 / 真实阅读进度(官方通道)

原文

get_chapter_text(book_id, chapter_uid, refresh?)

章节明文 + 坐标索引(缓存优先)

写想法

add_review(book_id, chapter_uid, abstract, content)

引句想法:abstract 逐字摘自原文,自动算 range,匹配失败拒绝

写想法

add_chapter_review(book_id, chapter_uid, content)

章节级想法(挂在整章上,无引句)

评论

list_comments(review_id) / add_comment(review_id, content, reply_comment_id?)

某条想法下的评论;reply_comment_id 为引用式回复

划线

add_bookmark / update_bookmark_style / remove_bookmark

划线增改删;默认 colorStyle=5, style=2(黄波浪)

防重

my_reviews(book_id) / best_bookmarks(book_id, chapter_uid?)

已有想法 / 热门划线,写前防重复、取素材

进度

get_reader_bookmark / set_reader_bookmark

AI 自己的共读进度(本地,与真人进度无关)

进度

resume_reading

上次共读到哪:取最近更新的一本(bookId+章定位),开场直接续读

打包

reading_context(book_id, chapter_uid)

一次打包:进度+书签+明文+已有想法+热门划线(便捷用,不作默认上下文)

划线样式编号(手机端实测):颜色 colorStyle = 1红 / 2紫 / 3蓝 / 4绿 / 5黄(0/6/7 无效);线型 style = 0直线 / 1荧光笔 / 2波浪(3 无效)。

一次典型共读调用序列:

  1. get_shelf → 选中书,拿到 bookId;

  2. get_toc(bookId) → 拿到当前想读章节的 chapterUid;

  3. get_chapter_text(bookId, chapterUid) → 读明文,想批注的句子逐字摘作 abstract;

  4. add_review(bookId, chapterUid, abstract, content) → 想法自动挂在正确句子;

  5. set_reader_bookmark(bookId, chapterUid) → 记住 AI 读到哪(与真人进度分开)。

REST API(17 个能力)

方法

端点

说明

GET

/api/shelf

书架

GET

/api/toc/{book_id}

章节目录

GET

/api/progress/{book_id}

真实阅读进度

GET

/api/chapter/{book_id}/{chapter_uid}?refresh=

章节明文 + 坐标

POST

/api/review

写想法 {bookId, chapterUid, abstract, content, isPrivate?, sign?}

POST

/api/chapter_review

写章节想法

GET

/api/reviews/{book_id}

我的想法

GET

/api/best_bookmarks/{book_id}?chapterUid=

热门划线

GET

/api/comments/{review_id}

想法下的评论

POST

/api/comment

发评论 {reviewId, content, replyCommentId?}

POST

/api/bookmark

划线 {bookId, chapterUid, abstract, colorStyle?, style?}

PATCH

/api/bookmark/{bookmark_id}

改划线样式

DELETE

/api/bookmark/{bookmark_id}

删划线

GET/POST

/api/reader_bookmark

读/记 AI 共读进度

GET

/api/resume_reading

上次共读到哪(最近更新的一本,便于续读)

GET

/api/reading_context/{book_id}/{chapter_uid}

便捷打包

设置 COWEREAD_API_TOKEN 后,请求需带 Authorization: Bearer <token>(否则 401)。示例:

uv run coweread serve --port 8480 &
curl -H "Authorization: Bearer $COWEREAD_API_TOKEN" \
  http://127.0.0.1:8480/api/progress/<book_id>

接入 AI(MCP 客户端配置)

stdio(本机,MCP 客户端以子进程方式运行):

{
  "mcpServers": {
    "coweread": {
      "command": "uv",
      "args": ["run", "coweread", "mcp"],
      "cwd": "/你的/coweread/目录",
      "env": { "WEREAD_API_KEY": "wrk-xxx" }
    }
  }
}

远程接入用 streamable-http:

uv run coweread mcp --http --port 8473 --token 一串随机token

⚠️ HTTP 模式务必配 token:该服务能读写你的微信读书账号,裸奔在可达端口上等于把账号交给访问者。token 只建议通过加密通道/内网传递,不要走明文外发。

已知边界

  • abstract 在一章内出现多次时,写入会挂在第一处;写前建议先 my_reviews / 取上下文核对,避免重复。

  • abstract 必须与原文逐字一致才写(空格、换行也要对得上)。定位失败时 coweread 拒绝写入并返回明确错误,不会硬发错位坐标。

  • 章节文本缓存默认长期有效;书更新版本后缓存会陈旧,需要 refresh=True / --refresh 强刷。

  • MCP 并发调用会各自开浏览器实例(无锁串行化),低并发无碍,但别开太多并行请求。

  • 正文抓取依赖微信读书前端把解密正文注入 #preRenderContent 的机制及目录面板的 DOM 结构,前端改版需要同步适配;失效时会显式报错,不会静默返回错内容。

  • 评论是平铺列表,无嵌套「楼中楼」;reply_comment_id 只是「回复某人」的引用标记。

  • 官方「我的划线」回查不回显 style 字段(只回显 colorStyle)。

  • 写入 cookie 约 3 天过期;单测过、线上以「自动续期重试一次 → 失败才让用户重扫码」兜底,但极低概率仍需人工介入。

  • 各入口的 add_bookmark 默认线型不完全一致(CLI/MCP 默认黄波浪 style=2,REST 默认值不同):想画特定样式请显式传 colorStyle/style

安全与免责

  • 非腾讯官方项目。由作者个人自用需求驱动并开源;请自行遵守微信读书用户协议与官方 Skills 使用条款。建议个人低频自用,涉及网页私有接口与写操作的自动化,风控后果自担。

  • 不要把 state/.envcache/ 里的登录态、API Key、书摘数据提交或发送给任何第三方。

  • 本项目不含 LLM,也不会把你的书摘上传到任何非微信读书的服务。

License

MIT © IrisNyx

官方查询能力基于腾讯 WeChatReading(Apache-2.0)公开的 Agent Skills 接口约定实现。

Available Tools

16 tools
add_bookmarkA

划线:abstract 必须逐字摘自该章原文(自动算 range,匹配失败拒绝划线)。 colorStyle: 1红 2紫 3蓝 4绿 5黄;style: 0直线 1荧光笔 2波浪(3 无效)。默认 5+2 黄波浪。 返回 bookmarkId,改样式/删除时用它。

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNo2
book_idYes
abstractYes
chapter_uidYes
color_styleNo5

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses automatic range calculation, rejection on match failure, invalid style value '3', default values, and return value semantics. This is solid transparency for a creation tool, though it does not mention duplicate-bookmark behavior or idempotency.

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 highly compact: critical constraint first, then enum mappings/defaults, then return-value usage. Every sentence earns its place with no filler or redundancy.

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

Completeness4/5

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

For a 5-parameter tool with no annotations and no schema descriptions, the description covers the essential custom logic, valid values, defaults, and post-return usage. The main gaps are explicit semantics for book_id/chapter_uid and behavior when a duplicate bookmark already exists, but the output schema presumably covers return shape.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does well by explaining abstract's verbatim constraint and enumerating color_style/style numeric meanings and defaults. However, book_id and chapter_uid are left to their self-explanatory names, with no additional context provided.

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

Purpose5/5

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

The description clearly identifies the action as creating a highlight/bookmark tied to a chapter, and specifies the key requirement that abstract must be verbatim. It also distinguishes itself from siblings like update_bookmark_style and remove_bookmark by noting the returned bookmarkId is used for those operations.

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 explains when the tool will reject a request (verbatim match failure) and gives the default style/color behavior. It does not explicitly enumerate when to prefer this over alternatives, but the reference to using the returned bookmarkId for style changes/deletion gives practical routing guidance.

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

add_chapter_reviewB

章节级想法(挂在整章上,无原文引用),content 前自动加 🌕 署名。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
contentYes
chapter_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose one genuinely useful behavioral trait: 'content 前自动加 🌕 署名' (🌕 attribution is automatically prepended to content), which prevents the agent from duplicating the prefix. However, for a mutation tool it says nothing about auth requirements, idempotency, duplicate handling, or side effects beyond the prefix 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?

A single compact sentence with zero filler. The most decision-relevant information (chapter-level scope, no citation, auto-attribution) is front-loaded, and every clause earns its place.

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?

Has an output schema, so return-value documentation is covered. For a simple three-string-parameter create tool, the description is mostly adequate: scope and auto-prefix behavior are disclosed. However, it omits operational details an agent might need, such as whether the chapter must belong to the given book_id or any content constraints, leaving minor gaps for a simple mutation 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 description coverage is 0%, so the description must compensate, but it only indirectly illuminates the content parameter via the auto-prefix note and the chapter-scope context. It adds no meaning for book_id, chapter_uid, or their relationship (e.g., that the chapter must belong to the book). The parameter names are self-evident, but the description fails to bridge the 0% schema 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?

The description clearly identifies a specific action: adding a chapter-level thought/review attached to the whole chapter with no original-text citation. This distinguishes it from sibling review tools like add_review and add_comment. It stops short of 5 because it never states the verb+resource directly (e.g., 'adds a review to a chapter') and relies on characteristic descriptions rather than an explicit statement of 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.

Usage Guidelines3/5

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

Usage context is implied through the parenthetical '挂在整章上,无原文引用' (attached to the whole chapter, no original text citation), which signals when this tool is appropriate versus a citation-based or book-level review. However, no alternatives are named and there is no explicit when-to-use/when-not-to-use guidance, leaving routing decisions to inference.

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

add_commentA

在想法下发评论,content 前自动加 🌕 署名。 reply_comment_id 非空即"回复某条评论"(引用模式;微信读书评论无嵌套楼层)。

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
review_idYes
reply_comment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and it clearly discloses two non-obvious behaviors: content is automatically prefixed with a 🌕 signature, and reply_comment_id triggers quote-mode reply without nested threading. It does not mention side effects or permissions, but these are not likely blockers for a simple comment tool.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the core action, and every clause adds information. The reply_comment_id semantics are compactly placed without excess.

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 low-complexity tool with an output schema, it covers the main action, auto-behavior, and reply mode. The primary missing piece is the meaning/format of review_id and explicit tool-selection guidance, but the description is otherwise sufficient.

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 0%, so the description must compensate. It explains content (auto-prefix) and reply_comment_id (reply/quote mode), but does not explain review_id, which is required. The title 'Review Id' gives only weak signal, leaving a notable 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?

The description clearly states the action and resource: '在想法下发评论' (post a comment under an idea). It distinguishes from sibling tools by targeting comments rather than reviews/chapters, though it does not explicitly name the alternatives.

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?

It provides a concrete condition for the optional parameter: 'reply_comment_id 非空即回复某条评论' (non-empty means reply to a comment), which is useful. However, it gives no explicit guidance on when to choose add_comment over sibling tools such as add_review or list_comments.

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

add_reviewA

写想法:abstract 必须逐字摘自该章原文(自动算 range,匹配失败拒绝写入); content 前会自动加 🌕 署名。章节级想法用 add_chapter_review。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
contentYes
abstractYes
chapter_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It discloses two important behaviors beyond the schema: abstract must be an exact quote and the tool rejects writes on match failure, and content is automatically prefixed with a 🌕 signature. This gives the agent useful expectations for side effects and validation.

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 contain purpose, constraints, side effects, and alternate-tool routing with no filler. The key behavioral constraints are front-loaded, and the sibling reference is a separate efficient sentence.

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 tool with four straightforward parameters and an output schema, the description covers the critical behavioral constraints and alternative routing. It does not spell out book_id and chapter_uid semantics, but their meaning is reasonably inferable from names and the chapter-focused context.

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 0%, so the description must compensate for parameter meaning. It meaningfully clarifies abstract and content, but book_id and chapter_uid are left entirely implicit. The context makes them inferable, but they are not explicitly described.

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 opens with the specific action '写想法' (write a thought) and clearly names the resource being acted on. It also distinguishes itself from the sibling tool by explicitly directing chapter-level thoughts to add_chapter_review, so an agent can tell them apart immediately.

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?

The description gives explicit routing guidance: chapter-level thoughts should use add_chapter_review instead. It also communicates the key condition for use—abstract must be a verbatim quote from the chapter—which tells the agent when this tool is appropriate.

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

best_bookmarksC

热门划线(选句素材;chapter_uid=0 查全书)。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
chapter_uidNo0

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of explaining behavior. It discloses one useful behavior (chapter_uid=0 searches the entire book), but it does not explicitly state that this is a read-only listing, how highlights are ordered/scored, or what '选句素材' implies about the returned content.

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

Conciseness4/5

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

The description is one compact sentence with no filler; the key parameter behavior is placed in a parenthetical. It is economically written, though the parenthetical style makes it feel more like a note than a structured definition.

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?

For a two-parameter tool with an output schema, the core invocation is roughly covered: book_id is required and chapter_uid=0 fetches the whole book. However, the description still omits when the tool should be chosen over sibling tools and leaves the purpose slightly implicit, so it is only minimally complete.

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 description coverage is 0%, so the description must compensate. It partially explains chapter_uid via the 0=whole-book behavior, but book_id is left to the reader and no format or value semantics are given.

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 identifies the tool as returning popular highlights (热门划线) intended as sentence-selection material, which is a specific resource and purpose. It does not use a verb like 'list' or 'fetch', but the resource is clear enough and the 'best'/'热门' framing separates it from review and bookmark tools.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool instead of sibling bookmark/reader tools such as get_reader_bookmark, add_bookmark, or list_comments. The only usage hint is the parenthetical that chapter_uid=0 queries the whole book, which is a parameter behavior, not a decision rule.

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

get_chapter_textA

章节明文 + co 索引(缓存优先;refresh=True 强制重抓)。共读前先读这个。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
refreshNo
chapter_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses cache-first behavior and that refresh=True forces a re-fetch, which is concrete operational guidance. It omits auth/error details, but those are less critical for a read operation.

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?

Extremely compact; every clause adds value: output content, caching behavior, and usage timing. Front-loaded with the primary purpose before operational details.

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

Completeness4/5

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

Given an output schema exists, not detailing return values is acceptable. The description provides enough context for an agent to select and invoke the tool, though 'co index' is left somewhat undefined and the relationship to sibling tools is only implicit.

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 0%, so the description must compensate. It explains the refresh parameter's semantics (cache-first by default, refresh=True forces a new fetch), but book_id and chapter_uid are left to their self-explanatory names without additional detail.

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 action and resource: retrieving chapter plaintext plus a 'co index'. This clearly distinguishes it from TOC, shelf, and progress siblings, though it does not explicitly name an alternative tool.

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

Usage Guidelines4/5

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

Provides an explicit when-to-use instruction: '共读前先读这个' (read this first before co-reading). It gives clear context but does not describe exclusions or alternative tool choices.

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

get_progressA

用户真实阅读进度(只读;AI 共读进度用 get_reader_bookmark,两者严格分开)。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It explicitly declares the operation as read-only and clarifies that it returns real user progress, not AI co-reading progress. It does not discuss auth, rate limits, or data freshness, but for a simple read tool with an output schema this is fairly strong 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?

The description is a single compact sentence that front-loads the core purpose, adds the read-only qualifier, and names the alternative tool. Every part earns its place with no redundancy.

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

Completeness5/5

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

The tool has only one required parameter, an output schema, and a clear sibling distinction. The description covers purpose, read-only behavior, and alternative routing, which is complete for a tool of this simplicity.

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 description coverage is 0%, and the description does not explain book_id or how it relates to the progress being fetched. The parameter name is somewhat self-explanatory, but the description adds no meaning beyond the schema's title.

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

Purpose5/5

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

The description clearly identifies the resource as the user's real reading progress, states the operation is read-only, and explicitly distinguishes it from get_reader_bookmark, which covers AI co-reading progress. This fully disambiguates the tool from its closest sibling.

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?

The description explicitly states that AI co-reading progress should use get_reader_bookmark instead and stresses that the two must be kept strictly separate. This provides clear when-to-use and when-not-to-use guidance with the alternative named directly.

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

get_reader_bookmarkA

AI 共读伙伴自己的进度(本地,与微信读书真实进度无关);不带参返回全部书目。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral load. It discloses that the data is local and independent from WeChat Reading progress, and that the no-parameter call returns all titles. It does not explicitly state read-only/no side effects, permissions, or error behavior, but the 'get/return' language strongly implies a query operation. This adds meaningful context but leaves the safety profile implicit.

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, front-loaded with purpose and scope, then the invocation note. Every clause earns its place; no filler or repetition.

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

Completeness3/5

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

The output schema exists, so return-value documentation is already available. The description covers the primary no-parameter call path and the local nature of the data. The main gap is the effect of book_id and the relationship to sibling tools, which an agent would need to infer. For a low-complexity tool with one optional param, this is adequate but not comprehensive.

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 0%, so the description must compensate. It clarifies that omitting book_id returns all books, which is the key semantic for the only parameter. However, it does not explain what happens when book_id is supplied (e.g., filtering to one book), so compensation is partial.

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

Purpose4/5

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

The description clearly identifies the resource as the AI reading companion's local progress and explicitly distinguishes it from WeChat Reading's real progress. It also states that calling without parameters returns the full book list. However, it does not directly name sibling tools like get_progress or set_reader_bookmark to differentiate from them, so it stops short of full sibling-level clarity.

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?

It provides an explicit invocation hint ('不带参返回全部书目' – return the full list without parameters) and contextualizes the tool as local-only, which helps an agent decide when this tool fits. But it offers no explicit when-to-use vs alternatives or any exclusion criteria, leaving comparison with get_progress/get_shelf to inference.

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

get_shelfB

书架列表(官方通道)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. '书架列表' strongly suggests a read-only list operation and '官方通道' hints at the data source, but the description does not disclose authentication requirements, scoping to the current user, or error/pagination behavior. This is acceptable for a simple getter but not fully transparent.

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

Conciseness3/5

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

The description is very short and front-loads the core term, which is concise. However, '官方通道' is an unexplained parenthetical that may add confusion rather than clarity, and the description is a fragment rather than a well-structured sentence.

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?

For a zero-parameter tool with an output schema, the core purpose is mostly covered. Still, the description omits context about whose bookshelf is returned, whether authentication is needed, and what 'official channel' means relative to the sibling tools, leaving the agent to infer these details.

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

Parameters4/5

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

The input schema has zero properties, so there are no parameter semantics to document. The description reinforces that the tool simply returns a bookshelf list without arguments, satisfying the baseline for a no-parameter tool.

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 states the resource ('书架列表' = bookshelf list) and clearly implies the operation of listing it, matching the tool name get_shelf. It is distinguishable from siblings like get_toc and get_progress because it uniquely targets the bookshelf. The '官方通道' qualifier adds a channel context but is not needed to understand the core purpose.

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 the tool should be used when an agent needs a bookshelf list, and no sibling tool appears to provide the same function. However, it gives no explicit when-to-use guidance, exclusions, or alternatives, and the meaning of 'official channel' is not explained.

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

get_tocB

书籍章节目录:[{chapterIdx, chapterUid, title, ...}]。写想法/读书都要用这里的 chapterUid。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the return shape and emphasizes that chapterUid from here must be used for other operations. It does not reveal side effects, ordering, pagination, or failure behavior, but for a simple read-only TOC call this is acceptable.

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

Conciseness5/5

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

The description is one compact sentence with the result shape front-loaded and the important usage note immediately after. No filler or redundant wording.

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?

An output schema exists, so return values are covered. The description adds the key contextual fact that chapterUid is the required linkage for writing thoughts and reading. It could mention the relationship to get_shelf or get_chapter_text more explicitly, but for a simple TOC tool this is largely sufficient.

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 description coverage is 0%, and the description does not explain book_id, where it comes from, or how to validate it. The parameter is self-evident from its name and schema, but the description adds no meaningful semantic detail beyond that.

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?

Description clearly states this tool returns the book's table of contents with chapterIdx, chapterUid, and title fields. It also notes chapterUid is the canonical identifier for writing thoughts and reading, which helps distinguish its role from sibling tools like get_chapter_text.

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

Usage Guidelines3/5

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

The description implies when to use this tool: before writing thoughts or reading, you need the chapterUid from this table of contents. However, it does not explicitly name alternatives or state when not to use it, leaving some inference to the agent.

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

list_commentsA

某条想法下的评论列表(评论 ID 形如 {reviewId}_c{...},回复评论时用它)。

ParametersJSON Schema
NameRequiredDescriptionDefault
review_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries more weight. It discloses a useful behavioral detail: comment IDs follow the pattern {reviewId}_c{...}, which is critical for replying to comments. It does not mention pagination or ordering, but for a simple list operation this is acceptable.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the core purpose and then adds the useful ID-format context. No wasted words.

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

Completeness4/5

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

For a low-complexity list tool with an output schema present, the description covers the essential purpose, target resource, and a key usage note. It omits things like pagination, but the output schema likely carries return details, and the description is adequate 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 0%, so the description must compensate for the lone review_id parameter. It implies review_id identifies the thought/review by saying '某条想法下', but it does not explicitly define the parameter or its format. Some meaning is added, but not fully.

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

Purpose5/5

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

The description clearly states the tool lists comments under a specific thought/review, with a specific resource ('某条想法下的评论列表'). It also distinguishes itself from siblings like add_comment by focusing on retrieval rather than creation.

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

Usage Guidelines4/5

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

The description explicitly says '回复评论时用它' (use it when replying to comments), giving a clear usage context. It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to know when this tool is relevant.

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

my_reviewsA

自己在此书的全部想法(写前防重复、延续语气)。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral transparency burden. It discloses user scope ('自己') and book scope ('此书'), which are useful traits, and implies a read-only retrieval. However, it does not explicitly state what items are returned or any limitations, leaving some ambiguity.

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 a single compact sentence that conveys scope and purpose with no filler. The parenthetical adds high-value usage guidance without unnecessary length.

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 getter with an output schema, this is mostly complete: it identifies the entity (own thoughts for a book) and the intended workflow. The main gap is a more formal statement of what '想法' includes, such as reviews versus comments or annotations, which matters given the many related sibling tools.

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?

The schema has one required parameter, book_id, with 0% schema description coverage. The description's '此书' loosely maps to the book identifier, but it does not explain the parameter's format, meaning, or usage. With such low schema coverage, the description provides insufficient compensation.

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 phrase '自己在此书的全部想法' indicates the tool returns the user's own thoughts/reviews for a specific book, and '写前防重复' clarifies the retrieval purpose. It distinguishes itself from add_review and list_comments by emphasizing own content, though it lacks an explicit verb like 'get/list'.

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 parenthetical '写前防重复、延续语气' explicitly states the intended use case: before writing a review, to avoid duplication and maintain consistent tone. It does not name alternatives or exclusion cases, but for a simple read-style retrieval tool the context is reasonably clear.

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

reading_contextB

便捷打包:真实进度 + 共读书签 + 章节明文 + 该章已有想法 + 热门划线。 仅作便捷工具,绝不作为读书的默认上下文——上下文组织归调用方/前端关注。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
chapter_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the transparency burden. It discloses that the tool packages several read-oriented data sources and positions it as a non-authoritative convenience utility. It does not explicitly state that it is read-only or mention any side effects, auth needs, or performance implications.

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 short sentences with no filler. The component list is front-loaded, and the usage caveat is stated in the second sentence. Every part earns its place.

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?

An output schema exists, so return-value details are not required in the description. The description states the tool's purpose and a key usage constraint, but it omits guidance on when to choose this aggregate over the individual sibling calls and leaves parameter semantics entirely to the schema.

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

Parameters1/5

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 explain book_id or chapter_uid at all. The parameter names are self-explanatory, but the description adds no meaning beyond the input schema, so it fails to compensate for the low schema coverage.

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

Purpose4/5

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

The description clearly presents the tool as a convenient bundle ('便捷打包') of specific components: real progress, shared bookmarks, chapter plain text, existing ideas, and popular highlights. This conveys the resource and scope, and distinguishes it from the individual sibling tools by being a composite read package, though it does not name any 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?

The second sentence gives an explicit usage boundary: this is only a convenience tool and must not be treated as the default reading context; context organization belongs to the caller/frontend. However, it does not explicitly state when to prefer this tool over the individual sibling getters or name alternatives.

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

remove_bookmarkC

删除划线。

ParametersJSON Schema
NameRequiredDescriptionDefault
bookmark_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It only says 'delete the underline' and does not disclose whether deletion is permanent, whether it removes associated data, how errors are handled, or whether ownership or special permissions are required.

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

Conciseness4/5

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

The description is extremely compact and front-loaded, with no filler or redundancy. It is arguably too terse given the missing behavioral and parameter context, but as pure conciseness and structure it is efficient.

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?

This is a simple one-parameter delete operation and an output schema exists, so the return value need not be explained. However, with no annotations, no usage guidance, and zero parameter documentation, the description is only minimally viable rather than fully contextual.

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 description coverage is 0%, and the description does not enrich bookmark_id beyond its schema title. It does not explain the expected format, how to obtain a valid ID, or whether it refers to a highlight line, a reader bookmark, or some other entity.

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 Chinese description '删除划线' (delete the highlight/underline) names a concrete verb and resource, making the core action unambiguous. It clearly contrasts with sibling tools like add_bookmark and update_bookmark_style, though it does not explicitly discuss its relationship to related retrieval tools.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as add_bookmark, update_bookmark_style, or get_reader_bookmark. It does not state any prerequisites, such as the bookmark needing to already exist or how the caller should obtain the bookmark_id.

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

set_reader_bookmarkA

记录 AI 共读伙伴读到哪一章(共读进度;不影响用户真实进度)。

ParametersJSON Schema
NameRequiredDescriptionDefault
book_idYes
chapter_idxNo
chapter_uidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds one useful trait: the operation does not affect the user's real progress. However, it does not mention whether repeated calls overwrite existing co-reading progress, permissions, or other side effects.

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

Conciseness5/5

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

The description is a single efficient sentence that fronts the core action and then adds a critical scoping clarification in parentheses. Every word earns its place, and it is immediately clear what the tool does.

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

Completeness2/5

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

Despite having an output schema, the description is incomplete as an invocation guide. The parameter semantics are unclear, especially the presence of both chapter_uid and chapter_idx with a default empty value. An agent would need to infer the identifier roles from parameter names alone, which is risky.

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 description coverage is 0%, so the description must compensate but barely does. It implies a chapter is specified via '读到哪一章', but it does not explain book_id, chapter_uid, or the optional chapter_idx or how they relate. This is inadequate for correctly populating all 3 parameters.

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

Purpose5/5

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

The description uses a specific verb and resource: '记录 AI 共读伙伴读到哪一章' states that it records the co-reading partner's chapter progress. It also explicitly distinguishes itself from user progress tools with '不影响用户真实进度', which separates it from siblings like add_bookmark and get_progress.

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

Usage Guidelines3/5

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

The description implies when to use the tool: whenever the AI co-reading partner's progress needs to be saved. It does not name alternative tools or provide any explicit when-not-to-use guidance, aside from hinting that this is separate from the user's real progress.

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

update_bookmark_styleA

改已有划线的样式(bookmarkId 来自 add_bookmark 的返回)。 只传想改的字段:colorStyle: 1红 2紫 3蓝 4绿 5黄;style: 0直线 1荧光笔 2波浪(3 无效)。

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNo
bookmark_idYes
color_styleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

在没有任何注解的情况下,描述较好地承担了行为披露责任:明确这是修改操作、说明部分更新语义,并警告 style 值为 3 时无效。虽然没有提及权限或可逆性,但对这种小型样式更新工具来说已经足够。

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?

两句话没有冗余,第一句说明目的和数据来源,第二句给出参数映射和无效值警告。每个信息点都对调用有直接帮助。

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?

对于只有 3 个参数、无注解且有输出 schema 的简单更新工具,描述已覆盖用途、ID 来源、部分更新行为和全部取值语义。缺少明确“不要在未创建 bookmark 时调用”之类的排斥条件,以及更精确的值类型说明,因此不是满分。

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 覆盖率为 0%,描述对此做了有效补偿:列出了 colorStyle 的 1-5 颜色映射、style 的 0/1/2 映射,并解释 bookmark_id 的来源。缺点是用 colorStyle 而非 schema 中的 color_style,且未说明数字应以字符串还是整数传输。

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?

描述以明确动宾结构开头:“改已有划线的样式”,即更新已存在的 bookmarks 样式,并指出 bookmarkId 来自 add_bookmark 的返回。这使它和 add_bookmark、remove_bookmark 等兄弟工具明显区分开来。

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?

描述说明了使用场景是对已存在的划线做部分更新,以及“只传想改的字段”这一关键约定。虽然没有显式列举何时不该用或列举替代工具,但“已有”和“来自 add_bookmark”已经提供了足够的上下文。

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. 16 tool updatesv0.1.0
    • First observedadd_bookmark
    • First observedadd_chapter_review
    • First observedadd_comment
    • First observedadd_review
    • First observedbest_bookmarks
    • First observedget_chapter_text
    • First observedget_progress
    • First observedget_reader_bookmark
    • First observedget_shelf
    • First observedget_toc
    • First observedlist_comments
    • First observedmy_reviews
    • First observedreading_context
    • First observedremove_bookmark
    • First observedset_reader_bookmark
    • First observedupdate_bookmark_style

TDQS

B3.4/5.0

Scored across 16 tools

Disambiguation4/5

Most tools map cleanly to distinct resources and actions, and descriptions explicitly separate user progress from AI progress and quote-based reviews from chapter-level reviews. Minor ambiguity remains because 'bookmark' is used for both highlights and reading progress, and reading_context overlaps somewhat with get_chapter_text.

Naming Consistency4/5

The majority of tools follow a consistent verb_noun pattern like get_*, add_*, list_*, update_*, and remove_*. A few noun-phrase names such as my_reviews, best_bookmarks, and reading_context deviate, and 'bookmark' means two different things across tools.

Tool Count4/5

At 16 tools, the server is slightly over the ideal 3-15 range, but each tool appears to serve a distinct purpose in the reading, review, highlight, and comment workflows. No tools feel redundant, so the count is reasonable for the scope.

Completeness3/5

The core workflows for reading, writing thoughts, commenting, highlighting, and tracking progress are covered. However, there are notable gaps: no update/delete for reviews or comments, no listing of the user's own highlights, and no book-level metadata tool beyond the shelf list.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to help users manage their reading experience by searching books, tracking reading progress, managing bookmarks, and generating personalized recommendations and summaries.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to read and navigate EPUB files through 13 specialized tools for pagination, full-text search, metadata access, and footnote resolution. Supports session-based reading with table of contents navigation and chapter summaries.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A low-token human-AI co-reading MCP tool that imports local EPUB/TXT/Markdown books into chunks, enabling AI to read only relevant fragments and write co-reading results to long-term reading notes and progress files.
    65
    MIT