Human-like Windows control for AI agents via the Model Context Protocol. Combines DXGI visual perception with simulated mouse/keyboard input.
Server has 23 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention (perceive, get_*, describe_*, click, etc.). Descriptions are detailed and include usage guidance, averaging ~250 chars, above the 194-char baseline. However, several tools lack parameter descriptions (e.g., get_display_size, show_desktop, get_desktop_icons have empty properties), and output schemas are not documented. Error handling guidance is absent. No tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications. Chinese descriptions mixed with English reduce clarity for non-Chinese-speaking agents.
[LOWER COST ~5k tokens] 截取屏幕指定区域,返回 JPEG base64。坐标使用物理像素。 推荐先用 get_window_rect 获取窗口位置,再截取该区域。
在指定的逻辑坐标位置点击鼠标。 重要:如果点击的目标属于某个应用窗口,务必传入 processName 参数,系统会自动将该窗口带到前台后再点击,避免点错或被其他窗口遮挡。 可选参数:button(默认 left)、count(点击次数)、processName(点击前确保该进程在前台)。
[PREFERRED ~1000 tokens] 返回当前屏幕的完整文字描述:前台应用、显示参数、所有可见 UI 元素的名称/类型/位置。 优先使用此工具代替截图,它无需图像传输,极低 Token 消耗。 如果此工具返回的信息不足,再考虑使用 screenshot。
从起点到终点拖动鼠标(按住左键拖动)。 示例: - drag({ from: { x: 100, y: 100 }, to: { x: 300, y: 300 } }) → 从(100,100)拖到(300,300) - drag({ to: { x: 300, y: 300 } }) → 从当前位置开始拖动
将指定进程名的窗口带到前台(激活窗口)。 示例: - focus_app({ processName: "notepad" }) → 激活记事本 - focus_app({ processName: "chrome" }) → 激活 Chrome
[桌面图标] 直接返回桌面所有图标的名称和坐标,无需任何参数。 调用此工具会自动最小化所有窗口(Win+D),确保桌面图标可见。 返回的坐标可直接用于 click 工具。
No output schemas documented. Tools return structured data (elements, description, display, foreground, warning, hint) but LLMs cannot plan downstream calls without knowing response field names and types.
Tools with empty inputSchema properties lack parameter descriptions. get_display_size, show_desktop, get_desktop_icons, get_frontmost_app, list_installed_apps, read_clipboard have no documented parameters despite being callable.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications in metadata. Tools like click, drag, key, type, open_app are WRITE/destructive but lack annotations to guide agent safety policies.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
获取当前显示器的几何信息:宽、高(像素)和缩放因子。
获取当前前台应用的名称和进程路径。
[LOW COST ~500 tokens] 获取指定进程窗口或当前焦点窗口的所有 UI 元素(按钮、文本框、列表项等)。 每个元素包含:name(名称)、controlType(类型)、x/y/width/height(逻辑坐标,可直接用于 click)、enabled(可用)、visible(可见)、depth(层级)。 使用场景: - 查看桌面图标:传入 processName: "explorer" - 查看前台应用控件:不传参数 - 查看其他窗口控件:传入进程名,如 processName: "notepad" 或 "chrome"
获取指定进程窗口的边界矩形(物理像素坐标)。结合 capture_region 可截取特定窗口。 示例:get_window_rect({ processName: "notepad" }) → 获取记事本窗口位置和大小
隐藏指定进程的所有窗口(截图前排除干扰窗口时使用)。
发送键盘按键或组合键。 支持单键("escape", "enter", "tab")和组合键("alt+f4", "ctrl+c", "ctrl+shift+escape")。 多个按键用 "+" 连接。
列出系统中所有已安装的应用程序。
移动鼠标光标到指定的逻辑坐标位置。
通过路径或命令启动应用程序。如果应用已在运行,会尝试激活其现有窗口。 示例: - open_app({ path: "notepad" }) → 打开记事本 - open_app({ path: "calc" }) → 打开计算器
[RECOMMENDED] 智能感知当前屏幕或指定进程窗口的 UI 状态,自动选择最低成本方式获取信息。 返回结构化数据:method(感知方式)、elements(UI元素列表)、description(文字描述)、display(显示信息)、foreground(当前前台应用)、warning(遮挡警告)、hint(下一步建议)。 如果指定了目标进程但该进程不在前台,会自动在 warning 字段中提示,避免操作被遮挡窗口。 这是首选工具 — 无需截图即可了解屏幕内容。
读取当前剪贴板内容。
[EXPENSIVE ~50k tokens] 全屏截图,返回 JPEG base64 图像。仅当 visual 确认绝对必要时使用! 优先使用 perceive、describe_screen、get_ui_elements 替代。 可选参数 exclude:暂时隐藏指定进程的窗口后再截图。
在指定位置滚动鼠标滚轮。
[显示桌面] 最小化所有窗口,显示桌面(Win+D)。 使用场景: - 点击桌面图标前调用,确保桌面不被遮挡 - 需要快速回到桌面时使用 示例:show_desktop({})
在当前焦点窗口输入文本。 示例:type({ text: "hello world" }) → 输入 "hello world"
恢复之前隐藏的窗口(传入 hide_windows 返回的 handles)。
写入文本到剪贴板。
Mixed Chinese/English descriptions reduce clarity for non-Chinese-speaking LLMs. Descriptions like '[RECOMMENDED] 智能感知...' and '[桌面图标]' are not machine-parseable and may confuse multilingual models.
No error handling guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next (e.g., if click fails because window is not found, should it retry focus_app first?).