CodeRecoder MCP
Summary: A local-first MCP server (CodeRecoder) that backs up code as project- and file-level snapshots and restores them, with an editing-session/history layer.
Projects:
activate_project(creates a.CodeRecodercache, auto-detects language),deactivate_project(optionally save history),list_projects,get_project_info.Project-wide snapshots:
create_project_snapshot(named/tagged/prompted, incremental or full),list_project_snapshots(detailed/compact),restore_project_snapshot(whole project back to a snapshot).Per-file snapshots:
create_file_snapshot(fast direct-copy instant backup, prompt + optional metadata/sessionId),list_file_snapshots(filter by file, session, limit, format),restore_file_snapshot,delete_file_snapshot(permanent).Editing sessions:
create_session,get_current_session;sessionIdgroups and filters edits/snapshots.Legacy edit tracking:
record_edit(line-range old→new replacement),rollback_to_version,list_history,get_diff(diff two edit versions).Caveat: this schema is an older/reduced surface than README v3.1.0 — it lacks safety features like restore previews with one-time confirmation tokens,
verify_project_snapshot,delete_project_snapshot, andget_backup_status.
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., "@CodeRecoder MCPsave a snapshot of my project before deploying"
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.
CodeRecoder
CodeRecoder 是一个本地优先的代码备份与可验证恢复系统,同时提供 MCP 服务和 Vue 3 + Electron 桌面控制台。它面向 Codex、Claude Code 及其他支持 MCP 的开发工具,也可以作为独立桌面小窗运行。
当前版本:3.1.0
CodeRecoder 不替代 Git。Git 负责协作、审查、分支和发布历史;CodeRecoder 负责在 AI 编程和高频修改过程中自动保留可恢复副本,并在恢复前后提供完整性证据。
核心能力
能力 | 当前实现 |
完整工程备份 | 每个快照都是逻辑完整、可独立恢复的文件树 |
存储去重 | 未变化的普通文件通过硬链接复用,变化文件写入新副本 |
完整性证据 | SHA-256 清单记录路径、类型、内容、权限、大小和整棵树哈希 |
自动检查点 |
|
安全恢复 | 强制预览、短期确认令牌、恢复前安全快照、恢复后校验 |
自动回滚 | 恢复失败时回到操作前状态;进程中断后可在下次初始化时恢复 |
并发协调 | 存储锁与工程锁带心跳、超时和失效锁恢复 |
双控制入口 | stdio MCP 服务与 Vue 3/Electron 桌面控制台复用同一备份内核 |
多工程桌面管理 | 单 Electron 主进程维护隔离会话,可为工程创建独立观察窗口 |
Serena 自动接入 | 自动发现 CLI、创建/修复工程配置、启动 sidecar 并执行 MCP 握手 |
MCP 配置工作台 | 为 VS Code、Cursor、Claude Code、Codex 生成本机配置并检查依赖 |
Related MCP server: GenCodeDoc
架构
flowchart TB
A[VS Code / Cursor / Claude Code / Codex] -->|stdio JSON-RPC| B[CodeRecoder MCP]
C[Vue 3 Renderer] -->|类型化白名单 IPC| D[Electron Main]
D --> R[ProjectSessionRegistry]
R --> S1[ProjectSession A]
R --> S2[ProjectSession B…]
S1 --> F1[BackupManager + AutoCheckpointManager]
S1 --> SE1[Serena sidecar A]
S2 --> F2[独立备份管理器与操作队列]
S2 --> SE2[Serena sidecar B]
B --> F[BackupManager]
F1 --> H[SHA-256 清单与完整快照]
F2 --> H
F --> H
H --> I[工程锁 / 存储锁 / 外部备份介质]BackupManager是唯一生产备份内核,负责扫描、快照、清单、验证、保留策略、恢复和启动恢复。AutoCheckpointManager只负责监听和调度,最终仍通过BackupManager创建经过验证的完整快照。桌面端持久化 schema v2 工程注册表;每个工程拥有独立管理器、监听器、恢复记录、操作队列与 Serena 进程。
主窗口管理全部会话;同一工程最多一个独立窗口。关闭工程窗口不停止保护,重复打开只会聚焦已有窗口。
两个入口同时保护同一工程时,工程级跨进程锁会串行化写入和恢复操作。
系统要求
源码开发:Node.js
22.12.0或更高版本、npmDebian 安装包:Linux amd64;桌面及 CodeRecoder MCP 使用内置运行时
桌面端需要可用的图形会话
完整测试使用操作系统临时目录;旧版 shell 迁移测试依赖 Bash/Linux 工具
安装
Debian / Ubuntu 安装包
从 GitHub Releases 下载 .deb 与 SHA256SUMS,在下载目录执行:
sha256sum -c SHA256SUMS
sudo apt install ./CodeRecoder-3.1.0-amd64.deb
coderecoder安装包注册应用菜单图标,提供 coderecoder、coderecoder-mcp 和 coderecoder-install-serena。可以在 GNOME 应用列表中右键 CodeRecoder,选择固定到程序栏。安装后无需保留源码目录,也无需为 CodeRecoder 单独安装 Node.js。
如果曾运行源码版快捷方式安装命令,用户级 ~/.local/share/applications/coderecoder.desktop 会优先于系统安装包;请将该文件备份移走后使用系统应用列表中的图标。工程设置与备份保留在原来的用户目录。
源码安装
git clone https://github.com/snow-wind-001/CodeRecoder.git
cd CodeRecoder
npm install
npm run lint
npm testnpm test 会构建 MCP 服务、检查桌面 TypeScript,并运行备份、恢复、并发、自动检查点、MCP 生命周期、stdio 和桌面控制器测试。
快速开始:桌面控制台
npm run desktop:start多工程备份总览 | MCP 与 Serena 配置工作台 | 恢复预览与安全确认 |
|
|
|
首次启动后:
选择需要保护的工程目录。
选择外部备份根目录;推荐使用独立磁盘或专用备份目录。
决定是否启用自动检查点、随应用启动及 Serena 自动配置。
点击“注册并启动保护”,等待基线备份验证和 Serena MCP 握手。
用顶部工程条切换会话;需要并排观察时,为选中工程打开独立窗口。
桌面窗口默认内容尺寸为 424×880,宽度限制为 380–560px,适合放在编辑器旁边。界面提供:
自动检查点健康度和未备份变更提示;
多工程运行汇总,以及备份与 Serena 相互独立的健康状态;
快照时间线、变更数量、逻辑大小、新增占用和树哈希摘要;
手动创建备份和重新验证完整性;
exact/overlay恢复预览、受影响路径和令牌倒计时;恢复成功、恢复拒绝、自动回滚或回滚失败的明确状态。
桌面端不提供永久删除按钮;删除备份仍需通过 MCP 工具进行双 ID 确认。更多说明见 desktop/README.md。
安装到 Ubuntu/GNOME 程序栏
npm run desktop:install-linux该命令先检查并补齐 Electron 运行程序、完成桌面构建,再以当前用户身份安装 coderecoder.desktop,刷新应用列表并固定到 GNOME Dock,最后回读固定结果,不需要 sudo。npm install 和 npm run build 不会自动注册快捷方式,需要单独运行上述命令。
启动项会自动寻找满足要求的 Node.js(包括 NVM 安装),并从当前仓库构建、启动桌面端;因此移动或删除仓库后需要重新运行安装命令。Electron 下载会使用已有的 HTTP_PROXY / HTTPS_PROXY(也支持小写变量);启动日志保存在 ${XDG_STATE_HOME:-~/.local/state}/coderecoder/desktop-launch.log。再次点击图标会唤醒已有窗口。
桌面开发命令
npm run desktop:dev # 构建内核并启动 Electron/Vite 热更新
npm run desktop:renderer # 只启动浏览器渲染层,供界面开发使用
npm run desktop:typecheck # 检查 renderer、preload 和 Electron 主进程
npm run desktop:build # 生产构建到 dist-desktop/
npm run test:desktop # 桌面控制器集成测试多工程与多开策略
桌面端采用单 Electron 实例 + 多工程会话注册表 + 每工程独立备份管理器。第二次启动只聚焦主窗口,不会复制文件监听器或 Serena;工程窗口关闭后,后台会话继续运行。应用退出时,各会话按全局 I/O 并发上限创建最终检查点并停止 sidecar。
注册器拒绝重复工程、父子嵌套工程,以及与任一受保护工程重叠的备份根目录。同一外部备份根目录可以服务多个非嵌套工程,实际数据会写入带工程路径哈希的独立子目录。旧版单工程偏好会迁移到 schema v2,但不会在迁移后未经确认自动启动。
MCP stdio 入口仍是“一服务进程、一活动工程”;多个编辑器客户端可以启动独立进程。若桌面与 MCP 同时操作同一工程,跨进程工程锁会继续保证关键写入串行化。
内置 MCP 配置工作台
点击标题栏的设置按钮,可以:
检查独立 Node.js、
dist/index.js、Serena CLI、.serena/project.yml以及四类客户端程序;在 VS Code、Cursor、Claude Code、Codex 间切换,并生成 CodeRecoder 或 Serena 配置;
由主进程重新生成并复制建议,renderer 不获得通用剪贴板、文件系统或命令执行权限;
查看当前 Serena HTTP endpoint。该地址只在当前 Electron 工程会话有效,长期配置应使用界面建议的 stdio 命令。
工作台不会覆盖已有客户端配置。合并 JSON/TOML 前应保留原文件,并避免把恢复、删除工具加入无条件自动批准列表。
快速开始:连接 MCP 客户端
先构建 stdio 服务:
npm run build也可以启动桌面端,打开“MCP 连接设置”,选择客户端和服务后复制已经展开为本机绝对路径的配置。该方式会同时指出缺失组件,但仍由用户决定如何合并现有配置。
VS Code / Cursor
VS Code 使用工作区级 .vscode/mcp.json 的 servers 字段;Cursor 使用用户级 ~/.cursor/mcp.json 的 mcpServers 字段。两者字段结构不同,不要直接复制整个文件互相覆盖。
Codex CLI / IDE
codex mcp add coderecoder -- node /absolute/path/CodeRecoder/dist/index.js
codex mcp list也可以在 ~/.codex/config.toml 中配置:
[mcp_servers.coderecoder]
command = "node"
args = ["/absolute/path/CodeRecoder/dist/index.js"]
cwd = "/absolute/path/CodeRecoder"Claude Code
claude mcp add --scope user coderecoder -- node /absolute/path/CodeRecoder/dist/index.js
claude mcp list其他 MCP 客户端使用等价的 stdio 配置即可。stdout 专用于 MCP JSON-RPC,所有诊断信息写入 stderr。不要在包装脚本中把普通日志输出到 stdout。
Serena
在 MCP 设置中点击“下载并安装 Serena”,或在终端执行以下一种命令:
npm run serena:install # 源码版:下载固定上游版本
bash scripts/install-serena.sh --source /path/to/serena # 使用已下载的 Serena 源码
coderecoder-install-serena # Debian 安装版安装器使用官方 uv 准备独立 Python 3.12 环境,并把 CLI 安装到 ~/.local/bin/serena,应以当前用户运行,不使用 sudo。首次安装及语言服务准备需要联网;Serena 源码固定到官方仓库提交 701e7c843f46c6a649203a488cece1bf19f1df90,Python 依赖由 uv 解析。桌面安装日志位于 Electron 用户数据目录下的 logs/serena-install.log。
C# 需要 .NET 10;可以运行 coderecoder-install-serena --with-dotnet,源码版使用 npm run serena:install -- --with-dotnet,安装器会从 Microsoft 下载 SDK 到 ~/.dotnet。TypeScript / JavaScript / Vue 语言服务还需要系统 Node.js 和 npm;这与 CodeRecoder 安装包的内置 MCP 运行时是分别配置的。
为 Codex 添加 Serena:
codex mcp add serena -- "$HOME/.local/bin/serena" start-mcp-server \
--context codex --project-from-cwd --enable-web-dashboard false \
--open-web-dashboard false --enable-gui-log-window false
codex mcp list在 ~/.codex/config.toml 的 [mcp_servers.serena] 段中可设置 startup_timeout_sec = 120、tool_timeout_sec = 240,随后重启 Codex。Debian 安装版 CodeRecoder 可使用 codex mcp add coderecoder -- /usr/bin/coderecoder-mcp。安装与配置不覆盖其他 MCP 服务。
桌面工程会话启用 Serena 后会依次执行:发现可执行文件、检查工程配置、必要时运行 serena project create、以固定参数绑定 127.0.0.1 动态端口,并发送真实 MCP initialize 请求。只有握手成功才显示“已连接”。
后台创建配置时保留自动检测到的主要语言,不启用交互询问的可选语言。多语言工程可编辑 .serena/project.yml 的 language_servers,例如 [csharp, cpp, python];CodeRecoder 的 Vue 组件分析可在 typescript 后增加 vue。请排除 .venv、node_modules、构建输出等依赖目录。已有全局配置若仍使用 TIKTOKEN_GPT4O 且启动卡在分词器下载,可改为当前默认的 token_count_estimator: CHAR_COUNT。
MCP 握手表示服务已接受连接;语言功能是否可用还应通过 get_symbols_overview 等实际调用检查。Linux 下 Windows / Visual C++ 工程可能产生构建依赖诊断,不应据此宣称完整支持 Windows 构建。
若日志包含 Error loading configuration 且已开启自动配置,桌面端会先把现有 project.yml 重命名为带时间戳的 .bak,再创建新配置;重建失败时会尝试恢复原文件。Serena 失败只降低辅助工具状态,不会把正常的备份保护误报为失败。
更多配置示例和批准策略见 MCP_CONFIG_GUIDE.md。
推荐备份工作流
1. 激活工程
activate_project 会初始化存储、执行启动恢复检查、创建经过验证的基线,并默认启动自动检查点。
{
"projectPath": "/work/my-project",
"projectName": "my-project",
"storageRoot": "/data/coderecoder",
"autoCheckpoint": true,
"debounceMs": 1500,
"reconciliationIntervalMs": 60000,
"maxBackups": 100,
"excludeNames": ["vendor-generated"]
}当 storageRoot 存在时,实际工程存储目录为:
<storageRoot>/<project-name>-<project-path-hash>/省略 storageRoot 时,默认写入 <project>/.CodeRecoder/backups/。如果不希望向源工程写入任何元数据,应始终指定外部目录。
2. 检查保护状态
调用 get_backup_status,重点检查:
hasUncheckpointedChanges是否为false;automaticCheckpoint.state是否为running;watcherReady是否为true;lastError是否为空;latestSnapshot和currentMatchesSnapshot是否符合预期。
自动状态含义:
状态 | 含义 |
| 监听与检查点调度可用 |
| 恢复或停用流程正在暂停监听 |
| 监听或检查点发生错误,应检查 |
| 自动检查点未启用或已经停止 |
3. 创建命名备份
重要重构、升级或批量生成前,建议额外创建显式备份:
{
"name": "before-auth-refactor",
"prompt": "认证模块重构前的稳定代码",
"tags": ["stable", "auth"],
"skipIfUnchanged": false
}显式备份默认不会因为内容未变化而跳过,因此可以保留有业务意义的命名节点。
安全恢复
恢复必须分成预览和确认两个阶段。
第一步:生成预览
{
"snapshotId": "目标快照 UUID",
"mode": "exact"
}preview_project_restore 会:
重新验证目标快照;
扫描当前工程并计算新增、修改、删除和重命名路径;
将当前树哈希、工程、目标快照和恢复模式绑定到确认令牌;
返回五分钟有效、只能使用一次的
confirmationToken。
预览会在备份存储中写入短期确认记录,因此 MCP 元数据将其标记为非只读,但它不会修改源代码。
第二步:明确确认
{
"snapshotId": "同一个目标快照 UUID",
"confirmationToken": "预览返回的令牌"
}令牌过期、已使用、工程在预览后变化、工程/快照/模式不匹配时,恢复会被拒绝。不要手工构造令牌,也不要缓存后重复使用。
恢复模式
模式 | 行为 | 适用场景 |
| 将受管代码同步到快照状态,并移除快照中不存在的受管路径 | 完整回到已知代码状态 |
| 写入快照中的路径,但保留当前工程的额外文件 | 只覆盖已知文件,避免删除新增内容 |
两种模式都不会删除默认排除项。执行恢复前,系统必须先创建带 protected 标签的恢复前安全快照;执行后必须验证文件字节、类型和权限。失败时自动回滚,只有回滚也通过验证后才会报告 rollbackState: restored。
MCP 工具参考
工具 | 主要参数 | 副作用与批准建议 |
|
| 创建基线并可能启动监听 |
|
| 默认创建最终检查点并清理进程内状态 |
| 无 | 只读,可用于周期健康检查 |
|
| 新增经过验证的备份并占用磁盘 |
|
| 只读,按时间倒序返回摘要 |
|
| 写入短期令牌,不修改源工程 |
|
| destructive;必须展示预览并取得明确确认 |
|
| 只读;重新计算内容和清单证据 |
|
| destructive;永久删除指定备份 |
恢复和删除工具不应加入客户端的无条件自动批准列表。
快照和存储模型
外部存储结构示例:
/data/coderecoder/
└── my-project-a1b2c3d4e5f6a7b8/
├── index.json
├── pending/ # 短期恢复确认记录
├── restore-recovery.json # 恢复事务日志;异常时会保留
└── snapshots/
└── <snapshot-uuid>/
├── manifest.json
└── tree/ # 可独立恢复的完整逻辑文件树每个清单包含:
快照 ID、名称、标签、触发来源和创建时间;
父快照 ID、完整工程树哈希和 SHA-256 算法标识;
文件、目录和符号链接条目;
普通文件内容哈希、大小和权限;
新增、修改、删除和推断重命名统计;
逻辑大小、实际新增占用及硬链接去重统计;
可获取时的 Git 分支和短提交证据。
快照在逻辑上彼此独立;删除任意一个普通快照不会破坏其他快照的目录结构。物理去重使用硬链接,因此直接篡改备份树中的某个共享文件可能同时影响多个快照。不要手工编辑存储目录,应使用 verify_project_snapshot 检测损坏,并把备份根目录复制到独立介质以获得真正的灾难恢复能力。
默认排除规则
默认按任意路径段排除:
.CodeRecoder .git .hg .svn node_modules dist build coverage
.next .cache .parcel-cache .pytest_cache .mypy_cache .ruff_cache
.turbo .venv venv out target __pycache__此外还排除:
名称以
.env开头的文件;.log、.tmp、.temp和.pyc文件;位于受保护工程内部的备份存储目录本身;
用户通过
excludeNames增加的目录段或文件名。
符号链接按链接本身保存,不跟随到工程外。恢复时所有清单路径都会经过安全连接检查,拒绝绝对路径和目录穿越。
可靠性设计
写入一致性:清单和索引通过临时文件、文件同步和原子重命名发布。
复制期变更检测:源文件在扫描与复制期间发生变化时,本次备份失败,不登记为成功。
并发锁:同一存储和同一源工程分别加锁;锁带进程信息、心跳和失效恢复。
自动对账:监听事件之外,周期性重新扫描可捕获丢失或合并的文件系统事件。
恢复事务:源代码发生修改前写入持久化恢复日志,并创建验证过的安全快照。
启动恢复:初始化会清理未完成快照、过期令牌,修复可恢复的删除事务,并处理被中断的恢复。
保留策略:超过
maxBackups时清理最旧的普通快照;protected恢复前快照不会被自动清理。诚实状态:监听失败会进入
degraded,不会继续显示为健康状态。
Electron 安全边界
contextIsolation: truenodeIntegration: falsesandbox: truerenderer 不接触文件系统、环境变量、shell 或通用
ipcRendererpreload 与主进程分别验证参数,只暴露备份控制所需的白名单方法
IPC 校验主框架和渲染来源;开发地址仅允许 HTTP 回环主机
默认拒绝页面导航、新窗口和所有权限请求
Content Security Policy 禁止对象、表单和 frame 内容
工程注册表以 schema v2、
0600权限原子保存;不保存恢复令牌或客户端密钥工程窗口在主进程绑定
projectId,不能跨会话调用备份、恢复或 Serena 操作Serena 仅使用固定参数直接
spawn,不经过 shell,并只绑定127.0.0.1
开发和验证
命令 | 作用 |
| 使用 |
| 严格编译 TypeScript 到 |
| 启动已编译的 stdio MCP 服务 |
| 检查 MCP、Electron 和 Vue TypeScript |
| 运行备份内核与自动检查点测试 |
| 运行真实 MCP 初始化、列举和调用生命周期测试 |
| 运行多工程隔离、偏好迁移、Serena 修复和 MCP 配置测试 |
| 安装用户级启动项并固定到 GNOME Dock |
| 运行当前完整自动化测试套件 |
当前测试覆盖二进制内容、空目录、权限、符号链接、排除规则、增删改名、精确恢复、令牌拒绝、损坏检测、保留策略、并发管理器、损坏索引重建、中断删除/恢复、监听防抖、stdio 协议纯净性、多工程停止隔离、工程窗口权限、路径重叠拒绝、偏好迁移、Serena 配置修复与 MCP initialize 握手。
测试必须使用操作系统临时目录和外部备份目录,不要对本仓库或真实工程执行恢复测试。详细测试说明见 test/README.md。
已知边界
CodeRecoder 不是文件系统冻结点,也不保证跨多个同时写入文件的应用级事务快照。
自动检查点只在对应 MCP 或桌面进程存活且工程已激活时运行。
当前仓库提供用户级 Linux 启动项,但尚未配置可分发安装包、代码签名、自动更新、托盘常驻或云同步。
默认排除的环境文件和密钥不会进入快照,因此需要独立的安全配置备份方案。
硬链接去重降低本地占用,但不能替代离线副本、对象存储版本控制或异地备份。
每个 stdio MCP 进程同时只激活一个工程;桌面端单实例可保护多个工程。
每个启用的 Serena 工程会启动独立语言服务,工程较多时会增加内存占用;注册工程时可按需关闭 Serena,而不影响备份。
故障排查
客户端看不到工具:运行
npm run build,确认配置使用dist/index.js的绝对路径,然后重启客户端。JSON-RPC 解析失败:检查包装脚本,确保 stdout 没有普通日志;诊断只能写入 stderr。
自动检查点降级:调用
get_backup_status,查看automaticCheckpoint.lastError和目录权限。恢复令牌失效:重新生成预览;工程变化、超时或令牌已使用都会使旧令牌失效。
备份目录不可写:选择具有写权限的外部
storageRoot,并检查磁盘空间。桌面窗口无法启动:运行
npm run desktop:install-linux检查 Electron 运行程序并重新构建、安装快捷方式;若 Electron 下载失败,检查网络及HTTP_PROXY/HTTPS_PROXY。从程序栏启动的错误记录在${XDG_STATE_HOME:-~/.local/state}/coderecoder/desktop-launch.log。Serena 显示
Error loading configuration:在工程卡片确认备份仍正常,再点击 Serena 的重新检测按钮;自动修复启用时,原配置会以.coderecoder-invalid-<timestamp>.bak保留。Cursor Serena 无法启动:不要使用已经移除的
serena-mcp-server入口;命令应为serena start-mcp-server --context ide --project-from-cwd。配置建议里的 HTTP 地址变化:这是设计行为;Electron sidecar 使用动态端口,长期连接请使用 stdio 配置。
项目结构
src/
├── index.ts # MCP 注册、进程内激活和恢复协调
├── backupManager.ts # 生产备份、验证、存储和恢复内核
├── autoCheckpointManager.ts # 文件监听、防抖、队列和周期对账
└── *SnapshotManager.ts # 保留用于迁移参考的旧实现
desktop/
├── assets/ # 桌面图标资源
├── electron/ # Electron main、会话注册表、安全 IPC 与集成服务
│ ├── projectSessionRegistry.ts # 多工程注册、路径隔离与退出协调
│ ├── projectSession.ts # 每工程备份、监听、恢复状态与操作队列
│ ├── serenaManager.ts # Serena 配置、sidecar、握手与自动修复
│ └── mcpIntegrationService.ts # 客户端预检及配置建议
├── renderer/ # Vue 3 界面、组件与样式
├── install-linux-launcher.sh # 用户级应用菜单与 GNOME Dock 安装器
├── start-coderecoder-desktop.sh # 图形会话启动包装器
└── shared/contracts.ts # 桌面 IPC 契约
docs/images/ # README 桌面界面截图
test/
├── backup-system.test.js # 内核、并发、恢复和监听测试
├── mcp-server.test.js # MCP SDK 生命周期测试
├── stdio-smoke.test.js # 编译后 stdio 协议测试
└── desktop-controller.test.ts # 桌面控制器工作流测试贡献规则见 AGENTS.md,快速操作见 QUICKSTART.md,VS Code 配置见 VSCODE_USAGE.md。
License
Available Tools
9 toolsactivate_projectActivate Code BackupA
Activate one project for this MCP process, create a verified baseline, and optionally start automatic checkpoints. Use storageRoot to keep all backup data outside a protected project.
| Name | Required | Description | Default |
|---|---|---|---|
| debounceMs | No | ||
| maxBackups | No | ||
| projectName | No | ||
| projectPath | Yes | Project directory to protect | |
| storageRoot | No | Optional external directory for backup storage | |
| excludeNames | No | ||
| autoCheckpoint | No | Defaults to true | |
| reconciliationIntervalMs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, non-destructive, non-idempotent), and the description adds genuinely useful behavior beyond them: activation is scoped to one project per MCP process, a verified baseline is created as a side effect, and auto-checkpoints may begin. It stops short of saying what happens if a different project is already active or how an existing baseline is treated.
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?
Two tight sentences, front-loaded with the core action and its effects, followed by a single conditional tip. No filler, nothing repeated from the schema or annotations.
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 annotations cover safety, but with half the parameters undocumented and no statement of lifecycle preconditions or interaction with sibling snapshot tools, the definition is only minimally sufficient for an 8-parameter mutation tool.
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 only 38% (3 of 8 parameters), so the description must compensate and largely does not. It clarifies the intent of storageRoot and alludes to autoCheckpoint ('optionally start automatic checkpoints'), but debounceMs, maxBackups, excludeNames, reconciliationIntervalMs, and projectName are never explained in either the schema or the description.
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 ('Activate one project for this MCP process') and enumerates the concrete side effects: creating a verified baseline and optionally starting automatic checkpoints. It implicitly contrasts with deactivate_project by naming the opposite lifecycle action, though it never explicitly names that sibling.
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 offers one actionable hint ('Use storageRoot to keep all backup data outside a protected project') but does not state when to call this versus create_project_snapshot or deactivate_project, nor what prerequisites (an active project, a protected project) must hold. Usage is implied by the lifecycle framing rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_snapshotCreate Verified Code BackupA
Create an independently restorable, SHA-256-verified backup of the active project. Unchanged files may be deduplicated in storage.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| tags | No | ||
| prompt | No | ||
| skipIfUnchanged | No | Defaults to false for explicit backups |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is established. The description adds valuable context beyond annotations: the backup is 'independently restorable' and 'SHA-256-verified,' and that 'unchanged files may be deduplicated in storage.' This clarifies reliability and storage behavior. It doesn't contradict 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?
Two concise sentences, front-loading the core purpose and then adding behavioral context. No wasted words; every sentence 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?
The tool has hidden complexity (4 parameters, no required fields, a nested-free schema, and an output schema that likely details the backup metadata). The description covers purpose and some behavioral traits but omits parameter usage and does not mention the output schema's role. Given the sibling context, it could better guide the agent on when to call this versus others. Adequate but incomplete.
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 four parameters and only 25% schema description coverage (only skipIfUnchanged has a description), the description does not compensate for the missing parameter documentation. It does not explain what 'name', 'tags', or 'prompt' mean or how they affect the snapshot, nor does it clarify the default behavior of skipIfUnchanged beyond what the schema already says. Baseline 3 for low coverage when no additional meaning is provided.
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 (create), resource (project snapshot/backup), and distinguishes this tool from siblings by emphasizing 'independently restorable' and 'SHA-256-verified' – qualities not implied by verify_project_snapshot or list_project_snapshots. The description clearly signals it is a mutating creation operation and not a read or verification tool.
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 implies usage ('create a backup of the active project') but provides no explicit when-to-use vs when-not-to-use guidance. It does not explain which sibling tools to prefer (e.g., list_project_snapshots to inspect existing backups first) or when a snapshot is unnecessary. For a tool with eight siblings, this is a missed opportunity to route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deactivate_projectDeactivate Code BackupAIdempotent
Create a final checkpoint by default, stop automatic monitoring, and clear this process-local active project.
| Name | Required | Description | Default |
|---|---|---|---|
| createFinalCheckpoint | No | Defaults to true |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring non-readOnly, non-destructive, idempotent behavior, the description adds meaningful side-effect context: a final checkpoint is created by default, automatic monitoring stops, and the active project is cleared. It does not contradict any annotation and goes beyond what the 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?
A single compact sentence lists the three key effects without filler. The default behavior is front-loaded, and every clause 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?
Given the rich annotations, a complete output schema, and full parameter schema coverage, the description supplies enough behavioral context for a safe deactivation call. It is only missing explicit lifecycle usage guidance, which is a minor gap rather than a functional omission.
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 100%, so the baseline is 3. The description's phrase 'Create a final checkpoint by default' mirrors the createFinalCheckpoint parameter default already documented in the schema, adding little semantic detail beyond the property name and schema description.
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 specific effects: creating a final checkpoint, stopping automatic monitoring, and clearing the process-local active project. It identifies the resource (active project) and distinguishes the tool as the deactivation counterpart to activate_project, though it never names the sibling explicitly.
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?
There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as activate_project or delete_project_snapshot. The agent must infer the lifecycle context from the tool name and sibling list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_project_snapshotDelete Code BackupADestructive
Permanently delete one backup. Call only after explicit user approval and repeat the exact snapshot ID in confirmSnapshotId.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshotId | Yes | ||
| confirmSnapshotId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds value beyond that by disclosing the approval prerequisite and the double-confirmation mechanism via confirmSnapshotId, which the agent cannot infer from annotations alone.
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?
Two tight sentences with zero filler. The action is front-loaded, followed immediately by the safety constraint.
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 destructive two-param tool with an output schema (return values not needed), the description covers the action, the approval gate, and the confirmation requirement. Complete enough to invoke safely, though it could note that the deletion is irreversible/not undoable and options for recovery.
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 schema itself only says both params are UUIDs. The description partially compensates by explaining that confirmSnapshotId must repeat the exact snapshotId, but it leaves the snapshotId parameter and the confirm-matching semantics 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?
States a specific verb and resource ('Permanently delete one backup'), making the destructive action unambiguous and distinct from siblings like create_project_snapshot or restore_project_snapshot. It does not explicitly name a sibling, but the delete semantics are unique enough to differentiate.
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 a clear pre-condition ('Call only after explicit user approval'), which is strong when-to-use guidance for a destructive tool. It stops short of pointing to alternatives (e.g., deactivate_project for a reversible action), so it's a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backup_statusGet Backup StatusARead-onlyIdempotent
Report active-project storage, integrity evidence, pending changes, and automatic-checkpoint health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
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 the safety profile is fully covered. The description adds that the report covers storage, integrity evidence, pending changes, and checkpoint health, which is useful content, but it discloses no further behavioral traits such as cost, freshness, or scope of the reporting.
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 compact sentence with no filler, and the scope of the report is front-loaded immediately after the verb. Every word contributes to describing the returned content.
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 parameters, a coverage-complete schema, an output schema, and annotations that already carry the read-only/idempotent profile, the description covers what is needed to call the tool correctly. It is only slightly thin on routing guidance relative to its many 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. Schema coverage is also 100%.
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 ('Report') and enumerates the four data categories returned (active-project storage, integrity evidence, pending changes, automatic-checkpoint health). This tells an agent what the call yields, though it never uses the word 'backup' or explicitly contrasts itself with the snapshot siblings, so differentiation is left 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?
There is no statement of when to call this versus the snapshot/restore siblings (verify_project_snapshot, list_project_snapshots, etc.), nor any prerequisites or exclusions. The agent must infer usage purely from the topic wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_snapshotsList Code BackupsBRead-onlyIdempotent
List verified backups newest first, including hashes, triggers, sizes, and change counts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world, so the safety profile is fully covered. The description adds only the sort order ('newest first'), and its remaining content (hashes, triggers, sizes, change counts) is return-value detail with no behavioral disclosure. Adequate but thin 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?
One sentence, front-loaded with the verb and resource, with the ordering constraint placed early. No filler and nothing redundant in phrasing.
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 enumerating returned fields is largely redundant, while genuinely missing details (default/limit semantics, pagination, whether results span one project or all) go unaddressed. Complete enough to invoke, but not to invoke 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?
The single parameter (limit) has 0% schema description coverage, so the description carries the burden of explaining it — and it says nothing about limit, its 1-500 range, a default value, or pagination behavior. The field list it does give maps to return values, not to the exposed parameter.
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 ('List verified backups') and adds ordering ('newest first'), which tells an agent this is a read-listing operation rather than a single-snapshot fetch like verify_project_snapshot. It narrows to 'verified' backups, giving partial differentiation, but never names a sibling or clarifies scope (all projects vs. one).
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?
No when-to-use guidance is given. With siblings like get_backup_status and verify_project_snapshot in the toolset, the description never says when an agent should list snapshots instead of checking status or verifying a single snapshot; the 'verified' qualifier is the only implicit routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_project_restorePreview Code RestoreA
Verify a backup and calculate the restore change set. Returns a short-lived token; present the preview to the user before requesting confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Defaults to exact | |
| snapshotId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, giving the safety profile. The description adds valuable non-structured behavior: it returns a short-lived token that must be surfaced to the user before confirmation, which materially affects how the agent should sequence calls.
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?
Two tight sentences, front-loaded with the core action and followed by the operational instruction. No wasted words.
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 the workflow step and the token handoff, and an output schema exists for return values. The main gap is not naming the sibling restore tool as the next step, but the description is otherwise sufficient for correct invocation.
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 50%, so one of the two parameters (mode) is already documented with a default in the schema. The description adds no detail about snapshotId or the mode enum values, but with an output schema present and partial schema coverage, 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?
States a specific verb+resource ('verify a backup and calculate the restore change set'), which is more precise than the vague title. It does not explicitly name how it differs from siblings like restore_project_snapshot or verify_project_snapshot, leaving that routing to inference.
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 workflow context ('present the preview to the user before requesting confirmation'), which tells the agent this is a pre-step to an actual restore. It doesn't explicitly name restore_project_snapshot as the follow-up tool, so the alternative is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_project_snapshotRestore Code BackupADestructive
Destructively apply a previously previewed restore. Requires the matching unexpired confirmation token. A verified pre-restore safety backup and automatic rollback are mandatory.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshotId | Yes | ||
| confirmationToken | Yes | Token returned by preview_project_restore after explicit user confirmation |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds substantial extra context: the required unexpired confirmation token, the mandatory pre-restore safety backup, and the automatic rollback guarantee. These are real behavioral guarantees an agent cannot infer from the schema or 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?
Three tight sentences, front-loaded with the destructive nature and followed by the required inputs and built-in safeguards. No filler and nothing repeated from structured fields.
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 destructive, non-idempotent mutation with an output schema, the description covers what the agent needs: danger level, the mandatory prerequisite token, and the safety-backup/rollback behavior. Nothing essential to a correct call 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 coverage is 50%: the schema documents confirmationToken's origin but leaves snapshotId undocumented. The description adds useful semantics for the token (must be matching and unexpired) but says nothing about snapshotId, so it only partly compensates 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?
States a specific verb (apply) and scope (a previously previewed restore), making it clearly distinct from the sibling preview_project_restore and the snapshot lifecycle tools. It does not name the preview sibling explicitly, but 'previously previewed restore' effectively ties it to that step.
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?
Establishes the sequencing prerequisite (a prior preview producing a confirmation token) and the validity condition (token must be unexpired and matching). It does not explicitly tell the agent to call preview_project_restore first, but the reference is unambiguous enough to route usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_project_snapshotVerify Code BackupBRead-onlyIdempotent
Re-hash the selected backup and validate entry types, paths, modes, and manifest integrity.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshotId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| message | Yes | |
| success | Yes |
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 usefully adds the mechanics: re-hashing plus validation of entry types, paths, modes, and manifest integrity. However, it says nothing about behavior on a mismatch (does it throw, return a flag, or fail silently), which is the most important trait for a verification 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 tight sentence with the operation front-loaded and no filler. It is efficient, though it packs four validated attributes into one clause without prioritizing them.
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, and annotations cover safety. Still, for a verification tool the description omits failure semantics and any prerequisite context, leaving a real gap for correct invocation interpretation.
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 a single parameter at 0% schema description coverage, the description must carry the meaning. "The selected backup" only loosely ties snapshotId to the target and adds no format, selection, or validity semantics beyond the schema's uuid type.
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 pair ("re-hash" and "validate") against a specific resource ("the selected backup"), so the agent knows it is an integrity-check operation rather than a read, restore, or delete. It does not explicitly differentiate itself from the closest sibling, get_backup_status, which also touches snapshot state.
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?
There is no when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. The agent can infer the tool is for verifying integrity, but nothing tells it when to prefer this over get_backup_status or preview_project_restore.
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.
21 tool updates
v3.1.0- Changed
activate_project15 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / autoCheckpointAdded value: +{ + "description": "Defaults to true", + "type": "boolean" +} - added
Input schema / properties / debounceMsAdded value: +{ + "maximum": 60000, + "minimum": 100, + "type": "integer" +} - added
Input schema / properties / excludeNamesAdded value: +{ + "items": { + "maxLength": 255, + "minLength": 1, + "pattern": "^[^/\\\\]+$", + "type": "string" + }, + "maxItems": 100, + "type": "array" +} - removed
Input schema / properties / languageRemoved value: -{ - "description": "Optional programming language (auto-detected if not provided)", - "optional": true, - "type": "string" -} - added
Input schema / properties / maxBackupsAdded value: +{ + "maximum": 10000, + "minimum": 2, + "type": "integer" +} - removed
Input schema / properties / projectName / descriptionRemoved value: -"Optional custom name for the project" - added
Input schema / properties / projectName / maxLengthAdded value: +120 - added
Input schema / properties / projectName / minLengthAdded value: +1 - removed
Input schema / properties / projectName / optionalRemoved value: -true - changed
Input schema / properties / projectPath / descriptionPrevious value: -"Absolute path to the project directory"New value: +"Project directory to protect" - added
Input schema / properties / projectPath / minLengthAdded value: +1 - added
Input schema / properties / reconciliationIntervalMsAdded value: +{ + "maximum": 86400000, + "minimum": 1000, + "type": "integer" +} - added
Input schema / properties / storageRootAdded value: +{ + "description": "Optional external directory for backup storage", + "minLength": 1, + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "message" + ], + "type": "object" +}
- Removed
create_file_snapshot - Changed
create_project_snapshot17 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / name / descriptionRemoved value: -"Optional user-friendly name for the snapshot (e.g., \"Feature Complete\", \"Before Refactor\")" - added
Input schema / properties / name / maxLengthAdded value: +200 - added
Input schema / properties / name / minLengthAdded value: +1 - removed
Input schema / properties / name / optionalRemoved value: -true - removed
Input schema / properties / projectPathRemoved value: -{ - "description": "Optional project path. Uses current active project if not provided.", - "optional": true, - "type": "string" -} - removed
Input schema / properties / prompt / descriptionRemoved value: -"Description of changes being saved" - added
Input schema / properties / prompt / maxLengthAdded value: +2000 - added
Input schema / properties / prompt / minLengthAdded value: +1 - added
Input schema / properties / skipIfUnchangedAdded value: +{ + "description": "Defaults to false for explicit backups", + "type": "boolean" +} - removed
Input schema / properties / tags / descriptionRemoved value: -"Optional tags for categorizing snapshots (e.g., [\"stable\", \"feature\"])" - added
Input schema / properties / tags / items / maxLengthAdded value: +80 - added
Input schema / properties / tags / items / minLengthAdded value: +1 - added
Input schema / properties / tags / maxItemsAdded value: +32 - removed
Input schema / properties / tags / optionalRemoved value: -true - removed
Input schema / requiredRemoved value: -[ - "prompt" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "message" + ], + "type": "object" +}
- Removed
create_session - Changed
deactivate_project5 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / createFinalCheckpointAdded value: +{ + "description": "Defaults to true", + "type": "boolean" +} - removed
Input schema / properties / saveHistoryRemoved value: -{ - "description": "Whether to save current history before deactivating", - "optional": true, - "type": "boolean" -} - removed
Input schema / requiredRemoved value: -[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "message" + ], + "type": "object" +}
- Removed
delete_file_snapshot - Added
delete_project_snapshot - Added
get_backup_status - Removed
get_current_session - Removed
get_diff - Removed
get_project_info - Removed
list_file_snapshots - Removed
list_history - Changed
list_project_snapshots5 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / formatRemoved value: -{ - "description": "Output format: \"detailed\" (default) or \"compact\" for Cline", - "optional": true, - "type": "string" -} - added
Input schema / properties / limitAdded value: +{ + "maximum": 500, + "minimum": 1, + "type": "integer" +} - removed
Input schema / requiredRemoved value: -[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "message" + ], + "type": "object" +}
- Removed
list_projects - Added
preview_project_restore - Removed
record_edit - Removed
restore_file_snapshot - Changed
restore_project_snapshot7 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / confirmationTokenAdded value: +{ + "description": "Token returned by preview_project_restore after explicit user confirmation", + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$", + "type": "string" +} - removed
Input schema / properties / snapshotId / descriptionRemoved value: -"ID of the snapshot to restore" - added
Input schema / properties / snapshotId / formatAdded value: +"uuid" - added
Input schema / properties / snapshotId / patternAdded value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$" - changed
Input schema / requiredPrevious value: -[ - "snapshotId" -]New value: +[ + "snapshotId", + "confirmationToken" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "message" + ], + "type": "object" +}
- Removed
rollback_to_version - Added
verify_project_snapshot
17 tool updates
v1.1.0- First observed
activate_project - First observed
create_file_snapshot - First observed
create_project_snapshot - First observed
create_session - First observed
deactivate_project - First observed
delete_file_snapshot - First observed
get_current_session - First observed
get_diff - First observed
get_project_info - First observed
list_file_snapshots - First observed
list_history - First observed
list_project_snapshots - First observed
list_projects - First observed
record_edit - First observed
restore_file_snapshot - First observed
restore_project_snapshot - First observed
rollback_to_version
TDQS
Scored across 9 tools
Each tool maps to a distinct lifecycle action (activate, deactivate, create, list, delete, verify, status, preview, restore). The only mild overlap is verify_project_snapshot versus preview_project_restore, since both re-hash/verify a backup, but the preview tool's added change-set and token behavior clarifies the boundary.
All tools follow a consistent snake_case verb_noun pattern (verify/delete/create/list/restore/preview_project_snapshot, activate/deactivate_project, get_backup_status). The noun shifts to the appropriate resource (project, snapshot, backup_status) without breaking the convention.
Nine tools is a well-scoped set for snapshot/backup management, with each tool earning its place across the full lifecycle without redundant operations.
The surface covers complete lifecycle coverage: activation/deactivation, snapshot creation, listing, verification, deletion, status inspection, and a safety-gated preview-plus-restore flow. No obvious dead ends or missing core operations for the backup domain.
Maintenance
Related MCP Connectors
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Your versioned memory across every AI tool — context maps, personal memory, and tasks over MCP.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Versioned documentation registry and semantic search for AI tools and coding assistants.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA local MCP server providing persistent memory for AI coding assistants by storing and searching architectural decisions, patterns, and solutions. It also includes tools for git automation and mapping codebase expertise based on project history.MIT
- AlicenseNot gradedqualityDmaintenanceSmart documentation generator and intelligent versioning system with full MCP support, enabling AI assistants like Claude and Gemini to manage project snapshots, generate docs, and control versioning via 26 MCP tools.MIT
- AlicenseBqualityAmaintenanceA comprehensive MCP server for developers providing file operations, shell execution, git integration, and smart caching to enhance AI-assisted development.1120 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents and hosts to enforce deterministic repository boundaries via MCP, providing structured reads, supervised edits, snapshots, audits, and recovery with machine-readable evidence.MIT


