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는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 GitHub 계정 qddfxp 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.7)은 40일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 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
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요