Give opencode (and any MCP client) real GUI control on Windows: UIA element tree, screenshots, mouse, keyboard, window management.
Server has 7 tools with schemas and descriptions, but quality is inconsistent. Descriptions are present but often terse (10-50 chars) and lack actionable context for LLM selection. Schemas are visible in server.py but parameter descriptions are minimal or missing context about constraints, formats, and dependencies. No error handling guidance, no output schema documentation, and no tool annotations (readOnlyHint/destructiveHint). Chinese descriptions reduce clarity for English-speaking LLM agents. Tools like 'act' combine multiple concerns (click/input/press/scroll/enter) into one parameter-heavy tool, violating single-responsibility principle.
动作原语 click/input/press/scroll/enter
视觉模型兜底理解(需 SILICONFLOW_API_KEY)
绑定目标窗口(前台验证,尽力而为)
枚举可用窗口 + 通道状况
保存截图
界面快照(统一元素 id,AI 只按 id 操作,从未用过坐标)
等待某区域画面变化(替代轮询 OCR)
Descriptions are in Chinese and under 50 characters; LLMs cannot determine when/why to select tools. E.g., 'act' is '动作原语 click/input/press/scroll/enter', no explanation of when to use it vs snapshot or wait_change.
'act' tool combines 5 distinct actions (click/input/press/scroll/enter) into one tool with overlapping parameters (text, keys, x, y, delta). Violates single-responsibility principle. Should split into click_element, input_text, press_keys, scroll_region, enter_key.
No output schemas documented. Tools return dicts/strings but LLMs cannot plan downstream calls without knowing field names and types. E.g., snapshot returns 'text' but act expects 'target_id', relationship is implicit.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | <=2025-11-25 | v2 |
Parameter descriptions lack constraints and formats. E.g., 'max_items' has no min/max bounds; 'prefer' accepts 'auto|cdp|uia|ocr' but is not declared as enum; 'timeout' has no unit clarity (seconds assumed but not stated).
No error handling guidance. Tools return {'ok': False, 'verify': 'failed'} but do not tell LLM what to do next (retry? ask user? call different tool?). E.g., 'id_missing' error offers no recovery path.