Study Errorbook
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Study Errorbook检查工作区状态,然后整理 inbox 里的试卷,生成待复核错题草稿"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Study Errorbook · 学习错题 Agent 插件
通过 AI 宿主调用本地 MCP 工具,把 PDF、照片和试卷整理成保留原始证据、可人工复核、可再次练习的错题库。宿主负责理解题意和对话,工具负责导入、TextIn OCR、证据取图、版本记录、受限数学验算与打印导出。
v0.1.0 开发版,持续更新、完善与迭代中。 已实现的工具不等于自动判题可靠;OCR、手写擦除、几何理解与真实学习效果仍需原图和人工复核。代码、模拟测试、历史真实 API 调用和当前宿主验收分别记录,见 发布验证。
能解决什么
保存原卷、作答和批改,不把 OCR 转录直接当成真实题目或学生答案。
用证据图形成待复核草稿,区分 Agent 判断与用户确认。
检索错题、记录修改历史、生成基础变式、保留实际作答与帮助情况。
按用户指定日期安排复习,导出错题本、学生练习册、独立答案册及练习 ZIP。
发现识别冲突时回看原图,继续有依据的工作;不自动重传、付费重试或假装确认。
Related MCP server: examintel-mcp
环境与兼容性
Python 3.12+、uv、Git,以及支持本地 stdio MCP 的 AI 客户端。MCP 是客户端调用本地工具的协议,不是另一个聊天模型。
macOS 已有本机运行证据;Linux 使用相同 POSIX 文件锁接口,但尚需独立实机验收。
Windows 原生 Python 暂不支持。可在 WSL2/Linux 内安装并让客户端启动 WSL 中的服务;这一组合尚未实机验收,不提供 Windows 原生安装包。
首次安装会下载 Python/依赖,需要网络。API 服务的额度、价格和产品权限由各服务商控制,开源代码不包含免费额度或凭据。
安装并接入客户端
git clone https://github.com/SAKURAfan1023/study-errorbook.git
cd study-errorbook
uv sync --locked --python 3.12
uv run python scripts/configure_local.py
uv run python scripts/setup_private.py
uv run python scripts/smoke_mcp.pysetup_private.py 只创建专用输入目录与空凭据模板,不覆盖已有配置。smoke_mcp.py 使用临时空库验证工具发现和状态,不读取日常错题库、不调用 TextIn;完整合成材料流程由测试和独立安装验证覆盖。把生成的 .mcp.json 导入支持本地 stdio 的客户端,或按宿主的本地插件流程注册此仓库;然后调用 workspace_status 核对实际版本、数据目录和连接状态。
直接执行 uv run study-errorbook 会启动等待 MCP 请求的进程,不会出现独立聊天界面。完整的源码独立安装与升级方式见 安装说明。
配置 | 含义 | 位置/默认 |
| 付费 OCR 与擦除凭据 | 本地 |
| 允许导入的专用目录 | 设置脚本创建 |
| 数据库、原件与导出 |
|
解析 mode / 页数上限 | 显式选择免费/付费/VLM 与本次预算 | 每次上传前由用户授权 |
环境变量优先于本地配置。免费接口不代表材料留在本机,也不承诺永久可用。不要将密钥填到公开仓库、截图或对话中。
flowchart LR
File[授权试卷 / 图片] --> Import[本地导入与原件保存]
Import -->|明确上传授权| OCR[TextIn 识别]
Import --> Image[原图与局部证据]
OCR --> Draft[Agent 整理待复核草稿]
Image --> Draft
Draft --> Human[用户复核]
Human --> Store[版本化错题库]
Store --> Practice[练习 / 作答 / 日期复习]
Store --> Export[离线 HTML 与练习包]文档入口
开始使用
遇到文字漏识或图形描述与原图冲突时,可按原图核对指南继续整理:保留有依据的判断,并明确具体待确认位置。
完成下方安装并在宿主接入后,将授权材料放入 ~/Documents/StudyErrorbook/inbox。可先说“列出inbox中可选的材料”,Agent通过list_input_files查看第一层候选文件名和大小,无需宿主具备终端或文件浏览工具;它不会读取材料内容或自动上传。子目录、隐藏项和链接不在列表中;已知具体子目录文件路径仍可按既有导入规则处理。付费异步解析或手写擦除需在本地配置文件 ~/.config/study-errorbook/config.env 填写 TEXTIN_APP_ID、TEXTIN_SECRET_CODE;免费同步解析不需要凭据,但仍会上传材料。密钥仅在本地填写,无需发到对话。其他配置为 STUDY_INPUT_ROOT、STUDY_DATA_DIR;环境变量优先于配置文件。
凭据在本地填写;公共发行版不包含任何开发者钥匙串启动器或账号授权。
在已连接插件的 AI 会话中可以说:
使用学习错题插件,先检查工作区状态,再整理 inbox 中我指定的试卷。保留原答案和批改证据,看不清的集中列出,生成待复核错题草稿。
首次 parse_document 会上传材料到 TextIn 并产生 API 用量;必须指定本次允许处理的页数上限。默认 mode=paid_async;明确选择免费识别时使用 mode=free_sync,单文件最多10MiB、同步请求60秒超时,没有自动回退或重试。max_paid_pages 为兼容保留的参数名,在三种模式中都是页数上限。显式 mode=vlm_sync 使用付费VLM补充识别,仅支持单张已导入PNG/JPG,本地限10MiB、总等待60秒;原始分块与回执独立留存,不覆盖xParse结果。免费接口的额度和可用性由服务商控制,不承诺与付费接口效果一致。
OCR概览对Image元素提供visual_review提示,引导核对图形位置;图中文字为空或与原题相同不等于学生未答,提示也不是自动发现错误。
导入、证据裁剪、保存、查询、受限代数校验和导出均可本地运行。本地OCR缓存读取仅接受任务材料目录内、不跟随链接且不超过64MiB的普通文件;拒绝时保留任务状态,不自动重提。该上限是本地资源限制,不代表上游限制。擦除上传与原卷证据导出只接受材料目录内、20MiB以内的普通PNG;链接、管道、损坏或超限文件会被拒绝。题目拆分、批改归属、错因解释及出题由宿主 Agent 根据原图和结构数据完成,服务本身不含通用判题模型。
当前能力
跨任务续接解析:先
list_documents找材料,再list_parse_jobs找原任务ID,直接读取已有结果。列表不需要凭据、不读取源文件或查询TextIn,不会重新上传;保存状态不是远端存活证明。缓存缺失或损坏返回cached_result_unavailable;先核对本地缓存或可信备份,恢复后读取原job_id,不自动重新上传。待导入材料发现:
list_input_files只读列出专用输入目录第一层候选,按文件名分页;不判断是否已导入,大小合规不代表内容可解析。list_documents用于找回已导入材料。PDF/JPG/PNG 导入,最多20页、20MiB;保留原件,拒绝材料目录之外的路径。
删除影响预览:列出关联副本、历史、作答反馈、复习、文件与混合导出,保留共享验算并报告未能确认的项。可凭当前摘要执行本地级联删除,要求独占工作区;中断可恢复,保留最小回执。不会删除输入原件、备份或服务商数据。
上传前区域遮盖:本地生成独立PNG/PDF副本,去掉指定区域像素及原PDF隐藏对象,保留原件;副本预览后用新ID解析。需要明确选区,不自动找全个人信息;PDF转图片后可能影响小字质量。
TextIn xParse 异步任务、结果缓存及分页读取;提交结果不确定时不自动重新付费。
read_study_record可按revision读取已保存的题目历史,核对修正前后内容;历史快照不混入当前净题或复习状态。修改Agent判断也会清除旧错因分析和练习,先保存修正,再基于新版本分析;旧版本与历史作答保留。read_document提供最多20页的状态摘要(无元素页仍可见)、简短概览和有界复核线索(公式/手写对象计数、最多5项较低置信度字符,不自动判错),read_element可继续读取完整文字、行内公式、字符置信度/候选字、层级、表格和页面信息;不重复调用 OCR。原页/局部证据以真实 MCP 图片内容返回;可按需调用手写擦除,并保留原件。
crop_document本地生成可追溯的单页裁图,记录父页、源哈希和实际像素范围;检查后可显式补识别。裁图与遮盖后代纳入关联删除,不自动拼接OCR或判题。read_element_evidence按OCR区域和上游报告方向取证,保存原页区域;旋转显示不保证方向正确。倒置时将返回的document_id与region原样传给read_evidence按原页方向查看;无法可靠映射时先看整页。版本化错题记录、用户复核意见、练习作答;修订题干或证据后清除旧分析与练习。
精确有理数验算:默认检查变量
x的多项式恒等;显式kind=linear_equation检查化简后一元一次方程的唯一解,例如2*(x+3)=10与答案2。无解、多解、非线性和变量分母标为待复核,检查不证明自然语言题意匹配。原题和变式再次作答,保留当时题面快照与使用提示/解析情况;分页找回历史,题目改版后仍可核对旧作答。提供attempt_key时同次提交重试不会重复计数;不会自动判定掌握。
再次作答后的反馈可保存并修订:分别记录Agent判断、具体解释、下一步建议与用户明确意见;仅更新Agent解析会保留已有用户意见;明确撤回有独立标识及来源版本。旧反馈全部保留,版本冲突不会覆盖,原作答和题面不变。反馈状态只表示已记录,不表示已掌握。
错题查询:只搜索当前学习内容,可组合精确筛选学科、知识点、材料、复核状态和Agent判断(例如判错或待确认);分页摘要含下一页位置,兼顾条数与摘要字节量;少于limit时仍按next_offset继续,不会把内部字段名当关键词命中。
练习题面:单独读取变式题干、原题转录或已复核净题图,不附旧作答和解析;保存作答时检查同一题目版本。
日期复习队列:按用户明确日期安排原题或已检查的变式,查询到期/待重新核对项,关联新的匹配作答完成或取消计划;保留全部版本。仅提供可查询队列,不自动通知、计算复习间隔或判定掌握。
导出可打印 HTML 错题本、学生练习册和独立答案册。默认只导出用户已纳入的记录,也可明确导出带状态的草稿。错题本分别显示卷面批改和Agent判断;两者不一致时提醒核对,包括卷面正确/部分正确而Agent认为未作答的情形。错题本与manifest保留有界的保存来源链和证据文件哈希,区分裁图页与材料页;不附完整父页,也不代表父文件当前已校验。
导出失败恢复:文件全部写成后才生成正式导出目录;普通异常清理本次半成品。强制退出遗留内容在已有构建清单时仍可进入删除预览;不保证断电持久性,也不自动删除无法归属的目录。
净题读取:查看、复核、缓存取图和导出均检查对应材料目录中的普通PNG,拒绝链接、异常文件和超过20MiB的单图;练习取图合计仍为12MiB。异常只报告当前不可用,不重新付费擦除。
原题重练:按需生成擦除图,关联到记录的clean_evidence_ids;用户对照原图复核后,按来源ID和图片sha256记录确认。有净题时额外导出original-practice.html,按所选顺序展示题图和答题区,不带入原答案/分析。修改记录、图片或再次复核会使旧确认失效;未确认图仅能进入明确标注的草稿。实际擦除效果仍需真实材料验收。
本地开发与复现
导入材料须为已保存到本地的普通 PDF/JPG/PNG 文件。误选目录、管道或设备会返回可处理的文件错误,之后仍可继续导入正常材料;插件不会等待管道内容或自动转换不支持的文件。
本地取证、裁图、遮盖生成和解析读取已保存材料时,同样限制为工作区内的普通文件及20MiB以内内容,不跟随源文件链接。裁图和遮盖副本还核对保存的哈希;变化后拒绝复用、取证或解析。渲染及每次解析提交使用已检查的字节快照,提交层不再打开源路径;免费解析仍限制10MiB。解析任务的submitted_source_sha256和submitted_source_bytes描述本次准备提交的内容,不代表服务商已受理,也不等同于规范化前原件的文档哈希。读取期间普通文件被外部原地改写不在一致性保证内。
uv sync --python 3.12
uv run python scripts/configure_local.py
uv run python scripts/setup_private.py
uv run python scripts/smoke_mcp.py
uv run pytest -q
uv run ruff check src tests scripts
uv run python scripts/demo.py演示使用明确标注的合成卷面和预置分析,不调用 OCR 或模型 API。导出目录记录在 data/demo/latest-export.txt,打开其中的 errorbook.html、practice.html、answers.html 即可查看。
uv run python scripts/probe_free_ocr.py 是另一个显式联网实验:只生成并上传一页合成材料,不读取凭据或现有文件,结果保存到 data/probes/,不会自动重试。历史实测摘要不代表当前服务商可用性;真实响应和本地诊断材料不随仓库公开。
开发用 .mcp.json 由脚本生成并被 Git 忽略;搬动项目后须重新生成。.mcp.example.json 仅用于展示格式。独立安装包使用单独的 wheel 运行环境,不依赖源码目录。可用 uv run python scripts/build_release.py 生成 ZIP 安装包,换机器解压后运行安装器,再导入生成的 MCP 配置或注册插件。详见独立安装说明。安装会下载固定依赖,不是完整离线包;macOS 已实测,Linux 与其他 Agent 宿主待验证,Windows 暂不支持。
默认真实数据目录为 ~/.local/share/study-errorbook,与插件缓存分离。同一台机器的多个新版服务进程可以共享错题库;版本冲突会要求先读取最新记录,同一远端任务不会并发重复提交。旧版服务仍在运行时需要先关闭旧连接。不同用户的数据仍应使用独立目录,数据库不能放在网络盘;这不是多用户权限系统。真实材料、配置和数据库均应留在版本控制之外。
解析任务失败或提交结果未知时,可在用户明确同意后调用 retry_parse_document。先 get_job 读取 attempt_number,将其作为 expected_attempt,同时提供页数上限、确认标记和用户意见;相同尝试编号不会再次提交。旧尝试与新提交标记在本地同一事务保存,get_job(include_attempt_history=true)返回最近10次旧尝试及总数。超时可能已经被上游受理,此功能不能保证上游只处理或计费一次。运行中、部分成功与已完成任务均禁止重提;40306应先联系服务商。若只是运行中任务暂停查询,在用户明确要求后调用 resume_job_observation(job_id, expected_attempt, expected_observation_revision, user_note):复用远端任务ID,不重新上传。两个版本来自get_job;重复决定会被拒绝,再次限流仍停止,3秒查询间隔仍有效。
导出支持离线公式排版:行内 \(...\),独立公式 \[...\] 或 $$...$$;普通美元金额不会被当作公式。KaTeX 0.18.9及字体随包提供,浏览器不从CDN下载。请保留整个导出目录,包括assets和证据图片。无效/不支持的公式保留原文并提示;使用A4打印样式与答题留白,三册均保留复核状态,未验算的参考答案明确标注。超长题目与复杂公式仍须检查打印预览。
离线打印回归:uv run python scripts/print_fixture.py 生成纯合成样例;可选开发脚本 scripts/verify_print.cjs <导出目录> 使用本机Node、Playwright与Chrome检查浏览器,并在 tmp/pdfs/print-qa/ 生成QA用PDF。普通MCP导出仍返回HTML,不自动生成PDF,也不依赖Node/Chrome运行。
错题本导出保留卷面批改、Agent判断、笔迹归属、用户复核意见、知识点和诊断追问。题目、批注、分析引用的证据都会带入导出,通过编号链接跳转;同一证据跨题使用时不会链接到另一题。manifest.json保存记录版本及证据原页坐标,工具返回manifest_path。练习目的放在答案册,学生册不包含答案或这类提示。
已观察到 OCR 漏行、符号误识和涂写串入;接口成功不证明转录完整。原始诊断材料不公开,判断必须回到使用者自己的原图。
学生练习材料可直接使用 export_errorbook 返回的 practice_bundle_path:ZIP 内保留离线字体和所选净题图,排除答案册、错题本与原卷作答图。完整导出目录仍用于留档;题干和净题图中的提示残留仍须核对。
练习册、答案册和练习包README使用相同资料编号。多次导出后,请同时按资料编号与题号配对;每次导出有独立编号,题目版本仍记录在manifest中。
升级核对可调用workspace_status,比较runtime_version与目标安装目录installation.json中的值。发布wheel包含独立构建时间戳,插件缓存+codex后缀是另一标识。匹配后仍需验证实际工具行为;旧会话缺少此字段时不能声称已加载新版。
复习队列默认使用中性名称,省略可能带答案或错因的自由题目标签与学科。整理题库时可对read_review_queue显式传include_labels=true找回原标签;独立答题前不展示这些标签。
小数验算按原始文本精确读取;超出受限范围时待复核,不经浮点舍入后放行。当前练习状态会本地重算保存的算式,原验算输出仍作为历史保留;升级后的实时结果以exercise_validation中的check_status/check_reason为准。
常见问题、升级与项目结构
找不到材料:确认文件位于
STUDY_INPUT_ROOT,是受支持的普通文件;先调用list_input_files,不要直接放宽目录限制。重启后记录消失:先核对
workspace_status中的数据目录;插件缓存、运行环境与数据目录是三个不同位置。OCR 结果缺失或有错:保留任务 ID 和缓存,按原图核对;
submission_unknown可能已经被上游受理,不自动重复提交。宿主仍显示旧能力:核对服务返回的
runtime_version,更新源码或 Skill 不等于旧 MCP 进程已经重载。导出提示待复核:先核对题干、答案和对应记录版本;不要替用户伪造确认。
源码升级前保存本地改动并备份数据,再执行 git pull --ff-only、uv sync --locked、重新生成配置并在客户端重载服务。独立发行包安装到新目录后再切换,保留旧版本便于回退。
src/ 保存实现,skills/ 保存 Agent 指南,tests/ 保存回归测试,scripts/ 保存配置、构建、自检与可选实验,docs/ 保存公开用户指南。本机历史诊断文档、原卷、数据集、安装记录和 data/、output/ 等不进入公开提交;带实验名称的脚本可能依赖自行准备的材料,并不全部是安装自检。
维护、贡献与使用声明
持续更新、完善与迭代中。禁止恶意转载与滥用。 转载须保留版权和许可声明,请注明原仓库及修改内容;不得冒充作者或官方、夹带恶意代码、盗取凭据、泄露个人资料或伪造研究/学习证据。
代码按 MIT License 开源。上述反滥用声明不额外撤销 MIT 授予的合法使用、修改、转载或商用权利;第三方材料和服务不随代码一并授权。完整说明见 USE_POLICY.md、第三方声明。
欢迎通过仓库 Issues 反馈 Bug 或建议。请包含版本、系统、脱敏复现步骤、预期与实际结果;不要上传密钥或真实私密材料。提交代码前阅读 贡献指南,安全问题见 SECURITY.md。
Available Tools
32 toolscheck_exerciseA
精确有理数验算。默认polynomial_identity检查变量x多项式恒等,如2*(x+3)与2x+6。linear_equation检查化简后一元一次方程的唯一解,如expression=2(x+3)=10、proposed_answer=2(答案不带x=)。使用显式*;无解、多解、非线性或变量分母返回待复核。仅验证所给算式,不保证题意/答案匹配或教学效果。
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | polynomial_identity | |
| expression | Yes | ||
| proposed_answer | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | 保存的验算ID,可由练习check_id引用;不证明自然语言题意匹配。 |
| kind | Yes | |
| scope | Yes | 本次验算覆盖的数学范围与不能证明的事项。 |
| reason | No | needs_review时说明无法自动验算的原因;通过或不符合时省略。 |
| status | Yes | equivalent为所选模式下验算通过;not_equivalent为答案不符合;needs_review为超出验算范围或无法解析,不是判错。 |
| expression | Yes | |
| proposed_answer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations the description discloses genuinely useful behavior: no-solution, multiple-solution, non-linear, or variable-denominator cases return "待复核" (pending review), and expressions must use explicit '*'. It does not address the side effects implied by readOnlyHint=false / idempotentHint=false, so the non-read-only nature of the tool remains unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense paragraph with the core purpose front-loaded and no filler; each clause (modes, examples, edge cases, scope) carries information. The density makes it slightly harder to scan, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description covers modes, format requirements, edge-case behavior, and scope limits. The main remaining gap is the absence of any mention of side effects, despite readOnlyHint=false.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the params, and it does: it explains both values of `kind` and the default, the `expression` format (explicit '*', with examples), and `proposed_answer` (supplied without 'x=', e.g. 2). This meaningfully compensates for the empty schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ("精确有理数验算") and then pins down the two exact verification modes it performs: polynomial identity in variable x and the unique solution of a simplified one-variable linear equation, each with concrete examples. It is clearly understandable in isolation, though it does not explicitly distinguish itself from related sibling tools such as review_practice_attempt or record_practice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when each mode applies (polynomial_identity is the default; linear_equation handles simplified linear equations) and gives worked examples for both. It also adds a scope exclusion – it only verifies the given expression and does not guarantee intent/answer matching or teaching effect – but it does not point to any alternative tool for those other needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crop_documentAIdempotent
本地裁出一页指定区域,返回独立document_id和父页/哈希/像素边界;不上传、不覆盖原件。先查看原页,再传原页归一化region;不能直接传方向未知的OCR坐标。PDF使用已有原页渲染,不额外缩放或旋转,输出第1页PNG。read_evidence查看裁图后,需要补识别才显式parse_document;这会新增上传,不是免费重试。结果坐标属于裁图,不自动拼接原OCR或判断作答;crop字段记录直接父页,嵌套时逐层追溯。相同源字节/区域复用,副本变化拒绝。删除父文档包含此后代;裁图不自动识别或消除个人信息。
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false). It discloses that no upload occurs and the original is not overwritten, that PDFs reuse existing page rendering with no extra scaling/rotation and output page-1 PNG, that identical source bytes/region are reused while changed copies are rejected, that deleting the parent document removes this descendant, and that crops are not auto-recognized or PI-redacted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and its most important constraint (no upload, no overwrite), then layers in sequencing, reuse, and lifecycle facts. Dense but nearly every sentence adds distinct, decision-relevant information; a little consolidation would help, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the annotations already cover the safety/idempotency profile. Within that context the description supplies the crop-vs-OCR coordinate constraint, the read_evidence/parse_document follow-up path, nesting/parent-tracing rules, and delete-cascade behavior — everything an agent needs to invoke and sequence this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the load, and it does add key semantics: region must be a normalized region of the original page rather than raw OCR coordinates, and coordinates of the result belong to the crop (parent tracking via the crop field, traced layer by layer when nested). It still does not spell out the exact box ordering/coordinate range, so it stops short of fully defining the Region object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: locally crops a specified region of a page and returns an independent document_id plus parent page/hash/pixel bounds. It also distinguishes itself from siblings by explicitly clarifying it does not upload or overwrite the original, and by naming read_evidence and parse_document for the follow-up steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing (view the original page first, then pass a normalized region of the original page) and an explicit prohibition (cannot pass OCR coordinates of unknown orientation). It also routes follow-up work: use read_evidence to view the crop, and parse_document only if recognition is genuinely needed, noting this adds a new upload rather than being a free retry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_documentADestructiveIdempotent
执行本地级联删除。仅在用户明确要求删除且已看完整preview_document_deletion影响范围后调用,含整份混合导出;acknowledge_delete由Agent转述,不是独立认证。必须传当前摘要;有其他会话/远端执行时拒绝。中断会关闭服务,重连继续已授权恢复。保留最小回执;不删除输入原件、外部拷贝、备份或服务商数据,不保证SSD物理擦除。
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | ||
| inventory_digest | Yes | ||
| acknowledge_delete | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds substantial context beyond them: what the cascade actually includes (the full mixed export), what survives (input originals, external copies, backups, provider data), the absence of SSD physical-erasure guarantees, interruption/reconnection behavior, and that only a minimal receipt is retained. This is exactly the extra material an agent needs for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, front-loaded with the action and the preconditions before the caveats. Nearly every clause carries non-redundant information, though the run-on packing of interruption behavior and non-deletion guarantees into one sentence slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a local cascade delete with an output schema present, the description covers scope, preconditions, refusal conditions, and survivor-set caveats thoroughly, so return values need not be explained. The remaining gap is the undocumented meaning/derivation of document_id and inventory_digest, which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across all three required params. The description compensates partially by stating inventory_digest must be current and by clarifying that acknowledge_delete is an agent-relayed flag rather than standalone authentication, but document_id is never explained and the digest's format/source is left implicit. Partial compensation, not full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('执行本地级联删除') and immediately scopes it against the sibling preview_document_deletion by requiring that tool's output to have been reviewed first. An agent can distinguish this destructive cascade from preview_document_deletion and redact_document 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit preconditions (user must have requested deletion AND seen the full preview_document_deletion impact), explains that acknowledge_delete is agent-relayed rather than an independent authorization gate, and gives explicit refuse conditions when other sessions or remote executions exist. When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_errorbookA
导出本地可打印HTML错题本、学生变式题册与独立答案册及原卷证据图。选了clean_evidence_ids时额外输出original-practice.html原题重练册。practice_bundle_path是仅练习材料的ZIP,含练习页、所选净题图与离线资源,不含答案册/错题本/原卷图;给学生材料时使用此包并完整解压,不要复制含答案的整个导出目录。题干与净题图仍需检查提示残留。默认只导出用户纳入、练习有适用验算/用户复核、净题已按当前图片复核的记录;先read_study_record查看exercise_validation和clean_copy_validation。include_drafts允许带待复核标记的草稿。证据明细在manifest_path。完整导出目录供留档,含答案和原作答。不会自动发布或发送。
| Name | Required | Description | Default |
|---|---|---|---|
| record_ids | Yes | ||
| include_drafts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false; the description adds real value beyond them by disclosing the default record filter (only user-included, validated, re-checked records), what include_drafts unlocks, that the full export directory contains answers and original answers, and that nothing is auto-published or sent. This is meaningful behavior the annotations don't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and front-loads the outputs, but it is a run-on sequence of semicolon-separated clauses mixing outputs, packaging warnings, defaults, and prerequisites. It is complete rather than wasteful, but the structure makes it hard to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return semantics need not be spelled out, yet the description helpfully names practice_bundle_path and manifest_path and explains their contents. Combined with the default-filter explanation and the include_drafts note, most of what an agent needs is present; only record_ids's expected form remains unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. It explains include_drafts well ('允许带待复核标记的草稿'), but record_ids semantics are only implied (records to export, subject to the default filter). Worse, it references 'clean_evidence_ids', which is not a parameter in the schema, creating confusion about the actual input surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a clear verb (导出/export) and enumerates the concrete artifacts produced (错题本, 变式题册, 答案册, 原卷证据图). An agent immediately knows this produces a printable export bundle. It does not explicitly differentiate itself from siblings like query_errorbook or make_clean_copy, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong contextual guidance: it names the downstream action ('给学生材料时使用此包并完整解压') and an explicit exclusion ('不要复制含答案的整个导出目录'), plus a prerequisite ('先read_study_record查看exercise_validation和clean_copy_validation'). This tells the agent when and how to use the output, though it does not explicitly contrast against any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobAIdempotent
查询既有TextIn任务并缓存完成结果,不重新提交。pending/in_progress至少间隔3秒;观察失败保留任务。partial必须说明缺页。include_attempt_history返回最近10次旧尝试及总数,完整历史保存在本地。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| include_attempt_history | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds real behavioral context beyond them: results are cached rather than resubmitted, polling must be spaced by at least 3 seconds, failed observations keep the job alive, and partial results require stating missing pages. These are concrete traits an agent needs that the annotations don't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: purpose first, then polling behavior, failure handling, partial handling, and the parameter note. There is essentially no filler, though the run-on semicolon structure makes it slightly hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, and the description covers the operational edges (poll interval, failure retention, partial results) that matter for correct invocation. The main gap is the absence of any alternative-selection guidance among the job-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It explains include_attempt_history meaningfully (returns the last 10 old attempts plus total count, full history stored locally), but job_id is left unexplained and only one of two parameters is addressed, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (查询既有TextIn任务并缓存完成结果) and adds the key qualifier 不重新提交, which separates it from a fresh submission. It does not name a sibling like resume_job_observation or list_parse_jobs to fully disambiguate, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives operational guidance for pending/in_progress (wait at least 3 seconds between calls) and for failure (retain the job), which implies polling usage. However, it never states when to prefer this over resume_job_observation, list_parse_jobs, or retry_parse_document, so selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_documentA
导入用户指定且已保存到本地的普通 PDF/JPG/PNG 文件(专用材料目录内,20MiB/20页),保留彩色原件。目录、管道或设备会被拒绝;不会调用 TextIn。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare write semantics (readOnlyHint=false, destructiveHint=false, non-idempotent), and the description adds real behavioral context beyond that: rejection of directories/pipes/devices, color-original preservation, and the no-TextIn guarantee. It stops short of describing the failure/response behavior in detail, but the added constraints are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence front-loads the purpose and constraints (formats, size, location) before the caveats about rejected input types and TextIn. Every clause earns its place; only the trailing semicolon clause could arguably be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-path import tool with an existing output schema and full annotation coverage, the description supplies formats, size/page limits, rejection cases, and the no-TextIn boundary, which is nearly everything an agent needs. The only omission is the path-format detail, which is minor given the output schema handles returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the single 'path' parameter carries no format documentation. The description partially compensates by implying the path must point inside the dedicated materials directory and to a supported file type, but it never states whether the path is absolute/relative or its exact shape, so gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (导入/import) and resource (PDF/JPG/PNG 文件), and adds scope qualifiers: local saved files, dedicated materials directory, 20MiB/20-page limits. The clause '不会调用 TextIn' distinguishes it from the parse_document sibling, so an agent can separate it from parsing tools without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames the intended input (user-specified file already saved to the local materials directory) and implies use before parsing by noting TextIn is not invoked. It does not explicitly name an alternative sibling (e.g., list_input_files or parse_document) or state when-not to use it, keeping it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsBRead-onlyIdempotent
分页找回已导入材料及其真实 ID,避免跨会话猜测 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds pagination behavior and the cross-session ID-stability rationale, but discloses nothing about rate limits, ordering, or output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the key purpose and rationale front-loaded; nothing is wasted. It is arguably terse to the point of omitting needed guidance, but structurally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and annotations cover safety. But for a list tool with two undocumented parameters, the description leaves gaps in pagination mechanics and when to prefer it over sibling list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters (limit, offset) are undocumented. The description only mentions '分页' (pagination), which gestures at the two params but doesn't explain their meaning, defaults, or ranges, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (pagination/retrieval) and resource (已导入材料, imported documents) and highlights the key output trait (real IDs). It is clear what the tool does, though it does not explicitly distinguish itself from siblings like list_input_files or list_parse_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'避免跨会话猜测 ID' implies the use case (fetching authoritative document IDs so you don't guess across sessions), which is useful implied guidance. However, no explicit when-to-use/when-not or named alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_input_filesARead-onlyIdempotent
用户要查看待导入材料时,分页列出配置的专用输入目录第一层PDF/JPG/PNG候选及大小,跳过隐藏项、链接、子目录和特殊文件。不读取内容、不导入、不上传;大小合规不证明格式/页数有效,也不表示用户授权处理。用next_offset继续,目录变化后刷新首页;实际导入仍逐文件检查。已导入材料用list_documents。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it explicitly says the tool does not read content, import, or upload, and clarifies that size compliance does not prove format/page-count validity or constitute user authorization. These boundary disclosures are the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: purpose and scope come first, followed by caveats, pagination, and the sibling pointer. Every clause adds signal, though the caveat cluster ('does not read/import/upload' plus the validity and authorization disclaimers) is slightly heavy for the amount of behavioral difference it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists (covering next_offset), and annotations cover safety, so the description need not explain return values. Given full context, it supplies trigger conditions, scope limits, non-actions, pagination behavior, and the alternative tool – nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains pagination via next_offset and first-page refresh, but never defines the offset or limit parameters themselves (e.g., units, max limit, default of 20), so it only partially compensates for the coverage gap. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (paginated list) and resource (first-level PDF/JPG/PNG candidates in the configured input directory) with explicit scope constraints. It names the sibling list_documents as the alternative for already-imported materials, so an agent can distinguish it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the trigger scenario (user wants to view materials pending import) and the exclusion/alternative (use list_documents for imported materials). It also explains the pagination workflow (continue with next_offset, refresh the first page when the directory changes) and warns that actual import still requires per-file checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_parse_jobsARead-onlyIdempotent
跨会话找回指定材料已保存的解析任务ID、模式和状态。先list_documents获得材料ID,再分页读取next_offset;只查本地记录,不读源文件、不查询TextIn、不重提或恢复任务。状态不是远端存活证明,completed/partial也不保证缓存文件完整;用返回id调用read_document读取既有结果,其他状态用get_job检查。不要为找回ID调用parse_document。旧尝试由get_job(include_attempt_history=true)读取。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds substantive behavior beyond them: it queries only local records, does not read source files or TextIn, and does not resubmit or resume jobs. It further warns that status is not proof of remote liveness and that completed/partial does not guarantee cache-file integrity, which is high-value operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core purpose and the when/when-not routing come first, followed by status caveats. Nearly every clause earns its place, though the multi-clause status discussion is slightly heavy for a list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers the retrieval flow, local-only constraint, status interpretation caveats, and downstream tool routing, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies that document_id comes from list_documents and that offset drives pagination (next_offset), which adds real value, but it never explains limit semantics or its default. Partial compensation for a fully undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: cross-session recovery of saved parse job IDs, mode, and status for a given document. It explicitly distinguishes itself from siblings parse_document, get_job, and read_document, so an agent can tell them apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites (call list_documents first to obtain the material ID) and pagination flow (read next_offset). It names alternatives with conditions: use read_document for existing results, get_job for other statuses, and explicitly warns not to call parse_document just to recover IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_clean_copyAIdempotent
仅在用户需要空白重练题时付费调用 TextIn 擦除已保存的证据切图。原件不变,结果必须人工/视觉检查题干损伤;重复调用不重提交。
| Name | Required | Description | Default |
|---|---|---|---|
| evidence_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the cost (paid TextIn call), that the source is preserved (consistent with destructiveHint=false), that output quality needs human/visual verification (question-stem damage), and that repeats do not resubmit (matching idempotentHint=true). It still omits where the resulting copy goes or how it is retrieved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the key precondition (only when blank re-practice is needed) and then covers cost, preservation, verification, and idempotency without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, paid, external-call tool with no output schema and annotations already covering the safety profile, the description covers when to call and the caveats. It remains incomplete on the return artifact and retrieval path, which matters for a tool that produces a new copy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and evidence_id has no description, but the prose references a 'saved evidence crop', implicitly tying evidence_id to that object. This adds a little meaning but no format, sourcing, or validation detail, so it only reaches the baseline-with-partial-compensation level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (create a blank/clean copy of a saved evidence crop by having TextIn erase it) and states the outcome (the original stays unchanged). It is distinguishable from siblings like read_evidence or crop_document, though it does not explicitly name a sibling for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition: call only when the user needs a blank question for re-practice. It also flags that the call is paid, which is real usage guidance. It does not, however, compare against an alternative such as re-reading or re-cropping the evidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_documentAIdempotent
上传指定材料到TextIn;有个人信息时先本地redact_document并检查全部副本页面,使用副本新ID。默认paid_async需凭据并计费;显式free_sync免凭据(10MiB、60秒),仍上传;显式vlm_sync为独立付费补充识别,仅已导入单张PNG/JPG,本地限10MiB/总等待60秒,保存原始分块及回执。三种模式不自动切换,max_paid_pages均为1–20页上限。重复调用复用同模式任务,包括失败/不确定状态;不要切换模式绕过重试保护。VLM不会改写xParse或学习记录;用read_document/read_element读取独立输出,再用read_evidence核图。遮盖副本变化会拒绝上传;额度由服务商控制。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | paid_async | |
| document_id | Yes | ||
| max_paid_pages | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true, openWorldHint=true) by disclosing credential/billing requirements per mode, size and timeout limits, that uploads still occur in free_sync, that duplicate calls reuse failed/uncertain tasks, that redacted-copy changes are rejected, and that quotas are provider-controlled. The idempotent hint is reinforced and explained rather than merely repeated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Nearly every clause carries real operational information, but it is delivered as one dense semicolon-chained block rather than front-loaded, scannable structure, making the mode contracts and constraints harder to extract than they need to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers credentials, billing, size/timeouts, retry/idempotency semantics, redaction preconditions, and where outputs are read (read_document/read_element/read_evidence); with an output schema present it need not describe return values. The only gap is the meaning of document_id itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load, and it defines the mode enum exhaustively (paid_async/free_sync/vlm_sync semantics) and the max_paid_pages 1–20 ceiling. document_id is only indirectly explained (use the redacted copy's new ID), leaving one of three params under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a concrete verb+resource ('上传指定材料到TextIn') and the body names the mode-specific behaviors that constitute parsing, plus it explicitly routes to sibling tools (redact_document, read_document, read_element, read_evidence). It never plainly says 'parse the document and produce structured output,' so the core action is implicit rather than stated, but an agent can still distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when/when-not guidance: use paid_async (default, billed), free_sync for credential-free small inputs, vlm_sync only for already-imported single PNG/JPG; modes never auto-switch; repeated calls must reuse the same mode and must not be used to bypass retry protection; and it prescribes the redact-first flow when personal data is present. Alternatives are named rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_document_deletionARead-onlyIdempotent
只读检查删除文档的影响,绝不执行删除。包含遮盖与裁图副本后代、错题历史、作答反馈/复习、解析/图片及包含这些题的导出。共享验算保留;混合导出明确列出其他题。next_offset继续,digest变化需重读;存在unresolved时不能称完整清单。不跟随符号链接。仅工作区内,外部原文件/拷贝/备份/服务商数据不在范围;完整清单与用户指令明确后才可调用delete_document。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses pagination continuation via next_offset, that a changed digest invalidates prior reads, that an 'unresolved' state means the list is not complete, that symlinks are not followed, and that external files/copies/backups/provider data are out of scope. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, leading with the read-only guarantee and impact scope. Every clause carries operational meaning, though the run-on punctuation makes it slightly harder to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Given the tool's complexity, the description covers scope boundaries, pagination, digest invalidation, completeness criteria, and the handoff to delete_document — nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains next_offset-based continuation (covering offset/limit indirectly) but never defines limit/offset semantics or the document_id contract, leaving gaps for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names a specific verb (read-only check / 只读检查) and resource (document deletion impact), and explicitly negates the destructive alternative with 绝不执行删除. An agent can immediately distinguish this from delete_document in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the gating condition for the destructive counterpart: delete_document may only be called after a complete list exists and the user has given an explicit instruction. That is clear routing guidance, though it does not explicitly enumerate other preview/listing alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_errorbookARead-onlyIdempotent
查当前错题文本,关键词为不区分大小写的字面子串;不匹配内部字段名/ID/旧历史,不支持通配符或Anki语法。可按复核状态、Agent判断、学科、文档ID及单个知识点精确筛选,条件取交集;省略表示全部。默认含已排除题,练习选题宜指定review_status=include。agent_verdict=wrong表示模型判错,不等于用户已纳入;agent_verdict=uncertain也不等于review_status=uncertain。返回分页题干摘要及next_offset;摘要项JSON合计最多12000个UTF-8字节,即使少于limit也须按next_offset继续;不会重新OCR。翻页期间增删改后刷新首页,摘要可能含提示,不在独立作答前展示。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No | ||
| subject | No | ||
| document_id | No | ||
| agent_verdict | No | ||
| review_status | No | ||
| knowledge_point | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: no re-OCR, a 12000-byte cap on the JSON summary set that forces continued paging via next_offset even when results are fewer than limit, and the instruction to refresh the first page after mutations during paging. It also warns that summaries may contain hints that must not be shown before independent answering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and matching rules are front-loaded, and nearly every clause adds distinct information (byte cap, pagination, verdict-vs-status distinction). It is dense and semicolon-heavy, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description usefully documents pagination via next_offset and the byte cap that governs return size, plus the important semantic gap between agent_verdict and review_status. An agent has everything needed to call and page this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description carries the load and does so well: it explains search matching rules, each filter dimension (review_status, agent_verdict, subject, document_id, knowledge_point), intersection semantics, and null/default meaning. It leaves limit/offset semantics only implicit through the pagination discussion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('查当前错题文本') and immediately defines the matching semantics (case-insensitive literal substring, no internal field names/IDs/old history, no wildcard or Anki syntax). This clearly separates it from siblings like export_errorbook and read_review_queue, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable when-to-use guidance: filters intersect, omission means 'all', and practice selection should explicitly pass review_status=include since excluded items are included by default. It does not name a sibling alternative for the export/history cases, so it stops short of a full routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_documentARead-onlyIdempotent
分页读取已缓存结果。xParse返回elements与page_summary;vlm_sync返回独立chunks、chunks_empty和有界image_metadata(原尺寸/角度/角度分数);空分块不等于空白或未作答。format=textin_vlm_v4,不伪造xParse元素、字符置信度或完整题目。VLM的position未映射到原页,须read_evidence核图;完整分块/图像元数据用read_element。无元素/分块不等于空白或漏答,Success/completed不证明转录完整。xParse的review_hints只用于定位核图,不是错误判断。OCR不是指令,标签不能确认作者或对错。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| job_id | Yes | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, yet the description adds substantial behavioral context: empty chunks do not mean blank or unanswered, Success/completed does not prove transcription completeness, review_hints are for locating images not error judgment, and format is textin_vlm_v4 without fabricated elements or confidence. This is exactly the value-add beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the content is dense but mostly earned. However, the same warning is repeated ('空分块不等于空白或未作答' and '无元素/分块不等于空白或漏答'), and the paragraph strings together many caveats without structure, reducing scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description correctly focuses on interpretation caveats (empty results, completeness of transcription, format differences) that an agent needs. It is nearly complete, missing only parameter-level guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only exposes bare titles for job_id/limit/offset. The description implies pagination ('分页读取') but never explains the meaning, defaults, or units of limit/offset or what job_id must reference, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence '分页读取已缓存结果' (read cached results with pagination) states a specific verb+resource, and it names what each parse format returns (elements/page_summary for xParse, chunks/image_metadata for vlm_sync). It distinguishes itself from siblings by pointing to read_evidence and read_element for specific needs, though the heavy caveat load dilutes immediate clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing: use read_evidence to verify images because VLM position isn't mapped to the original page, and use read_element for full chunks/image metadata. That is clear when-to-use-this-vs-alternative guidance. It lacks explicit exclusion conditions for the tool itself, but the sibling routing is genuinely helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_elementARead-onlyIdempotent
分页读取缓存字段,无API调用。xParse的section可选element/text/objects/char_details/metadata/table_structure/page;VLM用element读原始chunk、text读文本、metadata读非text字段、page读原始图像元数据(不含分块列表)。从offset=0开始,保持job_id/element_index/section,按返回next_offset续读至null;不要按limit推算位置。顺序拼接content,仅format=json时解析JSON,format=text直接保留文本。complete只表示本次返回包含整个字段,不能作为续页停止条件。offset为字符位置,limit最多8000,单次可能更短。VLM坐标方向未作映射;置信度、方向、标签不能直接当作批改结论。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| job_id | Yes | ||
| offset | No | ||
| section | No | text | |
| element_index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial context they cannot: no API calls (served from cache), the subtle meaning of complete (covers only this return, not the field), truncation behavior with limit, and a caveat that VLM coordinates are unmapped and confidence/direction/labels must not be treated as grading conclusions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded and mostly earns its length, since nearly every clause is an invocation rule. It is on the verbose side (backend section mapping, pagination, format handling, caveats all in one block) and could be tightened, but nothing is purely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is not required, and the description covers everything else an agent needs: section selection, pagination loop, JSON vs text handling, and the VLM interpretation caveats. Nothing required for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it does: offset is defined as a character position, limit's max is 8000 with a note that a single return may be shorter, and section is fully enumerated with per-value meaning. The two required identifiers are covered by the instruction to keep job_id/element_index stable across pages.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (paged reading of cached element fields, no API calls) and immediately scopes it by enumerating the selectable sections for both xParse and VLM backends. An agent can tell this apart from sibling readers like read_document or read_evidence without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: which section to use per backend (element/text/metadata/page), the exact continuation protocol (start at offset=0, hold job_id/element_index/section constant, follow next_offset until null, never infer position from limit), and the concatenation rule (ordered, parse JSON only when format=json). It even warns that complete is not a stop condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_element_evidenceA
按OCR元素坐标裁图,并依照上游报告的页面直角方向旋转显示;不保证方向正确,不调用外部API。padding为0–0.1边距。仅支持未变形、未跨页合并、页码与角度有效的结果,否则用read_evidence看整页选区。返回证据ID、原页region和view_rotation_ccw;若视图倒置,将返回的document_id与region原样交给read_evidence恢复原页方向,无需再次旋转坐标或重新识别。仍须核对内容、归属与对错。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| padding | No | ||
| element_index | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses meaningful behavior: orientation is not guaranteed, no external API is called, padding is bounded to 0–0.1, and it explains the returned evidence ID, region, and view_rotation_ccw plus a recovery path. It does not, however, reconcile why a 'read_' tool carries readOnlyHint=false and idempotentHint=false, leaving that annotation profile unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, which is good, but the rest is a run-on packing limitations, return values, and a recovery procedure into one dense paragraph without clear separation. Little is pure waste, but the lack of structure hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates return fields (evidence ID, original-page region, view_rotation_ccw) and describes the inversion-recovery workflow, covering what an agent needs to chain into read_evidence. The main gap is the undocumented required parameters, but overall it is sufficient for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It only adds meaning for padding ('0–0.1边距'), while the two required parameters job_id and element_index receive no description in either the schema or the text. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: cropping an image by OCR element coordinates and rotating it per the upstream report's page orientation. It also names the sibling read_evidence as the fallback, so an agent can distinguish this from the whole-page read tool. The phrasing is dense and clause-heavy, which slightly blunts immediate comprehension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not conditions ('仅支持未变形、未跨页合并、页码与角度有效的结果') and routes to the alternative read_evidence for those cases. It adds a second conditional branch for inverted views, telling the agent to pass the returned document_id and region as-is to read_evidence without re-rotating. Both the alternative tool and the selecting conditions are named, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_evidenceA
返回原页证据图片和证据ID;region.page从1开始,box为原页归一化[left,top,right,bottom]。首次用[0,0,1,1]查看整页,再取局部;不能直接套用方向未知的OCR坐标。
| Name | Required | Description | Default |
|---|---|---|---|
| region | Yes | ||
| document_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations exist but are notable: readOnlyHint=false on a tool whose description frames it purely as a fetch of an image and an ID, which implies possible side effects (e.g. evidence creation/caching) that the description never explains. The description does add real behavioral value by defining the coordinate contract and orientation caveat, but it says nothing about permissions, limits, or what side effects accompany the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the return value comes first, then the coordinate semantics, then the orientation warning. Every clause earns its place; it is slightly terse given the tool's read/return nature, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly states what is returned (page image and evidence ID), and it covers the non-obvious coordinate formats for both required parameters. Remaining gaps are minor: no mention of side effects hinted at by readOnlyHint=false, no sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it does: region.page is 1-based and box is a normalized [left,top,right,bottom] on the original page, with the [0,0,1,1] full-page convention explained. It does not mention the page maximum of 20 from the schema, but document_id is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: returns the original-page evidence image plus an evidence ID. That clearly separates it from generic document reads like read_document or read_element. However, it never distinguishes itself from the very similar sibling read_element_evidence, leaving the agent to guess which evidence 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides procedural guidance for the region parameter (start with [0,0,1,1] for the full page, then narrow down) and a warning not to reuse OCR coordinates of unknown orientation. That is useful, but there is no explicit when-to-use / when-not-to-use guidance relative to the alternatives (read_element, read_element_evidence, crop_document).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_practice_feedbackARead-onlyIdempotent
读取一次作答的反馈及全部历史修订;用next_before_revision继续,直到null。最多20条且80000序列化字符。current_feedback_revision用于下一次修订,首次为0。分别保留Agent判断、用户转述意见、解释与下一步建议,不把二者合并成已掌握。此工具不判断对错,也不安排复习。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| attempt_id | Yes | ||
| before_revision | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive safety profile, and the description adds real value beyond them: a hard cap of 20 records and 80000 serialized characters, the pagination cursor protocol, and two explicit non-goals. It does reference output-side fields (next_before_revision, current_feedback_revision) rather than only input behavior, but the constraints it discloses are genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and followed by pagination mechanics, limits, and non-goals in a compact block with no filler. It is dense but every clause carries a constraint or routing signal, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't explain return values, and it correctly focuses on call mechanics and scoping. The only shortfall is leaving the required attempt_id and the limit range ambiguous, but overall an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it only partially compensates. It implies a 20-item ceiling tied to limit and explains the continuation cursor, but the input parameter name is before_revision while the description calls the continuation value next_before_revision, and attempt_id's role/format is never clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scope: reads the feedback for one attempt plus all historical revisions. It distinguishes itself from pure-history or review tools by adding non-goals ('doesn't judge right/wrong', 'doesn't schedule review'), though it never names the sibling tools directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context for pagination: continue with next_before_revision until null, and use current_feedback_revision as 0 on first call. It also states exclusions ('不判断对错', '不安排复习'), which routes an agent away from review_practice_attempt/review_study_record, but does not explicitly prescribe when to choose this over those siblings by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_practice_historyARead-onlyIdempotent
读取某题原题/变式作答历史。默认摘要;include_details=true返回完整作答、当时题面与参考答案/检查范围,单页最多20条且80000序列化字符。详细结果含答案,独立重练前不要展示。用next_before继续,直到null;不使用页码。旧记录可能没有快照或帮助情况,不用当前题面冒充旧版本,不自动判定掌握。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| before | No | ||
| record_id | Yes | ||
| include_details | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read-only, idempotent operation, yet the description still adds substantial non-obvious behavior: page caps (20 items / 80000 chars), that detailed results contain answers and must not be surfaced pre-practice, cursor-based pagination, and that old records may lack snapshots so current question text must not be substituted and mastery must not be auto-judged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, mode selection, and pagination/edge-case constraints are front-loaded and every clause carries operational meaning. It is dense and somewhat terse, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be restated, yet the description still surfaces the edge cases an agent needs (missing snapshots, sensitive answers, cursor termination at null). Nothing required to invoke or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, and it does: include_details semantics, the before/next_before continuation contract, and an implied per-page limit. record_id is only loosely implied ('某题'), leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reading the original/variant answer history for a given question, with the default-summary vs. detailed modes. This clearly separates it from siblings like read_practice_prompt and read_practice_feedback, though it never explicitly names an alternative to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives operative usage rules: default to summary, set include_details=true for full data, do not display detailed results before an independent re-practice, and continue via next_before (not page numbers). It stops short of explicit when-to-use-this-vs-sibling guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_practice_promptBRead-onlyIdempotent
练习前只取当前版本题面与中性display_label,不附原题标签/学科/旧作答/参考答案/解析/反馈,不调用OCR或擦除。题目须已纳入;变式需下标及答案检查通过,只支持text。原题text是转录题干,可能缺配图;clean_images只返回本版本按哈希复核的净题图,总量最多12MiB,不附转录题干。图缺失/变化/未复核时拒绝,绝不回退原卷。题面本身是否含提示仍需核对。保存作答用返回record_id/source_revision及目标下标,不能把读取工具当成用户独立作答证明。
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes | ||
| presentation | No | text | |
| practice_kind | No | exercise | |
| exercise_index | No | ||
| expected_revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint=false. The description adds substantial behavioral detail: exclusions (no original tags/subject/old answers/analysis/feedback), no OCR or erasure, clean_images returns hash-verified net images with a 12MiB cap, and refusal on missing/changed/unverified images with no fallback. This is valuable transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense run-on paragraph with multiple clauses separated by commas and semicolons. While every clause conveys information, it is not front-loaded or structured, making it harder to parse quickly. It could be reorganized with bullets or clearer separation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, no output schema, and a complex set of preconditions, the description covers many edge cases and behavioral rules. However, it omits any explanation of the two required identifiers (record_id, expected_revision) and gives only a hint about the return (record_id/source_revision). An agent would still lack enough to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It explains presentation (text vs clean_images) and practice_kind (original vs exercise/variant) to some degree, but never defines the required record_id or expected_revision, nor clarifies exercise_index beyond '变式需下标'. Critical parameters remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: '练习前只取当前版本题面与中性display_label' (before practice, fetch only the current version question text and neutral display_label). It distinguishes this from fetching original tags, subject, old answers, reference answers, analysis, or feedback. However, it does not explicitly name sibling alternatives like read_element or read_document, so an agent must infer the differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context ('练习前') and preconditions ('题目须已纳入;变式需下标及答案检查通过,只支持text'), plus a warning not to treat the read tool as proof of independent answer. But it does not explicitly say when to use this versus other read tools or what to do if preconditions fail beyond refusal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_review_planARead-onlyIdempotent
读取某题复习计划和全部修订;current_plan_revision首次0。每页最多20条,next_before_revision继续。source_revision绑定安排时题面;当前是否到期或需重新核对见read_review_queue。历史包含用户说明,不在独立重练前展示可能含提示的内容。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| record_id | Yes | ||
| before_revision | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive/closed-world, yet the description adds real behavioral context: pagination caps (每页最多20条), how to continue (next_before_revision), initial revision semantics (首次0), and a display caution about hint-containing history. This is meaningful value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, then pagination, then the sibling redirect, then the display caution — each clause carries a distinct fact with no filler. The semicolon-separated structure keeps it dense but scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape needn't be restated, and the description still covers pagination, cursor continuation, initial-revision behavior, and the alternative tool for queue status. For a read-only paged tool this is sufficient to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It clarifies before_revision as a pagination cursor ('next_before_revision继续') and limit as a page size ('每页最多20条'), but record_id and the relation of these fields to the returned current_plan_revision/source_revision remain only loosely explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('读取某题复习计划和全部修订') and explicitly separates itself from the sibling read_review_queue by assigning '是否到期或需重新核对' to that tool. An agent can distinguish its job without opening a schema. Not a 5 only because the scope of '全部修订' is left somewhat open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes one decision to an alternative ('当前是否到期或需重新核对见read_review_queue') and hints that history shouldn't be shown before independent re-practice, but it never states the core conditions for calling this tool versus read_study_record or read_practice_history. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_review_queueARead-onlyIdempotent
读取到期复习队列,默认当前时刻,as_of必须含时区。默认仅返回中性display_label及日期/目标/版本,省略自由填写的题目标签/学科。整理题库时可显式include_labels=true找回原标签,但可能含答案或错因提示,勿在独立重练前展示。scheduled含未来计划,outdated表示题目改版或移出后待重新安排。完成只表示做过一次,不等于掌握。offset分页遇计划变更后刷新;没有后台通知或自动间隔算法。
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| limit | No | ||
| offset | No | ||
| status | No | due | |
| include_labels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds substantial non-obvious behavior: labels are omitted by default, include_labels may leak answers/error hints, status semantics for scheduled/outdated/completed, offset pagination invalidation on plan changes, and the absence of background notifications or interval algorithms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: purpose, default behavior, the include_labels tradeoff, status semantics, then pagination caveats. Every sentence carries information, though the block is packed and could be marginally tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-format explanation is unnecessary. Given a 5-param, 0%-coverage schema, the description supplies the semantics, risks, and caveats an agent needs to invoke it correctly. Nothing major is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry the load. It explains as_of (must include timezone), include_labels (default false; what it reveals and the risk), status meanings for several enum values, and offset pagination behavior. It does not cover limit or the due/cancelled/all status values, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (读取) and resource (到期复习队列) with scope (default current time, due queue). It is clearly distinguished from sibling review tools such as read_review_plan, update_review_plan, and review_practice_attempt, which serve different intents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use context: '整理题库时可显式include_labels=true' and a when-not warning '勿在独立重练前展示'. It doesn't explicitly name an alternative sibling tool, but the operational conditions for the key optional parameter are clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_study_recordARead-onlyIdempotent
省略revision读取当前题目与实时检查,更新前先读。返回外层id/revision/review_status与内层record,题干/分析/练习在record内,实时exercise_validation等在外层。指定正整数revision只读当时保存快照,不附实时检查;current_revision仅提示现在版本,不能给旧record换版本号直接写回。不存在的版本拒绝,不回退。历史可能含答案;独立重练用read_practice_prompt。
| Name | Required | Description | Default |
|---|---|---|---|
| revision | No | ||
| record_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe, idempotent read, but the description adds real behavioral context: the two-layer return shape (outer id/revision/review_status/exercise_validation vs inner record), that a snapshot read omits live checks, that nonexistent revisions are rejected with no fallback, and that history may contain answers. This goes well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core usage rule is front-loaded and each sentence adds a distinct fact (return shape, snapshot semantics, error behavior, alternatives). It is dense and somewhat run-on, with several clauses packed into single sentences, but there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool this is complete: reading behavior, revision branching, return-layer structure, rejection behavior, and the alternative tool are all covered, and an output schema exists so return values need no further explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the param meaning, and it does for the non-obvious 'revision' (default/omitted = live current, positive integer = frozen snapshot, cannot be used to increment and write back). It does not describe record_id, though that parameter is self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (read a study record) and clarifies what is read: the current question plus real-time checks. It also routes independent re-practice to the sibling read_practice_prompt. Sibling differentiation against read_document/read_element/review_study_record is not spelled out, keeping it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use is given ('read before updating'), with the key branch stated up front: omit revision to get the current version and live checks, pass a positive integer revision to read a saved snapshot. It names the alternative for re-practice (read_practice_prompt) and warns current_revision cannot be used to write an old record back.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_practiceA
记录用户原题或变式再次作答,不自动判分或判定掌握。默认exercise需从0开始的exercise_index;original不传下标。assistance忠实记录未知/独立/提示/看过解析,不能由答对推断独立完成。source_revision及当时题面快照保留历史。建议为每次作答生成attempt_key;同次提交重试用相同标识与参数,重复不会增加次数,冲突拒绝覆盖。
| Name | Required | Description | Default |
|---|---|---|---|
| response | Yes | ||
| record_id | Yes | ||
| assistance | No | unknown | |
| attempt_key | No | ||
| practice_kind | No | exercise | |
| exercise_index | No | ||
| expected_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond annotations: it declines to grade or judge mastery, forbids inferring 'independent' assistance from a correct answer, preserves source_revision/snapshot history, and states that conflicting duplicate submissions are rejected rather than overwritten. Note the conditional idempotency via attempt_key sits in tension with idempotentHint=false, though it is scoped to matching keys so not a hard contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A dense but front-loaded paragraph that leads with purpose before parameter guidance, with each clause carrying new information. It runs slightly long and packs many constraints into one block, but there is little filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be described, and annotations cover the safety profile. For a 7-parameter mutation tool the critical semantics (assistance, attempt_key, exercise_index) are covered, though required fields expected_revision and response are never addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate and largely does: it explains exercise_index vs practice_kind, the four assistance enum values and their non-inferability, and the attempt_key retry/dedup contract. It leaves response, record_id, and expected_revision semantics unexplained, so it is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('记录...再次作答') and immediately bounds the scope by declaring what it does NOT do ('不自动判分或判定掌握'), which cleanly separates it from grading-oriented siblings like check_exercise and review_practice_attempt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to conditions: default exercise requires a 0-based exercise_index while 'original' passes none, and recommends generating attempt_key per attempt with same-key retries for idempotency. It does not explicitly name an alternative sibling or a when-not-to-use-this condition, so 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redact_documentA
本地遮盖指定姓名/学号等区域,返回独立副本document_id;不上传、不覆盖原件。regions为1–100个原页归一化区域;不会自动找全个人信息。PDF逐页重新生成为图片,移除原文本层/表单/附件/元数据,可能降低小字质量且不保留交互。上传前检查全部副本页面与题目完整性,之后parse_document/read_evidence/save_study_record均用新ID。若原件已有上传,本操作不能撤回它。重复相同区域复用副本;副本文件变化会拒绝复用。
| Name | Required | Description | Default |
|---|---|---|---|
| regions | Yes | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, non-destructive, non-idempotent), the description discloses a great deal: the copy is not uploaded and does not overwrite the source, the PDF is rasterized page-by-page removing text layer/form/attachments/metadata, small-text quality may degrade, interactivity is lost, repeated identical regions reuse the copy, and a changed copy file blocks reuse. It also notes a prior upload cannot be retracted. This is rich behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its non-destructive guarantee are front-loaded in the first clause, and every sentence carries substantive information (limits, side effects, reuse rules). It is dense and semicolon-heavy, but there is little filler to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with a 0%-coverage schema, this description is notably complete: it covers mutation semantics, side effects, irreversible prior-upload implications, reuse behavior, and downstream workflow. An output schema exists, so return-value detail is not required, and the mention of document_id is a bonus.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it does add meaning: regions are 1-100 normalized regions on the original pages. This clarifies the count constraint and coordinate normalization that the bare schema does not. document_id itself is self-evident, and box inner formatting is left to the schema, so not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (locally redact regions of a document), specifies that it returns an independent copy document_id, and explicitly says it does not upload or overwrite the original. The privacy-redaction purpose ('遮盖指定姓名/学号等区域') is distinct enough that an agent can differentiate it from generic mutation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It sets clear context: the agent must supply regions itself because PII is not auto-detected, and it warns to inspect all copy pages before uploading. It also directs downstream workflow (parse_document/read_evidence/save_study_record use the new ID) and reuse rules. However, it never explicitly contrasts with the closest siblings (crop_document, make_clean_copy) that might otherwise be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_job_observationAIdempotent
限流40306处理后,仅在用户明确要求时恢复查询原任务,不上传/重新解析。先get_job取得attempt_number和observation_revision,旧任务缺失分别视为1和0。同一版本的恢复决定不会重复应用;再次40306仍停止。user_note保留宿主转述,不能代替用户意见。仍遵守至少3秒查询间隔。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| user_note | Yes | ||
| expected_attempt | Yes | ||
| expected_observation_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: no re-upload/re-parse, idempotency semantics ('同一版本的恢复决定不会重复应用', consistent with idempotentHint=true), the 40306 re-stop rule, and a minimum 3-second query interval. It does not contradict any annotation (readOnlyHint=false fits a state-changing resume).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single dense paragraph front-loads the key condition (only resume on explicit user request) and each subsequent clause carries distinct information, with no filler. It is somewhat run-on and would benefit from sentence breaks, but every statement earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Given the complex rate-limit/idempotency semantics involved, the description covers the necessary behavioral context well; the main gap is that the four required parameters (0% documented) receive only partial explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the full burden. It compensates partially: it explains that expected_attempt and expected_observation_revision come from get_job and that missing values default to 1 and 0, and it constrains user_note's meaning. However, it does not describe format or usage of job_id and only loosely characterizes user_note's required content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: resume querying the original job observation after rate-limit 40306 handling, and explicitly scopes out re-uploading/re-parsing. An agent can distinguish it from generic parse/get_job siblings, though the opening precondition ('限流40306处理后') makes the core purpose slightly context-dependent rather than front-loaded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('仅在用户明确要求时恢复') and a stop condition ('再次40306仍停止'), plus a prerequisite step (先 get_job 取得 attempt_number 和 observation_revision). It lacks explicit naming of alternative tools to prefer, but the when-to-use and when-to-stop guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_parse_documentAIdempotent
仅在用户明确同意重新上传/可能重复计费后,重提failed/submission_unknown任务。先get_job取得attempt_number(旧任务缺失视为1);禁止自动重试或切换模式。保留旧尝试,同一expected_attempt最多发起一次新请求。凭据/额度问题应先处理;40306先联系服务商。user_note是宿主Agent转述,不是独立身份认证。
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| user_note | Yes | ||
| max_paid_pages | Yes | ||
| expected_attempt | Yes | ||
| acknowledge_resubmission | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses duplicate-billing risk, the one-request-per-expected_attempt idempotency guard, that old attempts are preserved, how to treat missing attempt_number as 1, and that user_note is a host-agent relay rather than authenticated identity. These are material behavioral facts not derivable from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the consent precondition, then procedurally layers prerequisites, prohibitions, and edge cases. Dense but essentially waste-free; slightly packed for a single paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the risky-operation context well. The main remaining gap is semantics for the two cost/acknowledgement parameters, which matters because the tool can incur charges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains expected_attempt (derive via get_job, default 1) and user_note (relayed, not independent auth), but leaves job_id, max_paid_pages, and acknowledge_resubmission to be inferred from their bare names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (重提/retry a parse document) and narrows scope to failed/submission_unknown tasks, which distinguishes it from parse_document and get_job. An agent can identify this as the escalation path for stuck jobs without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('仅在用户明确同意重新上传/可能重复计费后'), when-not ('禁止自动重试或切换模式'), a required prerequisite ('先get_job取得attempt_number'), and routing for blockers ('凭据/额度问题应先处理;40306先联系服务商'). This is a complete decision procedure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_practice_attemptA
保存对某次历史作答的Agent反馈及后续建议,不能替代自动判分或掌握判定。先read_practice_history(include_details=true)核对当时题面和作答,再read_practice_feedback取得current_feedback_revision(首次0)。feedback.agent_verdict是Agent分析,user_verdict默认unreported,只有用户明确表达时填写并忠实记录user_note。本次无新增用户意见时,unreported和空user_note保留此前意见;仅用户明确撤回时用withdraw_user_opinion=true及非空撤回说明。user_opinion_source_revision追溯用户意见来源,沿用不表示再次发言。版本冲突先读取,修订保留旧反馈;不会改写作答、题目或原卷批改。旧作答无快照时拒绝自动补判。
| Name | Required | Description | Default |
|---|---|---|---|
| feedback | Yes | ||
| attempt_id | Yes | ||
| expected_feedback_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, idempotent=false, destructive=false, openWorld=false, so the description carries real additional weight: it will not rewrite the answer, question, or original grading, refuses to auto re-grade attempts lacking a snapshot, and preserves the old feedback on a revision. The withdraw mechanism and its constraints are also disclosed. This is substantial context beyond the annotations and is fully consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by prerequisites, then per-field semantics and edge cases, so ordering is logical. The prose is dense and run-on in places, and mentions user_opinion_source_revision, which does not appear in the input schema. Every sentence still carries distinct information, so waste is low.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be described, and the description instead covers the workflow, defaults, conflict handling, and mutation limits an agent needs. The only gap is the reference to user_opinion_source_revision, which is absent from the schema, creating a small traceability mismatch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (only withdraw_user_opinion carries an inline note), so the description must compensate and largely does: it defines agent_verdict as the Agent's analysis, sets user_verdict's default of unreported and the condition for filling it, explains user_note fidelity rules, and clarifies withdraw_user_opinion's required companion fields. The attempt_id and expected_feedback_revision semantics are covered only indirectly via 'current_feedback_revision'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific verb and resource: saving Agent feedback plus follow-up suggestions onto a historical practice attempt, and immediately bounds it ('不能替代自动判分或掌握判定'). It effectively separates itself from siblings by naming read_practice_history and read_practice_feedback as adjacent-but-different tools. It stops short of a 5 only because the tool name ('review_') slightly undersells that the action is a save/write.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and prerequisites: call read_practice_history(include_details=true) to verify the original prompt/answer, then read_practice_feedback to obtain current_feedback_revision (0 on first call). It also gives conditional rules for edge cases — fill user_verdict only on explicit user statements, use withdraw_user_opinion=true only on explicit withdrawal, and read first on version conflict.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_study_recordA
仅转述用户明确的include/exclude/uncertain意见,不得以模型自信替代。整题纳入不代表练习答案已复核;用户明确核对了练习题干与答案时,include可带approved_exercise_indices(从0开始)。净题需对照原图确认题干/公式/图形完整且无作答残留,再提供approved_clean_copies={来源证据ID:read_study_record返回的sha256}。两类确认默认空,修改/再次复核后须重新提交;验算失败先修订。user_note保留真实意见,来源是宿主Agent转述,非独立身份认证。
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | ||
| record_id | Yes | ||
| user_note | Yes | ||
| expected_revision | Yes | ||
| approved_clean_copies | No | ||
| approved_exercise_indices | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond annotations: no substitution of model confidence for user opinion, the dependency of approved_clean_copies on sha256 values from read_study_record, default empty confirmations, resubmission requirements after changes, and a caveat that user_note is relayed by the host agent rather than independently authenticated. It does not cover permissions, concurrency, or what data may be overwritten, so a 5 is not warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense but purposeful paragraph that front-loads the core rule about transcribing user opinions. Every sentence carries operational guidance, though it could be more scannable with explicit structure for the approval rules.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 6 parameters, 0% schema coverage, and an existing output schema, the description supplies rich workflow, dependency, and resubmission constraints. It still omits explanation of expected_revision (likely concurrency control) and record_id, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate. It explains decision values (include/exclude/uncertain) implicitly, approves exercise indices starting from 0, the approved_clean_copies mapping format, and user_note purpose, but leaves record_id and expected_revision without added meaning, resulting in only partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (review) and resource (study_record), and the core rule of transcribing user's explicit include/exclude/uncertain opinions. It references read_study_record as the source of sha256, helping distinguish it from that reader, but does not explicitly contrast with save_study_record or review_practice_attempt, keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear conditional guidance for when to populate approved_exercise_indices and approved_clean_copies, notes both default to empty, and requires resubmission after modification or re-review. It does not name alternative tools or state when not to use this tool, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_study_recordA
完整保存题目草稿,不是局部patch;更新前read_study_record,修改其record后完整传回,并带外层id/revision作为record_id/expected_revision。返回id/revision/review_status及内层record,题干/分析/练习在record内。遗漏可选字段使用默认值,每次保存回到待复核。clean_evidence_ids按题面顺序选取本题主证据已生成的净题图,不自动确认。修改题干/作答/主证据/批注/卷面批改或Agent判断会清空分析与练习;先保存修正依据,再按新版本重新生成保存。
| Name | Required | Description | Default |
|---|---|---|---|
| record | Yes | ||
| record_id | No | ||
| expected_revision | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond the annotations (which only say non-readOnly, non-idempotent, non-destructive), it discloses that missing optional fields revert to defaults, that every save returns to 待复核, and precisely which field edits (stem/answer/main evidence/annotations/paper grading/agent verdict) wipe analysis and exercises. There is mild tension with destructiveHint=false given the described clearing of derived data, but the reset is intentional and regenerable rather than destructive loss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important constraint ('完整保存...不是局部patch') is front-loaded, and each clause carries distinct information (workflow, defaults, reset, clearing rules). It is dense and somewhat run-on with several clauses packed into long sentences, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex full-record mutation with a rich output schema (so return values needn't be spelled out, though it mentions them anyway), the description covers workflow, default handling, review-state transitions, and destructive side effects. Only the semantics of individual nested record fields are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage on 3 params and a large nested StudyRecord, the description carries the load: it explains the record_id/expected_revision mapping to the outer id/revision and clarifies clean_evidence_ids semantics ('按题面顺序选取本题主证据已生成的净题图,不自动确认'). It does not explain the many inner record fields individually, so it compensates well but not completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (完整保存题目草稿) and immediately distinguishes the operation from its sibling: '不是局部patch' and the contrast with read_study_record. An agent can tell this is a full-record upsert, not a partial write, without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes the exact workflow and conditions: read_study_record first, modify the returned record, pass it back whole, and map the outer id/revision to record_id/expected_revision. It also states the ordering constraint for corrections (save the basis first, then regenerate) and the reset-to-pending behavior after each save.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_review_planA
按用户明确日期安排一题原题/变式复习,或完成/取消计划;不会自动提醒。先read_study_record和read_review_plan取得两个独立版本。schedule需用户已纳入题目、带时区due_at及忠实user_note,默认original;exercise需下标且答案检查通过。complete需安排后保存、同题同版本同目标的新attempt_id,提示作答可完成但不算独立或掌握;cancel可取消过期计划。只修改Agent解析不会自动重排日期。版本冲突先读取,不自动覆盖。
| Name | Required | Description | Default |
|---|---|---|---|
| change | Yes | ||
| record_id | Yes | ||
| expected_plan_revision | Yes | ||
| expected_record_revision | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing optimistic-concurrency behavior ('two independent versions', read-before-write on conflict, no auto-overwrite), side effects (does not auto-reschedule dates), and the semantic distinction between 'completed' vs 'independent/mastered'. With destructiveHint=false and idempotentHint=false already declared, this adds the real behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and every sentence carries content, but the single dense paragraph with semicolon-chained clauses is heavy to parse. It is appropriately sized for a 4-parameter mutation tool, just tightly packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described; what remains — preconditions, concurrency handling, side effects, and the original/exercise branching — is all covered. Nothing an agent needs to call this multi-action tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: it explains due_at's timezone requirement, user_note fidelity, practice_kind defaulting to original, exercise_index for the exercise branch, and attempt_id semantics for complete. The expected_record_revision / expected_plan_revision fields are only implied by the version-conflict prose rather than named, leaving a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource (review plan) and the three verbs it performs (schedule / complete / cancel), plus the scope 'one question, original or variant'. It is clearly distinguishable from siblings like read_review_plan and record_practice, which the description names as prerequisites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit, per-action preconditions: read_study_record and read_review_plan first, schedule requires an already-incorporated question plus a timezone-bearing due_at and faithful user_note, exercise requires an index and a passing answer check, complete requires an attempt saved after scheduling. It also states what the tool does not do (no auto-reminders).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_statusARead-onlyIdempotent
检查配置、导入目录和实现边界;runtime_version为服务加载时的包版本,用于核对安装构建,不证明功能或完整性。不显示密钥、不调用外部API。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and non-open-world behavior, so the safety profile is covered. The description adds meaningful context beyond annotations: it clarifies runtime_version semantics (load-time package version, not proof of functionality/completeness) and states that no secrets are displayed and no external APIs are called. These are useful behavioral limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary checking scope. The semicolon-separated clauses about runtime_version and the no-secrets/no-API constraints are relevant, though the first clause is broad enough that the overall text remains slightly dense rather than optimally crisp.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and the rich annotations already cover safety behavior. The description adds privacy and external-API limitations plus runtime_version semantics, making it complete enough for a parameterless workspace-check tool, though 'implementation boundaries' remains abstract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero input parameters, and schema description coverage is 100%, so the baseline score is 4. The description mentions runtime_version, but that is an output concept rather than an input parameter, so it does not alter the parameter semantics score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (检查/check) and the resources it inspects: configuration, import directories, and implementation boundaries. It is unique among the sibling tools, which are document and practice/review operations, so no sibling differentiation is needed. However, it does not explicitly say it returns workspace status information, leaving the exact output purpose slightly implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description describes what the tool checks, but gives no explicit when-to-use guidance, no prerequisites, and no alternatives to consider. An agent must infer that this is a diagnostic/status tool from the name and vague opening clause. No usage conditions are stated.
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.
32 tool updates
v0.1.0- First observed
check_exercise - First observed
crop_document - First observed
delete_document - First observed
export_errorbook - First observed
get_job - First observed
import_document - First observed
list_documents - First observed
list_input_files - First observed
list_parse_jobs - First observed
make_clean_copy - First observed
parse_document - First observed
preview_document_deletion - First observed
query_errorbook - First observed
read_document - First observed
read_element - First observed
read_element_evidence - First observed
read_evidence - First observed
read_practice_feedback - First observed
read_practice_history - First observed
read_practice_prompt - First observed
read_review_plan - First observed
read_review_queue - First observed
read_study_record - First observed
record_practice - First observed
redact_document - First observed
resume_job_observation - First observed
retry_parse_document - First observed
review_practice_attempt - First observed
review_study_record - First observed
save_study_record - First observed
update_review_plan - First observed
workspace_status
TDQS
Scored across 32 tools
The toolset spans distinct stages, but several read/query tool families overlap significantly (read_document vs read_element vs read_evidence vs read_element_evidence; read_practice_feedback vs read_practice_history). Their descriptions are detailed and help, yet the sheer number of superficially similar 'read_*' and 'list_*' tools creates real misselection risk.
Almost all tools use snake_case with a verb_noun pattern (import_document, read_study_record, update_review_plan), which is predictable. Minor deviations like workspace_status (noun phrase) and compound names such as resume_job_observation keep it from perfect consistency.
32 tools far exceed the typical well-scoped range of 3–15 and land in the 'too many' bucket per the rubric. Although each tool maps to a real sub-operation in a complex study-errorbook workflow, the volume imposes substantial cognitive load and coordination burden.
The surface covers import, OCR parsing, evidence extraction, study-record CRUD, practice recording/history, review planning, and export—a broad lifecycle. Only minor gaps remain, such as explicit parse-job cancellation or bulk study-record management, which agents can likely work around.
Maintenance
Related MCP Connectors
Aspire Learning MCP — browse courses, chapters, lessons, and import LaTeX quizzes
Build study flashcards and exam-prep decks from your AI chat, all stored locally.
Hosted MCP server: convert PDFs to clean, LLM-ready Markdown with tables, formulas and OCR.
Create AI-generated exam questions and save them to your paperee question bank for review.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables personalized AI tutoring by allowing students to upload PDF/DOCX study materials that are processed and indexed for semantic search. Provides intelligent responses based on the student's own learning materials using RAG technology.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that indexes exam PDFs and HTML documents for semantic search, topic frequency analysis, and study plan generation, fully local and private.MIT
- AlicenseNot gradedqualityDmaintenanceProvides a local CBT exam system as MCP tools for Codex, managing study sessions, scoring, wrong answer tracking, and review queues with deterministic Python engine and optional Notion integration.MIT
- AlicenseAqualityCmaintenanceLocal-first error notebook server for MCP agents, enabling problem management with FSRS scheduling, idempotent operations, and printable math PDF generation.121MIT