Skip to main content
Glama

DesktopOS — AI-to-Windows Bridge

一个跑在 Windows 上的 MCP Server,给 AI Agent 提供持久化 PowerShell 会话。

核心区别于「每次开一个新 PowerShell 进程」:cd 之后目录保持、环境变量保持、venv 状态保持。 AI 可以像人一样连续操作,而不是每条命令都从零开始。


当前状态

阶段

内容

状态

Week 1-2

Shell Worker(持久化会话)

✅ 完成

Week 3-4

双通道感知(窗口树 + 截屏 + 交叉验证)

✅ 完成

Week 5-6

内嵌 Playwright / CDP

✅ CDP 已通(Playwright 未做,见下)

Week 7-8

操作验证(自愈)

✅ 完成:执行→验证→诊断→修补→重试

Week 9

记忆层

✅ 完成(窗口级 + 元素级)

Week 10

MCP 封装 + 开源

🚧 MCP 已通并接入 DSH,开源待做

—

元素级控件树(UIA)

✅ 完成(Electron 类应用除外,见下)


Related MCP server: Windows-MCP

快速开始

要求:Windows + Node ≥ 22(CDP 用 Node 内置的全局 WebSocket,无需额外依赖)。

cd <项目目录>

npm install       # 压缩包里已带 node_modules,可跳过
npm test          # 307 项,全绿才算可用
npm start         # 以 MCP Server 运行(stdio)

npm test 会真的起 PowerShell、真的开浏览器、真的动鼠标(只读动作),不是 mock。

注册到 MCP 客户端

把这段合并进客户端配置(模板见 examples/mcp-config.json):

"desktopos": {
  "type": "stdio",
  "command": "node",
  "args": ["<项目路径>/src/mcp-server/index.js"],
  "cwd": "<项目路径>"
}
  • DSH(新版):C:\Users\<你>\.dsh\dsh-mcp-manager.json

  • DSH(旧版 / qwenworkcn):C:\Users\<你>\.qwenworkcn\mcp.json

  • Claude Desktop:%APPDATA%\Claude\claude_desktop_config.json

  • Cursor:%USERPROFILE%\.cursor\mcp.json

哪个文件已存在就改哪个。路径用正斜杠可以避开 JSON 的反斜杠转义。重启客户端后生效。

第一次上手:读 docs/QUICKSTART.md —— 五分钟一页纸, 含可复制的客户端配置、一分钟自检清单、典型用法和已知限制。

想判断它靠不靠谱:读 docs/REVIEW.md —— 评审导览, 含 5 分钟验证路径、目录导航、已知边界和安全提示。


暴露的工具

工具

作用

shell_exec

在持久化会话中执行命令

shell_cd

切工作目录(支持中文路径)

shell_cwd

查当前目录

shell_env_set / shell_env_get

环境变量读写,跨调用保持

shell_exec_verified

执行 + 独立验证结果 + 失败退避重试(自愈)

shell_reset

会话异常时重启 PowerShell

desktop_list_windows

结构通道:枚举窗口(标题/进程/矩形/聚焦/最小化)

desktop_screenshot

视觉通道:截屏,返回 PNG/JPEG(maxWidth / format 控体积)

desktop_perceive

双通道 + 交叉验证(核心能力)

desktop_cursor

读鼠标坐标(只读)

desktop_move

移动鼠标(不点击)

desktop_click

点击 / 双击 / 右键(可带 verify + verifyRegion)

desktop_type

输入文本,支持中文

desktop_key

组合键,如 ctrl+c / alt+tab

desktop_scroll

滚轮滚动

desktop_focus_window

把指定窗口切到前台

desktop_elements

元素级:枚举窗口内控件树(名称/类型/矩形/可点击)

desktop_click_element

元素级:按名称点控件(InvokePattern,失败回落点中心)

memory_recall

把指代解析成坐标("刚才那个窗口" / "钉钉",也支持控件级)

memory_timeline

最近操作时间线

memory_stats / memory_clear

索引状态 / 清空

desktop_browser_launch

启动一个带调试端口的 Edge/Chrome(独立 profile,不抢你正在用的浏览器)

desktop_cdp_targets

只读扫描:本机有哪些可连的 CDP 端点与页面

desktop_cdp_open

连上页面建立会话(可按标题/URL 选,或导航到指定 URL)

desktop_cdp_elements

列页面内控件(角色/名称/层级,已去重)

desktop_cdp_click

按名称点控件(算矩形中心 + 注入真实鼠标事件)

desktop_cdp_type

输入文本,Input.insertText 中文天然无损

desktop_cdp_eval

在页面里执行 JS 并拿回结果

desktop_cdp_screenshot

页面级截图

desktop_cdp_close

关会话 + 杀掉自己启动的浏览器

desktop_diagnose

把一条报错翻译成「为什么 + 怎么办 + 能否自动修」

典型用法:

shell_cd   → <某个含中文的目录>
shell_exec → git status          ← 直接在上面那个目录执行

自愈用法(不轻信命令返回值,执行后真去验证):

shell_exec_verified
  command: New-Item -ItemType Directory -Path 'D:\新目录' -Force | Out-Null
  expect : { "isDir": "D:\\新目录" }
  retries: 2

expect 支持:pathExists / pathNotExists / isDir / isFile / fileContains:[路径,内容] / cwd。 验证走 Node 的 fs(原生 UTF-8 路径),不经过 shell,中文路径同样可靠。


按需裁剪工具面(多服务器共存时用)

问题不在工具多,在于重叠没人裁决。

主流 MCP 客户端(DSH / Claude Desktop / Cursor)只支持按服务器启停, 没有工具级开关。于是机器上同时装了另一个桌面自动化、一个浏览器自动化之后, 这个服务器暴露的 33 个工具里有相当一部分是在问同一个问题: 「点这个控件」有两条路,「截个图」有三条路。模型每次调用都得猜, 而猜错的概率随重叠面积上升 —— 这是装多了之后真实会出现的退化。

客户端修不了,就在服务器侧修:启动时把重叠的那部分裁掉,决策点直接消失。

# 按分组
DESKTOPOS_TOOLS=shell,diagnose node src/mcp-server/index.js

# 按工具名,可混写
DESKTOPOS_TOOLS=shell_exec,shell_cd,desktop_perceive node src/mcp-server/index.js

# 或者排除法(exclude 优先)
DESKTOPOS_TOOLS=shell,desktop DESKTOPOS_TOOLS_EXCLUDE=desktop_screenshot

# 命令行等价写法
node src/mcp-server/index.js --only=shell,diagnose

分组:

分组

工具

什么时候需要裁

shell

shell_exec / _verified / _cd / _cwd / _env_get / _env_set / _reset

几乎总是要留 —— 这套最不可替代

desktop

list_windows / perceive / screenshot / cursor / move / click / type / key / scroll / focus_window

已有别的桌面自动化时可裁

elements

elements / click_element

需要元素级点击时留

cdp

browser_launch / cdp_*(9 个)

已有 Playwright 就整组裁掉

memory

memory_*

不需要桌面状态记忆时裁

diagnose

desktop_diagnose

纯知识,建议留

三条行为保证(test/toolfilter.test.js 覆盖):

  1. 不设过滤 = 暴露全部,OSS 用户的默认体验不受影响;

  2. 裁剪后 tools/list 只剩选中的;

  3. 执行期同样拦截 —— 只裁 tools/list 是不够的:客户端的工具表可能是缓存的, 模型也可能记得旧名字,那时调用会绕过裁剪照常执行,配置看着生效其实没有。

配套:重叠审计

裁剪是手工判断,所以给了一个把「重叠」量化成数字的脚本:

npm run audit:overlap

它会连上配置里每个 MCP 服务器、拉一遍 tools/list,然后按名字与描述的相似度 输出跨服务器的近重复对。用法是当成候选清单看,不是判决:

  • 名字撞但语义不同的很常见(windows-mcp/Click 点的是操作系统窗口, playwright/browser_click 点的是页面 DOM 元素 —— 这两条本来就不该合并);

  • 中英文描述混在一起时,描述相似度会失灵,只能靠名字相似 + 人工判断;

  • 它只看 MCP 服务器,看不到客户端的原生工具(如内置的 shell / 文件读写), 所以真实重叠量会比报告数字更大。

每装一个新服务器就跑一次,别让重叠悄悄累积 —— 这是这个脚本存在的唯一理由。


自愈:诊断器

之前的自愈只有半截 —— 执行 → 验证 → 重试。但「重试」对大多数失败毫无意义: 命令写错了,再跑十次还是错。缺的是中间那步:搞清为什么失败。

现在失败会先过一遍诊断器,产出五样东西:

category    失败类别(access-denied / cmd-not-found / missing-parent / ...)
reason      人话解释
hint        可行动的提示
suggestion  具体下一步(命令或工具调用)
retryable   原样重试到底有没有意义
fix         能自动修的话,给出修补命令

retryable 是这里最关键的判断。 大多数 AI 桌面工具失败就无脑重试, 而「权限不足」「命令不存在」「参数写错」这类失败重试一万次也是浪费时间 —— 诊断器会直接说「重试无意义」,并指向真正该做的事。

自动修补有边界,不是什么都敢修

只有纯加法的修补才默认执行(目前一类:父目录缺失时补建)。 其余必须显式开 autoFix。并且有两条硬约束:

  1. 父目录真的不存在才补建 —— 否则就是「目标本身不存在」,补建毫无意义。

  2. 命令本身是创建类才补建 —— 对 Get-ChildItem 这种读取命令去建目录, 等于凭空造出一个假路径。那不是自愈,是胡来。

真实例子(测试里跑通的):

New-Item -ItemType File -Path '...\a\b\x.txt'      ← 父目录 a\b 不存在
  ↓ 诊断: missing-parent(原样重试有意义)
  ↓ 自动修补: New-Item -ItemType Directory -Path '...\a\b' -Force
  ↓ 重跑,验证通过,文件真的存在

规则刻意不接 LLM

纯字符串匹配,毫秒级返回,可测试可回归。代价是只能覆盖已知类别 —— 所以未命中时会老实说「未能归类」,并把报错原文回传,方便扩充规则表。

已覆盖:编码损坏 / 文件占用 / 权限不足 / 命令不存在 / 参数错误 / 类型转换 / 语法错误 / 超时 / 目标已存在 / 路径不存在 / 父目录缺失 / 控件找不到 / 控件歧义 / 窗口最小化 / 句柄失效 / UIA 不可用 / CDP 不可用。

任何工具报错都会自动附带诊断,不只是 shell —— 兜在 MCP 的 catch 里。


架构

Node (MCP Server)
   ├─ HTTP 127.0.0.1:<随机端口> ──▶ PowerShell 5.1 (worker.ps1)
   │     header: X-DOS-Token: <每进程随机>     同一 runspace 长期存活 ──▶ Win32 / UIA
   │     body:   { command: base64(UTF-8) }
   └─ WebSocket (CDP) ──▶ Edge / Chrome / Electron 的调试端口 ──▶ DOM + 无障碍树

为什么本地端口也必须鉴权

「只绑 127.0.0.1」不等于私有。攻击路径很具体:

  1. 恶意网页用 fetch('http://127.0.0.1:<port>/exec', { method:'POST', body: '<json>' });

  2. Content-Type 默认 text/plain,而它属于 CORS 安全列表值 —— 于是这是一个「简单请求」, 不触发预检,浏览器直接把请求发出去;

  3. 响应读不到(CORS 会拦),但副作用已经发生;端口虽然随机,也只有约 16k 个候选,页面盲扫几秒就够。

结论:不加鉴权的话,用户访问任意网页就等于把 PowerShell、鼠标和键盘交出去。

现在的做法:

  • Node 为每个 worker 生成 32 字节随机 token,经 argv 传给 PowerShell;

  • 每个请求必须带 X-DOS-Token,不匹配一律 403;

  • 带 Origin 头的请求一律 403(我们自己的 Node 客户端从不发 Origin)。

关键点在于自定义请求头:它不属于安全列表值,跨站请求因此必须走预检,浏览器会直接拦掉。 回归测试在 test/resilience.test.js,覆盖「跨站 Origin + text/plain」「无 token」「错误 token」「正确 token」四种情况。

token 走 argv,本机其他进程读得到它 —— 但那种攻击者本来就能直接执行代码,不在威胁模型内。

为什么不是 stdin 管道 + marker

最初的实现是 powershell.exe -Command -,往 stdin 写命令、靠一个 marker 字符串判断命令结束。 这条路有四个绕不开的坑(都已用实测确认):

  1. 编码:powershell.exe 用 [Console]::InputEncoding 解码管道 stdin,中文机器上是 CP936/GB2312。 Node 写的 UTF-8 中文被解成乱码 → 中文路径 100% 失效。 实测:InputEncoding : gb2312 (codepage 936)。

  2. 流交错:stdout 与 stderr 混在一起,marker 会被命令输出淹没或被残留 buffer 误判。

  3. 进程退出:终止性错误会让 PowerShell 直接 exit(1),后续 marker 永远等不到。

  4. 错误丢失:Invoke-Expression 不把内部非终止性错误可靠并入调用方错误流。

对应解法:

  • 换 HTTP 传输层:命令 base64 走 body,响应显式写 UTF-8 字节,全程不碰控制台编码。

  • 用 scriptblock 点源执行 + 重定向(. $sb 2>&1):既捕获非终止性错误,又保证变量/目录留在同一 runspace。

worker.ps1 刻意保持纯 ASCII,所有非 ASCII 数据一律 base64 传输, 连 PowerShell 默认按 ANSI 读 .ps1 这个坑也一并绕开。

踩坑记录:改这些 .ps1 时小心 AMSI。 往 perception.ps1 里加 JPEG 质量参数(ImageCodecInfo::GetImageEncoders() 配 EncoderParameters)之后,整份脚本被 Windows Defender 判成 「contains malicious content」直接拒绝执行 —— 单独跑那一小段没事, 和「截屏 + base64 + HttpListener」放在一起就触发了组合启发式。 换成朴素的 ImageFormat::Jpeg 重载即可。加任何"截屏后编码"的代码前先测一遍。


卡死之后会自己站起来

PowerShell 5.1 的 runspace 是单线程的:一条卡住的命令(等输入的交互程序、 忘了 -y 的 npm install、一直不返回的网络请求)会让 GetContext() 永远回不去,之后所有请求全部超时。

而且早期的 stop() 是 await 一个没有超时的 /shutdown —— 对端已经卡死, 于是逃生门自己也挂住,shell_reset 一样不返回,只能重启 MCP 客户端。

现在的分层:

层

机制

命令

超时即抛出;自动硬重启 worker,并把记住的 cwd 与环境变量重放回去

请求

_request 自带超时(命令超时 +5s),任何一层都不能把上一层永远挂住

停止

先短超时(1.5s)尝试优雅退出,然后无条件 kill 并等待真实退出

启动

缓存的是启动 Promise,并发调用共用同一次 spawn(_spawnOnce 最多重试 3 次)

所以卡一次命令的代价是「重启 + 重放状态」,不是「这一整个会话废了」。 代价要说清楚:进程内没被 shell_env_set 记录过的变量、以及非 cwd 的其它 runspace 状态(函数定义、模块导入)确实会丢。test/resilience.test.js 验的就是 cwd 和 通过 shell_env_set 写过的变量能活下来。


双通道感知

所有 AI 桌面工具都在做「截图 → OCR → 猜」,这是错误架构。这里两条通道同时开:

通道

实现

产出

结构

Win32 P/Invoke:EnumWindows / GetWindowRect / GetWindowText / GetForegroundWindow

句柄、标题、进程、PID、矩形、聚焦、最小化

视觉

System.Drawing 全屏截屏,按窗口矩形采样像素算标准差

该区域是否真有内容渲染

交叉验证:结构通道说「可见」的窗口,视觉通道必须证明它 (1) 在屏幕内 (2) 真有内容。否则标为不一致,原因分三类:

minimized  最小化(Windows 把它们停放到 -32000/-21333 这类坐标)
offscreen  在屏幕外
blank      区域无内容(如 1x1 的隐藏窗口)

实测本机 17 个窗口:一致 5 个,不一致 12 个(minimized 8 / offscreen 2 / blank 2)。 关键是 IsWindowVisible 对最小化窗口也返回 true —— 只看窗口列表会误判,必须双通道核对。


执行层(UI 执行器)

真实输入注入:focus / move / click / scroll / type / key。

中文输入是个坑:SendKeys 不支持 Unicode,中文会被打成乱码。 所以输入走剪贴板(SetText,完整 Unicode)+ Ctrl+V,中文完好无损—— 和整个项目一致的思路:非 ASCII 一律不裸奔过 shell/控制台编码。

内置验证:任何动作都可以带 verify,前后各截一次屏,采样比对后返回 diffRatio。 「操作 → 验证」因此是基础设施,不用每个调用方自己拼。

验证可以限定区域:verifyRegion: { x, y, w, h }(通常直接传目标窗口的 rect)。 不传就比对全屏 —— 而全屏比对回答的是「屏幕上有没有东西变」, 不是「我这个动作有没有让目标变」;一个跳秒的时钟或闪烁的光标都会被算进去。 返回里带 scope: "region" | "screen",一眼能看出这次结论的力度。

典型闭环:

desktop_perceive                       → 拿到目标窗口 handle 与 rect
desktop_click {x,y,verify,verifyRegion → 点它,只在那个窗口范围内比对
              :<rect>}
desktop_screenshot                     → 肉眼确认

⚠️ 点击和输入会真实抢走你的鼠标与键盘焦点。 自动化测试只覆盖只读与无副作用动作(cursor / move), 真实 click / type / key 请用 test/_dbg-actor.js 手动触发,或经 MCP 显式调用。

node test/_dbg-actor.js cursor
node test/_dbg-actor.js click 500 300        # 会真点,工具内置 5 秒缓冲
node test/_dbg-actor.js type "中文输入测试"

记忆层

解决 AI 操作电脑最痛的一点:不记得之前做过什么、看过什么。 有了它,「点击刚才那个按钮」这类指代才成立。

三块内容:

组成

实现

操作日志

每次 perceive / act 自动记一条,带时间戳

特征索引

窗口的 8×8 dHash 差分哈希(真正的「截图 → 向量」),可按汉明距离再认出来

上下文管理器

聚焦窗口历史 / 导航栈

持久化在 ~/.desktopos/memory.json,跨进程、跨重启保留。

实测效果:

"刚才那个窗口"  -> 微信 [WeChat]        坐标(853,509)   按"最近"定位
"explorer"      -> Program Manager      坐标(854,534)   按关键词定位
"Excel"         -> 存在但已最小化,请先用 desktop_focus_window 还原(句柄 68036)

最后一条是关键设计:区分「真没有」和「有但最小化了」。 说成「不存在」会把 Agent 带偏,所以给了可行动的提示 + 句柄。

感知哈希是 8×8 灰度差分哈希(dHash),不需要任何 ML 模型 —— 窗口移动、缩放后仍能再认。

为什么不是 aHash:aHash 只记「这一格比平均值亮还是暗」,梯度方向与颜色全丢。 实测在本机 33 个窗口里,aHash 把「文件资源管理器」和一个毫不相关的网页算成 完全相同的 64 位指纹(距离 0);而 findByHash 的用途正是把「刚才那个窗口」 解析成坐标,指错了下一步就是真点击。换成 dHash 之后重新抓帧比对 105 对窗口, 只有 2 对距离为 0(都是同类的扁平小窗),98 对距离 >12,分离度足够。

即便如此,哈希也只是弱辅助信号:findByHash(hash, { expect: { title, process } }) 建议带上标题/进程做交叉校验,只有对上才算同一个目标;默认阈值也从 10 收紧到 6。 纯色 / 空白区域哈希相同仍属正常退化现象。

索引已经不止窗口级:desktop_elements / desktop_perceive 会自动把控件也写进索引, 「刚才那个按钮」这类指代因此可以命中元素而不是窗口。


元素级感知(UIA)

从「点窗口中心」进化到「点那个按钮」,靠 System.Windows.Automation(UIA)枚举控件树:

desktop_list_windows      → handle=854182(现在会带句柄输出)
desktop_elements          → { handle: 854182 }
desktop_click_element     → { handle: 854182, name: "小组件" }

desktop_elements 返回每个控件的 名称 / 控件类型 / 矩形 / 是否支持 Invoke。 desktop_click_element 优先走 InvokePattern.Invoke()(不需要坐标,最小化也能触发), 不支持时才回落到「算矩形中心 → 真实点击」。

实测控件名中文往返无损:

Button       小组件 22°C 大部晴朗
Group        22°C 大部晴朗

已知边界:Electron / Chromium 是瞎的

应用

枚举到的控件数

explorer

28

msedge

25

WorkBuddy(Electron)

0

UIA 看不见 Chromium 渲染树内部 —— 这类应用整个窗口只暴露一两个 pane, 再往下就是一片黑。返回 0 时工具会给出解释而不是崩溃: 「该应用不暴露 UI Automation 控件树(Electron/Chromium 常见)」。

这正是 Week 5-6 要接 Playwright / CDP 的直接原因: 对 Chromium 系应用,UIA 这条路走不通,必须走浏览器调试协议。


CDP 通道(看见 Chromium 内部)

UIA 看不进去的地方,用 Chrome DevTools Protocol 直接问浏览器。零新增依赖 —— Node 22 起 WebSocket 已是全局对象。

desktop_browser_launch { headless: false, url: "https://..." }   -> 返回端口
desktop_cdp_open       { port, url, navigate: true }             -> 会话 s1
desktop_cdp_elements   { session: "s1" }                         -> [button] 搜索 / [textbox] 请输入
desktop_cdp_type       { text: "中文关键词", target: "请输入" }
desktop_cdp_click      { name: "搜索" }
desktop_cdp_eval       { expression: "document.title" }
desktop_cdp_close      {}

语义刻意和元素级 UIA 对齐(elements / click / type),上层不用分两套心智模型。

三个关键设计

1. 必须先开调试端口。 浏览器默认不暴露 CDP。所以给了一个 launcher: 带 --remote-debugging-port + 独立 --user-data-dir,不会和你正在用的浏览器抢 profile。 端口只监听 127.0.0.1(CDP 默认行为)。

2. Input.insertText 而不是键盘事件。 中文走 UIA 那套要剪贴板 + Ctrl+V;CDP 有 Input.insertText,直接写入、不经过键盘布局, 中文和 emoji 都无损 —— 比前两条路都干净。

3. AX 树必须去重。 getFullAXTree 会给一个按钮同时产出 button / StaticText / InlineTextBox 三个同名节点。 那是同一个控件的三种投影,不是三个控件 —— 不去重的话「点搜索」会被判成歧义而失败。 elements() 默认丢掉与交互式节点同名的文本投影;find() 再按「交互式角色优先 + 层级更浅优先」排序。 (不修这个,实测枚举出来是 13 个控件、点击直接报错;修完是 5 个、点击正常。)

⚠️ headless: false 时浏览器窗口会真的弹出来并抢焦点,自动化场景用 headless: true。 用完记得 desktop_cdp_close,否则无头浏览器会留在后台。

为什么没上 Playwright

Playwright 的价值是等待/定位/自动重试,代价是几十 MB 依赖 + 浏览器下载。 CDP 直连已经拿到了 Playwright 的底层能力(DOM、AX 树、输入注入), 而「等待」可以用 waitReady() + desktop_cdp_eval 自己表达。 等真出现「选择器 + 自动等待」的强需求再引不迟。

已知边界

  • 需要浏览器带调试端口启动,无法凭空虚附到已在运行的实例上(这是浏览器侧限制)。

  • 页面级坐标系,不是屏幕坐标 —— 所以 CDP 的点击和 desktop_click 的屏幕坐标不是一个东西。


测试覆盖

npm test = 6 编码守卫 + 13 Shell Worker + 15 韧性/安全 + 13 工具过滤 + 20 感知

  • 11 执行 + 123 诊断 + 38 记忆 + 81 MCP 端到端,共 320 项。

其中 CDP 那 16 项是真端到端:真的起一个无头 Edge、真的导航、真的注入鼠标事件、 断言页面 DOM 真的变了。本机没装 Edge/Chrome 时自动 SKIP,不算失败。

**韧性/安全(resilience.test.js,新增)**覆盖三类曾经真实出过的问题:

  • 鉴权:跨站 Origin + text/plain、无 token、错误 token 一律 403;正确 token 才执行

  • 卡死恢复:命令超时后会话自动恢复;cwd 与 shell_env_set 写过的变量被重放回来; 卡死状态下 stop() 仍在有限时间内返回

  • 并发冷启动:5 个并发 start() 只 spawn 一个进程

  • 请求体上限:5 MB body 返回 413,而不是被 ReadToEnd() 全读进内存

编码守卫(ascii-guard):强制所有 .ps1 纯 ASCII。 PowerShell 5.1 无 BOM 时按 ANSI/CP936 读 .ps1,混进中文注释会被解成乱码、 并悄悄破坏紧随其后的代码行(曾导致一行 $min = if (...) {...} 整体失效, 输出的 JSON 变成 "minimized":,)。这条测试就是这条规则的执行者。

重点回归点:

  • cd 到含中文的路径(...\代码\desktopos)—— 旧方案在此必挂

  • 中文窗口标题经感知层往返无损(无 U+FFFD)

  • 目录/环境变量跨调用持久化

  • 非终止性错误、终止性错误、原生命令 stderr 都能捕获

  • 出错后会话仍存活(不挂死)

  • 交叉验证自洽:一致数 + 不一致数 = 总数,且与布尔字段一致

  • 元素枚举:至少一个真实窗口能枚举出控件(正向),且控件名无 U+FFFD

  • 点不存在的控件必须返回 isError,不能误触任何东西

  • 诊断器判定 retryable: false 时真的不再重试(不是只写在提示里)

  • 路径里出现 C:\Users\Administrator\... 不能被误判成权限不足

  • dispatcher 里能处理的工具必须都在 tools/list 登记过(否则 Agent 根本看不到它)

调试工具(非测试)

  • test/_dbg-exec.js —— 逐个查看命令的 output/error/exitCode,排查错误捕获

  • test/_dbg-perception.js —— 打印双通道明细与耗时,排查感知问题

  • test/_dbg-actor.js —— 手动触发真实 click / type / key(自动化测试不碰)

  • test/_dbg-elements.js —— 打印指定窗口的控件树,排查 UIA 枚举

  • test/_dbg-cdp.js —— CDP 调试:survey 扫描端点 / launch 起实例 / smoke 全自动冒烟


文件结构

src/
├── mcp-server/index.js      MCP Server(stdio transport,33 个工具)
├── http-worker/index.js     三个 worker 共享的传输层:token 鉴权 / 分层超时 / 端口重试 / 无条件 kill
├── verifier/index.js        执行→验证→诊断→修补→重试(自愈闭环,retryable 已接线)
├── diagnoser/index.js       错误诊断器:18 类失败规则,产出原因/建议/修补
├── cdp/
│   ├── index.js             CDP 高层:Browser / Session(elements/click/type/eval/screenshot)
│   ├── client.js            极简 CDP 客户端(原生 WebSocket,零依赖)
│   ├── discover.js          扫描 127.0.0.1 上的调试端点 /json/version、/json/list
│   └── launch.js            带调试端口 + 一次性 profile 启动 Edge/Chrome
├── sensor/
│   ├── index.js             Node 端:感知 worker 封装(listWindows/screenshot/perceive/elements)
│   └── perception.ps1       PowerShell 端:结构通道 + 视觉通道 + 交叉验证 + UIA + dHash
├── actor/
│   ├── index.js             Node 端:执行 worker 封装(focus/click/type/key/scroll/element)
│   └── actor.ps1            PowerShell 端:Win32 输入注入 + 区域化截图比对 + UIA Invoke
├── memory/index.js          记忆层:操作日志 / 特征索引 / 上下文栈 / 元素索引
└── shell-worker/
    ├── index.js             Node 端:会话封装 + 卡死后自动重启与状态重放
    └── worker.ps1           PowerShell 端:HttpListener + token 校验 + 执行引擎
test/
├── ascii-guard.test.js      .ps1 纯 ASCII 守卫(防编码回归)
├── shell-worker.test.js     Shell Worker 单元/集成
├── resilience.test.js       鉴权 / 卡死恢复 / 并发单例 / 请求体上限
├── perception.test.js       双通道感知 + 元素级枚举
├── actor.test.js            UI 执行层(安全子集)
├── diagnoser.test.js        诊断器:分类 + 真自愈集成(123 项)
├── memory.test.js           记忆层(用临时存储,不污染真实记忆)
├── mcp-e2e.test.js          MCP 协议端到端
├── _dbg-*.js                手动调试工具(不参与 npm test)
└── _probe-*.js              评审期复现脚本(不参与 npm test)

Available Tools

33 tools
desktop_browser_launchA

启动一个"可被 CDP 调试"的浏览器实例(Edge / Chrome)。 带 --remote-debugging-port 和一次性的 --user-data-dir(不传时每个实例独立目录, 关闭时自动删除),不会抢你正在用的浏览器 profile。 端口只监听 127.0.0.1。返回端口号,之后用 desktop_cdp_open 连它。 headless=true 时不弹窗口,适合自动化;headless=false 时窗口会真的跳出来。

NameRequiredDescriptionDefault
urlNo初始打开的页面,默认 about:blank
waitMsNo等待 CDP 端点就绪的毫秒,默认 20000
headlessNo是否无头,默认 false(会显示窗口)
browserPathNo显式指定浏览器 exe 路径,默认自动找 Edge/Chrome
userDataDirNo显式指定 profile 目录(需要保留登录态时用)。不传则用一次性目录

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the one-shot user-data-dir (auto-deleted on close), that it won't hijack the user's existing profile, that the port binds only to 127.0.0.1, and that it returns the port number. It omits failure/timeout behavior and whether the caller must close the instance.

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?

The core capability and the key scoping guarantees are front-loaded, and the sentences are dense with useful facts. Slightly verbose with the parenthetical profile explanation, but no real waste.

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?

Despite no output schema, the description explicitly says it returns the port number and points to desktop_cdp_open for the next step, covering the round-trip an agent needs. All optional params have defaults documented in the 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 coverage is 100%, so the schema already documents all five parameters and their defaults. The description echoes the userDataDir purpose (persist login state) and headless behavior, adding only marginal value beyond the schema.

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 (启动/launch) and resource (a CDP-debuggable Edge/Chrome instance) and names the essential flags. It is clearly distinguishable from desktop_cdp_open, which it explicitly hands off to.

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 context: use this first, then connect via desktop_cdp_open, and headless=true is for automation while false shows a real window. It does not explicitly state when NOT to use it (e.g., if an instance is already running), but the workflow guidance is strong.

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

desktop_cdp_clickA

按名称点击页面里的控件(走 CDP 注入真实鼠标事件)。 先定位控件矩形中心再点,所以不需要你猜坐标。同名多个时会报错并列出候选。

NameRequiredDescriptionDefault
nameYes控件文本,支持模糊匹配
roleNo限定角色,如 button,用于消歧
sessionNo会话 id,省略则用当前会话

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose meaningful traits: real mouse events via CDP, center-of-rectangle targeting (no coordinate guessing), and explicit error-on-duplicate behavior. It omits prerequisites such as needing an open CDP target/session (see desktop_cdp_open, desktop_cdp_targets) and says nothing about what is returned.

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 action, then the mechanism, then the failure mode. No filler.

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 mutation-style UI action with no annotations and no output schema, the description covers mechanics and the ambiguity case but not the CDP session precondition or the result of a successful click. An agent could still mis-invoke it without an attached target.

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 100%, so all three params are already documented, including fuzzy matching and role-based disambiguation. The description only reinforces the duplicate-name/role interplay, so 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 ('按名称点击页面里的控件') and adds the mechanism ('走 CDP 注入真实鼠标事件'), which separates it from plain desktop_click. It doesn't explicitly name which sibling to prefer among desktop_click / desktop_click_element / desktop_cdp_type, so it stops short of full differentiation.

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 usage condition: ambiguous names cause an error with candidates listed, implying the role param should be used to disambiguate. It never says when to choose this over desktop_click or desktop_click_element, leaving the biggest routing decision to inference.

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

desktop_cdp_closeA

关闭 CDP 会话,并杀掉由 desktop_browser_launch 启动的浏览器进程。 用完记得调用,否则无头浏览器会留在后台。

NameRequiredDescriptionDefault
sessionNo只关指定会话;省略则关全部
killBrowserNo是否连浏览器进程一起杀,默认 true

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the destructive side effect (killing the launched browser process) and the leak risk of not calling it. It does not say whether the kill is unconditional, what happens if the session is already gone/dangling, or what the call returns on partial failure.

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 sentences, both earning their place: the first defines behavior, the second is a front-loaded obligation with a stated consequence. No redundancy with the title or restated field names.

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 2-parameter, no-output-schema, no-annotation cleanup tool this is largely sufficient — purpose, side effects, and the imperative to call it are all present. The residual gap is failure-mode behavior (dead session, browser already closed) which an agent would have to probe empirically.

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?

Schema coverage is 100%, so the baseline is 3; the description earns a bump by identifying whose browser process gets killed ('由 desktop_browser_launch 启动的'), which is what an agent needs to reason about setting killBrowser=false. The 'session' parameter's 'omit = close all' behavior is left entirely to the schema.

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+resource ('关闭 CDP 会话') and the additional effect of killing the browser process, explicitly tying it to the counterpart launcher 'desktop_browser_launch'. An agent can distinguish this cleanup tool from desktop_cdp_open/desktop_cdp_* siblings and from desktop_browser_launch without opening any schema.

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 explicit when-to-use guidance plus the consequence of skipping it, which is strong for a cleanup tool. It stops short of naming alternatives (e.g. what to do if you want to keep the session alive) or stating any preconditions about which session must be active.

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

desktop_cdp_elementsB

列出当前页面内的控件(CDP 无障碍树)。 返回角色(button/link/textbox/...)、名称、层级深度。中文名称完整保留。 已自动去重:AX 树给一个按钮同时产出 button/StaticText/InlineTextBox,这里只留能操作的那个。

NameRequiredDescriptionDefault
roleNo按角色过滤,如 button / link / textbox
limitNo最多返回多少个,默认 120
sessionNo会话 id,省略则用当前会话

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose real behavior: de-duplication of AX nodes (only the operable button is kept) and full preservation of Chinese names. That is meaningful context beyond the schema. It does not disclose that it is read-only, what connection state it requires, or pagination/truncation behavior when `limit` is hit, leaving notable gaps.

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?

The description is short and front-loaded: the first line states what it does and where, and the dedup note is the most useful extra detail. The Chinese-name preservation remark is marginally useful. Minimal waste overall.

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 does cover the return shape (role, name, depth), which is the main completeness need. But for a tool with no annotations it omits prerequisites (CDP session/attach state) and truncation semantics for `limit`, leaving an agent without enough to call it reliably in edge cases.

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 100% — all three parameters (`role`, `limit`, `session`) carry their own descriptions, so the schema does the heavy lifting. The description adds nothing about parameter behavior (e.g., what role values are valid or how limit truncation surfaces), so the baseline of 3 applies.

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 and resource: enumerate the controls in the current page via the CDP accessibility tree, and it names the fields returned (role/name/depth). The phrase '当前页面' (current page) signals a browser/CDP context. However, it never explicitly contrasts with the sibling desktop_elements, which appears to be the non-CDP equivalent, so an agent must still infer the distinction.

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 CDP context and 'current page' scope, but the description never states when to prefer this over desktop_elements or desktop_perceive, nor does it say any prerequisites (e.g., an attached CDP session). The optional `session` param hints at a session model, but the conditions for choosing this tool are left to inference.

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

desktop_cdp_evalA

在当前页面执行 JavaScript 并返回结果(JSON 化)。 这是 CDP 相对 UIA 的杀手锏:拿不到的信息可以直接问页面要。

NameRequiredDescriptionDefault
sessionNo会话 id,省略则用当前会话
expressionYesJS 表达式或 IIFE,如 document.title
awaitPromiseNo表达式返回 Promise 时是否等待

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden; it states that results are JSON-serialized and that it runs in the current page. It omits that arbitrary JS can mutate the page, how errors/exceptions surface, and whether the expression runs in the page's main world, which are meaningful gaps for an eval tool. What it does disclose about behavior is accurate, so no contradiction arises.

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 lead with the operation and then give a comparative rationale. Nothing is padded, and the second sentence directly supports tool selection.

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 tool with full schema coverage and no output schema, this is nearly complete: the return value (JSON-ified) is described and the scope (current page, or session) is implied. The missing piece is failure behavior when the expression throws or the result is not serializable.

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 100%, with every parameter documented in the schema, including expression and the IIFE hint, so the baseline is 3. The description adds no additional detail about expression syntax, session handling, or when to set awaitPromise.

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: execute JavaScript in the current page and return the result, JSON-serialized. That is clearly distinct from siblings such as desktop_cdp_elements or desktop_cdp_click, but the description never names those alternatives explicitly, so differentiation must be inferred.

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?

"Information you can't get, just ask the page for it" implies a when-to-use condition: fall back here for data that the structured extraction tools miss. It gives no when-not guidance, no warning that this is arbitrary code execution, and never points to desktop_cdp_elements/desktop_elements as the cheaper alternative.

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

desktop_cdp_openA

连上一个浏览器的页面,建立 CDP 会话(后续 cdp_* 工具都作用于它)。 可按 title / url 子串或下标选页面;带 url 时会先导航过去。 这是操作 Chromium 系应用(Chrome / Edge / Electron)的入口 —— UIA 看不见它们的内部,CDP 能。

NameRequiredDescriptionDefault
urlNo按 URL 子串选页面 / 或导航到此 URL
portNo调试端口;省略则自动扫描
indexNo第几个页面,默认 0
titleNo按标题子串选页面
navigateNourl 是否作为导航目标(true)还是筛选条件(false,默认)

TDQS

A3.9/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It usefully discloses the persistent session model and that the port is auto-scanned, but it states '带 url 时会先导航过去' while the schema says url is a filter by default (navigate=false), which is a behavioral conflict an agent could trip over. It also omits whether a browser is launched if none is running and whether only one session may be active.

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?

Four short lines, front-loaded with the core action and session relationship, then selection modes, then the entry-point rationale. Dense and largely waste-free; only the url-navigation sentence works against the tool rather than for it.

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 five-parameter, zero-required, no-output-schema connection tool, the description covers the session model, selection strategies and the Chromium rationale. What's missing is what happens on failure (no debug port found, no target match) and whether the session must be released with desktop_cdp_close.

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 and the schema already explains url, title, index, port and navigate. The description adds the selection modes (title/url substring or index) but muddies the url parameter by implying it always navigates, contradicting the navigate flag's documented default of false.

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 and resource (connect to a browser page, establish a CDP session) and immediately clarifies that all subsequent cdp_* tools operate on that session, which separates it from desktop_cdp_click/type/eval in the sibling list. The added note that this is the entry point for Chromium-family apps (Chrome/Edge/Electron) makes the scope unmistakable.

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 real routing guidance: use this for Chromium apps because UIA can't see inside them, which tells the agent when to prefer CDP over the desktop_perceive/desktop_click family. It does not cover sequencing explicitly (whether desktop_browser_launch is a prerequisite, or that desktop_cdp_close ends the session), so it stops short of full when/when-not guidance.

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

desktop_cdp_screenshotA

截取当前页面(不是整屏)。返回 PNG。 页面级截图比全屏截图更适合判断"浏览器里现在是什么状态"。

NameRequiredDescriptionDefault
sessionNo会话 id,省略则用当前会话

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description does carry the burden of behavioral disclosure. It usefully states that the result is a PNG and that the capture is page-level rather than full-screen, but it does not mention prerequisites such as an open browser/CDP target, read-only/safety behavior, or failure cases.

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?

The description is short, front-loaded, and every sentence adds useful information: scope, return format, and rationale for choosing page-level screenshots.

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 simple one-parameter screenshot tool with no output schema and no annotations, the description covers the key behavioral facts: current page only, PNG output, and when it is more useful than full-screen capture. It could be more complete by noting browser/CDP prerequisites, but the essentials are present.

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 optional session parameter is already documented in the input schema. The description does not add any parameter-level semantics beyond the schema; a baseline 3 is appropriate.

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?

The description states a specific verb and resource: capture the current page, explicitly not the full screen, and returns PNG. It also distinguishes the tool's scope from full-screen screenshots, which is a sibling capability (desktop_screenshot).

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?

It gives clear usage context: use page-level screenshots when the goal is to judge the browser page state, compared with full-screen screenshots. It does not explicitly name the alternative sibling tool or state when not to use this tool, so it stops short of full when/when-not guidance.

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

desktop_cdp_targetsA

只读:扫描本机所有开放的 CDP 调试端点及其页面,不做任何修改。 用来判断"现在能不能连浏览器"。 如果为空,说明没有浏览器开调试端口 —— 用 desktop_browser_launch 启动一个。

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it declares the read-only/no-mutation guarantee and explains the meaning of an empty result. It stops short of describing what a populated result looks like (endpoint addresses, page titles/URLs, fields per target), which matters since no output schema exists.

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 short lines, front-loaded with the safety profile, then the decision it supports, then the fallback action. Every sentence earns its place with no filler.

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-parameter read tool with no output schema, purpose, safety, and the empty-result routing are all covered. The only meaningful omission is the shape of a non-empty result, which the agent must discover by calling it.

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 the baseline is 4; the schema is empty and the description correctly adds no parameter guidance where none is needed.

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 and resource: scans all open CDP debug endpoints on the local machine and their pages, explicitly read-only. This clearly separates it from siblings like desktop_cdp_open, desktop_browser_launch, and desktop_list_windows, which act on windows or connections rather than enumerating endpoints.

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

Usage Guidelines5/5

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

Gives an explicit decision rule: use it to determine whether a browser can be connected to right now, and if the result is empty, use desktop_browser_launch to start one. Both the when-to-use and the fallback path are named, leaving nothing to inference.

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

desktop_cdp_typeB

向页面输入文本。走 CDP 的 Input.insertText, 不经过键盘布局,中文 / emoji 天然无损(比 SendKeys 和剪贴板都干净)。 可用 target 先聚焦到某个输入框。

NameRequiredDescriptionDefault
textYes要输入的文本
clearNo聚焦后是否先清空
targetNo先聚焦到名称含此文本的控件,如 "请输入"
sessionNo会话 id,省略则用当前会话

TDQS

B3.4/5.0
Behavior3/5

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

No annotations, so the description carries the full burden. It does disclose the underlying mechanism and one useful behavioral trait (bypasses keyboard layout, so IME/emoji safe), but omits meaningful traits such as the need for an attached CDP session (cf. desktop_cdp_open/desktop_cdp_targets), whether key events fire, and what happens when target matches nothing.

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 sentences, front-loaded with the action and then the mechanism rationale. Little waste, though the parenthetical comparison to SendKeys/clipboard is more justification than invocation guidance.

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?

Four parameters with complete schema documentation and no output schema, so the description need not explain returns. However, for a UI-mutating tool with zero annotations it should state prerequisites (attached CDP page) and failure behavior for target mismatch, which it does not.

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 all four parameters are already documented. The description repeats the target-focus behavior ('可用 target 先聚焦') without adding format or edge-case detail beyond the schema, so the baseline of 3 applies.

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 ('向页面输入文本') and immediately names the mechanism (CDP Input.insertText), which distinguishes it from the OS-level desktop_type/desktop_key siblings. It never names desktop_type explicitly, so an agent must infer the routing from the mechanism comparison.

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?

Implies the right context ('中文 / emoji 天然无损', '比 SendKeys 和剪贴板都干净'), which suggests when to prefer it, and mentions using target to focus first. But there is no explicit 'use this instead of desktop_type when X' statement or any exclusion, leaving the choice between the two typing tools to inference.

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

desktop_clickA

在指定坐标点击鼠标。会真实操作你的桌面 —— 调用前请确认目标位置。 坐标可从 desktop_perceive 得到的窗口矩形推算(例如取其中心)。

NameRequiredDescriptionDefault
xYes
yYes
countNo点击次数,2 为双击,默认 1
buttonNoleft / right / middle,默认 left
verifyNo截图比对前后变化,判断是否点出了反应
verifyRegionNo只比对这块矩形(传目标窗口的 rect)。不传则比对全屏 —— 全屏会把时钟、光标闪烁等无关变化也算进来

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden, and it does flag the key trait: this performs a real OS-level click with real side effects, so the agent should verify the target first. It omits other behavior an agent needs: whether the target window must be focused first, whether the call blocks, what failure looks like, and what the verify flag actually returns.

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 short clauses, all load-bearing: what it does, the risk warning, and the coordinate-sourcing tip. The most important information (real desktop operation) is front-loaded rather than buried.

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 6-parameter, nested-object, no-annotation, no-output-schema mutation tool, the description covers purpose, risk, and coordinate derivation but says nothing about the verify/verifyRegion feedback loop — the very mechanism an agent must understand to know whether the click landed. Adequate but with a clear gap for a side-effecting desktop tool.

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?

Schema coverage is 67%, and the two undocumented parameters are exactly the required ones (x, y). The description compensates by explaining what those coordinates refer to and how to obtain them from desktop_perceive's window rect rather than guessing, which is genuine added meaning over the bare 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 specific verb and resource (click the mouse at given coordinates) plus the concrete constraint that it really manipulates the desktop. It distinguishes itself from the pure-read siblings by pointing at desktop_perceive as the coordinate source, though it never explicitly contrasts with desktop_click_element, the element-based alternative.

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 precondition ("confirm the target position before calling") and an actionable how-to for building the arguments (derive coordinates from the window rect returned by desktop_perceive, e.g. its center). It stops short of saying when NOT to use it, e.g. preferring desktop_click_element when an element handle is available, so routing between the two click tools is left to inference.

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

desktop_click_elementB

元素级执行:按可见文本定位控件并触发它。 优先用 UI Automation 的 InvokePattern(对按钮最可靠),不支持时退回点击其中心。 会真实操作界面,调用前请确认控件名称。

NameRequiredDescriptionDefault
nameYes控件文本,支持模糊匹配,如 "确定"
handleYes窗口句柄
verifyNo截图比对前后变化
verifyRegionNo只比对这块矩形(一般传该窗口的 rect),不传则全屏

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the crucial trait that this "会真实操作界面" (really manipulates the live UI) plus the fallback to clicking the element's center, which implies positional mis-click risk. It leaves open what happens on fuzzy multi-match or no-match, and says nothing about the effects of verify/verifyRegion.

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 compact lines: the action, the dispatch strategy, then the safety caution. Front-loaded and free of filler, though the middle line leans toward implementation detail an agent cannot act on.

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 live-UI mutation tool with no annotations and no output schema, the description covers the safety warning and matching strategy but omits the result contract (what is returned on success/failure) and multi-match ambiguity handling with fuzzy text. 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 100%, so name, handle, verify and verifyRegion are already documented in the schema; that sets the baseline at 3. The description reinforces the text-matching intent of `name` but adds no meaning beyond the schema for handle or the screenshot-comparison parameters.

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?

"元素级执行:按可见文本定位控件并触发它" gives a specific verb (trigger) plus a specific locating strategy (visible text), which distinguishes it from the coordinate-based sibling desktop_click. It stops short of naming desktop_click/desktop_elements explicitly as the alternative, so the 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?

The "prefer InvokePattern, fall back to center click" sentence describes internal dispatch, not when an agent should choose this tool over desktop_click or desktop_elements. The only actionable directive is the caution to confirm the control name first; there is no explicit when-not condition or named alternative.

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

desktop_cursorA

读取当前鼠标光标坐标(只读,安全)。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose the key behavioral trait: read-only, no side effects. However it says nothing about return format, coordinate space (screen vs window, multi-monitor origin, DPI scaling), which is the main behavioral risk for a coordinate-reading tool.

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 short clause with the operation and its safety property front-loaded; every word earns its place and nothing is 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 zero-parameter, no-output-schema tool, the description conveys what is returned (cursor coordinates) and that it is safe. A note on coordinate reference frame would make it fully complete for multi-monitor or scaled-display setups.

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 the baseline is 4; there is nothing parameter-related the description needed to explain and none is missing.

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: reads the current mouse cursor coordinates, which is clearly distinct from siblings like desktop_move, desktop_click, or desktop_perceive. It doesn't explicitly name what it is not, so it stops short of 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 Guidelines3/5

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

Usage is only implied — an agent can infer this is the tool to call when it needs the cursor position (e.g. before a relative desktop_move). No explicit when-to-use context, prerequisites, or alternatives are given.

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

desktop_diagnoseA

把一条报错文本翻译成"为什么 + 怎么办"。 任何工具返回错误时都会自动附带诊断;这个工具用于手动诊断任意一段报错。 规则匹配、毫秒级返回,不调 LLM。

NameRequiredDescriptionDefault
errorYes报错原文
outputNo命令输出(可选)
commandNo导致它的命令(可选,用于判断能否自动修补)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose key traits: rule-based matching, millisecond latency, and no LLM invocation — so the agent knows it is cheap, deterministic, and safe to call freely. What is missing is any hint of the response shape or whether a low-confidence/unmatched input returns nothing useful.

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 short sentences, front-loaded with the value proposition, then the relation to automatic diagnostics, then the cost profile. No filler or repetition of the tool name.

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 low-risk, three-parameter analysis tool with no output schema, the description covers purpose, cost, and invocation context adequately. It could say more about what the 'why + what to do' payload looks like or when a match fails, but nothing essential is missing to call it correctly.

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 100%, so all three parameters are already documented in the schema. The description only refers generically to 'an arbitrary error text' and adds nothing about how `output` or `command` change the diagnostic (the schema's note about auto-patching is the only guidance). Baseline 3 is appropriate.

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 concrete transformation: turn an error string into 'why + what to do'. It also positions the tool against the built-in automatic diagnosis that accompanies tool errors, so an agent can tell what this adds. The verb and resource are both specific, not a restatement of the name.

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?

Explicitly says the tool is for manually diagnosing an arbitrary error text, and notes that errors from any tool already carry a diagnosis — a strong implicit 'when you don't need this'. It stops short of an explicit exclusion statement (e.g., 'do not call this on an already-diagnosed tool error').

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

desktop_elementsA

元素级结构通道:枚举一个窗口内的 UI 控件(UI Automation)。 返回控件名称、类型(Button/Edit/...)、AutomationId、坐标矩形、是否可 Invoke。 适合定位"确定按钮"这类具体控件,比只按坐标猜可靠得多。 注意:Electron / Chromium 类应用默认不暴露控件树,会返回很少或 0 个 (这类需要用 CDP,即路线图 Week 5-6)。原生 Windows 应用正常。

NameRequiredDescriptionDefault
handleYes窗口句柄,来自 desktop_list_windows / desktop_perceive
maxElementsNo最多返回多少个,默认 300

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden and mostly does: it discloses the return shape, the handle dependency on desktop_list_windows/desktop_perceive, and the important behavioral caveat that Electron/Chromium apps return few or zero elements. It does not mention cost, latency, or that UI Automation queries can hang on unresponsive windows — minor omissions for an unannotated read 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?

Front-loaded with the operation, then return fields, then intended use, then the caveat — a clean progression with no filler. The persuasive line about being more reliable than coordinate guessing is slightly redundant with the usage sentence, keeping it just under perfect.

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 two-parameter tool with no annotations and no output schema, the description compensates by enumerating the return fields and flagging the main failure mode. It lacks only robustness details (empty-result handling, latency on hung windows) that an agent would want before calling it blind.

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 both parameters (handle and maxElements with default 300) are already documented in the schema. The description only implies that a window scope is required ("a window") and adds no format or default detail beyond the schema, so baseline 3 applies.

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 and resource (enumerate UI controls in a window via UI Automation) and immediately names the sibling it must not be confused with (CDP-based element access for Electron/Chromium). The listed return fields (name, type, AutomationId, rect, Invoke-ability) pin down what kind of data comes back, letting an agent distinguish it from desktop_perceive / desktop_screenshot without opening schemas.

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

Usage Guidelines5/5

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

Explicitly says when to use it (locating a concrete control like an "OK button" rather than guessing coordinates) and when not to (Electron/Chromium apps that expose no control tree — use CDP instead). The alternative route is named and the failure condition is quantified ("very few or 0 elements").

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

desktop_focus_windowA

把指定句柄的窗口切到前台(最小化时会先还原)。句柄来自 desktop_list_windows / desktop_perceive。

NameRequiredDescriptionDefault
handleYes窗口句柄
verifyNo

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the non-obvious trait that a minimized window is restored before focusing, but says nothing about what happens with a stale/invalid handle, whether the call can block, or what is returned on success/failure.

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, zero filler, with the core action front-loaded and the handle provenance trailing as supporting detail. Every clause 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?

For a two-parameter mutation-style GUI action with no annotations and no output schema, the description covers the main behavior and input source but leaves the 'verify' parameter and the return/failure semantics entirely unexplained.

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 only 50%: 'handle' is minimally described in-schema (the description adds the useful detail of which tools produce it), but the optional 'verify' parameter is never mentioned anywhere. With half the parameters undocumented, the description does not 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?

A specific verb+resource pair ('bring the window with the given handle to the foreground') that an agent can distinguish from siblings like desktop_screenshot or desktop_click. It does not differentiate itself from other activation-adjacent tools (there are none obvious), but the 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 Guidelines4/5

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

The second sentence tells the agent exactly where the handle must come from (desktop_list_windows / desktop_perceive), which is a concrete prerequisite and effectively routes the agent to call discovery first. No explicit exclusions or failure conditions are stated.

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

desktop_keyB

发送组合键,如 ctrl+c / ctrl+v / alt+tab / enter / tab / f5。会作用于当前焦点窗口。

NameRequiredDescriptionDefault
comboYes例:ctrl+c、alt+tab、enter
verifyNo
verifyRegionNo只比对这块矩形(传目标窗口的 rect),不传则全屏

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the full burden, and it does disclose the key behavioral trait: input goes to whatever window currently has focus, so results depend on desktop state. It says nothing about side effects (keystrokes go to a live desktop), failure modes (no focused window), or what `verify`/`verifyRegion` do.

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, front-loaded with the action and examples, then the targeting constraint. Every sentence carries information; no padding.

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 three-parameter input tool with no annotations and no output schema, the description covers what it does and where input lands, which is the minimum an agent needs. It leaves the verification parameters and return/error semantics unexplained, which is a real gap given `verify` is entirely undocumented.

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 67%, and the description merely repeats the combo examples already present in the schema's `combo` description. The `verify` boolean has no description anywhere, and the description does not compensate for that undocumented parameter or explain what verifyRegion comparison returns.

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 action (send a key combo) with concrete examples (ctrl+c, alt+tab, f5) and the target scope (current focused window). This separates it in practice from desktop_type, though the sibling is never named, so differentiation is inferred rather than explicit.

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 note that it acts on the currently focused window implicitly tells the agent it must focus a target window first (e.g. via desktop_focus_window), which is useful implied guidance. There is no explicit when-to-use vs desktop_type or desktop_click_element, and no when-not-to-use.

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

desktop_list_windowsA

结构通道:枚举当前所有可见窗口。 返回句柄、标题、进程名、PID、屏幕矩形、是否聚焦、是否最小化。 用它可以知道"屏幕上有什么",以及目标窗口的位置。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose the returned field set, which is genuinely useful behavioral context, and 'enumerate' implies a read-only operation. But it never explicitly confirms it is side-effect free, says nothing about cost/latency of enumerating all windows, and doesn't note whether hidden or off-screen windows are excluded from '可见'.

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 lines: purpose, return payload, then use case. No filler. The opening '结构通道:' is mild jargon that costs a few tokens without adding much, keeping it just shy of a 5.

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 output schema, the description usefully enumerates the return fields, which is exactly the gap it needs to fill for a zero-parameter listing tool. What remains missing is the relationship to the other desktop discovery tools, but the core call information is complete.

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; baseline 4 applies. The description correctly implies no filtering arguments are needed.

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 ('枚举当前所有可见窗口') and immediately lists what it returns (handle, title, process name, PID, rect, focus/minimize state). The '结构通道' framing implicitly contrasts it with the pixel-based siblings (desktop_screenshot / desktop_perceive), though it never names them, so the differentiation is inferential rather than explicit.

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?

Offers an implied use case: learn 'what's on screen' and locate a target window's position, which naturally precedes desktop_focus_window / desktop_click. However, it never states when to prefer this over desktop_perceive, desktop_elements, or desktop_cdp_targets, nor any exclusions or prerequisites.

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

desktop_moveA

移动鼠标到指定坐标(不点击)。副作用小,可用于定位或配合 verify 观察界面反应。

NameRequiredDescriptionDefault
xYes
yYes
verifyNo是否截图比对前后变化

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully discloses that the tool does not click and has low side effects, and that verify can screenshot-compare UI changes, but it omits coordinate system, permissions, return behavior, and 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?

The description is a single compact sentence with the action front-loaded and no wasted text. The parenthetical '不点击' is high-value clarification.

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 simple mouse-move tool with no output schema and no annotations, the description covers the basic action and verify option. However, it leaves important gaps around coordinate semantics and what verify returns or does, so it is only minimally complete.

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 only 33%, and the x/y parameters have no schema descriptions. The description says only '指定坐标' without explaining origin, units, or screen/window coordinates. The verify parameter is already described in the schema, and the description adds usage context rather than deeper semantics.

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?

The description uses a specific verb and resource: '移动鼠标到指定坐标' and explicitly clarifies '不点击'. This distinguishes it clearly from sibling tools like desktop_click, so an agent can immediately tell what the tool does.

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?

The description gives concrete usage contexts: '可用于定位或配合 verify 观察界面反应'. It does not explicitly name alternatives or state when not to use it, but the intended use is clear enough.

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

desktop_perceiveA

双通道感知 + 交叉验证(核心能力)。 结构通道枚举窗口,视觉通道对每个窗口区域采样,判断它是否真的可见、真的有内容。 返回每个窗口的一致性结论,并列出不一致原因(minimized / offscreen / blank)。 结果会自动写入记忆层,之后可用 memory_recall 按指代定位。

NameRequiredDescriptionDefault
formatNopng 或 jpeg,默认 png。jpeg 体积小一个数量级
maxWidthNo图片最大宽度(像素)。不传则按原分辨率,2560 宽约 2.6MB base64
includePngNo是否附带缩略图数据,默认 false

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses the two-channel process, the per-window consistency verdict, the enumerated failure reasons (minimized / offscreen / blank), and a non-obvious side effect — results are auto-written into the memory layer. It does not mention cost/latency of per-window visual sampling or that image data is returned, which is why it is not a 5.

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?

Four short lines, front-loaded with the core capability and followed by mechanism, output and follow-up. No filler, though the parenthetical '(核心能力)' is a self-assessment that adds little for an agent.

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?

There is no output schema, and the description compensates by stating what is returned (per-window consistency verdict plus inconsistency reasons). It leaves a gap about the image payload implied by format/maxWidth/includePng, but for a zero-required-parameter perception tool the essentials are covered.

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 format, maxWidth and includePng are already fully documented in the schema. The description adds no parameter-level meaning beyond the visual-sampling concept, so the baseline 3 applies.

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 mechanism (dual-channel: structural window enumeration + visual region sampling with cross-validation) and the resource it operates on (each desktop window). This is clearly distinct from a plain capture tool like desktop_screenshot or desktop_list_windows, though it never names those siblings explicitly to make the contrast airtight.

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 establishes the follow-up flow ('结果会自动写入记忆层,之后可用 memory_recall 按指代定位'), which is useful routing guidance. But it never says when to prefer this over desktop_screenshot or desktop_list_windows, nor any precondition or exclusion — the when-to-use is only inferable from '核心能力'.

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

desktop_screenshotA

视觉通道:截取主屏幕。返回 PNG/JPEG(base64)与尺寸。 用于看布局、颜色、图标等结构通道拿不到的信息。 需要控制消息体积时传 maxWidth(如 1280)+ format:"jpeg"。

NameRequiredDescriptionDefault
formatNopng 或 jpeg,默认 png
maxWidthNo图片最大宽度(像素)
includePngNo是否返回图片数据,默认 true;只想拿尺寸可设 false

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does solid work: it discloses the return format and that dimensions are included, plus a practical cost/payload tradeoff. It does not state capture scope (full virtual desktop vs. primary monitor) or whether other windows occlude the result, which matters for a screenshot tool.

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 short lines, each doing distinct work: what it captures and returns, why it is different from the structural channel, and how to control size. Front-loaded and zero filler.

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?

No output schema exists, but the description still states the return shape (encoded image + dimensions), so an agent knows what to expect. Residual gap is operational context — multi-monitor/DPI behavior and capture scope — which is not covered anywhere else.

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?

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: it explains the joint use of maxWidth and format as a payload-size lever, with a concrete example value. That is behavioral guidance the schema's terse per-field descriptions do not convey.

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?

Opening line states a specific verb and resource: 截取主屏幕 (capture the main screen), and immediately names the return payload (PNG/JPEG base64 + dimensions). The second line differentiates it from the structural/accessibility channel (desktop_elements, desktop_perceive), which is the key sibling distinction an agent needs.

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?

Explicitly says when to reach for this tool: to see layout, colors, and icons that the structural channel cannot provide. It also gives a concrete usage recipe (pass maxWidth ~1280 + format:"jpeg" when message size matters). It does not mention the browser-specific alternative desktop_cdp_screenshot, so it falls short of a full when/when-not map.

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

desktop_scrollC

在指定坐标滚动滚轮。delta 为负向下、正向上,通常 120 为一格。

NameRequiredDescriptionDefault
xYes
yYes
deltaNo默认 -120(向下一格)
verifyNo
verifyRegionNo只比对这块矩形(传目标窗口的 rect),不传则全屏

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses delta sign/direction, but says nothing about the verify/verifyRegion verification flow, what happens after scroll, what is returned, or whether the operation is synchronous — a major gap for a tool with a built-in verification mechanism.

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 short sentences with the core action and the most important parameter detail front-loaded. No wasted text, though it is quite terse given the tool's complexity.

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 5-parameter tool featuring a nested verifyRegion object and a verify flag (a verification feature), the description omits any explanation of that mechanism, which is a substantial omission given no annotations and no output schema offsetting it.

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 only 40%. The description usefully expands delta (positive = up, 120 per notch) beyond the schema's default note, but leaves verify and verifyRegion unexplained, and verify has no schema description at all. Partial compensation 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 and resource: scrolling the wheel at a given coordinate, which is distinct from siblings like desktop_click or desktop_move. It does not explicitly contrast with those siblings, but the action itself 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 Guidelines2/5

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

The description explains delta semantics but gives no guidance on when to use this tool versus alternatives (e.g., desktop_perceive, desktop_click) or any prerequisites/conditions. An agent must infer the usage context entirely.

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

desktop_typeA

在当前焦点处输入文本,支持中文。 实现走剪贴板 + Ctrl+V(SendKeys 不支持 Unicode,会把中文打成乱码)。 注意:会改动你的剪贴板内容,并输入到当前焦点窗口。

NameRequiredDescriptionDefault
textYes要输入的文本(可为中文)
verifyNo
verifyRegionNo只比对这块矩形(传目标窗口的 rect),不传则全屏

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses that the clipboard is overwritten, that input goes to whatever window currently has focus (a real risk of misdirected input), and why the clipboard hack exists (SendKeys mangles Unicode). It does not say whether the prior clipboard is restored, nor anything about timing or what is returned.

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 compact lines, front-loaded with what it does and supports, then the mechanism rationale, then the side-effect warning. Every sentence earns its place and the most important caveat is last but still prominent.

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?

A mutation tool with no annotations and no output schema needs its description to carry safety and result semantics. The clipboard/focus side effects are covered, but the verify/verifyRegion behavior, whether focus must be set beforehand, and what the call returns (success text? verification result?) remain unaddressed.

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?

Coverage is 67%: only 'text' is documented in the schema, while 'verify' has no description anywhere and 'verifyRegion' is explained only in the schema. The description adds no parameter meaning at all — notably it never mentions that verification (likely a screenshot comparison) can be requested, which is a meaningful behavioral toggle for the caller.

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 (type text) and target (current focus), plus a notable capability constraint (Chinese/Unicode supported). It implicitly separates itself from key-press typing via the Ctrl+V mechanism, but never names desktop_key or desktop_cdp_type, so an agent must still infer the boundary with the browser typing 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?

Usage is only implied: 'types into the currently focused window' suggests the agent should focus a window first (desktop_focus_window) but doesn't say so, and there is no guidance on when to prefer desktop_key for shortcuts or desktop_cdp_type for browser fields. No explicit exclusions or alternatives are given.

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

memory_clearB

记忆层:清空时间线与窗口索引。

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the operation clears the timeline and window index, which identifies the destructive scope. However, it does not state whether the clearing is irreversible, what permissions are required, or how it affects related memory tools.

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?

The description is a single front-loaded sentence with no filler. It is efficient, though extremely terse for a destructive operation.

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 description identifies the memory layer and the two targets being cleared, which is the minimum needed to understand the operation. Because there are no annotations and no output schema, it should do more to warn about irreversibility, impact on related memory data, or preconditions.

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 are no parameter semantics to document in the description. The empty schema is consistent with the description, and no additional parameter explanation is needed.

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 ('时间线与窗口索引') within the memory layer, so the tool's action is clear. It does not explicitly name or contrast with sibling tools such as memory_timeline or memory_stats, but the destructive clear action is distinguishable.

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 guidance on when to use this tool versus alternatives like memory_recall, memory_timeline, or memory_stats. It also does not state prerequisites, warnings, or conditions under which clearing should be avoided.

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

memory_recallB

记忆层:把一句指代解析成可点击的坐标。 支持 "刚才那个窗口"、"钉钉"、"WorkBuddy" 这类说法,返回窗口中心坐标, 可直接拿去 desktop_click。 支持窗口级与元素级两种命中("刚才那个按钮" 会定位到控件)。

NameRequiredDescriptionDefault
queryYes例如:刚才那个窗口 / 钉钉 / WorkBuddy

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations the description carries the full burden. It adds real behavioral context — returns window-center coordinates usable directly by desktop_click, and will resolve down to individual controls for element references. It does not disclose what happens on a miss, how ambiguity is resolved, or whether the memory persists across sessions.

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?

Front-loaded with the purpose, then supported by concrete examples and the downstream consumer (desktop_click). Every line carries information; no filler.

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 the description should fully pin down the return shape. It says 'window center coordinates' but is ambiguous about what element-level hits return (element coordinates? a handle?) and gives no failure-mode behavior, leaving a gap for a tool whose whole job is producing a value the agent then feeds to desktop_click.

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?

Only one parameter with 100% schema description coverage, so the schema already documents 'query'. The description's examples largely duplicate the schema's example string, adding only the element-level variant ('that button just now'). Baseline 3 is correct.

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: resolve a natural-language reference phrase into clickable window/element coordinates, with two named resolution modes (window-level and element-level). This is enough to separate it from memory_clear/memory_timeline/memory_stats, though it never names those siblings 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?

The examples ('just now that window', 'that button just now') imply the usage context: when the agent has a vague pronoun-style reference rather than a precise handle. However, there is no explicit guidance on when to prefer desktop_list_windows, desktop_elements, or desktop_focus_window instead, and no stated preconditions.

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

memory_statsA

记忆层:查看索引规模与最后更新时间。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. '查看' implies a non-mutating read and the sentence does disclose what information comes back, but it says nothing about cost, whether the index can be empty, or how the numbers should be interpreted.

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 short sentence with the resource ('记忆层') front-loaded and the returned values listed immediately after. Nothing is padded or repeated from the schema.

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 output schema, the description must say what comes back, and it does (index size, last update time). Given a zero-param, low-complexity tool this is close to sufficient; only the meaning of 'index' and its relation to memory_recall/memory_timeline is left implicit.

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 no-param tool applies.

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 ('查看' / inspect) plus the exact data returned: index size and last-updated time. This makes it clearly a stats/inspection tool, distinguishable in spirit from memory_recall and memory_timeline, though no sibling is named 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: an agent can infer this is the 'check memory health/scale' call before or after memory_recall/memory_timeline, but the description never states when to prefer it or what it does not cover. No exclusions or alternatives are given.

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

memory_timelineB

记忆层:查看最近的操作时间线(感知/点击/输入/命令)。

NameRequiredDescriptionDefault
limitNo返回条数,默认 20

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the content categories of the timeline, which is genuinely useful, and '查看' implies a read-only operation, but it never states ordering, retention window, or whether results are newest-first — traits an agent needs to interpret the output.

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 short sentence with the resource front-loaded and the category list parenthetical and compact. No waste, though the brevity leaves the gaps noted elsewhere.

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 one-optional-parameter read tool this is nearly adequate, but with no output schema and no annotations the description should say something about the shape of a timeline entry (timestamp? ordering?) — it only names the event categories, leaving the return format to inference.

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% ('返回条数,默认 20'), so the single optional parameter is fully documented in structured data. The description adds no additional meaning about how limit interacts with the timeline, so the baseline of 3 applies.

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 ('查看' / view) and resource ('最近的操作时间线' / recent operation timeline), and enumerates the event categories it contains (perceive/click/type/command). This distinguishes it reasonably well from memory_stats and memory_clear, though it never explicitly contrasts with memory_recall.

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 by '最近' (recent) and the event-type list; there is no explicit statement of when to reach for this over memory_recall or memory_stats, nor any exclusion. An agent can infer it is the chronological-view option, but must guess.

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

shell_cdA

修改持久化会话的工作目录(cd),后续 shell_exec 都在新目录执行。

NameRequiredDescriptionDefault
pathYes目标目录路径

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. It does disclose the key non-obvious behavior—the change is persistent and affects later shell_exec calls in the session—but says nothing about failure behavior for a nonexistent path, sandbox/permission restrictions, or whether running commands are affected.

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 short sentence that front-loads the action and appends only the consequence that matters, with zero redundant text.

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 one-parameter, no-output tool with full schema coverage, the description plus schema is nearly sufficient: the agent knows what is mutated and the scope of the effect. Missing only error/prerequisite behavior for an invalid path.

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% and the single path parameter is documented as 目标目录路径, so the schema already carries parameter meaning. The description adds no format details (absolute vs relative, home expansion) beyond the schema, so the baseline of 3 applies.

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 uses a specific verb (修改/cd) and resource (持久化会话的工作目录) and states the downstream effect on shell_exec, which distinguishes it from the read-only sibling shell_cwd. It does not name the sibling explicitly, so differentiation requires the agent to infer it from the read/write contrast.

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?

It gives clear usage context: call this before running commands so that subsequent shell_exec invocations land in the new directory. There are no exclusions or explicit alternatives, for example pointing to shell_cwd for reading the current path instead of mutating it.

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

shell_cwdB

获取持久化会话的当前工作目录。

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It implies a harmless read via '获取' and clarifies that the directory belongs to the persistent session rather than a transient one, but it says nothing about what happens if no session exists yet, whether a session is implicitly created, or the return form.

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 sentence with no filler and the key scope qualifier ('persistent session') placed before the noun it modifies. Appropriately sized for a trivial getter, though it is arguably too terse to carry the missing behavioral detail.

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 zero-parameter getter with no output schema, the description covers the essential. It does not say what is returned (a path string?) or whether the call fails when no persistent session has been established, which an agent needs to know before relying on it.

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 the schema is trivially complete and there is nothing for the description to disambiguate. Baseline of 4 applies.

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: retrieves the current working directory, scoped to the persistent session. That scope wording implicitly separates it from shell_cd and shell_exec, though it never names them 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?

No guidance on when to call this versus shell_cd or shell_exec — e.g. checking the cwd before issuing relative-path commands, or verifying the effect of a shell_cd. The use case is only inferable from the name and the word 'persistent session'.

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

shell_env_getB

获取持久化会话中的环境变量值。

NameRequiredDescriptionDefault
nameYes环境变量名

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden, and it contributes only the persistence scope. It says nothing about behavior for a missing variable (error vs empty/null), whether values are inherited from the OS environment, or whether the value is evaluated/expanded.

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 short sentence with the resource and the scoping qualifier front-loaded; nothing redundant or padded.

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 one-parameter getter with full schema coverage and no output schema, the definition covers what is needed to invoke it correctly. The main omission is missing-variable behavior, which keeps it short of 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 100% — the single 'name' parameter is already documented as '环境变量名' — so the baseline of 3 applies. The description adds only the notion of a persistent session, not format, case sensitivity, or lookup rules for the 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 ('获取...环境变量值') plus the scope ('持久化会话中'), so the agent knows this reads a stored variable rather than executing a command. It does not name the complementary sibling shell_env_set, but the read/write split is inferable from the names.

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 phrase '持久化会话中' hints that this retrieves variables previously persisted (e.g. via shell_env_set) rather than live shell state. There is no explicit when-to-use or when-to-prefer-shell_exec guidance and no note about what happens if the variable is unset.

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

shell_env_setA

在持久化会话中设置环境变量。后续所有 shell_exec 都能读到。

NameRequiredDescriptionDefault
nameYes环境变量名
valueYes变量值

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that the variable persists and is visible to later shell_exec calls, but it omits whether existing variables are overwritten, how long persistence lasts, and what the call returns.

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 are tightly front-loaded: first the action and context, then the observable effect. There is no filler.

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 simple two-parameter mutation tool with full schema coverage and no output schema, the description is nearly complete. It could be improved by mentioning overwrite behavior or return value, but the core behavior is clear.

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 both parameters are already documented as the environment variable name and value. The description adds no additional parameter-level semantics beyond the schema baseline.

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: setting an environment variable in a persistent session. It also clarifies the effect that later shell_exec calls can read it, though it does not explicitly distinguish this from shell_env_get or shell_reset.

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 statement that subsequent shell_exec calls will see the variable, but the description does not explicitly say when to use this instead of alternatives such as shell_env_get or shell_reset.

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

shell_execA

在持久化 PowerShell 会话中执行命令。 核心创新:这是一个长期存活的 Shell 进程,不是每次开新进程。 效果:cd 之后目录保持、set 的环境变量保持、Python venv / node -e 等状态保持。 适用于:需要连续操作的场景(先 cd 再 git status、先激活 venv 再 pip install)。

NameRequiredDescriptionDefault
commandYes要执行的 PowerShell 命令
timeoutNo超时毫秒,默认 30000

TDQS

A4.6/5.0
Behavior5/5

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

Since no annotations were provided, the description must carry the full burden of behavioral disclosure. It highlights the 'core innovation'—that the Shell process is long-lived and maintains state (directory location, environment variables, and virtual environment status), which is the most critical behavior to understand for this 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?

The description is slightly longer than necessary but uses excellent structure. It follows a logical flow: general definition -> core benefit -> concrete effects -> application scenarios, ensuring all necessary value is front-loaded.

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 long-lived shell process, the description is maximally complete. It clearly states that state is retained after execution, which is the primary operational characteristic an AI agent needs to select this tool over a standard executor.

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?

Given that schema description coverage is 100%, the description adds functional meaning without needing to define the parameters. It does not elaborate on the syntax or complex constraints of 'command' or 'timeout' beyond what the schema implies.

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?

The purpose is highly specific: executing commands within a *persistent* PowerShell session. It clearly defines the resource (PowerShell session) and the action (executing commands), effectively distinguishing it from non-persistent execution tools.

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

Usage Guidelines5/5

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

The tool explicitly outlines the ideal use cases: scenarios requiring continuous interaction, such as navigating directories and then listing contents ('cd' followed by 'git status'). This prevents misuse in one-off command contexts.

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

shell_exec_verifiedA

执行命令,并用文件系统 API 独立验证结果;验证不过自动带指数退避重试(自愈雏形)。 不轻信命令自身的返回值:例如 mkdir 之后,真的去确认目录存在。 expect 支持:pathExists / pathNotExists / isDir / isFile / fileContains:[路径,内容] / cwd

NameRequiredDescriptionDefault
expectYes验证断言,如 {"isDir":"D:\\tmp\\x"} 或 {"fileContains":["D:\\a.txt","hello"]}
commandYes要执行的 PowerShell 命令
retriesNo失败重试次数,默认 2
timeoutNo单次超时毫秒,默认 30000

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations present the description carries the full load, and it delivers the key traits: this is a mutating executor that re-checks state via a separate filesystem API, retries failures with exponential backoff (default count in schema), and honors a per-command timeout. What it omits is the terminal-failure path — what the agent gets back if all retries exhaust — and any permission/safety framing.

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 tight sentences: the core mechanism comes first, then the rationale, then the assertion vocabulary. The trailing key list is dense but functional. Little wasted text, though the expect enumeration reads as a raw spec dump rather than prose.

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 4-parameter tool with a nested `expect` object and no output schema, the description covers the input and retry semantics adequately but says nothing about the returned result — whether the agent gets a pass/fail verdict, which assertion failed, or the command's stdout. That is a meaningful omission when there is no output schema to fall back on.

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?

Schema coverage is already 100%, so 3 is the floor; the description earns above that by enumerating the valid `expect` keys (pathExists, pathNotExists, isDir, isFile, fileContains:[path,content], cwd) and the shape of fileContains, which the schema only hints at with one example. It doesn't explain the retry semantics of `retries` or the timeout unit context beyond what the schema states.

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 mechanism: run a command, then independently verify the outcome through the filesystem API, with retries on verification failure. The 'mkdir → confirm the directory exists' example makes the intent concrete. It does not explicitly contrast itself with the sibling shell_exec, which keeps it short of 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 Guidelines3/5

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

'Don't trust the command's own return value' implies when to reach for this over a plain executor, and the expect-key list defines the required usage precondition. However, it never names shell_exec as the lightweight alternative or says when verification is unnecessary, so routing is inferred rather than stated.

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

shell_resetA

重置持久化会话(重新启动 PowerShell)。用于会话状态异常时恢复。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations exist, so the description carries the full disclosure burden. '重置持久化会话(重新启动 PowerShell)' does convey that a restart occurs, letting an agent infer that in-session state (cwd, env vars) is lost, but it never states this side effect explicitly or confirms what remains after reset.

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 action first, then the recovery condition. Nothing to trim.

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, no-output-schema utility, the description covers what it does and when to reach for it. The only gap is the unspecified collateral effect on cwd/env state, which matters given the shell_* sibling set.

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 and the schema is an empty object, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.

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?

Names a specific verb+resource ('重置持久化会话') and clarifies the concrete mechanism (restarting PowerShell), so an agent knows this tears down and restarts the shell session. It is distinguishable from siblings like shell_exec/shell_cwd, though it doesn't explicitly contrast with them.

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 clear trigger condition (abnormal session state), which is reasonable guidance. However, it names no alternative or exclusion — e.g., whether to prefer shell_cd/shell_env_set for smaller fixes before a full reset.

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. 33 tool updatesv0.2.2
    • First observeddesktop_browser_launch
    • First observeddesktop_cdp_click
    • First observeddesktop_cdp_close
    • First observeddesktop_cdp_elements
    • First observeddesktop_cdp_eval
    • First observeddesktop_cdp_open
    • First observeddesktop_cdp_screenshot
    • First observeddesktop_cdp_targets
    • First observeddesktop_cdp_type
    • First observeddesktop_click
    • First observeddesktop_click_element
    • First observeddesktop_cursor
    • First observeddesktop_diagnose
    • First observeddesktop_elements
    • First observeddesktop_focus_window
    • First observeddesktop_key
    • First observeddesktop_list_windows
    • First observeddesktop_move
    • First observeddesktop_perceive
    • First observeddesktop_screenshot
    • First observeddesktop_scroll
    • First observeddesktop_type
    • First observedmemory_clear
    • First observedmemory_recall
    • First observedmemory_stats
    • First observedmemory_timeline
    • First observedshell_cd
    • First observedshell_cwd
    • First observedshell_env_get
    • First observedshell_env_set
    • First observedshell_exec
    • First observedshell_exec_verified
    • First observedshell_reset

TDQS

A3.5/5.0

Scored across 33 tools

Disambiguation4/5

The tool set is large but mostly split into clearly explained channels: persistent shell, window/UIA perception, CDP browser control, and memory. There is still meaningful overlap between shell_exec/shell_exec_verified/shell_cd, desktop_elements/desktop_cdp_elements, and desktop_click/desktop_click_element/desktop_cdp_click, though descriptions give guidance on when to use each.

Naming Consistency4/5

Almost all tools use snake_case with subsystem prefixes (shell_, desktop_, memory_), which makes grouping predictable. Minor deviations exist: some names are verb_noun (desktop_list_windows, shell_env_get) while others are noun-only or verb-only (shell_cwd, shell_reset, memory_timeline).

Tool Count3/5

33 tools is heavy for one server and exceeds the comfortable range, but it is spread across several genuinely distinct subsystems (shell, UIA desktop, CDP browser, memory, diagnostics). It is borderline: more than ideal, but not arbitrary bloat.

Completeness4/5

Coverage is strong for a desktop automation agent: persistent shell with env/CD, verified execution, window enumeration/perception, mouse/keyboard, UIA element interaction, full CDP lifecycle, memory recall, and diagnostics. Gaps remain for window manipulation (move/resize/close), richer mouse actions (right-click/double-click/drag), and file-level operations, but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with Windows operating systems through native UI automation, file navigation, application control, and system commands. Provides seamless integration between LLMs and Windows environments for tasks like clicking, typing, launching apps, and capturing desktop state.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with Windows operating systems by providing tools for UI automation, file navigation, application control, and system operations. Works with any LLM to perform tasks like clicking, typing, launching applications, and executing PowerShell commands through native Windows integration.
    1
    MIT