Universal Computer Control MCPサーバー
コミット 2026年10月28日Enables AI agents to observe, click, type, and control Windows or Linux computers through accessibility layers, OCR, and vision models.
別名 adkdev200/Universal-Computer-Control
- スター
- 2
- ツール
- —
- ダウンロード数(30日間)
- —
- 最新バージョン
- —
- 最終コミット
- 2026年10月28日
- ライセンス
- MIT
Universal Computer Control MCPとは
Universal Computer ControlはMCPサーバーです。 Enables AI agents to observe, click, type, and control Windows or Linux computers through accessibility layers, OCR, and vision models.
プロジェクトのREADMEから生成された概要
Universal Computer Control MCP server について
Giving AI agents eyes and hands on any computer is the primary goal of this MCP server. It allows an AI client to observe, click, type, and control Windows or Linux machines by interacting with the actual graphical user interface rather than relying on browser-specific protocols like Playwright. This makes it suitable for controlling IDEs, office suites, terminals, and any other desktop application.
The server operates locally via stdio and provides 29 tools under the computer namespace. It uses an automated fallback hierarchy that moves from accessibility layers like Windows UIA or Linux AT-SPI to OCR, image templates, and vision-language models. This ensures that if one method fails to identify a button or text, the system automatically tries another to find the correct coordinates for input.
Developers can configure security through permissive, standard, or strict modes, including command allowlists and confirmation gates for dangerous actions. It also includes a global emergency stop to halt all actions immediately. Setup requires Python 3.11+ and can be extended with OpenAI-compatible vision endpoints for enhanced visual understanding.
できること
- 1Automate desktop application workflowsAn AI agent can navigate through non-browser software like file managers or specialized IDEs by interacting with UI elements.
- 2Perform visual element identificationThe agent can find specific buttons or text on the screen using OCR or vision models when accessibility data is unavailable.
プロジェクトの README から作成されています。すべてのユースケースは、その引用と照らし合わせて確認されています。
設定
UCC_ENGINE__VERIFICATION_MODEUCC_LOGGING__LEVELUCC_SECURITY__ALLOWED_COMMANDSUCC_SECURITY__MODEUCC_VISION__VLM__ENABLED
| 名前 | 説明 | 種類 |
|---|---|---|
| UCC_ENGINE__VERIFICATION_MODE | — | |
| UCC_LOGGING__LEVEL | — | |
| UCC_SECURITY__ALLOWED_COMMANDS | — | |
| UCC_SECURITY__MODE | — | |
| UCC_VISION__VLM__ENABLED | — |
自動チェック
実行日 2026年11月14日完全なレポート →まだ検証されていません。サーバーには80点のスコア、重大な問題がないこと、および検証に必要な十分なデータが必要です。 チェックの仕組み · 点数を上げるための改善点
- ソースリポジトリがリンクされており、アクセス可能adkdev200/universal-computer-control is public and reachablegithub.com/adkdev200/universal-computer-control ↗合格
- パッケージがこのリポジトリをソースとして指定未チェック
- ビルドの来歴 (Sigstore 証明)未チェック
- オープンソースライセンス (OSI)MITspdx.org/licenses/MIT.html ↗合格
- 過去1年以内にコミットまたはリリースありLast commit or release 2026-10-28github.com/adkdev200/universal-computer-control ↗合格
- OpenSSF Scorecard未チェック
- パッケージ名が有名なパッケージに酷似していない未チェック
- パッケージおよびその依存関係に重大な勧告なし未チェック
- モデルへの隠れた指示がない0 tool descriptions and the README read; no override phrases, credential paths or hidden characters合格
- 破壊的なツールがラベル付けされている未チェック
- リモートエンドポイントが MCP ハンドシェイクに応答未チェック
README
GitHubで見るUniversal Computer Control MCP
Give your AI agent eyes and hands on any computer. Observe → understand → act → verify. No browser MCPs. No Playwright. Just real control.
A cross-platform computer control MCP server that lets an AI agent operate a Windows or Linux computer like a human: observe the screen → understand the UI → choose an action → perform it → observe again → verify → recover if needed.
The system deliberately has no dependency on Chrome MCP, browser MCP, Playwright MCP or any other external MCP server. Browsers, IDEs, office suites, terminals, file managers, Electron apps and canvas-heavy applications are all just GUI applications. Multiple backends live inside the server and the best available mechanism is chosen automatically per action.
AI Agent / LLM
| MCP (stdio)
v
+------------------------------+
| Universal Computer MCP Server |
+---------------+--------------+
v
+------------------------------+
| Computer Control Engine | <- usable WITHOUT MCP
+---------------+--------------+
| | |
v v v
Accessibility Vision/OCR Physical Input
Layer Layer Layer
| | | | | |
UIA AT-SPI OCR OpenCV Mouse Keyboard
(Windows)(Linux) Tesseract VLM PyAutoGUI OS APIs
Highlights
- 29 stable MCP tools under the
computer.namespace — capabilities, not implementation details. Nopyautogui_click, noocr_click, noplaywright_click. - Interaction hierarchy per action: Windows UIA → Linux AT-SPI → semantic element → OCR text → image template → vision-language model → coordinates → PyAutoGUI. Every fallback is automatic.
computer.observeis the core tool: one structured snapshot with screen geometry, active window, cursor, OCR'd text and normalized UI elements (stableelement_Nids within a cycle).
Requirements
| Mandatory | Optional (recommended) | |
|---|---|---|
| Python | 3.11+ | |
| Core | mcp, pydantic, PyYAML, Pillow |
|
| Input | PyAutoGUI ([input]) |
|
| Windows | pywinauto, pygetwindow, psutil ([windows]) |
|
| Linux | psutil ([linux]), system wmctrl, xdotool, xclip |
|
| Screenshots | mss ([screenshot]), scrot on X11 |
|
| OCR | pytesseract + system tesseract-ocr ([ocr]) |
|
| Vision | opencv-python, numpy ([vision]) |
|
| VLM | httpx ([vlm]) + an OpenAI-compatible endpoint |
Installation
Windows 10/11
git clone https://github.com/adkdev200/universal-computer-control.git && cd universal-computer-control
powershell -ExecutionPolicy Bypass -File scripts\install_windows.ps1
Manual steps:
- Install Python 3.11+ (
winget install -e --id Python.Python.3.12), tick Add to PATH. python -m venv .venv && .venv\Scripts\pip install -e ".[input,windows,ocr,vision,screenshot,vlm]"- Install Tesseract OCR:
winget install -e --id UB-Mannheim.TesseractOCR(setocr.tesseract_cmdinconfig.yamlif it is not onPATH). - Run:
.venv\Scripts\universal-computer-control(alias:.venv\Scripts\ucc)
Windows UI Automation needs no extra permissions. If you run the server elevated, non-elevated windows may refuse automation (UIA integrity levels).
Linux (X11 or XWayland)
git clone https://github.com/adkdev200/universal-computer-control.git && cd universal-computer-control
bash scripts/install_linux.sh --yes # add --no-sudo to skip system packages
./.venv/bin/ucc-doctor # verify every backend, exact fix hints
The installer is fully non-interactive with --yes: it installs system
packages (wmctrl/xdotool/xclip/scrot/tesseract/at-spi2-core), all Python
extras, and a ready ~/.universal-computer/config/config.yaml with OCR,
template matching and the VLM provider enabled. ucc-doctor then probes every
backend live and prints copy-paste fix commands for anything missing. Note:
even on machines with no wmctrl/xdotool/xclip installed, the Linux window
backend now works through a built-in python-Xlib (EWMH/ICCCM) fallback - the
system tools only make it more robust.
Manual steps:
-
Python 3.11+ and system packages:
sudo apt install python3 python3-venv python3-pip \ wmctrl xdotool xclip scrot \ tesseract-ocr at-spi2-core -
python3 -m venv .venv && ./.venv/bin/pip install -e ".[input,linux,ocr,vision,screenshot,vlm]" -
Run from a graphical session:
./.venv/bin/universal-computer-control(alias:./.venv/bin/ucc)
AT-SPI requirements (accessibility): at-spi2-core must be running (it is
on desktop distros) and for GNOME/GTK apps enable
gsettings set org.gnome.desktop.interface toolkit-accessibility true.
X11 vs Wayland: X11 is fully supported. On Wayland-with-XWayland, input
and screenshots work through XWayland but foreign window management may be
restricted by the compositor. On pure Wayland (no DISPLAY), the window
backend disables itself with a warning; AT-SPI still works for cooperating
toolkits. See docs/TROUBLESHOOTING.md.
Registering the server with an MCP client
claude_desktop_config.json (see examples/mcp-config.example*.json):
{
"mcpServers": {
"universal-computer": {
"command": "/absolute/path/to/universal-computer-control/.venv/bin/python",
"args": ["-m", "universal_computer"],
"env": {}
}
}
}
Any MCP client that speaks stdio works the same way. The engine is also a plain library — no MCP required:
from universal_computer import ComputerControlEngine, load_config
computer = ComputerControlEngine(load_config())
obs = await computer.observe("normal")
await computer.click("Continue")
await computer.type("hello")
Tools (MCP API)
| Group | Tools |
|---|---|
| Observation | computer.observe (levels: minimal/normal/full) · computer.screenshot · computer.get_ui_tree · computer.get_active_window · computer.find_text · computer.find_visual · computer.wait_for |
| Mouse | computer.click · computer.double_click · computer.right_click · computer.move_mouse · computer.drag · computer.scroll |
| Keyboard | computer.type · computer.press · computer.hotkey |
| Windows | computer.list_windows · computer.focus_window · computer.minimize_window · computer.maximize_window · computer.restore_window · computer.close_window (needs confirm=true) |
| Clipboard | computer.get_clipboard · computer.set_clipboard |
| System | computer.launch_application · computer.run_command (allowlist + confirm=true) |
| Admin | computer.backend_status · computer.emergency_stop · computer.reset_emergency_stop |
computer.observe returns a normalized snapshot:
{
"ok": true,
"id": "obs_17",
"level": "normal",
"screen": {"width": 1920, "height": 1080, "monitors": [...]},
"active_window": {"title": "Google Chrome", "application": "chrome.exe", "process_id": 1234},
"cursor": {"x": 812, "y": 530},
"elements": [
{"id": "element_1", "role": "button", "name": "Continue",
"bbox": [1050, 700, 1170, 750], "source": "uia", "confidence": 0.99}
],
"ocr": [
{"text": "Continue", "bbox": [1050, 700, 1170, 750], "confidence": 0.97}
]
}
computer.backend_status reports per-backend health:
{
"pyautogui": {"available": true, "healthy": true},
"uia": {"available": true, "healthy": true},
"atspi": {"available": false, "healthy": false,
"error": "pyatspi import failed (...); install python3-pyatspi"},
"ocr": {"available": true, "healthy": true}
}
Configuration
config.yaml (see config.example.yaml) plus UCC_ environment overrides
with __ nesting:
UCC_ENGINE__VERIFICATION_MODE=strict
UCC_SECURITY__MODE=standard
UCC_SECURITY__ALLOWED_COMMANDS='["ls", "git status", "xdotool"]'
UCC_LOGGING__LEVEL=DEBUG
UCC_VISION__VLM__ENABLED=true
Configurable: observation level & caching, verification mode
(off/basic/strict), PyAutoGUI pauses/failsafe, OCR provider & language,
vision threshold, template directory, VLM endpoint (key read from the
environment variable named in vision.vlm.api_key_env), security mode,
allowlists, rate limits, timeouts, persistence retention, log levels and
per-backend priorities (backends.priorities: {pyautogui: 5}).
Security model
| Mode | run_command |
launch_application |
|---|---|---|
permissive |
allowed (still rate-limited) | allowed |
standard (default) |
requires security.allowed_commands and confirm=true |
allowed unless a non-empty allowed_applications says otherwise |
strict |
only explicitly allowlisted; shell strings off unless allow_shell |
exact allowlist match required |
Always on: rate limiting (max_actions_per_minute), command timeouts,
credential redaction in logs and command output, no clipboard/typed-text
logging, close_window/run_command confirmation gates, and the
emergency stop — computer.emergency_stop() halts every subsequent
action (checked before each attempt) and is persisted as a stop file so it
survives restarts and can be triggered externally.
Extending
- New OCR: implement
universal_computer.vision.base.OCRProvider(detect_text(image) -> list[OCRResult]) and register it inVisionServices.from_config. - New vision model: implement
VisionLanguageModel.locate_element(async, description →VisionResultwith bbox). The OpenAI-compatible implementation shows the JSON contract. - New platform (macOS): subclass the
backends.baseABCs (InputBackend,ScreenshotBackend,AccessibilityBackend,WindowManagementBackend,ClipboardBackend,ApplicationBackend) and register them incore/bootstrap.py. Nothing else changes — the engine only knows capabilities. - Template images: put PNGs in
vision.template_dir; refer to them by name fromcomputer.find_visualor as click targets.
Development
pip install -e ".[dev]"
pytest tests # 160 unit + integration tests, no display needed
ruff check src tests
scripts/e2e_live_test.py is an end-to-end harness that boots its own
Xvfb + openbox session, creates real X11 windows, and exercises every
backend live (screenshots, OCR, window ops via both the tool paths and the
python-Xlib fallback, OpenCV template matching, the VLM pipeline against a
mock OpenAI-compatible endpoint, clipboard, input, launch, emergency stop):
python scripts/e2e_live_test.py # full stack
python scripts/e2e_live_test.py --no-tools # zero X11 tools: Xlib fallback
Unit tests run on any machine (OS-specific pieces are mocked). The
integration test boots the real server over stdio. See
docs/ARCHITECTURE.md for the module map and docs/TROUBLESHOOTING.md for
platform-specific fixes.
Contributors & Acknowledgments
- Z.ai (GLM) — co-developer: MCP server, cross-platform
backends, vision pipeline, python-Xlib window fallback and
ucc-doctordiagnostics - Claude Code (Anthropic) — co-developer: code generation, testing and plug-and-play hardening
- @adkdev200 — creator & maintainer
This project is built collaboratively with AI pair-programming: the majority of the codebase was written and reviewed by Z.ai's GLM and Anthropic's Claude Code under the direction of the maintainer.
Universal Computer Control MCPのよくある質問
Does this require a browser MCP or Playwright?
No, the system has no dependency on Chrome MCP, browser MCP, Playwright MCP, or any other external MCP server.
What operating systems are supported?
The server supports both Windows and Linux platforms.
How can I stop the AI agent if it goes out of control?
You can use the global emergency stop tool, which is persisted as a stop file to survive restarts.
Can it work without OCR or vision models?
Yes, the server is fully functional using only PyAutoGUI if other components are missing.