Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
作者提供的说明(英文原文)
MCP server that checkpoints long agent tasks: roll back to any step, resume in a new session.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"task-checkpoint": {
"command": "uvx",
"args": [
"task-checkpoint-mcp"
]
}
}
}在终端中运行这条命令
claude mcp add task-checkpoint -- uvx task-checkpoint-mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"task-checkpoint": {
"command": "uvx",
"args": [
"task-checkpoint-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"task-checkpoint": {
"type": "stdio",
"command": "uvx",
"args": [
"task-checkpoint-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 qddfxp 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.7)于40天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Agent-Native Google Calendar - manage events, sync, and public booking
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
给长任务做"做一步、存一步"的存档:中断后新会话能接着做,做错了能退回任意一步。
一个 stdio MCP 服务器,只用 Python 标准库,不装任何第三方包。
快速开始 | 工具 | 客户端配置 | 使用限制 | English
一、装
pipx install task-checkpoint-mcp
二、在客户端里接上(Claude Code、Codex、Cursor 等都是同一段配置)
{
"mcpServers": { "task-checkpoint": { "command": "tc-mcp", "args": [] } } }
三、把 `SKILL.md` 装进技能目录,不装的话 Agent 不会主动存档
tc-mcp --install-skill ~/.claude/skills/task-checkpoint
SKILL.md 随包一起装(wheel 里的包数据),不需要仓库、也不需要联网。想看内容用 tc-mcp --print-skill,想知道它在哪用 tc-mcp --skill-path。
(技能目录按客户端而定,见下面"把 SKILL.md 装进 Agent 的技能目录"。)
四、交给 Agent 用。 一个任务就四步:
tc_init 开任务
tc_save 每完成一步存一次(带 conclusion 和 next) tc_resume 新会话开头先调这个接上进度 tc_restore 退回去(先 apply:false 预览,再 apply:true)
五、不用记工具名,直接说人话。
用 task-checkpoint 开个任务,目标是把 user 模块拆成 service 和 repository 两层。每完成一步存一次档,带结论和下一步。
它会调 tc_init 建任务,之后每完成一步调一次 tc_save。中途换会话、或者隔天接着做,你说一句"接着上次的做",它调 tc_resume 就把进度拿回来了。
("每完成一步就存档"这条约束的可靠来源是 SKILL.md —— 装进技能目录之后它是硬规则;不装,就只能靠你每次提醒。)
中途被打断、隔天换个模型重开,新会话调一次 tc_resume 拿到的是这个:
任务:重构认证模块
目标:把 session 改成 JWT 当前步骤:3 下一步:把三个视图函数切到新入口,删旧函数 未落档:src/views/auth.py, src/views/user.py
handoff 字段就是这段文本,可以直接粘给新会话。它同时告诉你哪几个文件改了但还没落档。
git stash 或随手 commit 一下| 做法 | 缺什么 |
|---|---|
git stash | 一次性的,不能命名、不能跨会话交接,也没有"这一步在做什么、结论是什么" |
| 随手一个 commit | 会污染真实历史;半成品未必允许 commit;还得你记得先 commit |
| 手写进度笔记 | 和文件状态脱钩,回退时要自己对着时间线拼 |
| 本工具 | 文件变化后台自动记(变更层),步骤语义由模型声明(任务层);只额外加 refs/checkpoints/...,不动你的 git 历史 |
值得装:多步、可能被中断、需要能退回的编码或文档任务。 不值得装:一次能做完、不需要回退也不需要交接的改动。
refs/checkpoints/... 引用。.checkpoints/;指定外部 store 时,工作区仅留一个不含文件内容的 .task-checkpoint-store.json 路径指针。pipx install task-checkpoint-mcp
pip install task-checkpoint-mcp
也可以直接从 git 装,跟着仓库走、不走 PyPI 的版本号:
pipx install "git+https://github.com/qddfxp/task-checkpoint-mcp"
装完在客户端里用 tc-mcp 启动。包里有两个等价的入口点:tc-mcp 和 task-checkpoint-mcp(后者是给 uvx 这类按包名找命令的 runner 用的):
{
"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。
npm 上有一个同名的 task-checkpoint-mcp,但它是启动器,不是服务器本体:
npx -y task-checkpoint-mcp
它只做一件事:找到本机装了 tc_mcp 的 Python 解释器,然后把 stdio 透传给 python -m tc_mcp。所以本机仍然要先有 Python 包(方式一或方式二)。没有的话它会打印安装命令、以退出码 1 结束,而不是丢一堆 traceback 给你。
适合客户端只认 npm 式启动命令的情况:
{
"mcpServers": { "task-checkpoint": { "command": "npx", "args": ["-y", "task-checkpoint-mcp"] } } }
npx -y task-checkpoint-mcp --version / --help 是启动器自己的开关,不需要本机有 Python。
上面那段 mcpServers JSON 要写进客户端的配置文件。各客户端的位置和顶层键:
| 客户端 | 配置文件 | 顶层键 |
|---|---|---|
| Claude Desktop | Windows %APPDATA%\Claude\claude_desktop_config.json;macOS ~/Library/Application Support/Claude/claude_desktop_config.json | mcpServers |
| Claude Code | 项目根目录 .mcp.json | mcpServers |
| Cursor | 全局 ~/.cursor/mcp.json;项目内 .cursor/mcp.json 优先 | mcpServers |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | mcpServers |
| ZCode | ~/.zcode/cli/config.json | mcpServers |
| VS Code / Copilot | 项目内 .vscode/mcp.json;用户级 %APPDATA%\Code\User\mcp.json | `servers` |
| Codex CLI | ~/.codex/config.toml | TOML 的 `[mcp_servers]`,不是 JSON |
两个容易踩的:
VS Code 的顶层键是 `servers`,不是 `mcpServers`。 直接抄上面的 JSON 不会生效,得改键名:
{
"servers": { "task-checkpoint": { "command": "tc-mcp", "args": [] } } }
Codex 用 TOML。 同样一段配置要写成:
[mcp_servers.task-checkpoint]
command = "tc-mcp" args = []
其余客户端以各自的文档为准。
最重要的一条:文件变化由后台线程自动记录,但"这一步在做什么、结论是什么、下一步干什么"只有模型主动调 tc_save 才会留下。
所以要让 Agent 每完成一步就存一步 —— 这份约束写在 SKILL.md 里,得把它装进 Agent 的技能目录(见下面"把 SKILL.md 装进 Agent 的技能目录")。不装它,文件回退点照常产生,但没人知道当初要干什么、下一步该干什么。
四条铁律:
tc_init,一个任务一个名。已有活动任务会被挂起而不是关闭,可以 tc_switch 切回去。tc_save,并且必须填 `conclusion` 和 `next`。不填,新会话就只看得到一堆文件路径。apply: false 看清单,确认了再 apply: true。一步的粒度:能独立说清"做完了、结论是 X"的单元。太细(每个文件一次)会淹没有效信息,太粗(整个任务一次)就失去了回退的意义。
10 个。第一个参数都是 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_import | 导入别人的交接包,在这里接续任务 | root, package |
tc_compress | 存档太大了,回收旧变更层空间 | root |
tc_save 的完整参数:
title(必填)——这一步一句话标题,写"做了什么",不写"改了什么"conclusion——这一步的结论。最有价值的字段next——下一步要干什么。接续工作的关键description——为什么这么做(决策理由,事后没人记得)verified——已验证项列表(跑了什么测试、确认了什么事实)open_questions——还没解决、留给后面的问题close: true——收尾时用。关闭后不能再存档,但还能读回退操作本身也会被记成一条变更记录,返回里的 recovered 就是它的 drift_id —— 退错了可以再用它退回来。
tc_resume.handoff —— 一段现成的交接文本,可以直接粘给新会话;drift_paths 是工作区里还没落档的改动;health.errors 是存档自身的问题tc_save.idempotent —— 同一步(标题、文件摘要、结论、下一步、已验证项都一样)重复存,不会产生重复步骤tc_save.active_task_changed —— 传了别人的 task_id 时活动任务会被切过去(原任务变 suspended),这个字段就是在提示这件事tc_restore.recovered —— 回退本身也会被记成一条变更记录,这就是它的 drift_idtc_restore.plan.unrestorable / skipped_paths —— 目标里没能还原的文件;预览和执行给的是同一份清单tc_capture.waiting / partial —— 还在静默期,以及中间那条不完整的记录tc_init.exclude —— 回读你这次设进去的排除模式tc_export.path —— 交接包目录,里面有一个 HANDOFF.md,是给接手方的提示词SKILL.md 是这个项目的另一半功能,不是可选文档:MCP 服务器负责存取,`SKILL.md` 负责让模型每完成一步真的去调 `tc_save`。
复制到客户端扫描的技能目录,目录名即技能名:
| 客户端 | 放这里 |
|---|---|
| Claude Code | ~/.claude/skills/task-checkpoint/SKILL.md |
| Codex CLI | ~/.codex/skills/task-checkpoint/SKILL.md |
| ZCode | ~/.zcode/skills/task-checkpoint/SKILL.md |
| 跨客户端共用 | ~/.agents/skills/task-checkpoint/SKILL.md |
~/.agents/skills/ 是多个客户端共用的技能目录;客户端专属目录优先于它 —— 同名技能以客户端专属目录里的那份为准。OpenCode 等其它客户端放到它自己文档里的技能目录即可,规则不变。
tc-mcp --install-skill ~/.claude/skills/task-checkpoint
SKILL.md 是随包一起安装的(wheel 里的包数据),所以 pipx install 的用户不需要仓库,也不需要联网。目标已存在时会拒绝覆盖 —— 确实要覆盖加 --force;只想看内容用 tc-mcp --print-skill。
克隆了仓库的话,cp SKILL.md <技能目录>/ 效果一样。
Windows 路径形如 C:\Users\<你>\.claude\skills\task-checkpoint\SKILL.md。各客户端的技能目录可能不同,以它自己的文档为准;要求只有一条:文件落在技能目录下的 <技能名>/SKILL.md。重启客户端后生效。
装完最快的一条,确认入口点活着、拿到版本号:
tc-mcp --version # 版本号
tc-mcp --help # 所有开关
下面几条都要先克隆仓库 —— pip 装出来的包里没有 tests/ 和 tools/。
在克隆下来的仓库里跑一遍回归测试:
python -m unittest discover -s tests -p "test_*.py" -v
最后一行是 OK 就对了。整套测试(100 多个用例)跑一次的时间完全看环境:
| 跑在哪 | 实测 |
|---|---|
| CI 的 ubuntu runner | 4.7 秒 |
| CI 的 windows runner | 39.8 秒 |
| 本机 Windows(E 盘) | 156~340 秒 |
同一套代码差了七十倍。开销集中在 git 子进程(refs/checkpoints/ 相关用例占大头)和静默期等待,对磁盘和杀毒的实时扫描极其敏感 —— 别把秒数当承诺,也别拿一个数字去对比另一台机器。
全部只用标准库,不需要 pytest;在 Python 3.10 上也能跑,只有读 pyproject.toml 的那几条会因为 tomllib 被跳过(3.11+ 全跑)。
仓库里还能跑真机端到端演练(起真 MCP 子进程、真杀进程、建约 190 MB 的重工作区、逐项核对"不动你 git"的承诺):
python tools/drill.py
它跑完默认把场地删掉;想看场地就 TC_DRILL_KEEP=1 python tools/drill.py(演练有未通过项时也会自动保留,方便排查)。
确认 MCP 服务器能起来 —— 会回一行带 serverInfo 的 JSON:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}' | python scripts/tc_mcp.py
从 pip 装的版本没有 scripts/,把上面那条改成 ... | tc-mcp(或 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/。别把凭据放在被扫路径里;避不开时用 tc_init(exclude=[...]) 把整个目录排掉。plan.unrestorable 里)。名单分两层就是为压低误拦。拦的范围:
.ssh .aws .gnupg .docker .kube .env .envdir .secrets .tokens,或名字含 secret / credential / token 的目录。.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 shadowkubeconfig *.kubeconfig *.tfstate terraform.tfvars *.tfvars *.jwtcredentials* creds* secret* secrets.json token token.json token.txt *.token *_token auth.jsonsettings.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 .phpprod_credentials.json 拦;src/password_policy.py、src/tokenizer.py、docs/secrets.md 不拦。exclude 的匹配方式和内置名单一致:按单个名字段做 glob(目录名,或路径的第一段)。所以 exclude=["config"] 会排掉任意层级的 config/ 目录,但不能只排某个具体文件(要排 config/database.yaml 就得连 config/ 一起排)。带 / 的模式会被直接拒绝,不会静默失效。
这条能力不构成隐私保护或合规保证。 存档目录的访问权限由你自己管;别把未排除的凭据、令牌、私钥、个人资料放进被扫路径。
partial: true。tc_save / tc_capture 之前,最后那段改动只在 tc_resume 的未落档路径里,还不是一条变更层记录。tc_capture 和后台线程用 mtime+size 判断变化。内容改了但 mtime 和长度都没变时(cp -p、rsync -t、tar -x 会保留 mtime),它不会觉得文件变了。
任务层 tc_save 默认按内容算 sha,不受此限;但 TC_SHA_REUSE=on 会把任务层也拉到同一判据上 —— 见下面那条。
plan.unrestorable 里。预览和实际执行用同一份清单,所以一个 .env 不会让整次回退失效。不超过 100 MB 的文件原样按 sha 存进 payload/,相同内容只存一份;超过 100 MB 只记流式哈希和元数据,不保存内容,因而不能回退内容。
旧变更层的内容会一直留着,用 tc_compress 手动回收。它的默认参数是保留 7 天,所以小工作区上默认调用往往是 converted: 0(什么都没回收)—— 返回值里带 keep_seconds / minimum / maximum / eligible / bytes_freed,看得出"为什么没回收"。想真的清就用小一点的 keep_seconds(步骤基线和 `recov
只显示了开头部分;其余内容请在仓库中阅读