Universal Computer Control MCP server
2026년 10월 28일 커밋접근성 레이어, OCR 및 비전 모델을 통해 AI agent가 Windows 또는 Linux 컴퓨터를 관찰하고, 클릭하고, 타이핑하며 제어할 수 있도록 합니다.
다른 이름 adkdev200/Universal-Computer-Control
- 스타
- 2
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 10월 28일
- 라이선스
- MIT
Universal Computer Control MCP란?
Universal Computer Control은(는) MCP server입니다. 접근성 레이어, OCR 및 비전 모델을 통해 AI agent가 Windows 또는 Linux 컴퓨터를 관찰하고, 클릭하고, 타이핑하며 제어할 수 있도록 합니다.
프로젝트 README에서 생성된 요약
Universal Computer Control MCP server 정보
모든 컴퓨터에서 AI agent에게 눈과 손을 제공하는 것이 이 MCP server의 주요 목표입니다. Playwright와 같은 브라우저 전용 프로토콜에 의존하는 대신, 실제 그래phical user interface와 상호작용하여 AI client가 Windows 또는 Linux 머신을 관찰하고, 클릭하고, 타이핑하며 제어할 수 있도록 합니다. 이를 통해 IDE, 오피스 제품군, 터미널 및 기타 모든 데스크톱 애플리케이션을 제어하는 데 적합합니다.
이 server는 stdio를 통해 로컬에서 작동하며 computer 네임스페이스 아래 29개의 도구를 제공합니다. Windows UIA 또는 Linux AT-SPI와 같은 접근성 레이어에서 시작하여 OCR, 이미지 템플릿, 비전-언어 모델로 이어지는 자동 폴백 계층 구조를 사용합니다. 이를 통해 하나의 방법으로 버튼이나 텍스트를 식별하지 못하더라도 시스템이 자동으로 다른 방법을 시도하여 입력에 필요한 정확한 좌표를 찾습니다.
개발자는 명령 허용 목록 및 위험한 작업에 대한 확인 게이트를 포함하여 허용(permissive), 표준(standard), 엄격(strict) 모드를 통해 보안을 구성할 수 있습니다. 또한 모든 작업을 즉시 중단할 수 있는 글로벌 비상 정지 기능도 포함되어 있습니다. 설정에는 Python 3.11 이상이 필요하며, 향상된 시각적 이해를 위해 OpenAI 호환 비전 엔드포인트로 확장할 수 있습니다.
활용 사례
- 1데스크톱 애플리케이션 워크플로 자동화AI agent가 UI 요소와 상호작용하여 파일 관리자나 특화된 IDE와 같은 비브라우저 소프트웨어를 탐색할 수 있습니다.
- 2시각적 요소 식별 수행접근성 데이터를 사용할 수 없는 경우, OCR 또는 비전 모델을 사용하여 화면에서 특정 버튼이나 텍스트를 찾을 수 있습니다.
프로젝트의 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 질문
browser MCP나 Playwright가 필요한가요?
아니요, 이 시스템은 Chrome MCP, browser MCP, Playwright MCP 또는 기타 외부 MCP server에 의존하지 않습니다.
지원되는 운영체제는 무엇인가요?
이 server는 Windows와 Linux 플랫폼을 모두 지원합니다.
AI agent가 통제 불능 상태가 되면 어떻게 중지하나요?
글로벌 비상 정지 도구를 사용할 수 있으며, 이는 재시작 후에도 유지되도록 stop file로 저장됩니다.
OCR이나 비전 모델 없이도 작동할 수 있나요?
네, 다른 구성 요소가 없더라도 PyAutoGUI만 사용하여 서버의 모든 기능을 사용할 수 있습니다.