Skip to content

Releases: zavora-ai/computer-use-mcp

computer-use-mcp 7.1.0

Choose a tag to compare

@jkmaina jkmaina released this 23 Aug 08:23
5e52308

computer-use-mcp 7.1.0 release record

Release date: 2026-08-23

Version 7.1.0 keeps the 64-tool v7 API intact and adds MCP 2026-07-28 as a second protocol era. Existing 2025 clients continue through the legacy initialization path; modern clients use stateless, self-describing requests.

Compatibility boundary

Surface v7.0 v7.1
Tool names and input schemas 64 tools Same 64 tools
Legacy MCP Initialization and connection state Retained
MCP 2026-07-28 Not available Stateless stdio and Streamable HTTP
Minimum Node.js 18 20
Native targets macOS arm64/x64, Windows arm64/x64, Linux arm64/x64 Same six targets

The Node.js minimum is the only intentional runtime compatibility change. Tool callers do not need to rename tools or change v7 arguments.

Protocol implementation

  • server/discover and per-request protocol, client identity, and capability envelopes.
  • Required Streamable HTTP routing headers and loopback-safe bundled HTTP serving.
  • Private cache hints and response server identity.
  • In-band multi-round-trip Roots and exact-scope form elicitation with HMAC-authenticated, expiring request state.
  • subscriptions/listen delivery for filtered resource and list-change notifications.
  • Complete standard behavior annotations on all tools and assistant audience/priority annotations on resources.
  • The io.modelcontextprotocol/tasks extension for selected long-running read-only operations, with polling, update, cancellation, TTL, routing, and authenticated caller isolation.
  • Legacy logging, Roots, resource subscriptions, and elicitation during the MCP deprecation window.

Tasks are opt-in per request. A client that does not advertise the extension always receives an ordinary synchronous tool result. The stock TypeScript SDK 2.0.0 client supports the modern core but requires a host-provided Tasks extension codec before advertising Tasks.

Security and operational behavior

  • Filesystem access is constrained by the intersection of operator roots and client Roots.
  • Remote HTTP authentication is owned by the embedding host; the bundled command listens only on loopback and does not invent authentication claims.
  • Mutating tools retain policy, approval, target-focus, cancellation, session-lock, and audit controls.
  • Task IDs contain 192 random bits. Authenticated tasks are bound to the verified client ID; unauthenticated IDs are bearer capabilities.
  • Logs exclude arguments, results, scripts, clipboard values, secrets, accessibility contents, and image bytes.
  • The unreleased v8 preview, remote sidecar, desktop supervisor, contracts, and migration facade are not part of this release.

Verification evidence

Local release validation completed on macOS arm64:

  • 208 automated tests passed with zero failures.
  • Modern stateless discovery, Tasks, MRTR, annotations, cache hints, and subscriptions passed dedicated conformance tests.
  • Legacy and modern stdio serving both passed.
  • The native doctor reported 9 passed, 0 warned, 0 failed, and 1 inapplicable/skipped check.
  • The native module enumerated the display and windows, observed Accessibility state, captured a JPEG, and accepted a no-op pointer event without changing the cursor location.
  • Live TextEdit automation opened a new document, clicked its window, typed, pasted a verified clipboard value, saved a file, and read it through the MCP filesystem tool. The original clipboard text was restored.
  • Direct native typing preserved , café, and emoji exactly. Plain-text encoding selected by an application or AppleScript save command remains outside the input injector.
  • The final CI-built universal npm tarball contains 99 files, including all six native binaries, installs in a clean temporary project, and imports all seven public entry points.

The GitHub Actions release gate repeats the build and test suite on macOS arm64, Windows x64/arm64, and Linux x64/arm64, verifies packed contents and Node.js 20/22/24/current installation, builds all six native binaries, emits an SBOM and provenance attestations, and submits the exact root tarball through npm staged publishing. A maintainer reviews and approves that staged release with 2FA before it becomes public.

The repository retains lockstep manifests and resolver support for future split native packages. npm does not permit a brand-new package name to enter staged publishing, so v7.1 deliberately ships as one universal package rather than declaring six package names that cannot be staged under the organization policy.

Upgrade

npm install @zavora-ai/computer-use-mcp@7.1.0

Legacy hosts may keep their existing configuration. To use the modern HTTP runner locally:

npx -y --package @zavora-ai/computer-use-mcp@7.1.0 computer-use-mcp-http

Remote deployments should embed createComputerUseHttpHandler, verify OAuth externally, pass only verified authInfo, configure COMPUTER_USE_FS_ROOTS, and set COMPUTER_USE_REQUEST_STATE_SECRET when MRTR retries must survive process restarts.

v7.0.0 — Architecture finish: cancellation, progress, filesystem jail, native packaging

Choose a tag to compare

@jkmaina jkmaina released this 10 Jul 16:41
6cab28f

What's New

v7.0 completes the MCP modernization: protocol correctness, cancellation & progress, filesystem containment, a resilient native-binary layer, and a cleaner session architecture — across macOS, Windows, and Linux.

Highlights

  • Cancellation — tool calls honor the MCP host AbortSignal: wait returns early and run_script kills its child process when the host cancels.
  • Progress — long filesystem searches emit notifications/progress when the request carries a progress token (silent otherwise).
  • Filesystem jailCOMPUTER_USE_FS_ROOTS confines the filesystem tool to allowlisted absolute roots, blocking .. traversal and symlink escapes.
  • Native binary resolver + packaging — resolution order COMPUTER_USE_NATIVE_PATH → optional per-platform package → bundled binary; installs never fail on the native layer.
  • MCP modernization — tool annotations, structuredContent + outputSchema, server instructions, MCP prompts & resources, and init-time tool profiles (COMPUTER_USE_PROFILE=core|ax|scripting|windows-admin|full).
  • Approval elicitation — interactive approval when the host supports it; approval_token still wins for headless use.

Breaking

  • The [focusRequired: X] description suffix is off by default in v7 (focusRequired remains available via _meta and get_tool_metadata). Restore it with COMPUTER_USE_LEGACY_FOCUS_TAG=true.
  • Text-JSON result shapes: list_windows{ windows }, get_frontmost_app{ app }, get_active_space{ active_space_id }.

Install

npx --yes @zavora-ai/computer-use-mcp

The published package bundles prebuilt native binaries for all supported targets (darwin-arm64, darwin-x64, win32-x64, linux-x64, linux-arm64), so it works out of the box with no build step.

Full changelog: https://github.com/zavora-ai/computer-use-mcp/blob/main/CHANGELOG.md

v6.2.0 — Native Linux Support (X11 + Wayland)

Choose a tag to compare

@jkmaina jkmaina released this 16 May 18:46
68c8d24

What's New

This release adds native Linux support to computer-use-mcp, making it a true cross-platform desktop automation server for macOS, Windows, and Linux.

Linux Native Backend

Feature X11 Wayland (GNOME)
Mouse X11/XTest ydotool
Keyboard X11/XTest ydotool
Text input xdotool type ydotool type
Screenshots scrot XDG Desktop Portal
Clipboard xclip/xsel wl-copy/wl-paste
Windows wmctrl GNOME Shell D-Bus
Apps /proc + wmctrl /proc + GNOME D-Bus
Workspaces wmctrl wmctrl

Key Features

  • Runtime Wayland detection via XDG_SESSION_TYPE — auto-selects native tools
  • Zero impact on macOS/Windows — all code gated behind #[cfg(target_os = "linux")]
  • CI pipeline — Linux x64 build and test added to GitHub Actions

Requirements

Build: pkg-config, libx11-dev, libxtst-dev, libxrandr-dev

Runtime (X11): xdotool, wmctrl, xclip, scrot

Runtime (Wayland): ydotool, wl-clipboard, grim

Install

npx --yes @zavora-ai/computer-use-mcp

Or build from source:

git clone https://github.com/zavora-ai/computer-use-mcp
cd computer-use-mcp
sudo apt-get install -y pkg-config libx11-dev libxtst-dev libxrandr-dev
npm install
npm run build:native:linux
npm run build:ts

Full Changelog: v6.1.0...v6.2.0

v6.1.0 — Client API Parity + Agent Examples

Choose a tag to compare

@jkmaina jkmaina released this 27 Apr 04:43
f29f031

Client API parity

  • Added typed methods: zoom, tripleClick, middleClick, mouseDown, mouseUp, holdKey, getToolMetadata
  • Updated type() with clear, pressEnter, caretPosition options
  • Updated key() with repeat option

Agent examples

Three ready-to-run agent examples that connect an LLM to computer-use-mcp:

  • Claude agent — Anthropic Claude with vision support (tested, working)
  • OpenAI agent — GPT-4o with function calling
  • LangChain agent — LangChain + Claude with tool binding

Fixes

  • Fixed .gitignore encoding (was UTF-16 from Windows edits)
  • Added zoom-output/ to gitignore

v6.0.0 — Native Windows Support

Choose a tag to compare

@jkmaina jkmaina released this 27 Apr 02:56

What's New

v6.0 transforms computer-use-mcp from a macOS-only tool into a cross-platform desktop automation server supporting both macOS and Windows.

Windows Native Modules (Rust)

Every Windows API call goes through Rust via windows-rs — no Python, no pywin32, no subprocess overhead.

  • Mouse — SendInput with absolute coordinates, move-and-settle
  • Keyboard — SendInput + KEYEVENTF_UNICODE, full VK code map
  • Screenshot — DXGI Desktop Duplication + GDI fallback, PNG support
  • Clipboard — Native Win32, 31x faster than pywin32
  • Window management — EnumWindows + SetForegroundWindow, 97x faster
  • UI Automation — IUIAutomation COM with tree walking + element search
  • Display — EnumDisplayMonitors + GetDpiForMonitor
  • Virtual Desktops — Registry-based enumeration + keyboard shortcuts

New Tools (58 total, up from 46)

filesystem, process_kill, registry, notification, multi_select, multi_edit, scrape, snapshot, zoom, resize_window, create_agent_space, destroy_space

macOS Feature Parity

  • Zoom and snapshot annotations use native Rust image processing on both platforms
  • resize_window works via AppleScript on macOS
  • 10 macOS examples: calculator, browser, crypto spreadsheet, budget template, email, calendar, contacts, VS Code, terminal

Performance vs Python Reference

Operation Rust NAPI Windows-MCP (Python) Speedup
Screenshot (800px) 20ms 32ms 1.6x
Clipboard round-trip 0.7ms 21ms 30x
Window listing 1.7ms 165ms 97x
Frontmost app 0.2ms 169ms 845x

CI Pipeline

GitHub Actions builds on macOS arm64, macOS x64, and Windows x64 with automated testing.

Breaking Changes

  • package.json os field: ["darwin"]["darwin", "win32"]
  • run_script language enum now includes "powershell"

v3.0.0 — Multi-provider vision support

Choose a tag to compare

@jkmaina jkmaina released this 02 Apr 20:10

What's new

Multi-provider screenshot sizing

provider param on screenshot sets optimal width per AI provider:

Provider Width Est. tokens
anthropic 1024px ~928
openai 1024px ~765
gemini 768px ~258–516
qwen / deepseek-vl / phi 896px ~512–768
openai-low 512px 85 (flat)

JPEG quality control

quality param (1–100) on screenshot. Default: 80. Lower = fewer bytes = fewer tokens.

Non-vision model support

COMPUTER_USE_VISION=false makes screenshot return text metadata instead of an image — enables DeepSeek-V3, R1, and other text-only models.

Reliability fixes

  • Move-and-settle (50ms) before every click — fixes missed clicks on fast UIs
  • Clipboard-based typing for text >100 chars — fixes long text in Electron/web apps
  • Animated drag — ease-out-cubic at 60fps

Other

  • Screenshot deduplication
  • COMPUTER_USE_PROVIDER env var for server-wide default
  • createComputerUseServer({ vision, provider }) programmatic config

v2.0.4 — Fix client screenshot() params

Choose a tag to compare

@jkmaina jkmaina released this 02 Apr 19:06

What's fixed

client.screenshot() now accepts width and target_app parameters.

Previously, calling client.screenshot({ target_app: 'com.apple.iCal' }) would silently drop the arguments and capture the full screen instead of the app window. The method signature was missing the params entirely.

Changes

  • client.screenshot(args?: { width?: number; target_app?: string })
  • Args are now forwarded to the MCP tool call correctly

Upgrade

npm install -g @zavora-ai/computer-use-mcp

Or update your mcp.json — npx will pick up the latest automatically.

v2.0.0 — Initial public release

Choose a tag to compare

@jkmaina jkmaina released this 01 Apr 21:46

computer-use-mcp v2.0.0

MCP server + client for macOS computer control. 24 tools covering screenshot, mouse, keyboard, clipboard, app management, and display info — all in-process via Rust NAPI (no subprocesses, no focus stealing).

Install

npx @zavora-ai/computer-use-mcp

MCP client config (Claude Desktop, Cursor, Windsurf)

{
  "mcpServers": {
    "computer-use": {
      "command": "npx",
      "args": ["-y", "@zavora-ai/computer-use-mcp"]
    }
  }
}

What's included

  • 24 MCP tools: screenshot, mouse (11), keyboard (3), clipboard (2), apps (4), display (2), wait
  • Typed TypeScript client with in-process and stdio transport
  • Rust NAPI native module — CGEvent, NSWorkspace, CoreGraphics
  • Full input validation at two layers (Zod + session guards)
  • Security hardened: O_EXCL temp files, no shell injection, bounded waits

Requirements

  • macOS 10.15+ (Catalina)
  • Node.js 18+
  • Accessibility permission granted to your terminal

See README for full documentation.