Skip to main content
Glama
snow-wind-001

CodeRecoder MCP

CodeRecoder

CodeRecoder 是一个本地优先的代码备份与可验证恢复系统,同时提供 MCP 服务和 Vue 3 + Electron 桌面控制台。它面向 Codex、Claude Code 及其他支持 MCP 的开发工具,也可以作为独立桌面小窗运行。

当前版本:3.1.0

CodeRecoder 不替代 Git。Git 负责协作、审查、分支和发布历史;CodeRecoder 负责在 AI 编程和高频修改过程中自动保留可恢复副本,并在恢复前后提供完整性证据。

核心能力

能力

当前实现

完整工程备份

每个快照都是逻辑完整、可独立恢复的文件树

存储去重

未变化的普通文件通过硬链接复用,变化文件写入新副本

完整性证据

SHA-256 清单记录路径、类型、内容、权限、大小和整棵树哈希

自动检查点

chokidar 监听、防抖合并、备份期间排队和周期性对账

安全恢复

强制预览、短期确认令牌、恢复前安全快照、恢复后校验

自动回滚

恢复失败时回到操作前状态;进程中断后可在下次初始化时恢复

并发协调

存储锁与工程锁带心跳、超时和失效锁恢复

双控制入口

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 或更高版本、npm

  • Debian 安装包:Linux amd64;桌面及 CodeRecoder MCP 使用内置运行时

  • 桌面端需要可用的图形会话

  • 完整测试使用操作系统临时目录;旧版 shell 迁移测试依赖 Bash/Linux 工具

安装

Debian / Ubuntu 安装包

GitHub Releases 下载 .debSHA256SUMS,在下载目录执行:

sha256sum -c SHA256SUMS
sudo apt install ./CodeRecoder-3.1.0-amd64.deb
coderecoder

安装包注册应用菜单图标,提供 coderecodercoderecoder-mcpcoderecoder-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 test

npm test 会构建 MCP 服务、检查桌面 TypeScript,并运行备份、恢复、并发、自动检查点、MCP 生命周期、stdio 和桌面控制器测试。

快速开始:桌面控制台

npm run desktop:start

多工程备份总览

MCP 与 Serena 配置工作台

恢复预览与安全确认

CodeRecoder 桌面控制台显示多工程会话、保护状态与快照时间线

CodeRecoder MCP 设置显示环境预检、客户端配置和临时 Serena endpoint

CodeRecoder 恢复抽屉显示恢复模式、变更统计和确认令牌

首次启动后:

  1. 选择需要保护的工程目录。

  2. 选择外部备份根目录;推荐使用独立磁盘或专用备份目录。

  3. 决定是否启用自动检查点、随应用启动及 Serena 自动配置。

  4. 点击“注册并启动保护”,等待基线备份验证和 Serena MCP 握手。

  5. 用顶部工程条切换会话;需要并排观察时,为选中工程打开独立窗口。

桌面窗口默认内容尺寸为 424×880,宽度限制为 380–560px,适合放在编辑器旁边。界面提供:

  • 自动检查点健康度和未备份变更提示;

  • 多工程运行汇总,以及备份与 Serena 相互独立的健康状态;

  • 快照时间线、变更数量、逻辑大小、新增占用和树哈希摘要;

  • 手动创建备份和重新验证完整性;

  • exact/overlay 恢复预览、受影响路径和令牌倒计时;

  • 恢复成功、恢复拒绝、自动回滚或回滚失败的明确状态。

桌面端不提供永久删除按钮;删除备份仍需通过 MCP 工具进行双 ID 确认。更多说明见 desktop/README.md

安装到 Ubuntu/GNOME 程序栏

npm run desktop:install-linux

该命令先检查并补齐 Electron 运行程序、完成桌面构建,再以当前用户身份安装 coderecoder.desktop,刷新应用列表并固定到 GNOME Dock,最后回读固定结果,不需要 sudonpm installnpm 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.jsonservers 字段;Cursor 使用用户级 ~/.cursor/mcp.jsonmcpServers 字段。两者字段结构不同,不要直接复制整个文件互相覆盖。

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 = 120tool_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.ymllanguage_servers,例如 [csharp, cpp, python];CodeRecoder 的 Vue 组件分析可在 typescript 后增加 vue。请排除 .venvnode_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 是否为空;

  • latestSnapshotcurrentMatchesSnapshot 是否符合预期。

自动状态含义:

状态

含义

running

监听与检查点调度可用

paused

恢复或停用流程正在暂停监听

degraded

监听或检查点发生错误,应检查 lastError

stopped

自动检查点未启用或已经停止

3. 创建命名备份

重要重构、升级或批量生成前,建议额外创建显式备份:

{
  "name": "before-auth-refactor",
  "prompt": "认证模块重构前的稳定代码",
  "tags": ["stable", "auth"],
  "skipIfUnchanged": false
}

显式备份默认不会因为内容未变化而跳过,因此可以保留有业务意义的命名节点。

安全恢复

恢复必须分成预览和确认两个阶段。

第一步:生成预览

{
  "snapshotId": "目标快照 UUID",
  "mode": "exact"
}

preview_project_restore 会:

  1. 重新验证目标快照;

  2. 扫描当前工程并计算新增、修改、删除和重命名路径;

  3. 将当前树哈希、工程、目标快照和恢复模式绑定到确认令牌;

  4. 返回五分钟有效、只能使用一次的 confirmationToken

预览会在备份存储中写入短期确认记录,因此 MCP 元数据将其标记为非只读,但它不会修改源代码。

第二步:明确确认

{
  "snapshotId": "同一个目标快照 UUID",
  "confirmationToken": "预览返回的令牌"
}

令牌过期、已使用、工程在预览后变化、工程/快照/模式不匹配时,恢复会被拒绝。不要手工构造令牌,也不要缓存后重复使用。

恢复模式

模式

行为

适用场景

exact

将受管代码同步到快照状态,并移除快照中不存在的受管路径

完整回到已知代码状态

overlay

写入快照中的路径,但保留当前工程的额外文件

只覆盖已知文件,避免删除新增内容

两种模式都不会删除默认排除项。执行恢复前,系统必须先创建带 protected 标签的恢复前安全快照;执行后必须验证文件字节、类型和权限。失败时自动回滚,只有回滚也通过验证后才会报告 rollbackState: restored

MCP 工具参考

工具

主要参数

副作用与批准建议

activate_project

projectPath;可选存储、监听、保留和排除设置

创建基线并可能启动监听

deactivate_project

createFinalCheckpoint,默认 true

默认创建最终检查点并清理进程内状态

get_backup_status

只读,可用于周期健康检查

create_project_snapshot

nameprompttagsskipIfUnchanged

新增经过验证的备份并占用磁盘

list_project_snapshots

limit,范围 1–500,默认 50

只读,按时间倒序返回摘要

preview_project_restore

snapshotIdmode

写入短期令牌,不修改源工程

restore_project_snapshot

snapshotIdconfirmationToken

destructive;必须展示预览并取得明确确认

verify_project_snapshot

snapshotId

只读;重新计算内容和清单证据

delete_project_snapshot

snapshotId、相同的 confirmSnapshotId

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: true

  • nodeIntegration: false

  • sandbox: true

  • renderer 不接触文件系统、环境变量、shell 或通用 ipcRenderer

  • preload 与主进程分别验证参数,只暴露备份控制所需的白名单方法

  • IPC 校验主框架和渲染来源;开发地址仅允许 HTTP 回环主机

  • 默认拒绝页面导航、新窗口和所有权限请求

  • Content Security Policy 禁止对象、表单和 frame 内容

  • 工程注册表以 schema v2、0600 权限原子保存;不保存恢复令牌或客户端密钥

  • 工程窗口在主进程绑定 projectId,不能跨会话调用备份、恢复或 Serena 操作

  • Serena 仅使用固定参数直接 spawn,不经过 shell,并只绑定 127.0.0.1

开发和验证

命令

作用

npm run dev

使用 tsx 直接运行 MCP 源码

npm run build

严格编译 TypeScript 到 dist/

npm start

启动已编译的 stdio MCP 服务

npm run lint

检查 MCP、Electron 和 Vue TypeScript

npm run test:quick

运行备份内核与自动检查点测试

npm run test:mcp

运行真实 MCP 初始化、列举和调用生命周期测试

npm run test:desktop

运行多工程隔离、偏好迁移、Serena 修复和 MCP 配置测试

npm run desktop:install-linux

安装用户级启动项并固定到 GNOME Dock

npm test

运行当前完整自动化测试套件

当前测试覆盖二进制内容、空目录、权限、符号链接、排除规则、增删改名、精确恢复、令牌拒绝、损坏检测、保留策略、并发管理器、损坏索引重建、中断删除/恢复、监听防抖、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

MIT

Available Tools

9 tools
activate_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
debounceMsNo
maxBackupsNo
projectNameNo
projectPathYesProject directory to protect
storageRootNoOptional external directory for backup storage
excludeNamesNo
autoCheckpointNoDefaults to true
reconciliationIntervalMsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
tagsNo
promptNo
skipIfUnchangedNoDefaults to false for explicit backups

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 BackupA
Idempotent

Create a final checkpoint by default, stop automatic monitoring, and clear this process-local active project.

ParametersJSON Schema
NameRequiredDescriptionDefault
createFinalCheckpointNoDefaults to true

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/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'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.

Purpose4/5

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.

Usage Guidelines2/5

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 BackupA
Destructive

Permanently delete one backup. Call only after explicit user approval and repeat the exact snapshot ID in confirmSnapshotId.

ParametersJSON Schema
NameRequiredDescriptionDefault
snapshotIdYes
confirmSnapshotIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 StatusA
Read-onlyIdempotent

Report active-project storage, integrity evidence, pending changes, and automatic-checkpoint health.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 BackupsB
Read-onlyIdempotent

List verified backups newest first, including hashes, triggers, sizes, and change counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoDefaults to exact
snapshotIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 BackupA
Destructive

Destructively apply a previously previewed restore. Requires the matching unexpired confirmation token. A verified pre-restore safety backup and automatic rollback are mandatory.

ParametersJSON Schema
NameRequiredDescriptionDefault
snapshotIdYes
confirmationTokenYesToken returned by preview_project_restore after explicit user confirmation

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 BackupB
Read-onlyIdempotent

Re-hash the selected backup and validate entry types, paths, modes, and manifest integrity.

ParametersJSON Schema
NameRequiredDescriptionDefault
snapshotIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorNo
messageYes
successYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 21 tool updatesv3.1.0
    • Changedactivate_project15 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / autoCheckpoint
        Added value: +{
        +  "description": "Defaults to true",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / debounceMs
        Added value: +{
        +  "maximum": 60000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
      • addedInput schema / properties / excludeNames
        Added value: +{
        +  "items": {
        +    "maxLength": 255,
        +    "minLength": 1,
        +    "pattern": "^[^/\\\\]+$",
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "type": "array"
        +}
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Optional programming language (auto-detected if not provided)",
        -  "optional": true,
        -  "type": "string"
        -}
      • addedInput schema / properties / maxBackups
        Added value: +{
        +  "maximum": 10000,
        +  "minimum": 2,
        +  "type": "integer"
        +}
      • removedInput schema / properties / projectName / description
        Removed value: -"Optional custom name for the project"
      • addedInput schema / properties / projectName / maxLength
        Added value: +120
      • addedInput schema / properties / projectName / minLength
        Added value: +1
      • removedInput schema / properties / projectName / optional
        Removed value: -true
      • changedInput schema / properties / projectPath / description
        Previous value: -"Absolute path to the project directory"New value: +"Project directory to protect"
      • addedInput schema / properties / projectPath / minLength
        Added value: +1
      • addedInput schema / properties / reconciliationIntervalMs
        Added value: +{
        +  "maximum": 86400000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / storageRoot
        Added value: +{
        +  "description": "Optional external directory for backup storage",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedOutput 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"
        +}
    • Removedcreate_file_snapshot
    • Changedcreate_project_snapshot17 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / name / description
        Removed value: -"Optional user-friendly name for the snapshot (e.g., \"Feature Complete\", \"Before Refactor\")"
      • addedInput schema / properties / name / maxLength
        Added value: +200
      • addedInput schema / properties / name / minLength
        Added value: +1
      • removedInput schema / properties / name / optional
        Removed value: -true
      • removedInput schema / properties / projectPath
        Removed value: -{
        -  "description": "Optional project path. Uses current active project if not provided.",
        -  "optional": true,
        -  "type": "string"
        -}
      • removedInput schema / properties / prompt / description
        Removed value: -"Description of changes being saved"
      • addedInput schema / properties / prompt / maxLength
        Added value: +2000
      • addedInput schema / properties / prompt / minLength
        Added value: +1
      • addedInput schema / properties / skipIfUnchanged
        Added value: +{
        +  "description": "Defaults to false for explicit backups",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / tags / description
        Removed value: -"Optional tags for categorizing snapshots (e.g., [\"stable\", \"feature\"])"
      • addedInput schema / properties / tags / items / maxLength
        Added value: +80
      • addedInput schema / properties / tags / items / minLength
        Added value: +1
      • addedInput schema / properties / tags / maxItems
        Added value: +32
      • removedInput schema / properties / tags / optional
        Removed value: -true
      • removedInput schema / required
        Removed value: -[
        -  "prompt"
        -]
      • changedOutput 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"
        +}
    • Removedcreate_session
    • Changeddeactivate_project5 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / createFinalCheckpoint
        Added value: +{
        +  "description": "Defaults to true",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / saveHistory
        Removed value: -{
        -  "description": "Whether to save current history before deactivating",
        -  "optional": true,
        -  "type": "boolean"
        -}
      • removedInput schema / required
        Removed value: -[]
      • changedOutput 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"
        +}
    • Removeddelete_file_snapshot
    • Addeddelete_project_snapshot
    • Addedget_backup_status
    • Removedget_current_session
    • Removedget_diff
    • Removedget_project_info
    • Removedlist_file_snapshots
    • Removedlist_history
    • Changedlist_project_snapshots5 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / format
        Removed value: -{
        -  "description": "Output format: \"detailed\" (default) or \"compact\" for Cline",
        -  "optional": true,
        -  "type": "string"
        -}
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / required
        Removed value: -[]
      • changedOutput 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"
        +}
    • Removedlist_projects
    • Addedpreview_project_restore
    • Removedrecord_edit
    • Removedrestore_file_snapshot
    • Changedrestore_project_snapshot7 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / confirmationToken
        Added 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"
        +}
      • removedInput schema / properties / snapshotId / description
        Removed value: -"ID of the snapshot to restore"
      • addedInput schema / properties / snapshotId / format
        Added value: +"uuid"
      • addedInput schema / properties / snapshotId / pattern
        Added 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)$"
      • changedInput schema / required
        Previous value: -[
        -  "snapshotId"
        -]New value: +[
        +  "snapshotId",
        +  "confirmationToken"
        +]
      • changedOutput 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"
        +}
    • Removedrollback_to_version
    • Addedverify_project_snapshot
  2. 17 tool updatesv1.1.0
    • First observedactivate_project
    • First observedcreate_file_snapshot
    • First observedcreate_project_snapshot
    • First observedcreate_session
    • First observeddeactivate_project
    • First observeddelete_file_snapshot
    • First observedget_current_session
    • First observedget_diff
    • First observedget_project_info
    • First observedlist_file_snapshots
    • First observedlist_history
    • First observedlist_project_snapshots
    • First observedlist_projects
    • First observedrecord_edit
    • First observedrestore_file_snapshot
    • First observedrestore_project_snapshot
    • First observedrollback_to_version

TDQS

A3.8/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Nine tools is a well-scoped set for snapshot/backup management, with each tool earning its place across the full lifecycle without redundant operations.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    Smart 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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