Skip to main content
Glama

Tomato Downloader MCP

面向 MCP 客户端的番茄小说下载器适配层。提供 24 个工具,支持搜索、书库查询、本地正文读取、章节时间、下载任务及可恢复的批量下载。支持 stdio 和原生 Streamable HTTP,无需 Supergateway。

本项目不是小说下载引擎,也不包含番茄账号登录、订阅管理或推送通知。它连接你已经部署的 Tomato-Novel-Downloader,读取同一台机器上的下载数据。兼容性基线为下载器 v2.4.16 的 Web API;其他版本需要验证。

下载引擎来自哪里

下载引擎是上游作者 zhongbai2333 发布的独立项目,不是本仓库编译的程序:

Docker 构建直接从以上 GitHub Release 下载对应架构文件,并核验 Dockerfile 中固定的 SHA-256(与该 Release 的资产 digest 一致)。使用 musl 构建以减少对宿主机 glibc 版本的依赖。不是下载 Source code ZIP 后在本地编译,也不会自动跟随 latest 升级。

本仓库的 v0.2.x Release 附件是 MCP 的 Node 包,不是上游下载引擎。手动部署 Windows/macOS 时,从上游 Release 选择 Win64、WinArm64、macOS_amd64 或 macOS_arm64 资产,然后独立启动下载器;MCP 的手动配置见下文。

Related MCP server: webnovel-mcp

推荐:Docker Compose 一起部署

只需 Git、Docker 和支持 --wait 的 Docker Compose v2+,不需要在宿主机安装 Node 或 Rust。Windows/macOS 使用 Docker Desktop 的 Linux containers 模式。镜像支持 Linux amd64/arm64;当前端到端验证为 Linux amd64。

git clone https://github.com/luqing233/tomato-downloader-mcp.git
cd tomato-downloader-mcp
sh scripts/deploy-docker.sh

Windows PowerShell 将最后一行替换为:

powershell -ExecutionPolicy Bypass -File scripts/deploy-docker.ps1

首次运行自动生成随机 Web UI 密码和 MCP Token,保存到被 Git 忽略的 .env.docker;重复执行保留原配置。脚本从源码构建两个镜像,并启动三个服务:

服务

作用

downloader

上游 v2.4.16 下载引擎和 Web UI

mcp

原生 Streamable HTTP MCP,24 个工具

worker

离散批次后台执行与恢复

默认入口:

  • 下载器 Web UI:http://127.0.0.1:18423/,密码读取 .env.docker 中的 TOMATO_WEB_PASSWORD。

  • MCP:http://127.0.0.1:8001/mcp,请求头为 Authorization: Bearer <.env.docker 中的 TND_HTTP_TOKEN>。

外部客户端配置可参考 examples/mcp-http.json。若端口已占用,在 .env.docker 中修改 WEBUI_PORT/MCP_PORT,再执行脚本。端口默认只发布到宿主机回环地址;服务器上的浏览器访问需要 SSH 隧道,其他容器访问需要配置共同网络或合适的代理。

三个容器共享名为 tomato-data 的 Compose 数据卷(实际名称带项目名前缀),保存配置、日志、下载正文和批次状态。新部署自动设置下载路径为 /data/downloads,已有配置不会被覆盖;默认章节并发为 2,可在 Web UI 调整。容器程序文件系统只读,数据卷和临时目录可写,避免上游自更新在容器内替换已校验的二进制;升级应修改固定版本及校验值后重新构建。

# 查看服务状态和日志
docker compose --env-file .env.docker ps
docker compose --env-file .env.docker logs --tail 100
# 停止并保留数据卷
docker compose --env-file .env.docker down
# 拉取本项目更新后重新构建;上游版本仍由 Dockerfile 固定
git pull
docker compose --env-file .env.docker up -d --build --wait

迁移或备份时同时保留数据卷和 .env.docker。down -v 会删除数据卷;普通停止和更新不要加 -v。首次构建需要访问 Docker Hub、GitHub Releases 和 npm registry;校验失败会终止构建。

手动部署:已有下载器时使用

要求:Node.js 22.9+、已运行的下载器 Web UI,以及对下载目录的读写权限。MCP 和 worker 必须能访问同一个 Web API、下载目录和批次文件。

git clone https://github.com/luqing233/tomato-downloader-mcp.git
cd tomato-downloader-mcp
npm ci

复制 .env.example 为 .env,设置:

TOMATO_WEB_BASE=http://127.0.0.1:18423
TOMATO_WEB_PASSWORD=your-downloader-web-password
TND_DATA_DIR=/absolute/path/to/downloader/downloads

TOMATO_WEB_PASSWORD 是下载器 Web UI 的密码,不是番茄账号密码。Windows 路径建议使用 E:/books/downloads。

stdio:桌面 MCP 客户端

将 examples/mcp-stdio.json 中的绝对路径和环境变量替换为你的配置。通用格式:

{
  "mcpServers": {
    "tomato-downloader": {
      "command": "node",
      "args": ["/absolute/path/to/tomato-downloader-mcp/server.mjs"],
      "env": {
        "TOMATO_WEB_BASE": "http://127.0.0.1:18423",
        "TOMATO_WEB_PASSWORD": "your-downloader-web-password",
        "TND_DATA_DIR": "/absolute/path/to/downloader/downloads"
      }
    }
  }
}

读取、搜索及直接创建单章/区间/整本任务不依赖 worker。使用 tnd_start_discrete_downloads 时,另开一个终端运行:

npm run worker

worker 独立执行,MCP 客户端退出不会中断批次。一个共享下载目录只需一个 worker;推荐使用 systemd 保持运行。

Streamable HTTP:远程或 Docker 内的客户端

在 .env 中设置 TND_HTTP_TOKEN,然后运行:

npm run http

默认地址为 http://127.0.0.1:8001/mcp,所有路径(包括 /healthz)都要求 Authorization: Bearer <TND_HTTP_TOKEN>。examples/mcp-http.json 提供 AstrBot 风格配置;各客户端字段名称可能不同。

HTTP 模式为无状态请求传输,不保留会话子进程,不提供 SSE 订阅或通知。并发请求仍必须使用各自的 JSON-RPC ID。默认仅监听本机;跨机器访问推荐 SSH 隧道或带 TLS 的反向代理。Docker 中的 127.0.0.1 指向容器自身,需要使用可达的宿主机地址。

已有 Supergateway 部署可继续运行 server.mjs,也可以切换到 http-server.mjs;HTTP 模式兼容使用 SUPERGATEWAY_API_KEY 作为 Token 的旧环境文件。切换传输后客户端需要重连。

推荐调用流程(v0.3.0)

读取正文优先使用 tnd_get_chapters,默认只读本地。只有 download_missing:true 才会创建或复用下载批次;立即返回已有正文、缺失 ID 和 batch_id,不等待下载。取消请求返回 canceling 时应继续查询,不能当作已经停止。重试会返回新批次 ID。

完整字段、状态与错误处理见 客户端接入说明。这 5 个新工具与原有工具兼容,MCP 与 worker 需同时升级。

工具

工具

作用

tnd_get_chapters

统一获取:本地优先,可显式下载缺失章节并复用批次

tnd_check_chapters

纯本地检查正文有效性与缺失列表

tnd_cancel_batch

持久化取消请求,可选择是否取消当前任务

tnd_retry_batch

只重试终态批次中仍缺失的失败/取消目标

tnd_get_diagnostics

下载器、共享目录、权限及 worker 心跳诊断

tnd_get_status

下载器运行状态、版本和配置摘要

tnd_search_books

搜索书籍,不管理订阅

tnd_preview_book

书籍详情和章节总数

tnd_get_library

本地文件列表;只有 start:true 才启动扫描

tnd_get_updates

查询更新扫描;start:true 启动扫描

tnd_get_history

下载历史

tnd_get_jobs

下载任务;对有目标凭据的已完成任务核验本地正文

tnd_get_book_status

本地可用章节数、失败记录数和最新可用章节

tnd_list_downloaded_chapters

按目录顺序列出本地有正文的章节

tnd_read_latest_chapter

读取按目录排序的最后一个本地可用章节

tnd_read_downloaded_chapter

按 item_id 或本地 index 读取一章

tnd_read_downloaded_chapters

按本地范围或 item_ids 读取,最多 20 章

tnd_get_chapter_times

在线目录和 firstPassTime,不是最后编辑时间

tnd_start_download

连续目录区间;不传范围则整本

tnd_start_book_download

整本下载

tnd_start_chapter_download

按目录位置下载单章

tnd_start_discrete_downloads

按目录位置或 item_ids 创建离散批次,最多 50 章

tnd_get_batch_status

当前批次进度及逐组错误

tnd_wait_job

等待任务,遇到输入选择立即返回

章节标识:优先使用 item_id

  • item_id:章节身份,推荐跨工具传递。

  • 读取工具的 index:本地有正文列表按目录排序后的 1-based 槽位。

  • 下载工具的 index/indexes/range_*:在线完整目录的 1-based 位置。

  • chapter_position:在线目录位置;chapter_order:上游 realChapterOrder。

本地只下载第 183、207 章时,读取列表的 index 是 1、2,下载目录位置仍是 183、207。不要将读取 index 直接传给下载工具。

本地正文来自 status.json 加 downloaded_chapters.jsonl,不转换 EPUB。空正文和失败记录不会被当成可读章节。按 item_id 读取可在目录不可用时返回本地正文;最新章节、列表和按 index 读取缺少可信目录时返回 DIRECTORY_UNAVAILABLE,不会猜测顺序。

批量读取

{
  "book_id": "1234567890123456789",
  "item_ids": ["1111111111111111111", "2222222222222222222"],
  "max_chars_per_chapter": 2000,
  "max_total_chars": 10000
}

范围读取使用 start_index/end_index,与 item_ids 二选一。单次最多 20 章;总字符预算默认 100000,0 表示不限制。当前任一目标缺失会使整个批量读取失败;总预算截断可能使后面的章节正文为空,调用方需检查每章的 truncated。

下载与连续章节合并

调用 tnd_start_discrete_downloads:

{
  "book_id": "1234567890123456789",
  "indexes": [41, 42, 43, 47, 48, 60]
}

先按章节身份跳过已有正文,然后只合并连续的剩余位置:

41–43 → 一个任务
47–48 → 一个任务
60    → 一个任务

不会扩展成 41–60,不会为了合并而下载中间未请求章节。每组提交前重新核对目录与目标 ID,发生变化则安全失败。jobs 数量表示区间组数,current 表示已处理目标章节数,不再等于完成组数。

状态为 queued / running / waiting_input / canceling / done / done_with_errors / failed / canceled。在 Web UI 完成书名或格式选择后,worker 自动继续原任务。成功需要本地目标正文核验通过,不能仅依赖下载器的 done。重试有上限,认证失败不重试;提交结果未知时停止,避免盲目重复提交。

直接下载工具会保存目标凭据,tnd_wait_job/tnd_get_jobs 在任务完成后核验正文并返回 success_count/failed_count/missing_item_ids。旧任务或非本 MCP 创建的任务没有凭据,返回 verification:unavailable,不能据此断言所有章节已成功。

错误与边界

失败使用 MCP isError:true,正文包含结构化 code/message/details。常见代码:

INVALID_ARGUMENT  INVALID_RANGE  BOOK_NOT_FOUND
CHAPTER_NOT_FOUND  CHAPTER_NOT_DOWNLOADED  DIRECTORY_UNAVAILABLE
DIRECTORY_CHANGED  BATCH_BUSY  BATCH_NOT_FOUND  AUTH_FAILED
DOWNLOADER_BUSY  UPSTREAM_LIMITED  UPSTREAM_ERROR
JOB_NOT_FOUND  JOB_FAILED  CHAPTER_DOWNLOAD_INCOMPLETE
SUBMISSION_UNKNOWN  LOCAL_DATA_INVALID  INTERNAL_ERROR
BATCH_ACTIVE  BATCH_TARGETS_UNKNOWN  CANCEL_FAILED  JOB_TRACKING_FAILED
  • 当前保留单活跃批次,完成后新批次会替换当前批次文件,不提供批次归档 API。

  • 下载器与 MCP 是独立项目。本项目在 MCP 边界拒绝非法范围,并核验下载结果,没有修改下载器二进制;直接在下载器 Web UI 调用不经过这些保护。

  • 上游目录与下载器读取目录之间没有共享快照或事务,校验无法消除目录瞬间变化的所有风险。

  • worker 的跨进程锁带心跳,进程被强制杀死后旧锁最长约 120 秒才可回收。不要手工删除活跃锁。

  • 下载器重启后任务 ID 可能复用;worker 核对书籍和时间,并根据本地正文恢复。提交任务与保存任务 ID 之间仍无后端幂等事务。

  • 本地数据是可信输入;本项目不是多租户或不可信用户共享服务。不提供内容授权或解锁能力,请仅处理你有权使用的数据。

Linux 后台运行

examples/systemd/ 包含 HTTP MCP 和 worker 两个通用单元。假设项目安装在 /opt/tomato-downloader-mcp,Node 位于 /usr/bin/node,系统账号为 tomato:

  1. 将 .env 配置放在 /etc/tomato-downloader-mcp.env,设置账号可读、其他用户不可读的权限。

  2. 修改 unit 中的 Node 路径、账号和下载目录;确保服务账号能读写目录。

  3. 安装单元并执行 systemctl daemon-reload。

  4. 执行 systemctl enable --now tomato-downloader-mcp tomato-downloader-batch。

后端下载器需要独立安装并运行。示例不覆盖下载器安装,也不携带任何服务器凭据。

开发与验证

npm ci
npm run check
npm test
npm audit --omit=dev
npm pack --dry-run

测试使用隔离的临时目录、模拟目录/API,以及真实 SDK 的 stdio 和 HTTP 传输;不会访问个人书库或启动真实下载。CI 在 Linux、Windows 和 Node 22/24 上运行。

来源与许可

MCP 适配层使用 MIT License。下载引擎来自独立的 Tomato-Novel-Downloader,本仓库不复制其 Rust 源码或 Release 二进制。项目需求最初源于对 mcp-server-fanqie 的使用分析,本仓库不包含其账号、签名或登录实现。

Available Tools

24 tools
tnd_cancel_batchA
DestructiveIdempotent

持久化请求取消指定批次,立即停止后续分组;cancel_current默认false,当前任务自然完成后取消批次,true则由worker核对身份后发送取消信号。返回canceling不代表已停止。

NameRequiredDescriptionDefault
batch_idYes必填,必须与当前批次一致,防止操作错批次
cancel_currentNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is known. The description adds real behavioral context beyond them: the request is persisted, only subsequent groups stop immediately, and critically '返回canceling不代表已停止' — a returned 'canceling' status is not proof of actual stoppage. That caveat is exactly the kind of async nuance annotations cannot convey.

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 dense sentences ordered well: action and effect first, parameter semantics second, then the return-value caveat last. Every clause carries information; no filler or restatement of the tool name.

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 destructive, asynchronous mutation with no output schema, the description covers what is affected, that the request is persisted rather than instantaneous, and how to interpret the immediate return. Minor gaps remain: no mention of permissions, of whether a cancelled batch can be resumed via tnd_retry_batch, or of how to confirm the batch actually stopped (presumably tnd_get_batch_status).

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 only 50%: batch_id is documented in the schema, while cancel_current has no schema description. The description compensates fully by explaining its default (false) and the distinct behavior of each value. It does not explain the batch_id-must-match constraint in prose, but the schema already covers 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?

The description states a specific verb and resource: '持久化请求取消指定批次' (persistently request cancellation of the specified batch), plus the scope of effect ('立即停止后续分组'). This clearly distinguishes it from read-oriented siblings such as tnd_get_batch_status and the counterpart tnd_retry_batch, though it never names those siblings 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?

Guidance is limited to the cancel_current choice (false = let the current task finish naturally, true = worker sends a cancel signal after verifying identity). That is useful, but it is essentially parameter-level guidance. Nothing says when to prefer this tool over checking status first with tnd_get_batch_status or when to follow up with tnd_retry_batch.

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

tnd_check_chaptersB
Read-onlyIdempotent

仅检查本地章节正文是否有效,不联网、不下载、不返回正文;最多50个item_ids。

NameRequiredDescriptionDefault
book_idYes
item_idsYes

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, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description reinforces the offline nature and adds that no content is returned, which is useful, but says nothing about what happens on invalid chapters, error reporting, or whether missing items count as failures.

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 front-loaded sentence with the core scope first and the three exclusions tight behind it, then the item count cap. No filler and no redundancy.

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?

With no output schema, the description should indicate what a validation check returns (per-item validity flags, error list, counts). It only tells the agent what is not returned ('不返回正文'), leaving the actual result shape unspecified for a tool whose entire purpose is producing a validation verdict.

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 carry parameter meaning, yet it only restates '最多50个item_ids' — a limit already encoded as maxItems: 50 in the schema. book_id is never explained (book identity format, whether it must match the local library), and the string-id format for item_ids is left entirely to 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?

The description states a specific verb+resource combination (check whether local chapter body content is valid) and immediately delimits it against the read/download siblings via '不联网、不下载、不返回正文'. It stops short of 5 because it never defines what 'valid' actually means, so the agent knows the scope but not the exact check being performed.

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?

'仅检查本地章节正文' plus the three negations effectively communicate when this tool applies (local-only validation, no fetching). However, no sibling alternative is named, so an agent weighing this against tnd_get_chapters or tnd_list_downloaded_chapters gets no explicit routing signal, and no prerequisites are stated.

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

tnd_get_batch_statusA

读取离散下载批次状态;不传 batch_id 时返回当前批次。

NameRequiredDescriptionDefault
batch_idNo可选批次 ID

TDQS

A3.6/5.0
Behavior3/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 that this is a read operation and explains the default-current-batch behavior, but it does not describe permissions, error behavior, or what the returned status contains.

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 front-loaded sentence with no redundant wording. The default behavior is included efficiently after the main purpose.

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 simple one-parameter read tool this is adequate to invoke correctly, especially because the schema documents the parameter fully. However, without an output schema, the description does not explain what status information is returned or how errors are represented.

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 parameter is already documented. The description adds meaningful semantics beyond the schema by stating that when batch_id is omitted, the current batch is returned.

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 a specific verb and resource: reading discrete download batch status. It is distinguishable from general status or job tools by the word 'batch', but it does not explicitly name siblings like tnd_get_status or tnd_get_jobs.

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 implied by the purpose of reading batch status, and the description notes that omitting batch_id returns the current batch. However, it does not say when to use this instead of tnd_get_status, tnd_get_jobs, or tnd_get_book_status.

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

tnd_get_book_statusA

读取某本已下载书籍的本地摘要信息,不返回完整章节正文。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID

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 behavioral burden. It does disclose two useful traits: the data is local (本地) and the response excludes full chapter text. However, it never says what the summary contains, whether a download prerequisite must be satisfied, or how it behaves for a book that was never downloaded.

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 with two purposeful clauses: the primary action is front-loaded and the exclusion clause follows immediately. Nothing is redundant and no words are wasted.

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

Completeness3/5

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

The tool is simple (one required parameter, no nested objects, no output schema), so little explanation is needed. Still, with no output schema the vague term '本地摘要信息' leaves the agent unsure what fields come back, and the not-downloaded case is unaddressed.

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% with a single required book_id already documented as a numeric book ID. The description's phrase '某本已下载书籍' only reinforces that the ID must refer to a downloaded book, adding marginal meaning beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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 a concrete verb+resource: read the local summary info of a downloaded book. It also draws one boundary by saying it does not return full chapter body text, which separates it from the read_downloaded_chapter* siblings. It does not distinguish itself from near-neighbours like tnd_get_status, tnd_check_chapters or tnd_preview_book, so sibling differentiation is only partial.

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 implied rather than stated: an agent can infer this is for inspecting an already-downloaded book's metadata without pulling chapter content, and the 'does not return full chapter body' clause implicitly routes content reads to the read_downloaded_chapter* tools. There is no explicit when-to-use/when-not-to-use statement and no mention of what happens if the book is not downloaded.

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

tnd_get_chaptersB

优先读取本地正文;缺失时仅在download_missing:true时创建或复用下载批次,立即返回已有正文、缺失ID和batch_id,不阻塞等待下载。最多20章。

NameRequiredDescriptionDefault
book_idYes
item_idsYes
max_total_charsNo
download_missingNo
max_chars_per_chapterNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already flag readOnlyHint=false and openWorldHint=true, and the description usefully explains why: with download_missing it may create or reuse a download batch, and it returns immediately rather than waiting. That is real added context. It still omits what happens to chapters that are missing (are they absent from the response or listed as missing IDs?), error/auth behavior, and any side effect of reusing an existing batch.

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 tight statement that front-loads the most important rule (local content first) before the conditional download behavior. It is dense and clause-heavy but every clause carries information; no filler.

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 5-parameter, non-read-only, open-world tool with no output schema, the description does sketch the return shape (existing 正文, missing IDs, batch_id) and the non-blocking contract. It leaves truncation semantics (max_total_chars / max_chars_per_chapter) and failure behavior unexplained, which matters given the mutation-capable path.

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 carries the full burden, yet it only explains download_missing and echoes the 20-chapter cap that is already encoded as maxItems:20. book_id, max_total_chars, and max_chars_per_chapter (default 0, meaning unclear) get no explanation at all, so a third of the parameters remain opaque.

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 gives a specific verb and resource (read chapter 正文 for a set of item_ids), plus the key differentiator that it never blocks waiting for downloads. It does not name any sibling (e.g. tnd_read_downloaded_chapters, tnd_check_chapters, tnd_start_chapter_download) to sharpen the boundary, but the local-first/non-blocking framing is clear enough to distinguish it.

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 states the conditional rule for the risky path: only create or reuse a batch when download_missing:true, otherwise read local content only. That implies the agent should follow up with batch-status/polling tools rather than expect the content inline, but no alternative tool is named and no explicit when-not-to-use guidance is given.

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

tnd_get_chapter_timesB

读取番茄章节目录及每章首次发布时间(firstPassTime),时间同时返回 UTC 和北京时间。

NameRequiredDescriptionDefault
limitNo
offsetNo
book_idYes数字书籍 ID
item_idNo可选,只返回指定章节

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose a genuine behavioral trait beyond the schema — that timestamps come back in both UTC and Beijing time — which helps an agent interpret results. However, it omits pagination behavior (limit defaults to 100, capped at 500), whether the result is a complete or paged list, and any ordering of chapters, all of which matter for a list 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?

A single front-loaded sentence with no filler; the resource and the key return detail lead. The trailing time-zone clause is slightly redundant in phrasing (时间同时返回) but still earns its place by clarifying output format.

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 a read-only list tool with no output schema and no annotations, the description covers what is returned and in what time format, which is the critical unknown. It falls short on pagination and the optional item_id filter, so an agent cannot tell from the description alone how to page through a large catalog.

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 only 50%: book_id and item_id are documented, but limit and offset have no descriptions anywhere. The description does not compensate at all — it never mentions pagination, the per-chapter item_id filter, or the maximum page size, so half the parameters remain opaque.

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 (番茄章节目录 + 每章首次发布时间/firstPassTime), and specifies the timestamp format returned. This lets an agent distinguish it from write/download siblings, but it never contrasts itself with the closely related catalog siblings such as tnd_get_chapters, tnd_check_chapters, or tnd_list_downloaded_chapters.

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?

There is no explicit when-to-use guidance and no exclusions or named alternatives, despite a crowded sibling set of four other chapter-listing tools. An agent must infer from the name alone whether this is the right catalog call versus tnd_get_chapters or tnd_check_chapters.

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

tnd_get_diagnosticsA
Read-onlyIdempotent

诊断下载器连通性与版本、共享目录读写权限、下载路径是否一致、worker心跳及批次状态;不返回密码或Token,不修改配置。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/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 the safety profile is covered. The description still adds real value beyond them by bounding the data exposure ('不返回密码或Token') and confirming it will not alter configuration, which tells the agent it is safe to call purely for inspection.

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 dense sentence, front-loaded with the verb and followed by a semicolon-delimited list of checks, then the negative constraints. Nothing is redundant, though the run-on list format makes it slightly harder to scan than a short structured breakdown would be.

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 parameters, no output schema and full annotation coverage, the definition covers the checks performed and the safety boundaries. The only gap is that it does not hint at the shape of the returned diagnostic results, which matters somewhat since no output schema exists to describe them.

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 per the baseline this scores 4; the description correctly describes a no-argument aggregate diagnostic rather than implying any inputs.

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 (诊断/diagnose) and enumerates the concrete resources checked: connectivity and version, shared-directory read/write permissions, download-path consistency, worker heartbeat and batch status. That is far more specific than a sibling like tnd_get_status or tnd_get_batch_status, though it never explicitly says how it differs from 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?

Usage is only implied: the enumeration of checks signals a troubleshooting/sanity-check tool to run when downloads misbehave. There is no explicit statement of when to prefer this over tnd_get_status or tnd_get_batch_status, and no prerequisites or exclusions are given.

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

tnd_get_historyC

读取下载历史记录。

NameRequiredDescriptionDefault
qNo按书名或 ID 过滤
limitNo

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing beyond the bare purpose. It omits ordering (newest first?), whether results are paginated, what fields a record contains, and whether history is local or server-side.

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?

One short sentence with no wasted words and the core purpose front-loaded. However, the brevity reflects under-specification rather than disciplined conciseness.

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?

With no annotations, no output schema, and only half the parameters documented, the description should explain the record shape, ordering, and pagination. As written, an agent cannot predict the response or how to page through large histories.

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?

Only the 'q' parameter is documented in the schema (50% coverage), and the description adds no meaning about matching behavior (substring vs exact, title vs ID) or the practical effect of 'limit'. The description does nothing to compensate for the uncovered parameter.

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 gives a concrete verb+resource ('读取下载历史记录'), so an agent knows it retrieves past download records. It does not distinguish this from adjacent siblings such as tnd_get_updates, tnd_get_library, or tnd_list_downloaded_chapters, leaving overlap ambiguous.

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?

There is no when-to-use guidance, no exclusions, and no mention of alternatives. With a sibling set containing several history/library/download-listing tools, an agent has no signal for choosing this one over tnd_get_updates or tnd_list_downloaded_chapters.

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

tnd_get_jobsC

读取当前下载任务和最近完成任务。

NameRequiredDescriptionDefault
allNo是否包含全部任务,默认 false
nameNo按书名或 ID 过滤

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden. It does not state whether the operation is read-only (implied only by '读取'), what the default time window for '最近' (recent) means, whether results are paginated or truncated, or whether an empty job list is a normal return.

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 short sentence that front-loads the core purpose with no wasted words. It is efficient, though its brevity is partly the reason other dimensions are thin.

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 read tool with no output schema, the description is minimally adequate: it conveys that both active and recently finished jobs are returned. It omits what fields each job entry contains and any notion of ordering or limits, which leaves gaps an agent inspecting results would want filled.

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 ('all' and 'name') are already documented in the schema. The description adds no additional meaning about how 'all' interacts with the default recent-only scope, 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 states a specific verb and resource: '读取当前下载任务和最近完成任务' (read current download tasks and recently completed tasks). This clearly separates the tool from sibling readers like tnd_read_latest_chapter or tnd_get_history, but it never names a sibling to sharpen the distinction, so it falls short of a 5.

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

Usage Guidelines2/5

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

No guidance is given on when to call this tool instead of alternatives. The sibling set includes tnd_wait_job, tnd_get_batch_status, and tnd_get_status, which the agent might reasonably conflate with this one, yet the description offers no routing rules or exclusions.

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

tnd_get_libraryA

列出下载器保存目录中的本地文件或子目录;不会返回章节正文。

NameRequiredDescriptionDefault
nameNo可选文件名/文件夹名过滤
pathNo相对下载目录,默认根目录
startNo是否触发新的目录扫描,默认 false

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden. It usefully discloses a negative behavior (no chapter text returned), but says nothing about whether the listing is read-only, what side effects a scan has, or what the response looks like. Fully read-only behavior is implied by 列出, not stated.

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 the subject (listing local files/subdirectories) front-loaded and the exclusion clause appended. Nothing is redundant.

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

Completeness3/5

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

The tool is simple, all parameters are schema-documented, and no output schema exists, so the description should ideally sketch the return shape (e.g., names vs. full paths, whether sizes/dates are included). Stating only that chapter text is excluded leaves the listing output format undefined.

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 all three parameters (name, path, start) are already documented in the schema, including the defaults. The description adds no extra semantics such as filter matching rules or what a start-triggered rescan implies. 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.

Purpose4/5

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

The description names a specific verb (列出) and resource (下载器保存目录中的本地文件或子目录), and adds a negative scope (不会返回章节正文) that separates it from the read_chapter siblings. It does not explicitly name the closest sibling tnd_list_downloaded_chapters, so the contrast is inferred rather than stated.

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?

There is no explicit when-to-use or when-not-to-use guidance, but the 'does not return chapter body' clause implicitly routes content-reading tasks to the read_downloaded_chapter tools and positions this as a browsing tool. The agent can infer the right context, but nothing is stated about prerequisites or ordering (e.g., using this before a read call).

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

tnd_get_statusA

读取 Tomato-Novel-Downloader 的运行状态、版本、保存目录和配置摘要。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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. It usefully discloses the returned content (status, version, save directory, config summary), but it does not state that the call is a side-effect-free read, nor whether it can fail or block, leaving the safety profile to inference.

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?

It is a single front-loaded sentence that enumerates the returned fields with no filler. The information density is high and everything stated is relevant.

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 zero-parameter status tool with no output schema, the description compensates by listing what the response contains, which is exactly what an agent needs to decide whether to call it. The only shortfall is the missing distinction from tnd_get_diagnostics, which likely overlaps with the configuration summary.

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 and the schema is trivially complete, so there is no parameter meaning to add. A baseline of 4 is appropriate for a no-argument tool with no semantic gaps.

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 (读取) and a concrete set of resources (运行状态、版本、保存目录、配置摘要), so the agent knows it is an application-level status read rather than a book or job read. It partially distinguishes itself from siblings such as tnd_get_book_status and tnd_get_batch_status by being scoped to the application itself, but it never names those 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?

Usage is only implied: the reader can infer this is the tool to call when it wants the app's overall health, version, or settings. There is no explicit when-to-use or when-not-to-use statement, and no routing away from ambiguous siblings such as tnd_get_diagnostics, which is the main weakness for a 23-sibling toolset.

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

tnd_get_updatesC

读取已下载书籍的更新扫描结果,包括可更新数量和失败章节数。

NameRequiredDescriptionDefault
startNo是否启动新扫描,默认 false

TDQS

C2.9/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 and only says what is returned. It does not disclose that setting start=true triggers a new scan (a mutating, potentially slow operation), whether that scan is synchronous or how long it takes, whether prior results are replaced, or what happens when no scan has ever been run.

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?

One front-loaded sentence naming the resource and the return contents with no filler. It is efficient but too short to carry the behavioral weight the tool needs given the absence of annotations.

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

Completeness3/5

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

The tool is simple (one optional boolean, no nested objects, no output schema) and the description covers what comes back, which is the core need. However, for a tool whose only parameter can kick off a scan, leaving that side effect and any preconditions unexplained is a meaningful gap.

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 parameter 'start' is already documented as a boolean defaulting to false. The description adds nothing about it, so the documented baseline of 3 applies; its main omission is the consequence of flipping start to true.

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 gives a specific verb and resource: reading the update-scan results for already-downloaded books, plus the two values returned (updatable count, failed chapter count). It does not distinguish this from nearby siblings such as tnd_check_chapters or tnd_get_book_status, which also sound like they report chapter/update state.

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?

There is no statement of when to call this rather than tnd_check_chapters, tnd_get_book_status, or tnd_get_status, and no note that a scan must already exist before results can be read. The only usage-shaped signal, that start defaults to false, lives in the schema rather than the description.

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

tnd_list_downloaded_chaptersB

列出某本已下载书籍的章节标题和 item_id,不返回正文。

NameRequiredDescriptionDefault
limitNo
offsetNo
book_idYes数字书籍 ID

TDQS

B3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, and it only discloses one trait: body text is not returned. It says nothing about pagination behavior despite the presence of limit/offset, whether results are local-only or require network access, ordering of chapters, or what happens for a book with no downloaded chapters.

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 compact sentence with the purpose front-loaded and the key exclusion (不返回正文) appended, with no filler. It is efficient, though its brevity reflects omitted content as much as disciplined editing.

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 3-parameter, no-annotation, no-output-schema tool, the description covers what is returned at a high level but leaves pagination semantics and output shape unaddressed. Adequate as a minimum-viable definition, but an agent would need to inspect the schema to use limit/offset correctly.

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 only 33% – just book_id ('数字书籍 ID') is documented, while limit and offset have bounds and defaults but no semantic explanation. The description adds no meaning beyond the schema and does not clarify units, pagination interaction, or whether book_id accepts the numeric ID shown elsewhere.

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 uses a specific verb (列出/list) plus a clearly bounded resource: chapter titles and item_id for one already-downloaded book. It also states what is NOT returned (正文/body text), which separates it from read-oriented siblings such as tnd_read_downloaded_chapters. It stops short of naming any sibling explicitly, so the differentiation is implied rather than stated.

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 phrase 已下载书籍 (already-downloaded book) implies the precondition that the book must be downloaded and hints that this is a listing/index step rather than a reading step. However, there is no explicit when-to-use vs when-not guidance and no pointer to tnd_read_downloaded_chapters or tnd_get_chapters as alternatives.

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

tnd_preview_bookB

读取一本书的详情、作者、简介、章节数、字数和最新章节标题。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose the returned data shape (author, intro, counts, latest chapter), which is genuinely useful given there is no output schema, and 读取 implies a read-only operation. It says nothing about permissions, whether the source is remote vs local, rate limits, or what happens with an invalid or missing book_id.

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?

One front-loaded sentence with no filler; every listed field maps to real returned data. It is slightly run-on as an enumeration, but nothing is wasted and the key action leads the 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 one-parameter read tool with no output schema, outlining the return contents is exactly the compensating information an agent needs. The remaining gap is sibling disambiguation against tnd_get_book_status and tnd_get_chapters, which the description never addresses.

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 book_id parameter already carries the note '数字书籍 ID'. The description adds no format, source, or validity information beyond the schema, so the documented-baseline of 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 (读取) and resource (一本书) and enumerates exactly what is returned: details, author, intro, chapter count, word count, latest chapter title. That is far clearer than the bare tool name. It does not, however, distinguish this from siblings like tnd_get_book_status or tnd_get_chapters, which could plausibly return overlapping fields.

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?

There is no explicit when-to-use guidance, no prerequisites, and no named alternative. The word 'preview' hints at a pre-download inspection step, but an agent facing 23 sibling tools gets no statement of when to call this instead of tnd_get_book_status or tnd_get_chapters.

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

tnd_read_downloaded_chapterA

按 item_id 或本地可用章节列表的 1-based index 读取正文;index 按在线目录排序,与下载目录位置不同,推荐 item_id。

NameRequiredDescriptionDefault
indexNo章节序号,从 1 开始
book_idYes数字书籍 ID
item_idNo章节 item_id;与 index 二选一
max_charsNo0 表示返回完整正文

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it usefully discloses a non-obvious ordering gotcha for the index selector. It does not state what happens if the requested chapter is not locally available (error vs fallback), nor anything about the truncation behavior governed by max_chars, both of which affect a caller's decision.

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 dense sentence front-loads the two selection modes, then immediately delivers the ordering caveat and the recommendation. Every clause carries operational value and nothing is padding.

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 four-parameter read tool with no annotations and no output schema, the definition covers identification and ordering well but leaves gaps on failure modes (missing local chapter), on how max_chars interacts with the returned body, and on how it differs from the sibling readers. Adequate but not complete.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: it clarifies that index enumerates the locally available list in online-catalog order (not download order) and that item_id is the preferred selector. That is exactly the disambiguation an agent needs when both optional selectors exist.

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 and resource ('读取正文' – read chapter body) plus the two ways to identify the chapter (item_id or 1-based index into the locally available chapter list). It implicitly separates this tool from the plural/latest siblings by constraining the index to the downloaded-chapter list, but it never names tnd_read_downloaded_chapters or tnd_read_latest_chapter, so an agent must infer which reader to pick.

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 gives parameter-level guidance ('推荐 item_id' – item_id is recommended) and warns that the index follows online-catalog order rather than download-directory position. It does not say when to choose this tool over the sibling readers (latest chapter, plural chapters) or what precondition must hold (the chapter must already be downloaded).

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

tnd_read_downloaded_chaptersA

批量读取某本已下载书籍的正文;可用 start_index/end_index 或 item_ids,最多 20 章。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID
item_idsNo按 item_ids 读取;与 start_index/end_index 二选一
end_indexNo结束章节序号,包含该章
start_indexNo起始章节序号,从 1 开始
max_total_charsNo本批最多返回的总字符数,0 表示不限制
max_chars_per_chapterNo每章最多返回字符数,0 表示完整正文

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 full burden. It discloses one important behavioral limit (max 20 chapters per call) and the downloaded-only scope, but says nothing about read-only semantics, what happens when a requested chapter is not downloaded, or that oversized chapters are truncated rather than returned complete.

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 compact sentence with the resource front-loaded and the two selection modes plus the size cap packed in without filler. It is efficient, though it has no structure to separate the read mode from the limit.

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 six-parameter read tool with full schema coverage and no output schema, the description covers the essentials: what is read (chapter body text), from where (downloaded books), how to select chapters, and the batch size ceiling. Return-shape detail is partly handled by the max_total_chars/max_chars_per_chapter parameters, leaving only minor gaps.

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 all six parameters are already documented, including the item_ids/start_index mutual exclusivity and the 0-means-unlimited conventions. The description merely restates that same exclusivity, adding no new meaning beyond the schema, which matches the baseline of 3.

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 a specific verb+resource: batch-reading the body text (正文) of one already-downloaded book, and notes the 20-chapter cap. The word 批量 implicitly distinguishes it from the singular tnd_read_downloaded_chapter, but it never names that sibling explicitly, so the agent must infer the split.

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 clarifies that the caller can use either start_index/end_index or item_ids and that at most 20 chapters come back, which is real selection guidance. However, it gives no when-to-use guidance relative to tnd_read_downloaded_chapter, tnd_list_downloaded_chapters, or tnd_read_latest_chapter, nor any precondition such as the book needing to be downloaded first.

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

tnd_read_latest_chapterA

读取某本已下载书籍的最后一章完整正文。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID
max_charsNo0 表示返回完整正文

TDQS

A3.5/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 behavioral burden; “读取” only implies a non-mutating read, while “已下载” indicates the content source. It does not explain how “last” is determined, missing-chapter or error behavior, output behavior, or how a positive max_chars affects the promise of “完整正文”。

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 single sentence is compact, front-loaded with the operation, and contains no filler. Missing operational detail is assessed in the other dimensions rather than mistaken for a structural problem here.

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 minimally adequate for a simple two-parameter read tool whose required book_id and default max_chars are documented in the schema. The absence of annotations or an output schema makes the unresolved chapter-ordering, failure, and truncation behavior more consequential, though they do not prevent a basic 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 baseline of 3 applies even though the description adds little parameter-specific information. It does not clarify positive max_chars values as a truncation limit, and its unconditional full-text wording could mislead when that non-default option is used.

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?

“读取某本已下载书籍的最后一章完整正文” clearly states the action, resource, and scope: read the full text of a downloaded book's last chapter. It does not explicitly distinguish itself from tnd_read_downloaded_chapter or tnd_read_downloaded_chapters, so it stops short of a 5.

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

Usage Guidelines4/5

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

The phrases “已下载书籍” and “最后一章” provide a clear use case and a downloaded-content prerequisite. However, there is no routing to siblings for reading a specific chapter or multiple chapters, nor guidance on what to do when the latest chapter has not been downloaded.

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

tnd_retry_batchA

仅重试指定终态批次中失败/取消分组仍缺失的章节;重新核对本地正文并按当前目录合并连续位置,返回新batch_id和retry_of。不会重试成功分组。

NameRequiredDescriptionDefault
batch_idYes必填,必须与当前批次一致,防止操作错批次

TDQS

A4.1/5.0
Behavior4/5

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

The annotations only declare the generic non-read-only / non-idempotent / open-world profile; the description adds the operation-specific behavior: it re-checks local content, merges contiguous positions against the current catalog, and produces a brand-new batch rather than mutating the old one. That last point is valuable given idempotentHint=false, though it does not say what happens when no chapters qualify or whether the old batch is left untouched.

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 dense sentences with no filler, and the qualifying scope comes before the exclusion and return-value note. The phrasing is compact to the point of being terse, but 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 single-parameter, non-idempotent operation with no output schema, the description covers the precondition, the exact subset acted upon, and the returned identifiers. The only real gap is the edge case where no chapters are missing and how errors surface.

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 batch_id field already documents that it must match the current batch to avoid operating on the wrong one. The description adds only the qualifier that the batch must be in a terminal state, which the schema does not carry. Baseline 3 is appropriate when the schema does the heavy lifting.

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 and resource: retry only the chapters still missing in the failed/cancelled groups of a given batch. It also scopes the result ('返回新batch_id和retry_of') and states a negative ('不会重试成功分组'), so the agent can distinguish this from the download-starting siblings without opening any 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?

It gives a clear precondition (the batch must be in a terminal state) and an explicit exclusion (successful groups are never retried), which is enough to select this over tnd_start_download or a new batch. It does not name an alternative tool or say what to do if nothing is actually missing, so it stops short of full when/when-not routing.

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

tnd_search_booksB

全局搜索番茄书籍元数据;本工具只搜索,不管理订阅。

NameRequiredDescriptionDefault
qYes书名或作者关键词

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations supplied, the description must carry the safety profile, and it does signal a non-mutating, search-only operation. It does not disclose result volume, pagination, ranking, or whether results are cached/remote, which matters for a global search across an unknown corpus.

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 tight clauses, front-loaded with the search scope followed by the exclusion. No filler, though the second clause is a constraint rather than a usage route.

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 one-parameter search with no output schema, the agent still lacks any sense of the return shape (list of books? metadata fields?) or result limits. The definition is adequate to call the tool but not to predict its output.

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 single parameter q already documents '书名或作者关键词'. The description adds nothing about matching behavior (exact vs fuzzy, multi-term, language), 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?

States a specific verb (搜索) and resource (番茄书籍元数据) plus a global scope (全局), which tells the agent exactly what domain is queried. It does not name any sibling (e.g. tnd_preview_book or tnd_get_library) to sharpen the boundary, so it stops short of a 5.

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

Usage Guidelines3/5

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

The clause '本工具只搜索,不管理订阅' gives a negative boundary — this is a lookup, not a subscription or download action — which is useful given the download-heavy sibling set. However, it never says when to prefer it over tnd_preview_book or tnd_get_library, leaving the alternative choice to inference.

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

tnd_start_book_downloadA

下载整本书;创建任务后返回 job_id,使用 tnd_wait_job 轮询完成状态。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the key behavioral trait: this is an asynchronous task creator that returns a job_id rather than the content itself. It says nothing about duplicate-job behavior, failure modes, cost/quota implications, or authentication requirements, which leaves meaningful gaps for an unannotated mutation-style 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?

Two compact clauses, front-loading what the tool does before the follow-up instruction. Every phrase earns its place with no 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 single-parameter async-start tool with no output schema, the description covers the essential contract: it returns a job_id and the caller must poll with tnd_wait_job. Only the routing distinction versus the other start_* siblings is missing, which is a modest gap.

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?

Only one parameter (book_id) exists and schema description coverage is 100%, so the schema already documents it as "数字书籍 ID". The description adds no syntax, format, or provenance detail (e.g. that book_id comes from tnd_search_books), so 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 gives a specific verb and resource ("下载整本书" – download the entire book) and distinguishes scope from chapter-level siblings via "整本书", and its tool name embeds the distinction further. It stops short of naming tnd_start_chapter_download or tnd_start_discrete_download explicitly as the narrower 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 clear next-step instruction ("使用 tnd_wait_job 轮询完成状态"), which is genuinely useful workflow guidance. However, it gives no guidance on when to choose this over tnd_start_chapter_download or tnd_start_discrete_download, and no prerequisites or exclusions are stated.

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

tnd_start_chapter_downloadB

启动单章下载任务;index 是 1-based 章节序号。完成后用 tnd_read_downloaded_chapter 读取。

NameRequiredDescriptionDefault
indexYes章节序号,从 1 开始
book_idYes数字书籍 ID

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 full behavioral burden. It implicitly discloses asynchronous behavior ('启动...任务', then '完成后'), which is genuinely useful, but says nothing about what the call returns (job id?), how to track progress (tnd_get_status / tnd_wait_job), behavior when the chapter is already downloaded, or whether it overwrites files.

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 short clauses with no filler, and the core action is front-loaded before the follow-up instruction. Nothing is wasted, though the redundancy with the schema's index description is minor slack.

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 2-parameter tool with full schema coverage and no output schema, the description covers purpose and the next step. It remains incomplete on the async contract (what is returned, how completion is detected) and on sibling selection among the four start_* tools, which is the main ambiguity an agent faces here.

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 both parameters (book_id, index) are documented in the schema. The description restates 'index 是 1-based 章节序号', which duplicates the schema's '章节序号,从 1 开始' and adds no new meaning, 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?

States a specific verb and resource: '启动单章下载任务' (start a single-chapter download task). The qualifier '单章' (single chapter) implicitly separates it from the bulk siblings tnd_start_book_download and tnd_start_discrete_downloads, though those siblings are never named.

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?

Gives a clear follow-up step ('完成后用 tnd_read_downloaded_chapter 读取'), which tells the agent what to do after starting. However, it never states when to pick this over tnd_start_download, tnd_start_book_download, or tnd_start_discrete_downloads, nor any preconditions such as whether the chapter must be checked first with tnd_check_chapters.

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

tnd_start_discrete_downloadsA

批量下载指定章节;indexes 为 1-based 在线目录位置,与 item_ids 二选一。跳过已有正文,连续位置合并为区间任务,后台顺序执行。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID
indexesNo离散章节位置,1-based;与 item_ids 二选一
item_idsNo章节 item_id;与 indexes 二选一

TDQS

A5/5.0
Behavior5/5

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

Since no annotations are provided, the description carries the entire behavioral burden. It explicitly details complex operational traits like 1-based indexing, merging continuous location tasks into intervals, and background processing.

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 definition is highly dense and efficient. It packs all essential functional requirements—input format, exclusivity, execution logic—into a single, powerful sentence without any superfluous wording.

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

Completeness5/5

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

Given the tool's complexity (handling discrete, possibly overlapping, and sequential chapter downloads), the definition is exceptionally complete. It informs the user of the necessary logical assumptions and execution environment required for correct usage.

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

Parameters5/5

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

While the schema defines the parameters, the description reinforces crucial semantic constraints: that indexes are 1-based, and that indexes and item_ids are mutually exclusive, adding clarity beyond the list format.

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

Purpose5/5

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

The description clearly states the tool's purpose using a specific verb and resource: '批量下载指定章节' (Batch download specified chapters). It defines the scope and identifies the action being taken.

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 provides critical usage guidance by detailing input constraints (indexes vs item_ids must be chosen) and execution flow (skipping existing content and sequential execution), which helps distinguish it from broader bulk download tools.

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

tnd_start_downloadA

启动下载器的下载任务;可按 range_start/range_end 指定章节范围。任务启动后需轮询 tnd_wait_job。

NameRequiredDescriptionDefault
book_idYes数字书籍 ID
range_endNo结束章节序号,1-based;与 range_start 同时提供
range_startNo起始章节序号,1-based;与 range_end 同时提供

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description usefully discloses that starting a download creates an asynchronous task requiring subsequent polling. It does not cover duplicate or already-running tasks, failure behavior, or how the job identifier and eventual result are obtained.

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 front-loads the action, then succinctly covers optional scoping and the required follow-up. It contains no filler or unnecessary 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?

For a three-parameter tool with a fully described schema, it adequately explains the basic call sequence. However, with no annotations or output schema, the missing default behavior when no range is supplied, lack of sibling differentiation, and absent job-result details are meaningful gaps.

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 book_id, the 1-based range bounds, and the requirement to provide both range values together. The description only reinforces that specifying a range is optional, so the high-coverage baseline of 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 gives a clear verb and resource—“启动下载器的下载任务”—and adds that a chapter range can be selected. It does not explain how this general range-based starter differs from tnd_start_book_download, tnd_start_chapter_download, or tnd_start_discrete_downloads.

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 provides concrete usage context: range_start/range_end optionally narrow the chapter range, and tnd_wait_job must be polled after the task starts. This is actionable workflow guidance, but there is no rule for choosing among the sibling download starters or any explicit exclusion.

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

tnd_wait_jobB

轮询下载任务直到完成、失败或取消;返回最终任务状态。

NameRequiredDescriptionDefault
job_idYes下载任务 ID
timeout_secondsNo

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden, and it does disclose the important behavior that this is a polling/blocking call that exits on completion, failure, or cancellation. However, it omits what happens when the wait times out (returning an intermediate state? error?), whether it blocks the caller, and any rate/polling interval details.

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 compact sentence with the action and termination conditions front-loaded and no filler. It is under-specified rather than verbose, so it loses points only slightly.

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 simple two-parameter blocking call with no output schema, the core idea is conveyed, but key details are missing: what the returned 'final status' values look like and how timeout interacts with the result. Adequate but with clear gaps.

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%: job_id is documented but timeout_seconds has no description anywhere. The description never mentions the timeout at all, even though the default of 120s and the 5-600 range materially change behavior; the description therefore fails to compensate for the schema gap.

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

Purpose4/5

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

States a specific verb (poll/wait) and resource (download job), plus the terminal conditions (completion, failure, cancellation). An agent can tell this is a blocking wait rather than a one-shot status read like tnd_get_status, though the description never names that 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: the agent must infer that this is for blocking until a job finishes, while tnd_get_status/tnd_get_jobs are for non-blocking inspection. No explicit when-to-use, when-not, or prerequisite guidance is given.

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. 24 tool updatesv0.3.0
    • First observedtnd_cancel_batch
    • First observedtnd_check_chapters
    • First observedtnd_get_batch_status
    • First observedtnd_get_book_status
    • First observedtnd_get_chapter_times
    • First observedtnd_get_chapters
    • First observedtnd_get_diagnostics
    • First observedtnd_get_history
    • First observedtnd_get_jobs
    • First observedtnd_get_library
    • First observedtnd_get_status
    • First observedtnd_get_updates
    • First observedtnd_list_downloaded_chapters
    • First observedtnd_preview_book
    • First observedtnd_read_downloaded_chapter
    • First observedtnd_read_downloaded_chapters
    • First observedtnd_read_latest_chapter
    • First observedtnd_retry_batch
    • First observedtnd_search_books
    • First observedtnd_start_book_download
    • First observedtnd_start_chapter_download
    • First observedtnd_start_discrete_downloads
    • First observedtnd_start_download
    • First observedtnd_wait_job

TDQS

B3.2/5.0

Scored across 24 tools

Disambiguation3/5

Descriptions do a lot of work to separate reading vs listing vs checking (many explicitly state '不返回正文'), but the four download-start tools (tnd_start_download, tnd_start_discrete_downloads, tnd_start_book_download, tnd_start_chapter_download) overlap heavily and an agent can easily pick the wrong one. Similarly tnd_read_downloaded_chapter(s) vs tnd_get_chapters (local-first batch read with optional download) is a subtle boundary. Read-side tools like tnd_get_book_status, tnd_preview_book, tnd_list_downloaded_chapters and tnd_check_chapters also cluster around the same object with only prose distinguishing them.

Naming Consistency4/5

All tools follow a uniform tnd_ prefix plus snake_case verb_noun convention (get_, list_, read_, start_, cancel_, retry_). Minor deviation: the generic tnd_start_download sits awkwardly beside the more specific tnd_start_book_download / tnd_start_chapter_download / tnd_start_discrete_downloads, making the verb_object pattern slightly non-parallel. Otherwise very predictable.

Tool Count3/5

24 tools is at the heavy end for a novel downloader; the batch/job lifecycle (start_, wait_, get_batch_status, cancel_batch, retry_batch) plus four separate download-entry points inflates the surface. Each tool has a stated role, but several could be collapsed (e.g. a single start_download with a scope parameter). Borderline over-scoped.

Completeness3/5

Core lifecycle is covered: search, preview, start download, poll/wait, batch cancel/retry, read local chapters, diagnostics. However, tnd_search_books notes it does '不管理订阅', implying a subscription feature with no corresponding tools, and there is no way to delete/clean library files, cancel a single job, or modify configuration (status only reads the config summary). Notable gaps for a downloader agent.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables browsing, searching, and quote verification of a local ebook library via MCP, providing deterministic RAG with no embeddings or network.
    6
    26 PyPI
    2
    MIT
  • F
    license
    A
    quality
    F
    maintenance
    Enables searching web novels by title, retrieving novel metadata and chapter lists, and reading free chapter content from Webnovel.com via MCP tools.
    5
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Gives MCP clients read-only access to a local Calibre library, enabling metadata search with Calibre query syntax, BM25 full-text search across EPUB/PDF/MOBI/LIT, chapter and page reading, highlights, notes, reading progress, and duplicate detection. It runs over stdio or Streamable HTTP with bearer authentication, using direct SQLite connections so it keeps working while the Calibre GUI is open.
    6
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to search a CWA book library, fetch titles from optional configured Z-Library sources, upload local EPUB/PDF files, and obtain verified CWA download links, with file transfer handled over short-lived authorized HTTP links rather than MCP messages. CWA itself performs ingestion and conversion, and write operations stay disabled until explicitly enabled.
    6
    18 npm
    MIT