uMouse MCP
uMouse MCP lets an agent monitor and configure uMouse hardware, consume device events, manage meeting/audio functions, and run voice-dictation/transcription sessions; the provided schema does not include direct mouse move/click/scroll tools.
Check SDK status, capabilities, online devices, event-buffer/recording state, and device details (SN, USB/BLE, battery, status).
Poll or long-wait for device events such as key presses, connections, DPI changes, meeting state, audio segments, speech capture, transcription, and warnings.
Read and acknowledge persisted voice-transcription messages, or wait in an active conversation for voice results.
Configure DPI level, USB/BLE channel preference, audio source, device limits, identifiers, debug level, and speech auto-record via controlled restart.
Control meeting mode (create/destroy/pause/resume) and record device audio (start/stop/status).
Start, wait for, finish, cancel, and inspect Agent voice Q&A sessions that capture device-mic audio and return final transcribed text.
Enables voice dictation to type and send messages in WeChat by using hardware HID keyboard input to the focused window.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@uMouse MCP move the cursor to 640,360 with high precision and click once"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
uMouse MCP — Hardware Mouse Control for AI Agents
English | 简体中文
Give AI agents a real hardware mouse. uMouse MCP is a Model Context Protocol (MCP) server for USB HID mouse control and voice dictation on Windows. Mouse movement, clicks, scrolling and dragging use a compatible uMouse device; voice input supports pluggable speech recognition providers.
Requires compatible uMouse hardware and firmware, Windows x64, and a separately installed Node.js runtime (use Node.js 22 x64). An ordinary USB mouse is not sufficient. The MIT license covers the server code; native SDK binaries have separate terms. See License.
Download · Quick start · Reference demos · Documentation · Compatibility & FAQ · Get hardware / support · uMouse SDK
Download
Package | Download | Requirements |
MCPB · Windows x64 · v0.1.1 | MCPB-compatible client; compatible uMouse hardware; x64 Node.js 22+ | |
Windows x64 · v0.1.0 | Compatible uMouse device and firmware; Node.js installed separately |
All releases · Gitee release mirror
MCPB installation: import the .mcpb into a client that supports MCPB Node extensions. Version 0.1.1 wraps the legacy 0.1.0 runtime, includes no cloud credentials, and defaults speech recognition to disabled; windows-speech is the optional local provider. Data defaults to ~/.umouse-mcp-mcpb. See the bilingual MCPB guide. Published in the official MCP Registry as io.github.SonicloudTech/mouse-mcp; metadata in server.json, publication and validation.
The ZIP includes production Node dependencies, native SDK DLLs, the voice preview UI and VC runtime libraries. No npm install or compilation is required to use the release; Node.js itself is not bundled.
Release and source are different installation paths: the v0.1.0 installer registers the legacy stdio entry, mcp/dist/index.js. The shared-v2 tools, native host and acceptance lab described below belong to the source implementation. This ZIP is not a complete shared-v2 bundle: it does not contain that native host or the acceptance lab. Use the installed server's tool list and the README shipped inside the ZIP for release-specific behavior.
Related MCP server: Extra
Quick start
The following steps use the original ZIP. For MCPB, use the import instructions above, then perform the status/device checks in step 5.
Install Node.js 22 x64 and confirm
node --versionworks. Connect a compatible uMouse USB receiver/device and power on the mouse. For a device or firmware compatibility check, see Hardware & support.Download the ZIP above and extract it. Open the
umouse-mcp-os-win-x64folder; keep it in a permanent location because client configuration points to this folder.Double-click
install-agents.cmdto register ZCode at user scope, or run one command for your chosen client from the extracted folder:
Client | PowerShell command |
ZCode |
|
Claude Desktop |
|
Cursor |
|
The installer adds or updates the umouse entry in the selected client's configuration. It also copies the bundled trial ASR configuration into the local data directory if no configuration already exists. Replace trial credentials with your own for production use.
Open a new ZCode session, fully quit and reopen Claude Desktop, or reload the Cursor window, as appropriate.
Ask your agent to call
umouse_status,umouse_get_capabilities, andumouse_list_devices. Check SDK health, the device list, and the reported capabilities. A returnedsdkVersiononly confirms SDK access; it does not prove that hardware control works. Confirm the visible result of any requested mouse action before relying on it.
For a client that accepts the mcpServers JSON format, add this entry manually, replacing the path with your extracted folder. Other clients may require a different configuration format.
{
"mcpServers": {
"umouse": {
"command": "node",
"args": ["C:\\path\\to\\umouse-mcp-os-win-x64\\mcp\\dist\\index.js"]
}
}
}Manual configuration does not run the installer's ASR setup. Configure a speech provider separately if you need voice dictation; see Voice dictation.
For source development, npm ci, npm run build, and npm test install dependencies, build TypeScript, and run the default tests. They do not produce a complete shared-v2 native bundle. A complete public shared-v2 packaging workflow is not yet provided. The shared-v2 development and maintenance notes (Chinese) and native host build notes (Chinese) are references for that separate development path.
Reference demos
The mouse lab recording demonstrates the shared-v2 source implementation, not the legacy ZIP installation.
Hardware mouse driving a real browser lab page (gold arrow = system cursor overlaid on the recording) — counters, wheel and hit feedback all come from real browser events:

Voice typing: speak, and it lands in any window
Hold the device voice key, speak, release — the recognized text is typed into whatever window currently has focus. Both clips recorded live at 1080p:
Agent client (terminal) — spoken command typed in and executed:
mcp/acceptance/demo/voice-typing-agent.mp4
WeChat — spoken message typed into the input box and sent:
mcp/acceptance/demo/voice-typing-wechat.mp4
Shared-v2 capabilities (source implementation)
Model → MCP host → shared daemon (
:47192) → C++ native host → USB HID0xF0/0xF1→ uMouse device → Windows input pipeline
Hardware actions:
umouse_mouse_action— move / click / scroll / drag in desktop physical-pixel coordinates, multi-monitor with negative coords, optionalprecision: standard | high.Task exclusivity:
umouse_controlbegin → actions → end; only one task drives the mouse and keyboard at a time; dead connections are cleaned up automatically.Read-only sensors:
umouse_input_status— cursor position, live key state, foreground window identity; read-only, never intercepts.Voice dictation: mic capture → VAD segmentation → pluggable ASR provider → preview / final transcript; an independent lane that never preempts mouse control (see below).
Shared daemon: one instance per machine (port 47192), shared across ZCode / Codex / Claude hosts, reclaimed when idle.
Voice dictation: pluggable ASR providers
ASR here is not a black box tied to one vendor — it is a tiny interface contract: implement begin / writePcm / finishInput / cancel and emit preview / segmentFinal / warning / terminal (exactly once), and you have a valid provider. Swapping recognition services means swapping one factory function; mcp/src/sinicloud-asr.ts is a complete reference implementation.
Provider ( | Notes |
| Sonicloud open-platform streaming ASR: pure TypeScript, no DLL dependency; streams 16k/16bit/mono PCM, interim previews, low-balance warnings without dropping the stream |
| Built-in Windows recognizer; offline, audio never leaves the machine |
| Self-hosted whisper-cli + ggml model (paths configurable), offline CPU transcription |
| Custom transcription endpoint: multipart WAV in, |
| Dictation off; a missing provider degrades gracefully to |
Credentials travel only through configuration and are hot-read per session — swap keys without a restart: by default a JSON file at <data-dir>/sinicloud_asr.json (appId / apiKey / apiSecret / userId / lanid / streamUrl / tokenUrl); environment variables UMSDK_ASR_APP_ID / UMSDK_ASR_API_KEY / UMSDK_ASR_API_SECRET / … override the file. Never hardcoded, never printed, never logged, never committed. The legacy v0.1.0 ZIP ships a trial credential for the open platform; replace it with your own key for production use. The v0.1.1 MCPB contains no cloud credentials and accepts only disabled (default) or windows-speech. See mcp/SHARED-V2.md for the full source provider matrix.
Shared-v2 adaptive positioning
Windows pointer ballistics ("Enhance pointer precision") make the protocol-dots → pixels gain vary with amplitude. umouse-mcp ships an 11-step ballistic gain curve: read-only seeded from local pointer settings on first use of a device, learned online frame-by-frame within [0.125, 10], decaying back to the seed after 60 s idle — no tuning when you change machines or devices; a stale seed costs 1–2 extra frames. Design and measurements: mcp/sdk-host/POSITIONING.md.
Metric | standard | high |
Stop tolerance | residual ≤ 4 px | residual ≤ 1 px |
Measured (reference rig) | median 356 ms / 2 frames | max 1 px, mean 0.67 px |
Failure mode | identical; high at worst degrades to ≤ 4 px best-effort, residuals reported as-is |
Shared-v2 reference acceptance
After preparing a complete shared-v2 build, follow the acceptance setup guide. The lab is in this repository, not the v0.1.0 ZIP.
32 cases verify effects in closed loop on a real browser page: left / right / middle click counts, double-click interval, wheel scrollTop, drag linearity, 1 px bullseye hits.
cd mcp/acceptance
$env:UMCFG = "C:\path\to\client.json"
$env:UMBUNDLE = "C:\path\to\shared-v2-bundle"
node run-matrix.mjs
# Writes acceptance-report.json; the documented reference run passed 32/32 cases.Shared-v2 security and verification
Locked screen / UAC / secure desktop: key actions are rejected with
button_feedback_input_desktop_unavailable— that is a safety property, not a bug.effectConfirmedis alwaysfalse: transport success ≠ application effect; the acceptance lab's page evidence is the ground truth.ASR credentials enter only via local config file and environment variables — never committed, printed or logged;
recoverrequires a human carrying--hardware-reset-confirmed.
Hardware mouse MCP: frequently asked questions
Can I use an ordinary USB or Bluetooth mouse?
No. uMouse MCP needs compatible uMouse hardware and firmware that implement its hardware-control protocol. A normal mouse, a software-only cursor controller, or the SDK version string alone does not establish compatibility. Confirm the device and firmware through hardware support before choosing a package.
Which package should I use with an MCP client?
Use the v0.1.1 MCPB with a client that supports MCPB Node extensions, or the v0.1.0 ZIP and manual configuration for a stdio MCP client. Both require Windows x64, Node.js 22 x64, and compatible hardware. MCPB 0.1.1 packages the legacy 0.1.0 runtime; neither release includes the shared-v2 native host or acceptance lab. Check the installed server's tool list before using source-only examples.
Does this MCP server support macOS or Linux?
The published MCP packages target Windows x64. The separate uMouse SDK has its own platform packages for application integration; those packages do not provide macOS or Linux support for this MCP server.
Can voice dictation work without a cloud ASR service?
The MCPB package defaults to dictation disabled and optionally uses the local windows-speech provider. Other providers, including whisper-cpp, belong to the source provider configuration; they are not all available in MCPB. Local providers need their own runtime, language or model setup. Mouse control does not require enabling a cloud speech provider.
How do I verify that the hardware action actually worked?
Start with umouse_status, umouse_get_capabilities, and umouse_list_devices. Then request an action in a test window and check the cursor and the application's visible response. SDK access and a successful transport receipt are separate from application effects. For a complete shared-v2 source build, use the hardware acceptance lab.
Should I integrate mouse-mcp or mouse-sdk?
Choose this repository to expose hardware mouse actions and voice input to an AI agent through MCP. Choose mouse-sdk to receive device events and audio in your own C/C++, C#, Python, or Electron application. Keep each project's hardware, package, and licensing requirements separate.
Documentation
Doc | Contents |
Shared-v2 install, upgrade, maintenance and recovery | |
The 32-case catalog (copy-paste MCP calls and pass criteria) | |
Ballistic positioning: history, algorithm, cross-device matrix | |
Full MCP tool reference (Chinese) |
Hardware & support
Need a compatible device, evaluation unit or firmware check? Contact xu_heng_yu@sinicloud.com with your target platform, device model, firmware version and intended use case.
Maintained by SonicloudTech (Anhui SoniCloud Intelligent Technology Co., Ltd.) — AI input hardware and the speech open platform.
Website: https://sinicloud.com/
Speech open platform: https://open.sinicloud.com/ — powers the default ASR provider; sign up for a trial quota
Business & technical contact: xu_heng_yu@sinicloud.com — OEM / distribution / custom firmware / co-development; include the target platform, expected volume, device model, firmware version and intended use case
Related project: uMouse SDK
Integrating smart-mouse hardware into your own application? uMouse SDK provides a C ABI for USB HID/BLE device connections, key events and audio. Start with the English SDK README, integration guide, or SDK downloads. The SDK has its own platform and licensing matrix; those platform options do not extend this MCP server beyond Windows x64. Use the native SDK DLLs bundled with each MCP release rather than substituting a standalone SDK package.
Roadmap
Cross-machine adaptive gain curves (v0.4)
Pluggable ASR providers: sinicloud streaming, fully configurable credentials
Firmware-executed 1–2 count micro-correction frames
Wheel ACK and scroll-amount closed loop
Absolute positioning mode
License
The MCP server code is released under the MIT license. The native SDK ships as closed-source DLLs with a public header (include/umouse_sdk.h).
Available Tools
22 toolsumouse_ack_voiceA
按 event_id 确认语音消息已经处理或已被目标宿主接受。幂等;未完成转写的消息不可确认。仅改变收件箱状态,不执行语音内容。
Inputs: event_id (required).
umouse_audio_recordA
设备录音(16kHz/16bit/mono,WAV 落盘返回路径,不进对话流)。【推荐】语音键自动采集默认开启:让用户按住语音键说话、松开即可,等 speechCaptured 事件(umouse_wait_events,payload 含 WAV 路径),无需本工具编排。本工具用于手动场景:action=start 开始(用于会议等持续音频),action=stop 收尾(若会话已被语音键松开/超时自动收尾,返回 file=最近完成的录音而非错误),action=status 查看进行中会话。
Inputs: action (required), device_id, max_seconds.
umouse_get_capabilitiesA
查询设备能力(voice / mouse_control / keyboard_control)与当前可执行状态:每台设备返回能力声明的 support、来源(当前 product-default/test-profile;hardware-info 仅预留,尚无硬件上报接线)、连接代次与在线状态,以及因此被隐藏的工具和原因。能力未声明(unknown)的操作会被执行层拒绝——注入工具只对声明 supported 的设备开放(可用 UMSDK_TEST_CAPS 声明测试能力)。
Inputs: device_id.
umouse_get_eventsA
非阻塞拉取自上次游标以来的设备事件。返回 {events:[{seq,ts,deviceId,type,payload}], nextSince, buffer}。务必把返回的 nextSince 作为下次调用的 since 续读(seq 严格递增,不重放)。可用 type:connected | disconnected | keyEvent | deviceInfo | dpiChanged | meetingCreated | meetingDestroyed(origin=device-frame 设备确认 / transport-down 异常结束) | meetingBusy | meetingCreateFailed | audioSegmentComplete(本段音频已全部交付:segment 采集代次 + reason) | queueOverflow | warning | lavalierMicStatus | lavalierMicBattery | speechCaptured(server 生成:语音键自动录音完成,payload 含 WAV 路径) | speechTranscribed(转写状态已落盘,payload 含 eventId/status;全文用 umouse_voice_inbox) | sleepReset(120 秒重置睡眠计时,写入与 ACK 独立记录) | voiceSession / voiceBusy / voiceUnavailable / voiceCloseUnconfirmed / voiceKeyHoldIsolation(v2 语音编排会话事件)。keyEvent payload={key: speech|translation|m|ai|capture|raw, action: down|up|hold|click, index(M 键序号)};speechCaptured payload={path(WAV), durationMs, bytes, autoStopped}。
Inputs: limit, since, types.
umouse_list_devicesA
枚举当前在线的声云智能鼠标:[{id(SN), connMode(USB/BLE), battery(%), status(normal/meeting), lastSeen}]。
Inputs: no named parameters.
umouse_meeting_createA
开启会议模式(设备进入会议态,音频持续流入)。会议全局独占:另一台设备会议中时本指令被拦截(返回 meetingBusy 事件的 owner)。结果异步经 meetingCreated/meetingDestroyed 事件上报。
Inputs: device_id.
umouse_meeting_destroyA
结束会议模式(归属解除,其它设备方可开会)。会议全局独占:另一台设备会议中时本指令被拦截(返回 meetingBusy 事件的 owner)。结果异步经 meetingCreated/meetingDestroyed 事件上报。
Inputs: device_id.
umouse_meeting_pauseA
暂停会议(暂停期间豁免 SDK 断流裁决)。会议全局独占:另一台设备会议中时本指令被拦截(返回 meetingBusy 事件的 owner)。结果异步经 meetingCreated/meetingDestroyed 事件上报。
Inputs: device_id.
umouse_meeting_resumeA
恢复被暂停的会议。会议全局独占:另一台设备会议中时本指令被拦截(返回 meetingBusy 事件的 owner)。结果异步经 meetingCreated/meetingDestroyed 事件上报。
Inputs: device_id.
umouse_reconfigureA
修改须在 SDK 启动前锁定的配置并受控重启会话(工作模式/USB/BLE 识别标识/设备上限/语音键自动录音)。注意:重启会断开所有在线设备(事件缓冲保留,设备重连后自动恢复)。一般保持环境变量配置不变,仅在接入非默认设备时使用。
Inputs: ble, usb, debug, work_mode, +2 more.
umouse_set_audio_sourceA
指定语音音频源设备(多台在线时语音识别会话应锁定单源):设置后仅该设备音频被采集录音,其它设备在 SDK 层静音。不传 device_id = 恢复默认先到先得策略。语音会话进行中被仲裁拒绝。
Inputs: device_id.
umouse_set_channel_prefA
设置通道偏好(运行时可切,切换瞬间断开当前通道重新探测):AUTO=USB 优先静默转 BLE(默认);USB=仅 2.4G 接收器;BLE=仅蓝牙(接收器在位但鼠标切到蓝牙、USB 假在线时用它)。
Inputs: pref (required), device_id.
umouse_set_dpiA
DPI 档位的固件字节(协议 03 22 ,非索引非 DPI 数值)。主流固件映射:800→21, 1200→32, 1600→42, 2400→63, 4000→4, 6000→5;其它固件族编码不同。注意:固件对软件设置不回执——返回 1 仅代表字节已写入通道,生效与否以 dpiChanged 事件/光标速度旁证判断。
Inputs: level (required), device_id.
umouse_statusA
查看 uMouse SDK 服务状态:SDK 版本、运行时长、配置摘要、在线设备数、事件缓冲水位、录音状态、旧进程接管记录。排查问题先调它。
Inputs: no named parameters.
umouse_voice_cancelA
取消指定语音会话:立即禁止结果投递并启动设备清理;不把"取消等待"冒充"设备已关麦"。已输入的字符不撤回。
Inputs: session_id (required).
umouse_voice_finishA
结束指定语音会话(对话内完成按钮/VAD 之外的手动入口;幂等:重复调用返回已有状态)。收尾顺序:会议销毁→等待设备确认与音频段完成→识别终态→结果可取。
Inputs: session_id (required).
umouse_voice_inboxA
读取物理语音键产生的持久化转写消息。默认只读未确认消息,读取不删除。status=ready 的 text 是用户语音转写,可能有识别错误;queued/transcribing 请等待,empty 不创建对话,failed 查看 errorCode。处理或向明确宿主成功交付后用 umouse_ack_voice。日志通知不保证唤醒新回合。
Inputs: limit, include_acknowledged.
umouse_voice_startA
开启一次 Agent 语音问答会话:经设备麦克风采集(会议模式),就绪(会议确认+首段 PCM 到达)后返回 listening/sessionId。随后用 umouse_voice_wait 等待最终文字(VAD 静音/完成按钮/上限结束)。同一时间仅一个会话;重复 client_request_id 幂等返回。本工具只采集语音,最终文字作为工具结果返回——不向任何输入框打字。
Inputs: prompt, end_mode, device_id, client_request_id.
umouse_voice_statusA
语音编排状态:ASR/typer 就绪、活动会话(状态机位置、目的、设备)、未确认关麦的隔离记录与最近会话摘要。可选 session_id 返回单会话详情(含分段耗时)。默认不回传听写正文。
Inputs: session_id.
umouse_voice_waitA
等待语音会话结果(有界等待,单次 ≤25s;更久以分轮续等)。pending 与终态明确区分;终态返回最终文字 text、结束原因 stopReason、会议关麦确认与音频段边界事实。仅返回 agent-reply 会话的文字。
Inputs: session_id (required), wait_ms.
umouse_wait_eventsA
长轮询等待新设备事件:有匹配立即返回,超时返回空(timedOut:true)。等待用户物理操作的标准工具。推荐范式:等用户语音输入 → types:["speechCaptured"](用户按住语音键说话、松开后事件自带 WAV 路径 payload.path,直接取用,无需编排录音);等按键 → types:["keyEvent"](payload={key: speech|translation|m|ai|capture|raw, action: down|up|hold|click, index})。可用 type:connected | disconnected | keyEvent | deviceInfo | dpiChanged | meetingCreated | meetingDestroyed(origin=device-frame 设备确认 / transport-down 异常结束) | meetingBusy | meetingCreateFailed | audioSegmentComplete(本段音频已全部交付:segment 采集代次 + reason) | queueOverflow | warning | lavalierMicStatus | lavalierMicBattery | speechCaptured(server 生成:语音键自动录音完成,payload 含 WAV 路径) | speechTranscribed(转写状态已落盘,payload 含 eventId/status;全文用 umouse_voice_inbox) | sleepReset(120 秒重置睡眠计时,写入与 ACK 独立记录) | voiceSession / voiceBusy / voiceUnavailable / voiceCloseUnconfirmed / voiceKeyHoldIsolation(v2 语音编排会话事件)。宿主超时提示:宿主对工具调用本身可能设有更短超时——单次 timeout_ms 建议不超过 25000,更久等待以返回的 nextSince 游标分轮续等。
Inputs: since, types, timeout_ms.
umouse_wait_voiceA
在当前活动对话内等待语音键转写完成,返回未确认的 ready/empty/failed 消息(最多 25 秒)。已存在未确认结果会立即返回;处理后 ack 才不会重复读取。不能保证客户端在当前回合结束后自动唤醒。
Inputs: timeout_ms.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 22 tools
Voice/audio surfaces overlap: umouse_audio_record, umouse_voice_start, umouse_wait_voice, umouse_voice_wait, and umouse_voice_inbox all involve microphone capture or transcription. The near-identical names wait_voice and voice_wait especially invite misselection, though descriptions do clarify intended flows.
All tools share the umouse_ snake_case prefix, which is readable and predictable. However, conventions alternate between verb_noun (list_devices, get_events, set_dpi) and resource_verb (voice_start, meeting_create, audio_record), with a bare status tool.
At 22 tools the set is heavy for an MCP server, though the domain includes devices, events, meetings, voice sessions, and audio recording. Several voice/event tools are specialized, but the total surface feels borderline overgrown.
Core lifecycle coverage exists for devices, events, meetings, voice sessions, and audio recording. However, capabilities mention mouse_control and keyboard_control injection, yet no such tools appear, and connection/pairing management is largely absent.
Maintenance
Related MCP Connectors
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
Turns a phone into a camera+Bluetooth remote so AI assistants can see and control any PC.
Connect AI assistants to your approved computer for files, commands, browser and desktop tasks.
Give your AI hands on every computer you own. Remote control of your Windows, Mac and Linux machines from one ChatGPT, Claude or Cursor chat — even from your phone. Ask it to find out why the office server is crawling, update every PC in the house, sort out your mom's laptop from another city, or ship the site from your work machine while you're on a train. It runs commands, reads files and takes a screenshot when it needs to see the screen. You decide what each computer allows, and you can cut any of them off in a second.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceRealtime PC eyes and hands for any AI agent — provides desktop, browser, file, registry, and OS control via batched execution and lease-based safety gates.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to autonomously control Windows 11 and 10 desktops via sub-10ms screen capture, native UI Automation element inspection, and zero-lag keyboard and mouse input. Combines a visual plane with a semantic plane and stall detection so agents can operate real applications reliably without vision-only guessing.262 npm151 PyPI7MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to operate Windows computers with parallel, human-like input streams, including held keys, concurrent mouse/keyboard actions, UIA/OCR targeting, and a knowledge base for engineering software.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to see and operate a Windows PC through mouse, keyboard, screenshots, OCR, window control, and shell commands.-