Skip to main content
Glama
qddfxp

task-checkpoint

by qddfxp

Task Checkpoint MCP

给长任务做“做一步、存一步”的存档:中断后新会话能接着做,做错了能退回任意一步。

一个 stdio MCP 服务器,只用 Python 标准库,不装任何第三方包。

为什么不直接用 git stash 或随手 commit 一下

做法

缺什么

git stash

一次性的,不能命名、不能跨会话交接,也没有“这一步在做什么、结论是什么”

随手一个 commit

会污染真实历史;半成品未必允许 commit;还得你记得先 commit

手写进度笔记

和文件状态脱钩,回退时要自己对着时间线拼

本工具

文件变化后台自动记(变更层),步骤语义由模型声明(任务层);只额外加 refs/checkpoints/...,不动你的 git 历史

值得装:多步、可能被中断、需要能退回的编码或文档任务。 不值得装:一次能做完、不需要回退也不需要交接的改动。

Related MCP server: Session Handoff MCP

装之前先知道

  • 需要 Python 3.10 或更新,只用标准库。

  • 不碰你的 git 历史:不 commit、不 reset、不 clean、不动已有分支和 HEAD,只额外加 refs/checkpoints/... 引用。

  • 不是 git 仓库也能用,功能一样,只是少了那层 git 引用。

  • 不保存聊天记录,只保存工作区文件和模型主动声明的步骤说明。

  • 存档默认写在工作区的 .checkpoints/;指定外部 store 时,工作区仅留一个不含文件内容的 .task-checkpoint-store.json 路径指针。

  • 敏感文件识别是路径黑名单,盖不全。 别把凭据放在被扫路径里 —— 详见「使用限制」。

安装

方式一:装成命令(推荐)

pipx install "git+https://github.com/qddfxp/task-checkpoint-mcp"
# 或
pip install "git+https://github.com/qddfxp/task-checkpoint-mcp"

装完在客户端里用 tc-mcp 启动:

{
  "mcpServers": {
    "task-checkpoint": { "command": "tc-mcp", "args": [] }
  }
}

方式二:直接用源码(不用安装)

git clone https://github.com/qddfxp/task-checkpoint-mcp
{
  "mcpServers": {
    "task-checkpoint": {
      "command": "/absolute/path/to/python",
      "args": ["/absolute/path/to/task-checkpoint-mcp/scripts/tc_mcp.py"]
    }
  }
}

command 要写解释器的绝对路径,不要写 python —— 客户端不一定能解析到你要的那个。装过之后也可以直接 python -m tc_mcp。

怎么用

最重要的一条:文件变化由后台线程自动记录,但“这一步在做什么、结论是什么、下一步干什么”只有模型主动调 tc_save 才会留下。

所以要让 Agent 每完成一步就存一步 —— 这份约束写在 SKILL.md 里,得把它装进 Agent 的技能目录(见下面「把 SKILL.md 装进 Agent 的技能目录」)。不装它,文件回退点照常产生,但没人知道当初要干什么、下一步该干什么。

典型流程:

tc_init    开任务
tc_save    每完成一步存一次(带 conclusion 和 next)
tc_resume  新会话开头先调这个接上进度
tc_restore 退回去(先 apply:false 预览,再 apply:true)

工具

9 个。第一个参数都是 root,指工作区目录(通常是当前项目的绝对路径)。

工具

什么时候用

必填

tc_init

长任务开工。已有活动任务会被挂起而不是关闭

root, name

tc_save

每完成一步

root, title

tc_resume

新会话开头、接手别人中断的工作(只读)

root

tc_show

想看有哪些步骤 / 变更记录

root

tc_restore

退回某一步或某条变更记录。先预览再执行

root,加 index 或 drift_id

tc_capture

想立刻记一次文件变化(不等后台线程)

root

tc_switch

回到之前挂起的任务

root, task_id

tc_export

导出交接包给另一个目录 / 另一台机器

root, to

tc_compress

存档太大了,回收旧变更层空间

root

tc_save 的完整参数:

  • title(必填)——这一步一句话标题,写“做了什么”,不写“改了什么”

  • conclusion——这一步的结论。最有价值的字段

  • next——下一步要干什么。接续工作的关键

  • description——为什么这么做(决策理由,事后没人记得)

  • verified——已验证项列表(跑了什么测试、确认了什么事实)

  • open_questions——还没解决、留给后面的问题

  • close: true——收尾时用。关闭后不能再存档,但还能读

回退操作本身也会被记成一条变更记录,返回里的 recovered 就是它的 drift_id —— 退错了可以再用它退回来。

把 SKILL.md 装进 Agent 的技能目录

SKILL.md 是这个项目的另一半功能,不是可选文档:MCP 服务器负责存取,SKILL.md 负责让模型每完成一步真的去调 tc_save。

复制到客户端扫描的技能目录,目录名即技能名:

客户端

放这里

Claude Code

~/.claude/skills/task-checkpoint/SKILL.md

多客户端共用的 agents 目录

~/.agents/skills/task-checkpoint/SKILL.md

ZCode

~/.zcode/skills/task-checkpoint/SKILL.md

mkdir -p ~/.claude/skills/task-checkpoint
cp SKILL.md ~/.claude/skills/task-checkpoint/SKILL.md

Windows 路径形如 C:\Users\<你>\.claude\skills\task-checkpoint\SKILL.md。各客户端的技能目录可能不同,以它自己的文档为准;要求只有一条:文件落在技能目录下的 <技能名>/SKILL.md。重启客户端后生效。

自检(可选)

在克隆下来的仓库里跑一遍回归测试:

python -m unittest discover -s tests -p "test_*.py" -v

最后一行是 OK 就对了。测试同样只用标准库(unittest),不需要 pytest。

确认服务器能起来 —— 会回一行带 serverInfo 的 JSON:

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}' | python scripts/tc_mcp.py

从 pip 装的版本没有 scripts/,用 python -m tc_mcp 代替。

环境变量

变量

默认

说明

TC_STORE

<工作区>/.checkpoints

存档目录

TC_WATCH

on

设成 off 关掉后台自动记录

TC_WATCH_INTERVAL

15

后台检查间隔(秒)

TC_DRIFT_MAX_WAIT

60

静默期上限(秒)

TC_GIT

on

设成 off 就完全不建 refs/checkpoints/... 引用

TC_GIT_VERIFY

on

建引用前后对比 git 指纹,自证“没动过用户 git”。设成 off 跳过自证,每次 tc_save 少几趟 git 子进程;跳过后返回的 git.unchanged 是 null

TC_SHA_REUSE

off

mtime+size 没变的文件不再重读、直接复用索引里的 sha。风险见「使用限制」

使用限制

敏感文件:黑名单,盖不全

敏感文件不存内容、连哈希都不存,只能看出 mtime 和 size 变了没有。判定按路径匹配,所以两头都会漏:

  • 漏判:名字无辜的凭据抓不到。config/database.yaml、docker-compose.yml、config.json 会被当普通文件明文存进 payload/。别把凭据放在被扫路径里,或者用 state.exclude 自己加。

  • 误拦:被误判为敏感的源码永远拿不到内容副本,回退时会静默跳过(只出现在 plan.unrestorable 里)。名单分两层就是为压低误拦。

拦的范围:

  • 目录名(整个目录都不存) .ssh .aws .gnupg .docker .kube .env .envdir .secrets .tokens,或名字含 secret / credential / token 的目录。

  • 无歧义文件名

    • dotenv:.env .env.* *.env *.env.* .envrc

    • 私钥:*.pem *.key *.p12 *.pfx *.p8 *.jks *.keystore *.kdbx *.ppk *.ovpn *_rsa *_dsa *_ed25519 *_ecdsa *_key

    • 凭据:.netrc .git-credentials .npmrc .pypirc .pgpass .htpasswd .my.cnf my.cnf passwd shadow

    • 云与基础设施:kubeconfig *.kubeconfig *.tfstate terraform.tfvars *.tfvars *.jwt

    • 通配:credentials* creds* secret* secrets.json token token.json token.txt *.token *_token auth.json

    • 框架配置:settings.py local_settings.py settings.xml wp-config.php web.config wrangler.toml .dev.vars

  • 高歧义子串,只在文件名以配置类后缀结尾时才拦

    • 子串:*secret* *password* *passwd* *credential* *api_key* *apikey* *token* *auth_token*

    • 后缀:.json .yaml .yml .toml .ini .cfg .conf .config .properties .xml .txt .env .envrc .cnf .sh .ps1 .bat .cmd .sql .php

    • 所以 prod_credentials.json 拦;src/password_policy.py、src/tokenizer.py、docs/secrets.md 不拦。

这条能力不构成隐私保护或合规保证。 存档目录的访问权限由你自己管;别把未排除的凭据、令牌、私钥、个人资料放进被扫路径。

时间与粒度

  • 静默期最长约 60 秒。文件一直在写时,中间那条记录标 partial: true。

  • 进程突然死掉后、下次 tc_save / tc_capture 之前,最后那段改动只在 tc_resume 的未落档路径里,还不是一条变更层记录。

变更层只看 mtime+size

tc_capture 和后台线程用 mtime+size 判断变化。内容改了但 mtime 和长度都没变时(cp -p、rsync -t、tar -x 会保留 mtime),它不会觉得文件变了。

任务层 tc_save 默认按内容算 sha,不受此限;但 TC_SHA_REUSE=on 会把任务层也拉到同一判据上 —— 见下面那条。

回退

  • 会一并还原文件权限位(POSIX 可执行位),不还原 mtime —— 把旧时间戳写回去会让 make 类工具误以为文件没变。注意:只改权限、内容没变时不会触发重写(回退只重写内容不同的文件),那种情况下权限位也回不去。

  • 不能还原的文件会被跳过(敏感文件、超过 100 MB 未存内容、payload 已丢),其余照退;跳过的列在返回的 plan.unrestorable 里。预览和实际执行用同一份清单,所以一个 .env 不会让整次回退失效。

  • 二进制能还原,但不能做行级 diff;不合并并发编辑。

大文件

不超过 100 MB 的文件原样按 sha 存进 payload/,相同内容只存一份;超过 100 MB 只记流式哈希和元数据,不保存内容,因而不能回退内容。

存档不会自动缩

旧变更层的内容会一直留着,用 tc_compress 手动回收。它的默认参数是保留 7 天,所以小工作区上默认调用往往是 converted: 0(什么都没回收)—— 返回值里带 keep_seconds / minimum / maximum / eligible / bytes_freed,看得出“为什么没回收”。想真的清就用小一点的 keep_seconds(步骤基线和 recovered 层永远不动)。

TC_SHA_REUSE=on 的风险(默认关的原因)

任务层默认每次都按内容算 sha,不信任 mtime,所以一次 save 会读完工作区里所有非敏感文件(不保留内容,内存占用与工作区大小无关)。

开了 TC_SHA_REUSE=on 之后,mtime+size 没变的文件不再重读、直接复用索引里的 sha。遇到 mtime 被还原(os.utime)、文件系统 mtime 粒度粗(FAT、部分网络盘)、或有工具保留 mtime(cp -p、rsync -t、tar -x、部分生成器)时,内容改动会被完全漏掉:不读盘、不存新内容,却把旧 sha 记进步骤,回退时静默给出旧内容。默认关闭时这条路径不存在。

tc_resume 和 tc_show 无论哪种模式都不读文件内容(只看 mtime+size),因此也可能漏掉“保留 mtime 的改动”。

参数与状态约束

  • tc_restore 必须且只能传 index 或 drift_id 其中一个;apply=true 不允许修改已关闭任务。

  • tc_save 传了 task_id(而且不是当前活动任务)时,会先把活动任务切过去(原任务置为 suspended)再存这一步;返回值里的 active_task_changed: true 就是告诉你这件事发生了,想切回去用 tc_switch。

  • tc_save 在已有基线且检测到未落档变化时,会先把该变化挂到本次 save 的 manifest 上,再写任务步骤。

  • tc_export 的交接包导入会校验任务 id 和工作区路径,拒绝重复任务、.. 穿越与符号链接目标;导入失败会撤销已写入的目标文件。

  • store 不得等于工作区根目录;自定义 store 位于工作区内时会被扫描器自动排除。

git 相关

在 git 仓库里每次 tc_save 会多花几百毫秒(建引用的 git 子进程开销)。不想付这笔开销就 TC_GIT=off 或 TC_GIT_VERIFY=off。

实现备注

只有改这份代码的人才需要关心:

  • 归档目录里的 .git/index 字节数会被 git 自己刷新(status / ls-files 会更新 stat cache),但 HEAD、分支、暂存内容都不会变 —— 自证就是拿 status / ls-files 的输出前后对比的。

  • refs/checkpoints/ 下已有同名引用时拒绝覆盖。

  • tc_show / tc_resume 只在读取状态快照时持有短锁;工作区扫描和文件读取不长期阻塞写入操作。

  • manifest 是增量链,每 20 份强制一个全量锚点。

存储

<工作区>/.checkpoints/
├── current.json          活动任务指针,按工作区 root 分键(同一个 store 可服务多个工作区)
├── state.lock            并发锁
├── server.log            日志(不会写到 stdout,stdout 只走 MCP 帧)
├── payload/<sha前两位>/  内容寻址的文件副本(多个任务/步骤共享,按 sha 去重)
└── tasks/<task_id>/
    ├── state.json
    ├── index.json            基线索引:每个文件的 mtime/size/sha256
    ├── steps/sNNNN.json      任务层:每一步的说明
    ├── drifts/dNNNN.json     变更层:文件变化
    └── manifest/mNNNN.json   一致性清单(增量链,每 20 份一个全量锚点)

活动指针和基线索引都按范围隔离:同一个 store 被几个工作区共用时,互不串味。

目录结构

.
├── README.md        本文件
├── SKILL.md         给 Agent 看的使用约束(功能的一部分,不是可选文档)
├── LICENSE          MIT
├── pyproject.toml   打包配置,源码不改成包目录
├── MANIFEST.in      sdist 包含哪些文件
├── scripts/
│   ├── tc.py        业务核心
│   └── tc_mcp.py    stdio MCP 适配层
├── tests/
│   └── test_tc.py   回归测试,只用 unittest
└── dist/            构建产物(已 gitignore);正式发行版在 GitHub Releases

Available Tools

9 tools
tc_captureA

立即记录当前文件变化,不等静默期。

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes工作区根目录

Output Schema

ParametersJSON Schema
NameRequiredDescription
readsYes
partialYes
waitingYes
capturedYes
drift_idYes
skipped_pathsYesskipped paths (e.g. symlinks pointing outside the workspace)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does add useful behavioral context by saying the tool records immediately and does not wait for a quiet period. However, it does not disclose effects on existing state, prerequisites, or any failure/side-effect behavior beyond that.

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

Conciseness5/5

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

The description is a single, purposeful sentence with no filler. It front-loads the core behavior and then adds the key timing nuance, making it appropriately sized for the tool's simplicity.

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

Completeness3/5

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

Given the low parameter count, full schema coverage, and presence of an output schema, the description is mostly sufficient. However, the many sibling tools (tc_init, tc_save, tc_show, etc.) create a need for more workflow context, and the description does not explain how capture fits in or what happens after capture.

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

Parameters3/5

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

Schema description coverage is 100%, with the single parameter 'root' already described as '工作区根目录' (workspace root directory). The description adds no additional meaning to the parameter, but the baseline of 3 applies because the schema already fully documents it.

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

Purpose4/5

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

The description states a clear action and resource: '立即记录当前文件变化' (immediately record current file changes). It also distinguishes the tool's behavior with '不等静默期' (not waiting for quiet period), but it does not explicitly differentiate it from the sibling tools like tc_save or tc_init.

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

Usage Guidelines3/5

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

The phrase '不等静默期' implies this tool should be used when an immediate capture is needed rather than waiting for a quiet period. However, there is no explicit guidance on when to prefer this tool over alternatives such as tc_save, nor any exclusions or conditions.

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

tc_compressA

回收存档空间:删掉超过保留期的变更层内容。被回收的变更层不能再 restore,步骤基线不受影响。

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes工作区根目录
maximumNo每条路径最多保留几份变更层,默认 50
minimumNo每条路径至少保留几份较旧的变更层,默认 20
keep_secondsNo保留最近多少秒内的变更层,默认 7 天

Output Schema

ParametersJSON Schema
NameRequiredDescription
maximumYes
minimumYes
eligibleYes通过了保护检查、可以考虑回收的数量
convertedYes本次真的删掉的 payload 数
bytes_freedYes释放的字节数
already_goneYes已标为不可回退但 payload 本来就不在的数量
keep_secondsYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well: it discloses destructive behavior (deleting layers), irreversibility (cannot restore), and a safety guarantee (step baseline unaffected). This is strong for a delete operation, though it could further mention any locking or concurrent effects.

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

Conciseness5/5

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

Two short sentences front-load the core purpose, then add key consequences. No filler or redundancy — every clause earns its place.

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

Completeness4/5

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

For a destructive tool with 4 parameters, the description covers purpose, effect, and non-target impact; the schema handles parameters and output schema exists for return details. It does not explain the default values or parameter interactions, but those are already in the schema, so the overall context is sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well documented. The description adds minimal parameter-specific value beyond the schema, only aligning 'retention period' with keep_seconds. Baseline 3 is appropriate.

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

Purpose5/5

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

Description states 'reclaim archive space' and 'delete change layers older than retention period' — a specific verb and resource. It also differentiates from the sibling tc_restore by explicitly noting that recycled layers cannot be restored, making it clear this is the pruning counterpart.

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

Usage Guidelines3/5

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

The description implies usage context (when you need to reclaim archive space) and mentions the retention period, but does not explicitly state when to use this tool vs alternatives such as tc_save or tc_clean. It names restore only as a consequence, not as a decision point.

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

tc_exportB

导出交接包到一个已存在的目录。敏感文件内容不会导出。

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes已存在的导出父目录
rootYes工作区根目录

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes交接包目录
filesNo
filteredYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does add a meaningful behavioral constraint: '敏感文件内容不会导出' (sensitive file contents will not be exported), and it implies the destination must already exist. However, it does not disclose overwrite behavior, failure modes, or what happens if the directory does not exist.

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

Conciseness5/5

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

The description is two short sentences with no wasted words. The primary action is stated first, and the sensitive-content caveat is a valuable second sentence that earns its place.

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

Completeness3/5

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

The tool has an output schema, so return values need not be described. However, for an export operation with no annotations, the description omits important context such as whether files are overwritten, whether the directory must be empty, and how this relates to sibling tools like tc_compress. It is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no new parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb '导出' (export), the resource '交接包' (handover package), and the destination '已存在的目录' (existing directory). It is specific enough to understand the tool's core function, but it does not explicitly differentiate itself from siblings like tc_save or tc_capture.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as tc_capture, tc_save, or tc_compress. The description only states what the tool does, not under what circumstances it should be chosen.

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

tc_initA

创建任务。已有活动任务会挂起而不是关闭。

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNo任务目标
nameYes任务名
rootYes工作区根目录
storeNo存档目录;省略时用工作区内 .checkpoints
constraintsNo约束

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes任务名
noteYes存档位置提示
storeYes存档目录
task_idYes新任务 id
prev_suspendedNo
store_is_externalYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It discloses a key side effect: existing active tasks are suspended rather than closed. This adds value beyond the name. However, it does not cover other traits like idempotency, failure modes, or whether the operation is destructive beyond the suspension note. The disclosure is partial but meaningful.

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

Conciseness5/5

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

Two short sentences, front-loaded with the core purpose and immediately followed by the key behavioral caveat. No wasted words or redundant details.

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

Completeness4/5

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

Given that the schema fully documents parameters and an output schema exists, the description covers the essential behavioral context (creation and suspension of active tasks). It does not explain relationships to sibling tools, but that is not strictly required for invocation. The description is sufficiently complete for a create operation.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter already has a description in the input schema. The tool description does not add any parameter-specific meaning. Per the baseline rule for high coverage, a 3 is appropriate.

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

Purpose5/5

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

The description states '创建任务' (create task), a specific verb and resource, and the additional sentence about suspending active tasks distinguishes it from sibling tools like tc_capture, tc_switch, etc. which imply other operations. The purpose is unambiguous and clearly differentiated.

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

Usage Guidelines4/5

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

The description provides clear context that this tool is for creating a task and discloses a relevant condition (active tasks will be suspended). However, it does not explicitly name alternatives or state when not to use it, so it stops short of full guidance. The behavioral note gives useful context for invocation.

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

tc_restoreB

按任务层序号或变更层编号恢复。index 与 drift_id 二选一;apply=false 只预览。

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes工作区根目录
applyNotrue 才写工作区
indexNo任务层序号
drift_idNo变更层编号,例如 d0001

Output Schema

ParametersJSON Schema
NameRequiredDescription
planYes
appliedYes
recoveredYes本次自动保全的变更层编号
skipped_pathsYesskipped paths (e.g. symlinks pointing outside the workspace)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully discloses the preview mode ('apply=false 只预览') and implies apply=true writes the workspace. However, it does not describe what gets modified, overwritten, or whether the action is reversible, which is notable for a restore/mutation tool.

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

Conciseness5/5

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

A single, front-loaded sentence states the core action first, then the two most important usage constraints. Every piece of information earns its place with zero filler.

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

Completeness3/5

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

The description adequately covers the internal logic of the tool (how to select a target and preview vs apply), and an output schema exists. However, it lacks guidance on tool selection among siblings and does not disclose the side effects of apply=true, leaving an agent to infer the restore behavior's full impact.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by stating that index and drift_id are mutually exclusive and that apply=false means preview only—constraints and behavioral semantics not present in the individual parameter descriptions.

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

Purpose4/5

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

The description uses a specific verb '恢复' (restore) and resource (task-layer/change-layer), and explains the two identifier modes (index vs drift_id). It is clear and unambiguous, though it does not explicitly differentiate from siblings like tc_resume or tc_switch.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus sibling tools such as tc_resume, tc_switch, or tc_export. The description only provides internal usage constraints (choose index or drift_id, apply=false for preview), not tool-selection guidance.

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

tc_resumeA

只读返回目标、当前步骤、未落档路径和下一步。

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes工作区根目录
task_idNo任务 id。省略时使用当前活动任务

Output Schema

ParametersJSON Schema
NameRequiredDescription
goalYes任务目标
headYes
lastNo
nextNo下一步
storeNo存档目录
healthYes
handoffYes可粘贴给新会话的文本
skippedNo
active_taskYes活动任务
constraintsNo约束
drift_pathsYes
open_questionsNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states '只读' (read-only), clearly indicating the tool has no mutating side effects. It also enumerates what is returned. It does not cover edge cases such as a missing active task, but for a read-only status query this is largely sufficient.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundancy. It leads with the read-only safety property and then lists the returned items compactly. Every word earns its place.

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

Completeness3/5

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

The tool is simple and has an output schema alongside fully described parameters, so the description does not need to explain the return format. However, it omits when to use this tool and uses domain-specific terms like '未落档路径' without clarification, leaving some ambiguity for correct selection and invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both root and task_id. The description adds no parameter-level detail beyond the schema; it only describes the overall operation, so the baseline score of 3 applies.

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

Purpose4/5

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

The description states a concrete action: read-only return of four specific state items (target, current step, un-archived path, next step). This is a specific verb-plus-resource statement, not a tautology. However, it does not differentiate from sibling tools such as tc_show, which may also return state.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use tc_resume versus alternatives like tc_show or tc_capture, and no exclusions or prerequisites are mentioned. Correct usage must be inferred from the tool name and the listed fields, which is not explicit.

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

tc_saveB

保存一个任务层步骤。close=true 时关闭任务且不再接受保存。

ParametersJSON Schema
NameRequiredDescriptionDefault
nextNo下一步
rootYes工作区根目录
closeNo
pathsNo预留路径范围参数;当前必须为空数组
titleYes步骤标题
task_idNo任务 id。省略时使用当前活动任务
verifiedNo
conclusionNo这一步的结论
descriptionNo为什么这么做
open_questionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
gitYes这一步的 git 指针。git 是增强:ok 为 false 或 reason 说明没建 ref(不是仓库、TC_GIT=off、ref 重名等)时存档仍然有效
indexYes
titleYes步骤标题
closedYes
groupsYes
statusYesopen / suspended / closed
task_idYes任务 id。省略时使用当前活动任务
idempotentYes
skipped_pathsYesskipped paths (e.g. symlinks pointing outside the workspace)
active_task_changedYes本次调用是否把活动任务切走了(传了 task_id 且不是当前活动任务时会发生)

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose a meaningful behavioral trait: close=true closes the task and rejects further saves. However, for a save/mutation tool with zero annotations, it doesn't mention persistence semantics, error behavior, or what happens on overwrite, leaving significant gaps.

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

Conciseness4/5

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

Two short, front-loaded sentences with zero filler. The primary action is stated first, followed by the important close behavior. Appropriately sized for the tool's role, though it could be slightly more informative without becoming verbose.

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

Completeness3/5

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

With 10 parameters, 70% schema coverage, and an output schema present, the description is thin. It captures the core purpose and the close semantics but omits context around the step-save workflow (e.g., what constitutes a valid step, interaction with active task selection) that would help an agent invoke it correctly. The output schema reduces the return-format burden, but the overall guidance is minimal.

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

Parameters3/5

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

Schema coverage is 70% with 10 parameters. The description adds value by clarifying the close parameter's behavioral effect (closes task, no further saves), which goes beyond the bare boolean schema type. However, it doesn't address the undocumented parameters (verified, open_questions, paths constraint) beyond what the schema's descriptions provide.

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

Purpose4/5

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

The description states a specific action ('保存一个任务层步骤' – save a task-layer step) with a clear verb and resource. It is distinguishable from siblings like tc_capture, tc_init, and tc_switch, though it doesn't explicitly name any alternative. The close=true semantic adds useful context to the purpose.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus its siblings (tc_capture, tc_restore, tc_compress, etc.). The only behavioral note is the close=true behavior, which is a parameter effect rather than usage guidance. An agent gets no direction on choosing this tool over alternatives.

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

tc_showA

列出任务层步骤;include_drift=true 时同时列出变更层。index 可精确查看单步。

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes工作区根目录
indexNo
limitNo
cursorNo
task_idNo任务 id。省略时使用当前活动任务
include_driftNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
headYes
stepsYes
driftsNo
next_cursorNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. It mentions the effect of include_drift and that index views a single step, but it doesn't describe return value structure, pagination behavior, or side effects (none expected). It covers some behavior but is incomplete given the absence of annotations.

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

Conciseness5/5

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

The description is two short sentences, front-loading the main purpose and then adding a key option. Every word contributes, with no wasted text.

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

Completeness3/5

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

Given the tool has an output schema and 6 parameters, the description is moderately complete. It covers the main use and two key parameters, but because there are no annotations, it should also explain the output format (though output schema exists) and the effects of limit/cursor for pagination, which are missing.

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

Parameters4/5

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

Schema description coverage is only 33%: only root and task_id have descriptions. The description adds meaning to index (precise viewing of a single step) and include_drift (lists change layer too), which helps. However, it doesn't explain limit and cursor parameters, but the description partially compensates for the coverage gap.

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

Purpose4/5

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

The description states the primary purpose ('列出任务层步骤') and mentions the optional include_drift to also list the change layer, which distinguishes it from siblings that likely manage tasks rather than view them. However, it doesn't explicitly name sibling tools or contrast with them, so it's clear but lacks explicit differentiation.

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

Usage Guidelines3/5

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

The description implies usage for listing task steps and mentions when to use include_drift, but it does not explicitly say when to use this tool versus alternatives like tc_switch or tc_save. It provides some context but lacks clear exclusions or alternatives.

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

tc_switchB

切换活动任务。closed 任务会被拒绝。

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes工作区根目录
task_idYes要激活的任务 id

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesopen
task_idYes任务 id。省略时使用当前活动任务

TDQS

B3.2/5.0
Behavior3/5

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

没有 annotations,描述承担了行为披露责任。它披露了 closed 任务会被拒绝这一重要行为,但没有说明切换时原活动任务是否被取消、是否持久化、失败时的返回形式等。仅有部分行为透明。

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

Conciseness4/5

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

描述非常简短,一句话内包含了核心操作和关键约束,没有冗余信息。虽然信息量偏少,但结构上做到了高效。

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

Completeness3/5

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

对于只有两个参数的工具,描述提供了基本可用的信息,且存在 output schema 可补充返回结构。但缺少对“活动任务”概念的解释、切换的副作用以及 closed 状态如何判定,整体处于最低可用水平。

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

Parameters3/5

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

schema 覆盖率为 100%,root 和 task_id 都已有说明,因此达到基线 3。描述本身没有为参数增加额外语义,例如 task_id 的格式或 root 的约束。

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

Purpose4/5

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

描述明确说明了工具行为:切换活动任务,并补充了 closed 任务会被拒绝的限制。但与 tc_resume、tc_restore 等兄弟工具的差异没有明确说明,agent 仍需通过名称推断边界。

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

Usage Guidelines2/5

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

描述没有说明何时使用本工具而非其他兄弟工具,也没有给出使用前提或替代方案。唯一的行为约束是 closed 任务会被拒绝,但这不足以指导 agent 在多个相似工具间做选择。

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

Tool Schema Changelog

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

  1. 9 tool updatesv0.1.1
    • First observedtc_capture
    • First observedtc_compress
    • First observedtc_export
    • First observedtc_init
    • First observedtc_restore
    • First observedtc_resume
    • First observedtc_save
    • First observedtc_show
    • First observedtc_switch

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a distinct role: capture handles drift recording, save commits task-layer steps, show lists, restore recovers, resume reports status, and export/compress manage archival. There is no meaningful overlap between tool responsibilities.

Naming Consistency5/5

All tools follow a consistent tc_ prefix plus a clear lowercase verb (capture, init, switch, save, show, restore, resume, export, compress). The naming pattern is uniform and predictable.

Tool Count5/5

Nine tools is well-scoped for a checkpointing server. Each tool covers a necessary operation without redundancy or bloat.

Completeness5/5

The tool set covers the full task-checkpoint workflow: creation, activation, capture, saving, inspection, restore, status, export, and cleanup. There are no obvious dead ends or missing lifecycle operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides operational continuity for AI coding agents, preserving task state, decisions, checkpoints, and project context across sessions and model switches via MCP.
    1
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Local-first working-state checkpoints and portable handoff packets for AI coding agents. Continuation checkpoints recover Claude Code sessions after rate limits, crashes, and compaction; packets hand tasks across tools, repos, and machines — Markdown on disk, no cloud, no telemetry.
    23
    22 npm
    4
    MIT