Skip to main content
Glama

Wallpaper Engine MCP

Windows 本地 STDIO MCP 服务,用于制作可保存的 Wallpaper Engine 源工程,并通过官方引擎获取运行反馈。支持 Web 创作、基础 Scene 模板、CEF 和自有原生窗口截图;复杂 Scene 作者能力仍待开发。

启动

要求 Windows、Node.js 24 或更高版本,以及正在运行的官方 Wallpaper Engine。工程管理和自动测试可脱离引擎运行。

npm.cmd ci
npm.cmd test
Copy-Item we.config.example.json we.config.json
# 按本机环境编辑 we.config.json
node dist/index.js --probe
node dist/index.js

服务的 stdout 只用于 MCP 协议,日志写入 stderr。--probe 是单独的诊断模式,会输出 JSON 后退出。

任意支持 STDIO 的 MCP 客户端可使用以下启动参数;将路径替换为实际仓库目录:

{
  "command": "node",
  "args": [
    "D:/CodeX Workstation/MCP for Wallpaper Engine/main/dist/index.js",
    "--config",
    "D:/CodeX Workstation/MCP for Wallpaper Engine/main/we.config.json"
  ]
}

默认配置位于程序所在仓库的 we.config.json,相对路径基于配置文件所在目录解析。不会依赖 MCP 客户端当前目录。

配置

含义

installDir

官方引擎安装目录,包含 wallpaper32.exe 或 wallpaper64.exe

workspace

受管工程、检查点、预览副本、截图和发布暂存目录;默认 .we-mcp

projectRoots

额外只读工程目录;可以是工程本身或其父目录;不扫描整盘

assetRoots

允许读取图片、音频和视频素材的目录列表,默认 [];素材工具使用目录索引和相对路径,不扫描整盘

devtoolsPort

手动配置的本机 CEF 调试端口;null 时仍可使用 CLI、工程管理和已构建的原生截图后端

timeoutMs

单次操作等待上限,1000–30000 毫秒

本机集成测试要求在正常用户权限下访问引擎。受限沙箱可能使 CEF 无法写入自身配置目录,出现 ProcessSingleton ... Error code: 5;这是实际遇到的环境限制。

图片检查与原字节导入需配置 assetRoots。支持静态 PNG/JPEG/WebP、源哈希核对、显式覆盖和检查点恢复;完整调用示例、开源选型、预算及未验收范围见图片导入说明。该功能尚未执行超分。

工作区锁诊断

诊断结果的 startupIssue 会保留本会话启动时受阻的原因,例如锁已存在、互斥忙或协调环境不可用;它是启动记录,当前锁状态仍应以本次诊断为准。当前会话持有锁时该字段为 null。

一个工作区只允许一个持有锁的服务会话。锁冲突时,服务仍可完成 MCP 握手;调用 we_workspace_diagnose,参数为 {}:

{"name":"we_workspace_diagnose","arguments":{}}

返回 workspace、mode、lock、holder 和 recovery。mode: "owner" 表示当前会话仍持有原锁;"diagnostic" 表示仅可诊断及尝试受控恢复,其余 19 个工具均返回 WORKSPACE_LOCKED。原锁发生变化或不可读时,原持有会话的普通操作返回 WORKSPACE_OWNERSHIP_LOST,不会自动解锁。

新锁在 server.lock/owner.json 记录 PID、主机、平台、随机会话标识和进程启动身份。Windows 使用系统自带 PowerShell 只读查询 Process.StartTime,无需截图 helper;查询有 3 秒期限。旧空锁、记录损坏、异地主机、权限不足或查询失败均保持 holder.state: "unknown"。"alive"、"exited"、"pid-reused" 是采样时的身份核对结果;其中 PID 复用表示启动时间不匹配,不是只凭 PID 推断。lock.fingerprint 可用于识别两次诊断间的变化,不授予解锁权限。

recovery.available:true 表示采样时满足候选条件,不代表已经恢复或预留了锁。只有当前 Windows 协议创建的 version:2、coordination:"windows-pipe-v1" 锁,持有者已明确退出,且工作区在本机固定 NTFS 磁盘上,才能尝试恢复。活跃持有者、PID 启动身份不匹配、未知状态、旧空锁、上一版 version:1 记录、网络/其他文件系统均拒绝。旧记录不会被自动升级,也没有 force 参数。

取得新诊断的 lock.fingerprint 后,在 MCP 中明确调用以下工具(替换指纹占位符):

{"name":"we_workspace_recover","arguments":{"expectedFingerprint":"<lock.fingerprint>","confirm":true}}

获取、正常释放和恢复共用一个 Windows 命名管道互斥,按工作区目录的文件系统身份区分;进程崩溃后由 OS 释放,不留下新的 guard 文件。竞争时最多等待约 1 秒取得互斥,之后返回 WORKSPACE_COORDINATION_BUSY,应重新诊断再重试。每次进程/卷查询另有 3 秒期限。恢复在互斥内重核全部条件,先将旧锁和最多 1 MiB 的旧预览注册表保存到 lock-recoveries/<UUID>/,再为当前会话取得新锁;成功返回 state:"recovered"、归档路径和 mode:"owner",无需重启即可调用普通工具。

WORKSPACE_LOCK_CHANGED 表示指纹不再匹配;WORKSPACE_RECOVERY_REFUSED 表示条件不满足。WORKSPACE_RECOVERY_INCOMPLETE 表示中途停止,应先诊断并检查返回的 phase、mode 和归档;此时可能已取得新锁,不能盲目重试。恢复不会回滚工程、接管旧窗口或改写当前预览注册表;源工程需重新 inspect/validate,检查点恢复是另一项操作。原持有者正常退出、锁已不存在时,应启动新会话获取锁,不能用旧指纹强行恢复。

恢复进程若被强制结束,归档审计可能落后于实际目录状态。应以新会话的锁诊断配合归档核对:当前锁不存在时可由新会话正常获取;有完整身份且原进程已退出时可重新显式恢复;空锁或半写身份仍会拒绝写入和恢复,须保留现场人工处理。十个文件操作中断点已验证保护行为,其中两个新锁身份未完成的中断点仍存在此可用性限制;不能把“安全拒绝”当作“可以自动恢复”。详见恢复中断验收矩阵。

不要按锁龄或空目录直接删锁。旧空锁缺少历史归属信息,本接口不能补造所有权证据。协调要求参与者遵守同一协议,不能防御外部程序强行替换目录。若运行环境设置了 NODE_PENDING_PIPE_INSTANCES,协调会保守拒绝,以避开 Node/libuv 已知的非默认配置竞态;服务不会改动该环境变量。

诊断只访问配置指定的工作区,不接受任意路径或 PID,不终止进程,不接管旧预览。元数据读取限制为 8 KiB,链接、额外硬链接及异常目录内容被拒绝或保守报告;非 Windows 的进程身份查询尚未实现。--probe 仍只用于引擎环境探测,不能代替此 MCP 工具。实测范围与后续恢复边界见 锁诊断记录。

可选原生窗口截图

原生截图需要 Windows x64、.NET 10 x64 运行时;构建另需 .NET 10 SDK。本机验证使用 SDK 10.0.301、Windows 11 build 26100 和引擎 2.8.42。其他系统尚未实测。Windows SDK 投影版本固定为 10.0.19041.57。

npm.cmd run build:native

脚本优先使用 .we-mcp/tools/dotnet/dotnet.exe,否则使用 PATH 中的 dotnet。首次恢复依赖需要访问官方 NuGet;缓存及构建产物均被 Git 忽略。构建后的 native/WeCapture/bin/publish/ 是完整 helper 目录,部署时须连同 DLL、runtimeconfig 和许可证一起保留;无需在运行机器安装 SDK。服务不会自动下载或安装 SDK。

helper 存在时,预览启动、调参、截图和关闭均增加窗口归属校验:启动前 HWND 基线、唯一生成的窗口名、同一会话、引擎可执行文件路径、PID、创建时间和窗口类。身份不符即拒绝,关闭后还须确认原 HWND 和名称消失;失败保留记录。未构建 helper 时继续使用原有 CLI/CEF 能力,但关闭只报告命令已发送。

启动失败且尚未绑定窗口身份时,关闭会先短时确认窗口是否已不存在,避免退出时再次等待完整的窗口出现期限。若窗口仍存在,仍须先绑定并验证身份才能发送关闭命令;检查失败不会当作窗口消失。本机已复现并修复这一分支导致客户端关闭超时、留下工作区锁的问题;不保证任意挂起的 helper、执行中的工具或强制结束进程都能正常清理,详见退出问题验收。

原生捕获不依赖 CEF,使用 Windows Graphics Capture,仅针对绑定窗口;没有桌面或显示器截图兜底。最小化、隐藏、尺寸变化、超时均有明确错误。采用每监视器 DPI 感知,返回实际物理像素尺寸及 DPI;原生图像包含标题栏和窗口边框,尺寸可大于请求的客户区尺寸。帧限制为 16777216 像素、单边 8192、PNG 20 MiB,图像内嵌总量限制为 8 MiB base64。

颜色路径为 SDR BGRA8;HDR 色彩保真、多屏混合 DPI、4K 和长时间压力场景尚未验收。PNG 成功或连续帧不同都不能独立证明画面正确或美观。Scene 的运行时脚本/素材健康也不能由原生截图推导。

复用说明:独立 helper 的 COM/D3D 互操作改编自 Backdrop for Codex,保留 Apache-2.0 许可证与 NOTICE;单帧流程另参考 Win32CaptureSample。详见 helper 归属声明。没有引入两者的完整应用或替代官方播放器。

Related MCP server: gpt-web-agent

工具

工具

行为

we_workspace_diagnose

即使锁冲突也可读取配置工作区的锁指纹、持有者记录和进程身份;不恢复、不删除锁

we_workspace_recover

明确确认并携带当前指纹,在跨进程互斥内验证、归档已退出持有者的兼容锁,再取得新锁;不杀进程、不接管旧预览

we_environment_probe

返回版本、CEF 发现状态和未验证能力,不修改引擎设置

we_project_list

在配置目录内有界发现工程,去重并分页

we_project_inspect

返回源码 revision、元数据、文件哈希;可用 readFiles 读取文本

we_project_create

用 web-starfield 或 scene-orbit 创建工程,或用 sourceProjectId 导入受管副本;移除旧 workshopid

we_project_apply

按 expectedRevision 写入 UTF-8 文件或删除文件,先静态检查并保存检查点

we_project_restore

恢复指定检查点,校验归属、内容哈希和当前 revision

we_project_validate

检查 JSON、入口、HTML/CSS 引用、Web JS 语法、音频开关及 Scene 本地图片层依赖;不冒充真实引擎验证

we_image_inspect

从 assetRoots 指定目录检查静态 PNG/JPEG/WebP,完整解码并返回尺寸、透明度、方向及 SHA256;仅返回文本

we_image_import

校验源哈希与工程 revision 后原字节导入,保存检查点;默认拒绝覆盖;不自动修改素材引用

we_media_inspect

从 assetRoots 探测 WAV/MP3/MP4/WebM,返回时长、轨道、尺寸、帧率、采样率与哈希;仅元数据,不证明可播放

we_media_import

校验源哈希与工程 revision 后原字节导入媒体,保存检查点、默认拒绝覆盖;不创建视频工程或转码

we_video_create

用已探测的 MP4/WebM 与源哈希创建新的原生视频工程;原字节复制、拒绝同名工程;创建成功仍不代表播放通过

we_scene_create

用已探测的图片及源哈希创建“原图背景+独立光点”Scene;保留原字节,调用已安装的官方编译器生成 rgba8888 纹理;提供速度、位移、大小、显示属性,不拆分人物

we_preview_open

从固定源码副本打开唯一命名窗口;每个服务会话最多登记一个 Web,Scene 可共存;返回就绪证据或未验证状态

we_preview_set_properties

校验类型及范围后修改该预览的公开参数,不修改源码默认值

we_preview_move_mouse

向自有 Web CEF 预览派发鼠标移动;x/y 为 0~1 的归一化坐标,左上 (0,0)、右下 (1,1);不移动系统光标

we_preview_observe

采集 1–3 张 PNG;默认只返回文本诊断和文件路径;includeImages:true 才附带有界图像内容;backend:auto/cef/native 选择捕获路径

we_preview_close

只关闭本服务创建的预览窗口,不发送全局 stop 或 kill

we_publish_prepare

复制运行工程到发布暂存目录并输出剩余步骤,不打包 .pkg 或上传

一次创作循环

媒体入口复用 assetRoots:先 inspect,再将返回哈希传给 import 或 we_video_create;支持纯文本客户端、解析期限、MCP 取消和退出清理。单文件最多 40 MiB,工程仍受 64 MiB / 2000 文件约束。示例和格式范围见音视频素材入口;原生 MP4/WebM、Web 中 WebM 及受控真实音频响应的本机验收见视频与音频验收。不同格式、编码轨道仍需逐工程验证。

Web 音频监听器要求 project.json 中的 general.supportsaudioprocessing: true;根节点同名标记不起作用。旧模板生成的工程若只有根节点标记,现在校验会明确拒绝。受管工程可先 inspect,再通过带 revision 的 apply 修正 manifest,并重新打开预览。不会自动修改历史作品或检查点;静态校验通过仍需真实音频对照。

图片 Scene 先调用 we_image_inspect,再向 we_scene_create 传相同素材索引、相对路径及哈希。需要 Windows 和 installDir/bin/resourcecompiler64.exe;不下载或分发编译器,不开放任意编译参数。保留 sources/original.*,编译副本按 EXIF 方向转成 sRGB PNG,保持显示尺寸;固定 rgba8888、关闭 mipmap,单图最多 8388608 像素且须满足工程总预算。每个编译进程限 30 秒,输出/纹理文件有界;编译中的请求取消与 EOF 会终止该子进程,失败不保存新工程。完整范围、真实用户图片验收、失败记录和限制见图片 Scene 报告。

Web JS 语法检查区分 HTML 中的普通脚本与模块,覆盖内联脚本及本地 .js / .mjs。错误包含文件与行列号;损坏脚本会阻止 apply、预览和发布准备。检查只解析、不执行脚本,保留 engineVerification:unverified;单文件 1 MiB、输入合计 8 MiB、最多 256 次脚本检查,解析子进程有 3 秒期限。详情与审计剩余任务见能力审计跟进。

  1. 用 we_project_create 创建 managed/my-wallpaper。当前模板支持速度、密度、音频开关、星体颜色,运行文件无网络依赖。

  2. 用 we_project_inspect 获取 revision 与源码;调用 we_project_apply 时传入该 revision。content: null 表示删除,其他值是文件的完整新内容。

  3. 打开预览并调用 observe;默认只返回文本和原图路径,适合无多模态模型的 CLI。多模态客户端可显式传 includeImages:true。backend:auto 优先使用已连接 CEF,否则选择原生后端;没有可用后端则返回错误。

  4. 临时调参后,把满意的值写入 project.json 的 general.properties,再打开新的预览;Web 须先关闭现有 Web 预览。已有预览始终指向原来的固定源码副本。

  5. we_preview_observe 的 reload: true 会关闭并重开这个预览窗口,从同一源码副本重新初始化宿主。运行参数会恢复为该副本的源码默认值。

  6. 通过多帧检查后执行发布准备,检查预览图、动态资源、素材权利和元数据,再用官方编辑器导入、发布。

版本冲突返回 REVISION_CONFLICT,应重新 inspect 后再修改。成功修改返回 checkpointId;无变化的调用返回 checkpointId: null。错误通过 MCP isError 和结构化错误代码返回。

鼠标移动使用当前页面 innerWidth/innerHeight(每边 1~8192 CSS 像素)按 x*(width-1)、y*(height-1) 换算,不使用含标题栏的原生截图尺寸。仅支持配置 CEF 调试的 Web 预览,Scene 或无调试端口返回 MOUSE_INPUT_UNSUPPORTED;目标缺失、歧义或跳转会拒绝。不提供点击、滚轮、键盘或系统光标回退。输入前后校验页面归属,并沿用可用的原生窗口身份校验。

返回 confirmation: "event-dispatched" 仅表示 CDP 命令已确认;visualResponse: "unverified" 提醒继续 observe 检查画面。检查和派发不是原子操作:期间跳转、调整大小或连接失败可能发生在事件已发出之后,此类错误带 dispatchAttempted: true,不保证事件未被接收。本机官方引擎 2.8.42 已通过命令冒烟检查和几何双眼样例验收:页面接收坐标、截图中的方向/幅度/遮罩边缘、原生窗口位移,以及每次调用前后的系统光标位置均有测量。样例通过不代表任意作品的视觉质量通过。调研依据见 鼠标输入研究。

运行 node scripts/verify-mouse.mjs 可重现双眼验收,约一分钟保持系统鼠标不动;报告位于 .we-mcp/mouse-verification/report.json。脚本使用一个 Web 和一个静止 Scene 对照,顺序测试两种 Web 尺寸;详细范围见 鼠标实机验收记录。

两个 Web 同时渲染的本机故障尚未修复:绕过 MCP、改变等价 CLI 参数、关闭远程调试均未消除第二个 Web 渲染失败。现有证据最符合 CEF 根目录单例行为,但没有直接确认宿主内部实现。服务因此在 CLI 和快照写入之前返回 WEB_PREVIEW_LIMIT,列出须先关闭的 activePreviewIds;we_environment_probe 的 webPreviewConcurrency 也公开此限制。关闭失败时仍保留名额,正常关闭后可重开;Scene 可共存。这是服务会话内限制,不是跨进程互斥,不能防止其他服务或手动启动的 Web 触发同一引擎故障。服务不会自动更改 CEF 配置、关闭已有预览或退回系统鼠标。对照证据与源码依据。

node scripts/verify-web-limit.mjs 验证第二个 Web 被拒绝后没有新快照或调试目标、第一个仍能接收鼠标输入,以及关闭后能在 Scene 仍打开时重开 Web。报告位于 .we-mcp/web-limit-verification/report.json;这验证限制行为,不代表并发 Web 已通过。

基础 Scene 模板

we_project_create 传入 templateId: "scene-orbit" 可创建 1280×720 Scene:一个原创青色图片层在深色背景上水平运动。properties 支持 speed(0–2,圈/秒)和 amplitude(0–400,场景像素);幅度为 0 时回到中点,速度为 0 时保持当前相位。图案 PNG、.tex-json 编译配置和 .tex 产物均随工程保存,没有网络素材依赖。

Scene 的 Origin 属性内联绑定 SceneScript,源码位于 scene.json 的 objects[0].origin.script。脚本通过 engine.frametime 累积相位,从 engine.userProperties.speed/amplitude 读取当前值,不逐帧叠加位置。不要把 Web 的 window.wallpaperPropertyListener 搬到 Scene 中。

模板结构已由本机官方编辑器 2.8.42 打开、保存并回读,最终脚本保持不变;官方引擎独立窗口已实测图片、连续运动、幅度归零/恢复和速度归零。当前实现使用直接属性读取,是因为本机实测仅依赖 applyUserProperties 回调时参数未生效;没有把该观察外推为所有版本的回调行为。

基础模板还已完成编辑、回滚与重开闭环验收:同时修改 project.json 的源码默认参数和 scene.json 的 Origin/脚本,实际画面从横向变为纵向运动;旧预览重载仍使用旧副本,源码回滚也不会改写运行中的新版副本。重新打开工程后,源码 revision、各源文件 SHA-256(包括 PNG/TEX)与原版一致,画面恢复横向运动。临时参数在同一副本重载后恢复源码默认值。检查的是原始源文件,渲染器在私有副本中新生成的 shader 缓存不属于该源码清单。

验收另覆盖过期 revision 的编辑/恢复拒绝、同时带新旧两个活动预览退出 MCP 服务后的窗口/锁回收,以及重启 MCP 服务后从持久检查点恢复两个源码版本。这里重启的是 MCP 服务进程;未覆盖强制杀进程、Wallpaper Engine 本体重启或整机重启后的恢复。

模板自带 TEX,创建和预览无需再次编译。修改源 PNG 或编译配置后,可重新生成模板纹理:

npm.cmd run build:scene-assets

此开发脚本读取本机配置中的 installDir,调用官方 bin/resourcecompiler64.exe -tex -i ... -o ...。它在独立临时工程中编译,通过头部和尺寸限制检查后才替换模板 TEX,并输出编译器、源图与产物 SHA-256。松散 PNG 在本机曾使编译器超时,所以保留完整工程和 materials 目录布局。编译器未随仓库分发;该调用方式仅在当前安装版本验证。脚本更新的是仓库模板,不会自动更新已经创建的工程副本。

Scene 静态检查返回 sceneDependencies,遍历本地 image → model.material → passes.textures → TEX,检查危险路径、TEX 头部和“有源图但缺少编译纹理”的情况。安装目录共享资产无法仅从工程内容确认,因此未解析引用保留为警告;valid: true 不表示所有依赖完整或脚本正确。检查上限为 2000 对象/引用、每材质 64 pass、每 pass 32 纹理,超限明确告警。粒子、3D 模型、自定义 shader、动态资产和完整 TEX 解码尚不在静态检查范围内。

scene-orbit 使用引擎自带 genericimage4 shader,离线运行仍依赖已安装的官方引擎。模板不含第三方壁纸图片、工坊 ID 或外部播放器代码。

CEF 与当前版本差异

公开调试文档描述了端口设置入口,但本机 2.8.42 已把它换成内置 DevTools 按钮。本次经用户允许,在原有 cefcommandline 设置中配置以下参数并重启后,实测可连接:

--remote-debugging-port=9223 --remote-debugging-address=127.0.0.1

服务本身不会改这些设置。we.config.json 的 devtoolsPort 必须与引擎实际端口一致。本机发现桌面 Web 与独立预览可分别监听同端口的 127.0.0.1 和 [::1],即使配置中写了 IPv4 地址。服务查询两个回环地址,按自有工程路径选取唯一目标,并将 WebSocket 固定到发现它的地址;多个匹配目标仍拒绝连接。详见 CEF 双地址修复与验收。

直接使用 Page.reload 在本机丢失了宿主属性和 FPS 回调,因此实现改为重建自有预览窗口。CLI 的 RAW~(...)~END JSON 需要保留 Windows 原始引号;实现仅对固定的属性命令使用原始参数模式,并拒绝保留分隔符,全程不经过 shell。

测试与状态数据

npm.cmd test
# 下面会实际打开并回收独立预览;先配置安装目录和 CEF 端口
node scripts/verify-engine.mjs
node scripts/verify-cef.mjs

verify-cef.mjs 在隔离工作区验证 CEF 截图、实际鼠标事件、属性回读、控制台/运行异常收集和宿主重载;可传入现有 Web 工程目录以测试副本,并比较原工程前后哈希。该脚本要求工程提供本项目的 __weDiagnostics 和 speed 属性,不是任意第三方工程的通用验收器。报告保存在 .we-mcp/cef-verification/<运行ID>/report.json。它会在测试页注入固定错误验证收集,重载后应清空;不会写入原工程或提供公开任意执行接口。

普通测试覆盖路径边界、链接、只读来源、检查点、并发版本冲突、Windows 参数、属性回调、限帧、CEF 超时/断线/日志及真实 STDIO 握手。集成脚本另验证实际画面、多帧变化、参数接收、源码 revision、宿主重载和发布准备,详细报告写入 .we-mcp/integration-report.json。

构建原生 helper 后,运行 node scripts/verify-native.mjs,验证无 CEF 的原生截图、默认纯文本返回、显式图像块、多帧变化、重载、真实窗口消失,以及篡改身份、伪造同名窗口、最小化、窗口改名和查找超时的拒绝行为。报告位于 .we-mcp/native-verification/report.json。此脚本会短暂打开本轮创建的测试窗口,只操作这些窗口;必须在正常交互用户会话中运行。

node scripts/verify-scene.mjs 通过真实 STDIO MCP 创建新 Scene 工程,以纯文本模式采集原生截图,测量图案的青色像素位置,验证实际运动、参数响应、编辑/回滚/重开、固定副本隔离及服务重启后的持久检查点。它会启动两个先后运行的 MCP 服务,测试正常退出时的窗口和锁回收;异常清理失败也会令脚本失败。报告位于 .we-mcp/scene-verification/report.json,包含调用、测量、文件哈希校验与服务进程记录。检查图案位置而非仅比较整张 PNG,避免把标题栏变化当作动画;这仍不是通用画面质量评价或 Scene 错误收集。

.we-mcp 和本机配置不会进入 Git。应单独备份受管源工程;工坊上传不能替代源工程备份。锁冲突时先通过 we_workspace_diagnose 保留并核对证据;符合条件时可显式调用 we_workspace_recover,没有自动回收或强制解锁工具。active-previews.json 记录了预览窗口名称,便于异常退出后核对;它不证明窗口已不存在,也不授予新会话控制旧窗口的权限。

多文件写入不具备跨进程原子性:服务会序列化调用、检查写入前后的哈希,并保存 checkpoint 和 operation journal。中途遇到错误返回 RECOVERY_REQUIRED,保留现场;重新 inspect 后可用检查点恢复。外部编辑器不应同时写同一受管工程。

首版限制:工程上限 64 MiB / 2000 文件,单次文本读取 256 KiB,单文件文本修改 1 MiB。拒绝隐藏路径、node_modules、Windows 特殊文件名和符号链接/目录联接;因此应导入运行工程目录,而不是含开发依赖的仓库根目录。运行产生的历史副本和截图暂不自动清理。

早期四步目标(复用调研、原生捕获、基础 Scene 模板、Scene 编辑/回滚/重开闭环)已有本机验收。当前审计整改安排另见能力审计跟进。视频与受控系统音频已补首轮验收;复杂 Scene 工具、通用 Scene 脚本/素材错误收集、系统媒体会话、通用 UI 自动化及工坊上传仍未完成。基础模板通过不代表任意作者工作流通过;静态检查不能穷尽任意动态引用,发布准备仍需逐工程检查预览与依赖。

接口依据:官方 CLI、Web 属性、音频、调试入口、官方 MCP TypeScript SDK。版本兼容结论以本仓库的本机实测记录为准。

Scene 依据:官方 SceneScript 引用与类型定义、IEngine 属性、update 与帧时间、开发者公开的资源编译命令。新增实现使用当前安装版编辑器保存结果与实际编译/运行证据,没有依赖第三方播放器的兼容性声明。

Available Tools

12 tools
we_environment_probeA
Read-only

Read configured engine version and actual capability evidence. Does not change engine settings.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so 'Does not change engine settings' largely restates the safety profile. The phrase 'actual capability evidence' vs 'configured engine version' hints the return contrasts declared configuration against observed runtime, which is modest added context but no detail on format or failure modes.

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

Conciseness5/5

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

Two short sentences with no waste, and the core action is front-loaded ahead of the clarifying non-mutation note.

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 zero-param read-only probe with no output schema, the description adequately covers what it reads and reassures it is non-mutating. It could say more about what the capability evidence contains, but nothing critical to calling it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The empty schema means there is nothing for the description to disambiguate.

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 (Read) and resource (configured engine version and actual capability evidence), so the agent knows this returns environment/capability data. It is reasonably distinct from the project/preview siblings, though it does not explicitly contrast itself with we_project_inspect.

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?

Usage is only implied – the 'probe the environment' framing suggests a pre-flight check, and 'Does not change engine settings' hints it is safe to call anytime, but there is no explicit when-to-use or when-to-prefer-a-sibling guidance.

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

we_preview_closeA

Close only a window created by this server session. No global stop/kill commands.

NameRequiredDescriptionDefault
previewIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=false and destructiveHint=false. The description adds real context beyond them: the operation is scoped to windows created by this server session and deliberately omits global stop/kill semantics, which tells the agent about blast radius. It does not say whether closing is idempotent or what happens on an unknown id.

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

Conciseness5/5

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

Two short sentences, no filler, with the scope constraint front-loaded rather than buried.

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 single-parameter teardown tool with annotations and no output schema, the description covers the essential scope restriction. Minor gaps remain: no mention of idempotency or behavior for an invalid/already-closed previewId.

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%, and the description never mentions previewId, its UUID format, or where the id comes from (presumably we_preview_open). The name plus the UUID pattern in the schema make it inferable, so this is adequate but adds nothing beyond structured data.

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 ("Close") and resource ("a window created by this server session"), which is specific enough to separate it from we_preview_open and from any global kill sibling. It does not name an alternative tool, so it falls short of the 5 bar.

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?

"No global stop/kill commands" is an exclusion rather than a when-to-use rule; the agent can infer it is for tearing down a preview it opened, but no explicit trigger or alternative tool is named. Implied usage only.

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

we_preview_observeB

Read owned CEF target diagnostics, bounded console/network events and PNG frames. reload reloads the fixed preview snapshot; open a new preview for newer source revisions.

NameRequiredDescriptionDefault
countNo
reloadNo
previewIdYes
intervalMsNo
afterCursorNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, so the safety profile is already given. The description adds that events are 'bounded', frames are PNG, and that reload re-reads a fixed snapshot; it does not explain auth requirements, rate limits, or how reload differs from re-calling observe.

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

Conciseness4/5

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

Two tight sentences with no filler, and the core read purpose is front-loaded ahead of the reload/open-a-new-preview guidance. Dense but each clause carries meaning.

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

Completeness2/5

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

With five parameters at 0% schema coverage and no output schema, the description should carry more burden than it does. It omits parameter meanings, pagination/streaming semantics (afterCursor, intervalMs), and what the returned diagnostics/frames look like.

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 0% for all five parameters. The description only loosely gestures at 'reload' and 'bounded' events, leaving previewId, count, intervalMs, and afterCursor (pagination) entirely undocumented in both schema and prose, so it fails to compensate 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 specific verbs and resources: reads CEF target diagnostics, bounded console/network events, and PNG frames. It partially differentiates from siblings by contrasting with 'open a new preview for newer source revisions' (we_preview_open), though it never mentions we_preview_close or the other preview tools.

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?

Gives one useful routing hint: use 'reload' to refresh the fixed preview snapshot, and open a new preview for newer source revisions. However it does not state the general when-to-use context versus the other eleven siblings, nor prerequisites, so guidance is only partially implied.

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

we_preview_openC

Launch a uniquely named official engine window from an immutable source snapshot. Reports evidence or explicit unverified state; never changes the desktop wallpaper.

NameRequiredDescriptionDefault
widthNo
heightNo
projectIdYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this creates something non-destructively. The description adds real value by disclosing that results may be 'evidence or explicit unverified state' and that it 'never changes the desktop wallpaper'. It omits auth requirements and what a failed launch looks like, so it stops short of rich behavioral context.

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

Conciseness4/5

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

Two sentences, front-loaded with the action verb, and no filler padding. The trailing 'never changes the desktop wallpaper' clause is idiosyncratic and slightly wasteful, keeping it from a 5.

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

Completeness2/5

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

For a 3-parameter creation tool with no output schema and zero schema descriptions, the definition leaves too much unsaid: parameter meaning, resolution constraints, and error behavior. The behavioral note is helpful but the definition is not complete enough for an agent to invoke it 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?

Schema coverage is 0% and the description adds no information about width, height, or projectId — no format, units, defaults, or constraints. 'Immutable source snapshot' hints vaguely at the project reference but gives no actionable mapping, so the description fails to compensate for the undocumented schema.

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 clear verb+resource: 'Launch ... engine window from an immutable source snapshot'. An agent can tell this is the counterpart to we_preview_close. However, 'official engine window' is jargon-heavy, and the description never names the sibling or scopes itself against we_preview_observe/we_preview_set_properties.

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 explicit when-to-use or when-not guidance, no mention of prerequisites (e.g. requires a valid projectId), and no routing to alternatives such as we_preview_close for teardown. The phrase 'from an immutable source snapshot' implies a condition loosely but is not framed as usage guidance.

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

we_preview_set_propertiesA

Validate and send named properties only to an owned preview window; source defaults stay unchanged.

NameRequiredDescriptionDefault
previewIdYes
propertiesYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the agent knows this is a mutating but non-destructive local operation. The description adds value beyond that: changes are scoped to an owned preview window, values are validated before being applied, and the source/default configuration is left untouched — key behavioral facts the annotations do not convey. Error behavior and any permission requirements remain unstated.

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 sentence with the action front-loaded and no filler; the scope qualifier and the source-unchanged caveat each earn their place. Nothing is 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?

For a two-parameter mutation tool with a nested object parameter, no output schema, and no parameter documentation in the schema, the description covers what happens and the blast radius but omits validation failure behavior, whether values are merged or replaced, and what a successful call returns. Adequate but with clear gaps.

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 description must carry the burden for both required parameters. It partially does: 'named properties only' signals a key/value partial update that leaves unspecified properties alone, and 'owned preview window' implies previewId must reference a preview the caller owns. It adds no detail on value types, the 4096-char string cap, or UUID format.

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

Purpose4/5

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

The description states a concrete action (validate and set named properties) on a specific resource (an owned preview window), which separates it from the preview lifecycle siblings like we_preview_open/close/observe. It does not, however, explicitly name an alternative tool for the same conceptual task (e.g., we_project_apply), so differentiation is implied rather than stated.

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?

'Only to an owned preview window' and 'source defaults stay unchanged' give a usage constraint and a non-persistence caveat, which is useful context. There is no explicit when-to-use/when-not-to-use guidance or pointer to a sibling for making real, persistent changes, so the agent must infer the boundary.

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

we_project_applyA

Apply project-relative UTF-8 writes/deletions using expectedRevision. Validates candidate and saves a persistent checkpoint before writing.

NameRequiredDescriptionDefault
changesYes
projectIdYes
expectedRevisionYes

TDQS

A3.5/5.0
Behavior4/5

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

The description goes meaningfully beyond the annotations by disclosing the write pipeline: candidate validation first, then a persistent checkpoint before any mutation, plus revision-based concurrency via expectedRevision. The mention of 'deletions' sits in mild tension with destructiveHint=false, but the description itself supplies the mitigating mechanism (a persistent checkpoint, supported by the we_project_restore sibling), so this reads as author intent rather than a contradiction.

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 dense sentences with the action front-loaded and zero filler; the second sentence adds behavior rather than restating the first. Nothing could be cut without losing information.

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?

For a batched, mutation-capable tool with no output schema and zero schema-level descriptions, the definition covers purpose and the write pipeline but omits operationally important details: atomicity of the change batch, what error surfaces on revision mismatch, and path-containment guarantees. Adequate as a minimum viable definition, but not complete.

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

Parameters3/5

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

Schema description coverage is 0% across three required, non-trivial parameters, so the description must carry the load. It clarifies that paths are project-relative, content is UTF-8, a null/omitted content means deletion, and expectedRevision drives optimistic concurrency — useful but incomplete, since the 1-100 item limit, the 64-hex revision pattern, and validation-failure behavior remain undocumented.

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

Purpose4/5

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

The description states a specific verb and resource ('Apply project-relative UTF-8 writes/deletions') plus the governing mechanism ('using expectedRevision'), so the operation is unambiguous. It does not, however, distinguish itself from near-neighbors like we_project_validate, we_publish_prepare, or we_project_restore, which is what separates a 4 from a 5.

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 statement of prerequisites, and no named alternative. An agent must infer from the sibling list that this is the tool that actually commits changes while we_project_validate only checks them and we_project_restore rolls back.

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

we_project_createB

Create offline Web starfield, or copy an existing source into the managed workspace. New copies strip workshopid. Scene copies remain unverified.

NameRequiredDescriptionDefault
nameYes
titleYes
propertiesNo
templateIdNoweb-starfield
sourceProjectIdNo

TDQS

B3.4/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 openWorldHint=false, so the safety profile is covered externally. The description adds genuine side-effect context beyond that: copies strip workshopid, and scene copies remain unverified — meaningful post-conditions an agent would not otherwise know.

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?

Three short, front-loaded sentences with no filler; the primary action leads and the copy caveats follow. It is appropriately sized for the amount of information it does convey.

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?

There is no output schema, so return values need not be described, and annotations cover safety. However, for a 5-parameter mutation with 0% schema description coverage and a nested object, the description omits how to choose between templateId and sourceProjectId and what name/title/properties control — a real gap for correct invocation.

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 0% and there are 5 parameters including a nested free-form 'properties' object, so the description must carry the load. It only obliquely touches the source (sourceProjectId) and template ('Web starfield' ~ templateId), leaving 'name' vs 'title' and the entire 'properties' bag undocumented in both schema and prose.

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 (Create/Create offline) plus the resource (Web starfield project) and a second mode (copy an existing source), which distinguishes it from sibling read/apply/validate tools. The only weakness is jargon ('offline Web starfield', 'managed workspace') that isn't defined, but the core action is unambiguous.

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 implicitly signals two modes (new creation vs copying an existing source) but never states when to pick one over the other or how that maps to inputs. No alternatives or siblings are named, and no prerequisites are given, so usage must be inferred from the schema rather than the text.

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

we_project_inspectB
Read-only

Return content revision, manifest, bounded file inventory and optionally up to 256 KiB of requested source text.

NameRequiredDescriptionDefault
projectIdYes
readFilesNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the inventory is 'bounded' and source text is capped at 256 KiB, which tells the agent output size is limited and truncation is possible. It stops short of saying what happens when the cap or inventory bound is hit.

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 front-loaded sentence with no filler or restated tool name, and the verb leads the sentence. The enumerated list of returned artifacts is dense but readable; a slightly longer form clarifying the projectId input would not hurt given the schema is undocumented.

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

Completeness3/5

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

With no output schema, the description usefully enumerates what comes back (revision, manifest, inventory, source text), compensating somewhat for that gap. But it never explains the required projectId, says nothing about inventory scope or pagination, and gives no error or truncation behavior, leaving real gaps for a tool with an undocumented 2-parameter schema.

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 description must carry parameter meaning. It partially does this for readFiles by describing 'up to 256 KiB of requested source text,' clarifying content and volume. However, the required projectId parameter receives no explanation at all, and the 256 KiB cap is described as applying to 'source text' without clarifying whether it is per-file or across the whole request.

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 (Return) and enumerates the resources returned: content revision, manifest, file inventory, and optionally source text. This is far more concrete than a tautology like 'inspect a project.' It does not, however, differentiate itself from read-ish siblings such as we_project_list or we_project_validate, so the agent must infer which project-read tool to pick.

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 guidance, no mention of prerequisites, and no reference to any alternative tool. The phrase 'optionally ... requested source text' hints that the readFiles parameter can pull file contents, but the agent is given no condition for choosing this tool over we_project_list or we_project_validate.

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

we_project_listB
Read-only

Discover projects only beneath configured roots; external sources are read-only.

NameRequiredDescriptionDefault
typeNo
limitNo
offsetNo

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, destructiveHint=false and openWorldHint=false, so the safety posture is covered by structured data. The description reinforces this with 'external sources are read-only' and adds the configured-roots scoping limit, which is useful context, but says nothing about result size, pagination, or ordering behavior.

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 compact sentence with no filler, and the scoping constraint is front-loaded. It is arguably under-specified rather than wasteful, so it does not reach 5, but there is no sentence that fails to earn its place.

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

Completeness2/5

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

For a list tool with three undocumented parameters and no output schema, the description should at minimum say what is returned and how filtering/paging works. It covers only scope and read-only status, leaving an agent unable to infer the shape of results or the effect of the type/limit/offset options.

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 0% for all three parameters, so the description carries the full burden for 'type', 'limit' and 'offset'. It mentions none of them, leaving the enum values (web/scene/video), the 1-100 limit cap, and pagination semantics completely undocumented outside the raw schema.

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 verb 'discover' plus the resource 'projects' makes the operation identifiable, and 'only beneath configured roots' adds a scope qualifier that an agent can act on. It does not explicitly distinguish itself from siblings like we_project_inspect (single-project detail) or we_project_create, so it stops short of the 5 benchmark.

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

Usage Guidelines3/5

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

The phrase 'only beneath configured roots' is a real usage boundary — it implies the tool will not enumerate projects outside those roots — but no alternative tool is named or contrasted, and no condition for preferring this over we_project_inspect is given. Usage is therefore 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.

we_project_restoreA

Restore a checkpoint belonging to this managed project, refusing concurrent changes. Creates another checkpoint for undo.

NameRequiredDescriptionDefault
projectIdYes
checkpointIdYes
expectedRevisionYes

TDQS

A3.6/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 openWorldHint=false. The description adds meaningful context beyond that: the restore refuses concurrent changes (optimistic concurrency) and creates another checkpoint for undo, clarifying reversibility and failure behavior.

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

Conciseness5/5

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

Two short sentences with zero waste. The core action is front-loaded, followed immediately by the most important behavioral traits (concurrency refusal and undo checkpoint).

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 3-parameter mutation tool with no output schema, the annotations cover the safety profile and the description covers concurrency and reversibility. It omits explicit parameter explanations, but no essential calling information appears missing given the structured data available.

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 0% for all three required parameters. The description hints that 'checkpoint' maps to checkpointId and that concurrency refusal relates to expectedRevision, but it does not explicitly document any parameter's role, format, or constraints, leaving most semantics to be inferred.

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

Purpose4/5

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

The description states a specific verb ('Restore') and resource ('checkpoint belonging to this managed project'), making the core operation immediately clear. It does not explicitly differentiate itself from siblings like we_project_apply or we_project_validate, but no sibling shares its restore-checkpoint purpose.

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?

Usage is implied by the purpose: restore a checkpoint for this project. The phrase 'refusing concurrent changes' signals a precondition (no concurrent edits), but the description never names alternatives or states when not to use this tool, leaving routing to inference.

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

we_project_validateA
Read-only

Check metadata and static HTML/CSS references. Reports remaining runtime/editor checks without claiming engine validation.

NameRequiredDescriptionDefault
projectIdYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds genuine value on top by setting expectations about result limits: it reports remaining runtime/editor checks "without claiming engine validation." That caveat prevents an agent from over-trusting a pass result. It does not describe output shape, but annotations carry the safety burden here.

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

Conciseness4/5

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

Two terse sentences with zero filler, and the positive scope (what is checked) is front-loaded before the negative scope (what is not claimed). Efficient, though the second sentence is slightly compressed 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?

With no output schema, the description should arguably say what the agent receives (pass/fail, list of issues, severity), and it only gestures at this with "Reports remaining runtime/editor checks." It is adequate for a single-param read tool but leaves the result contract underspecified.

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?

There is one parameter, projectId, with 0% schema description coverage, so the description would need to compensate and it does not — it never mentions projectId or its format. However, the parameter is self-evident for a project-scoped tool, so the gap is minor rather than damaging.

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 concrete verb ("Check") and scoped resources (metadata, static HTML/CSS references), then bounds the scope by disclaiming engine validation. This lets an agent distinguish it from we_project_inspect or we_environment_probe, though it never names a 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 Guidelines3/5

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

Usage is only implied: the mention of "remaining runtime/editor checks" hints that other tools cover those, but there is no explicit when-to-use, prerequisite, or ordering guidance (e.g., after we_project_apply). An agent must infer the workflow.

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

we_publish_prepareB

Stage offline runtime sources and a preparation report; never packs native assets or uploads to Workshop.

NameRequiredDescriptionDefault
intentNonew
projectIdYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds a genuinely useful scope boundary (it writes staging artifacts but performs no asset packing and no network upload), yet it says nothing about where staging output lands, whether repeated calls overwrite prior staging, or what the 'preparation report' contains.

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 front-loaded sentence with the action first and the scope exclusion second; there is no filler. The terse semicolon clause is slightly cryptic, which keeps it short of a 5.

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?

For a two-parameter tool with no output schema, the description is minimally adequate: it frames the operation and its boundary, and the mention of a 'preparation report' gestures at the return value. It is incomplete on intent semantics, prerequisites (e.g. must a project exist first) and where staged sources are written.

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 0% and the description contributes no parameter meaning at all: neither projectId nor the new/update intent enum is explained, nor does it state what 'update' changes versus 'new'. The low coverage means the description should compensate and it does not.

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 verb 'stage' plus the resources ('offline runtime sources and a preparation report') make the purpose concrete, and the clause about never packing native assets or uploading to Workshop draws a sharp boundary that separates it from a real publish/upload step. It stops short of naming a sibling tool, so it is clear but not fully differentiated.

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 stated prerequisites, and no named alternative. The negative scope ('never packs... or uploads') hints that this is a preparatory step before publishing, but the agent must infer that this is the right starting point rather than, say, we_project_apply or we_project_validate.

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. 12 tool updatesv0.1.0
    • First observedwe_environment_probe
    • First observedwe_preview_close
    • First observedwe_preview_observe
    • First observedwe_preview_open
    • First observedwe_preview_set_properties
    • First observedwe_project_apply
    • First observedwe_project_create
    • First observedwe_project_inspect
    • First observedwe_project_list
    • First observedwe_project_restore
    • First observedwe_project_validate
    • First observedwe_publish_prepare

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation5/5

Tools split cleanly into project, preview, and environment concerns, with actions like inspect, validate, apply, and restore each having a distinct stated scope. Descriptions explicitly clarify what each tool does and does not do, so selection should be unambiguous.

Naming Consistency5/5

All names use snake_case with a consistent we_ prefix and object_action structure, such as we_project_apply and we_preview_open. There are no mixed conventions or vague verbs.

Tool Count5/5

12 tools is well-scoped for the domain, covering project lifecycle, preview control, and environment inspection without obvious redundancy or missing basic operations.

Completeness4/5

Core project and preview lifecycle is covered, including create, edit, restore, validate, and preview observation. However, there is no final publish/upload tool and no project deletion or checkpoint listing, leaving some end-to-end workflows incomplete or requiring external steps.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI clients to author and inspect Godot 4 projects by editing .tscn scenes and .gd scripts directly on disk, running headless project checks, and optionally driving a live editor bridge for real-time scene editing.
    20
    19 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to open, edit, check, run, emit, and save source programs through structured, revision-checked tools over stdio, confining paths to the launch root and returning diagnostics with fixes for rejected edits.
    4 npm
    2
    Apache 2.0