Repository navigation
Releases: mhrsdev/zero-use-computer
Release list
computer-use-mcp v5.5.0
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v5.5.0
The settings panel in Persian, Chinese and Russian, an import you can look
at before it is made, settings that go back with the program, and stop and
settings buttons on the overlay's label
(all commits).
- The settings panel speaks Persian, Chinese and Russian (English as
before): a language picker at the top,panel.language(autofollows
the browser). Persian is laid out right to left (mirrored layout, the
switch's knob, tables and numbers kept left to right, no letter spacing
that would break joined letters) and brings its own font (Vazirmatn, SIL
OFL); Chinese uses the system's. Every setting, its help, the guide pages
and the messages are translated; a text without a translation shows in
English.scripts/panel-i18n.mjsmakes the list of texts and
scripts/panel-i18n-check.mjschecks a translation against it; a test
fails when a text of the page isn't in the list or a language lacks one. - An import is shown before it is made. Paste settings and the page lists
each one as it is now and as it would be, which ask for a yes, and which
this version can't take (a setting only a newer version has, or a value
out of range): those are flagged, left out, and named afterwards. An
export says which version made it (# Zero Use Computer 5.0.2 settings),
so the page can say why a setting is unknown. The settings from before an
import are kept (settings-before-import.toml) and Undo the last
import brings them back. - Going back to a version brings its settings back. The settings file is
kept with the program an update replaces, andupdate --rollback/ the
panel's Go back put it back with it (--keep-settingsor the
checkbox to leave the settings as they are); the ones it replaces stay
beside the file asconfig.toml.before-rollback. - A page of the panel that waits on the server no longer lands on the page
the user went to meanwhile. - Stop and settings buttons beside the overlay's label
(overlay.show_buttons, on). A round stop button on the side the label
starts from stops every agent, as the stop key does; with the pointer
on it, a list drops out with "All agents" and each agent as its label
names it ("2 · codex", its state colour, its app): a row stops that one
agent alone (it is refused its calls as with the stop key), or lets a
stopped one continue. A gear on the other side opens the settings panel,
asCtrl+Alt+Jdoes. They light up under the pointer, say what they do,
and are at least 24 px across. Only they and the list take the pointer:
the rest of the overlay stays click-through, and nothing takes the
keyboard focus. The agent can't press them: before it moves or clicks
the real mouse the overlay lets its input through them (and says so
before the engine goes on), until the action is over. With any agent
stopped, the stop key now lets every agent continue. - X11 tested (Xvfb, two agents on a hub, clicks through XTEST); the
Windows, macOS and Wayland code is built for those systems but not yet
run there. Without a pointer to read (a Wayland seat without one), the
buttons aren't shown.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
Full Changelog: v5.0.2...v5.5.0
computer-use-mcp v5.0.2
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v5.0.2
The plugin installs the program itself: the repository's plugin/ folder,
the one the Claude directory lists, starts a small launcher that downloads
the right build on first use, checks it, and runs it. The program is the
same as v5.0.1's
(all commits).
plugin/: the plugin from the repository. The manifest, the MCP
entry, the skills andlauncher/(Node.js 18 or newer, no
dependencies). The launcher runs the program in~/.computer-use/bin
(the folderinstall.sh/install.cmdand the updater use) when it is
the plugin's version or newer. When it is missing, it downloads
computer-use-mcp-<system>.zipof the plugin's release (or the latest,
if that one is not out yet), checks it against the release's SHA-256,
runs the program once and only then moves it into place; a download cut
off goes on where it stopped, two chats starting at once install once,
anhttp(s)://proxy inHTTPS_PROXYis used. Meanwhile a stand-in
answers the client with one tool,setup_status, and hands over to the
program when it is ready (the client is told its tools changed). An
older program runs at once and the plugin's version is installed for the
next start.COMPUTER_USE_MCP_BINruns another program instead.- Each release zip has its SHA-256 beside it (
<zip>.sha256), so the
launcher needs no call to GitHub's API (60 an hour from one address). - The repository no longer carries the launch films (
promo/).
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
Full Changelog: v5.0.1...v5.0.2
computer-use-mcp v5.0.1
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v5.0.1
v5.0: the settings panel, and a hub that shares the screen out by what
each agent at work needs; with a fix for every Linux version so far (one
call could take a KDE session down). What was tried out as v5.0.0-preview
and v5.0.1-preview; a preview build takes this release
(plan,
guide,
upgrading,
all commits).
Fixes and the hub
- Qt apps crashed when the server read them, KWin and Plasma too. The
server asked each app for all of an element's properties at once
(Properties.GetAll). Qt's accessibility bridge, up to Qt 6.9, reads a
second argument from every such call, and that one has only one: the app
crashes. KWin is a Qt program, so onelist_apps(ordoctor, which
install.shruns) closed every window, and a restarted KWin was crashed
again by the next look. Each property is now asked for on its own, as Qt
expects, and an element is asked for its extents and actions only when it
says it has them (GTK printed warnings for the others). A new live test
in CI reads, clicks and types in a real Qt app; the old code fails it. - The desktop's own processes are never asked anything: the compositor
(KWin, GNOME Shell, Xwayland), Plasma, the session manager, portals,
kded, KWallet, the polkit agent. Their pid comes from the bus, not from
them, and they aren't listed as apps. - An app that quits while answering is left alone for 10 minutes (by
its program, so a restarted copy is too): a call that crashes an app is
never made to it again and again. Its windows are still listed, for
screenshots and the mouse and keyboard. doctorno longer switches the desktop's accessibility on; it says
whether it is on. A server switches it on when it is off (Qt, Firefox and
Chromium show nothing without it) and the last server to end switches it
off again.- The hub shares the screen out by need, among the agents at work.
Every server took a part of the screen as soon as it started, so other
chats that never used the computer split it with the one at work (one
agent working in a third of the screen, its glow around that third), and
the parts were even or a fixed half, third or quarter. Now only agents at
work have a part (one that makes no call forhub.release_after_secs,
120, gives it up until its next call); each gets what its window needs
(a full-size window and two small ones: a half and two quarters; 35% and
65% windows: just that); a window the agent moved, resized, tiled or
maximized itself stays where it put it while the others share the rest;
a window that won't shrink keeps its least size;agentsarea takes a
share such as35%. The parts follow where the windows are, a change of
under 4% of the screen moves nothing, and a window moves only when its
agent looks next.agentslist marks the idle ones. (The hub protocol is
version 2: a server of this version and a hub of an older one don't mix.) install.shandinstall.cmdadd the program aszero-use-computer
when Claude Code keeps the namecomputer-usefor itself ("this name
is reserved"), as the panel's Connect page already did, and say if adding
it failed.--uninstallremoves either name.
If a KDE session crashed: log out and back in (or restart), then update. To
switch accessibility off again: busctl --user set-property org.a11y.Bus /org/a11y/bus org.a11y.Status IsEnabled b false and, on GNOME-based
desktops, gsettings set org.gnome.desktop.interface toolkit-accessibility false.
The settings panel
- One panel for every setting (
computer-use-mcp settings,
Ctrl+Alt+J, ordecide setup="open"): 187 settings in 22 groups, each with
its help, its default and a reset, search, "changed from default", light,
dark and automatic themes in Material Design 3 style with an accent colour.
A test fails when a setting has no entry in the panel. Its address is the
same every time (panel.port, a token in a file only you can read); it
listens only while it is open. It sends its schema once and only the
values that differ from the defaults after that (45 KB a request to 0.2 KB). - The agent never uses it. A window whose title says "Zero panel
[private]" is refused by every tool. Settings that limit the agent or the
updates ask you to confirm, in the page and in the server; secrets are
written but never sent back. - Previews: how the pointer glides (from the program's own path maker),
how the overlay's border, label and colours fit, what a picture costs in
tokens. - Profiles (Low tokens, Balanced, Best quality, Showcase, and your own),
the tool list with what each tool costs, the apps report, the
audit log, the settings file as text (checked as a whole, secrets
covered) and import and export as TOML. - Update controls: look every 5 minutes or more (
check_every_mins) or
never, stable or pre-release channel, pin a version, skip a version. A look
asks GitHub only "has it changed?" (the tag is kept once a look is over);
GitHub's "slow down" is waited out for an hour. The program an update
replaces is kept, and Go back /update --rollbackputs it in place.
The panel shows when it last looked, what waits and its notes. - One button to add it to the agents you use: the Connect page and
computer-use-mcp installfor Claude Code, Claude Desktop, Codex, Cursor
and VS Code. Only its own entry is written, the rest of each file stays in
its own order with its comments, a.bakcopy is kept, a file with
mistakes is left alone, and the program is kept at
~/.computer-use/binso it stays where the agents look. Newer Claude Code
keeps the namecomputer-use; the program is then added as
zero-use-computer. - A shortcut that opens the panel: on the desktop and with the system's
apps (a.desktopfile on Linux, a small app on a Mac, a.lnkon
Windows), made, made again or taken away from the panel's Desktop shortcut
page or withcomputer-use-mcp shortcut. It starts
computer-use-mcp settings, which serves the panel on its own port and
opens it in the browser, or shows the one already open. Only shortcuts the
program made are ever removed.settingsnow serves the panel even when no
browser can be opened, and prints its address. - A guide inside the panel: nine short pages.
- More to turn: the pointer's
trail,lean_strengthandbreathe
(and how strong each is), and the real mouse'smouse_speed,
mouse_overshootandmouse_jitter. The real mouse travels only the last
stretch of a reach, somouse_overshoot(0 by default, as before) decides
how often a long reach comes in a touch past its target. - A reset leaves no empty section in the settings file.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
Full Changelog: v4.0.1...v5.0.1
computer-use-mcp v5.0.1-preview
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v5.0.1-preview
A fix for every Linux version so far (one call could take a KDE session
down), and a hub that shares the screen out by what each agent at work
needs (all commits).
- Qt apps crashed when the server read them, KWin and Plasma too. The
server asked each app for all of an element's properties at once
(Properties.GetAll). Qt's accessibility bridge, up to Qt 6.9, reads a
second argument from every such call, and that one has only one: the app
crashes. KWin is a Qt program, so onelist_apps(ordoctor, which
install.shruns) closed every window, and a restarted KWin was crashed
again by the next look. Each property is now asked for on its own, as Qt
expects, and an element is asked for its extents and actions only when it
says it has them (GTK printed warnings for the others). A new live test
in CI reads, clicks and types in a real Qt app; the old code fails it. - The desktop's own processes are never asked anything: the compositor
(KWin, GNOME Shell, Xwayland), Plasma, the session manager, portals,
kded, KWallet, the polkit agent. Their pid comes from the bus, not from
them, and they aren't listed as apps. - An app that quits while answering is left alone for 10 minutes (by
its program, so a restarted copy is too): a call that crashes an app is
never made to it again and again. Its windows are still listed, for
screenshots and the mouse and keyboard. doctorno longer switches the desktop's accessibility on; it says
whether it is on. A server switches it on when it is off (Qt, Firefox and
Chromium show nothing without it) and the last server to end switches it
off again.- The hub shares the screen out by need, among the agents at work.
Every server took a part of the screen as soon as it started, so other
chats that never used the computer split it with the one at work (one
agent working in a third of the screen, its glow around that third), and
the parts were even or a fixed half, third or quarter. Now only agents at
work have a part (one that makes no call forhub.release_after_secs,
120, gives it up until its next call); each gets what its window needs
(a full-size window and two small ones: a half and two quarters; 35% and
65% windows: just that); a window the agent moved, resized, tiled or
maximized itself stays where it put it while the others share the rest;
a window that won't shrink keeps its least size;agentsarea takes a
share such as35%. The parts follow where the windows are, a change of
under 4% of the screen moves nothing, and a window moves only when its
agent looks next.agentslist marks the idle ones. (The hub protocol is
version 2: a server of this version and a hub of an older one don't mix.) install.shandinstall.cmdadd the program aszero-use-computer
when Claude Code keeps the namecomputer-usefor itself ("this name
is reserved"), as the panel's Connect page already did, and say if adding
it failed.--uninstallremoves either name.
If a KDE session crashed: log out and back in (or restart), then update. To
switch accessibility off again: busctl --user set-property org.a11y.Bus /org/a11y/bus org.a11y.Status IsEnabled b false and, on GNOME-based
desktops, gsettings set org.gnome.desktop.interface toolkit-accessibility false.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
Full Changelog: v5.0.0-preview...v5.0.1-preview
computer-use-mcp v5.0.0-preview
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v5.0.0-preview
A preview of v5.0: the settings panel, and everything it needed (what was
planned as v4.8). A preview build takes the finished v5.0.0 release when it
comes out; it isn't offered to anyone by the updater itself
(plan,
guide,
all commits).
- One panel for every setting (
computer-use-mcp settings,
Ctrl+Alt+J, ordecide setup="open"): 187 settings in 22 groups, each with
its help, its default and a reset, search, "changed from default", light,
dark and automatic themes in Material Design 3 style with an accent colour.
A test fails when a setting has no entry in the panel. Its address is the
same every time (panel.port, a token in a file only you can read); it
listens only while it is open. It sends its schema once and only the
values that differ from the defaults after that (45 KB a request to 0.2 KB). - The agent never uses it. A window whose title says "Zero panel
[private]" is refused by every tool. Settings that limit the agent or the
updates ask you to confirm, in the page and in the server; secrets are
written but never sent back. - Previews: how the pointer glides (from the program's own path maker),
how the overlay's border, label and colours fit, what a picture costs in
tokens. - Profiles (Low tokens, Balanced, Best quality, Showcase, and your own),
the tool list with what each tool costs, the apps report, the
audit log, the settings file as text (checked as a whole, secrets
covered) and import and export as TOML. - Update controls: look every 5 minutes or more (
check_every_mins) or
never, stable or pre-release channel, pin a version, skip a version. A look
asks GitHub only "has it changed?" (the tag is kept once a look is over);
GitHub's "slow down" is waited out for an hour. The program an update
replaces is kept, and Go back /update --rollbackputs it in place.
The panel shows when it last looked, what waits and its notes. - One button to add it to the agents you use: the Connect page and
computer-use-mcp installfor Claude Code, Claude Desktop, Codex, Cursor
and VS Code. Only its own entry is written, the rest of each file stays in
its own order with its comments, a.bakcopy is kept, a file with
mistakes is left alone, and the program is kept at
~/.computer-use/binso it stays where the agents look. Newer Claude Code
keeps the namecomputer-use; the program is then added as
zero-use-computer. - A shortcut that opens the panel: on the desktop and with the system's
apps (a.desktopfile on Linux, a small app on a Mac, a.lnkon
Windows), made, made again or taken away from the panel's Desktop shortcut
page or withcomputer-use-mcp shortcut. It starts
computer-use-mcp settings, which serves the panel on its own port and
opens it in the browser, or shows the one already open. Only shortcuts the
program made are ever removed.settingsnow serves the panel even when no
browser can be opened, and prints its address. - A guide inside the panel: nine short pages.
- More to turn: the pointer's
trail,lean_strengthandbreathe
(and how strong each is), and the real mouse'smouse_speed,
mouse_overshootandmouse_jitter. The real mouse travels only the last
stretch of a reach, somouse_overshoot(0 by default, as before) decides
how often a long reach comes in a touch past its target. - A reset leaves no empty section in the settings file.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
Full Changelog: v4.0.1...v5.0.0-preview
computer-use-mcp v4.0.1
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v4.0.1
Two fixes to v4.0.0
(all commits).
- The user's pointer followed the agent's on Windows and Linux: where
an action used the real mouse, v4.0.0 moved the user's pointer the whole
way from where it was, up to 0.8 s, before bringing it back. An app sees
the pointer only over its own window, so the way across the rest of the
screen showed it nothing and only took the pointer from the user. Now
the pointer goes at once to a short stretch (70–140 px) from the target
and travels only that, in a hand's way, then goes back: under traced
X11, 0.34 s away from where the user left it (it was 0.6–0.8 s).
natural_mouse = falsestill makes it a jump there and back. - The pointers looked rough at their real size: a picture shrunk about
sixfold in one step lost its edges and its fine light to speckle (the
crystal most), and some vanished on some backgrounds (ice on white,
orbit on dark, chrome on grey). Each picture is now drawn from a halved
copy near its size on screen, with a thin light edge and a soft shadow
cut from its solid part, so it stays clear on light, grey and dark. - The pointers are 17% bigger (a 3D picture needs the room to show),
and their name tag sits under them: beside them it covered the
metal's drop and the paper's tail. Typed text runs out under the tag.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
What's Changed
- v4.0.1: the user's pointer no longer follows the agent's; sharper, bigger pointers with the tag under them by @mhrsdev in #18
Full Changelog: v4.0.0...v4.0.1
computer-use-mcp v4.0.0
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v4.0.0
New pointers for the agent that move like a hand, a mouse that moves like
one too in five ways, updates that install themselves after a restart,
and the overlay kept out of screenshots on X11
(all commits).
-
Six new pointers, each clicking its own way: crystal, paper, jelly,
ice, liquid metal and orbit, 3D renders cut out with their glow (about
65 KB each, inassets/cursors). A click moves the picture itself:- jelly: it squashes flat and wobbles back;
- ice: it runs down in drips, drops fall from its points, then it
freezes back; - paper: the wing opens out from the fold and folds back;
- metal: it gives a little and drops of chrome splash out;
- crystal: light floods through it and breaks out in colours;
- orbit: the pearl leaves its place and races once round the ring.
Each session picks one at random; agents working at once each get a
different one while there are pointers to go round. The state colour
glows behind the pointer, and the name tag takes the pointer's own
look (clear glass with a rainbow edge, satin paper, jelly, frost,
chrome edged in gold, dark crystal); a click shows
for 0.7 s (was 0.45).overlay.cursor_stylenames one ("jelly", …),
"classic"keeps the plain arrow,"random"is the default. -
The pointer moves like a hand (
overlay.cursor_motion, on): it
swings to where it acts in a gentle arc, leans into the move and leaves
a trail of its own material (sparkles of colour, gold flecks, a gooey
tail, frost, drops of chrome, a glowing streak); waiting, it breathes
(the jelly wobbles, the paper sways, a glint runs over glass, ice and
chrome). A drag draws its line along the way it went, in the pointer's
material, and fades; a scroll shows arrows the way it goes. -
Keys and typing by the pointer (
overlay.show_keys, on): keys
pressed show as keycaps in the pointer's material that go down and come
up ("Ctrl" "S"); typed text runs out a letter at a time in a bubble
under the name tag, with a caret. Into a password field it shows dots. -
A pointer per agent (
overlay.agent_cursors):{ codex = "metal", "claude-code" = "jelly" }gives an agent its pointer by its MCP
client's name or its tag, whatevercursor_stylesays. -
The real mouse moves like a hand (
natural_mouse, on): where an
action falls back to the mouse (a click, a drag, a scroll, a hover, the
way to a drawing's strokes), the pointer no longer jumps there or goes
in a straight line at an even speed, which some apps notice. It goes
along a gentle curve to one side, quick to start and slower to settle,
with a slight tremor, a long reach sometimes a touch past and back
(Fitts's law timing: about 0.3 s for a short reach, 0.6 s across the
screen); the wheel turns a notch at a time. On X11, Wayland (wlroots) and Windows the
real pointer moves so; on macOS the app gets the same path of events
without the user's cursor moving. Afterwards the pointer still goes
straight back where the user left it (restore_pointer).natural_mouse = falsebrings back the jump. -
Five ways to move (
mouse_pathfor the real mouse,
overlay.cursor_pathfor the agent's pointer; "mixed", the default,
picks one at random for each move): a hand's curve, a sine wave (one or
two swings across the way, calm at both ends), a circular arc, a spring
(an underdamped step: 6–10% past the target and back, settling) and a
spiral in to the target (a sixth to a third of a turn). Each takes a
hand's time and ends exactly on the target. A drag goes straight
whatever the setting, with a hand's timing and a faint tremor: it may be
drawing a line in a paint program. -
Updates (
[update], on): five minutes after the server starts,
then every 12 hours (shared by the servers on the computer), it asks
GitHub for the latest release. A newer one is downloaded, checked
against GitHub's SHA-256 for it (none, no update; only the repository's
own release files, no pre-releases), unpacked into
~/.computer-use/updates/and its program asked its version, then left
waiting: nothing is replaced while an agent may be working. The first
time the server starts after the computer restarts, the new version
takes the program's place (and the package's skills and files, when it
runs from an unpacked package or plugin) and the server goes on as it.
install = "start"or"manual"changes when;computer-use-mcp update
looks now,update --installputs it in now;doctorshows what waits. -
The overlay could be in the agent's screenshots on X11 without a
compositor: the engine waited 150 ms for the overlay to say it was
hidden, and a helper busy drawing (a glide, a fade) answered later, so
the picture was taken with the border in it, about one time in two in
the live test. It now waits up to a second for that answer.
Checked
- 522 tests in the library (new: every pointer keeps its tip on the spot
through a click and while it breathes; agents at once get different
pointers; every path style ends on the target in a hand's time without
jumps, has its own shape, and a drag goes straight; the swing, lean and
trail; keys, typing, scrolls and drags show and go; an agent's own
pointer; versions, SHA-256 and CRC-32 against known values, only a newer
checked release of the repository is taken, a zip unpacks and a bad or
escaping one is refused, an update goes in asinstallsays and
replaces the program and the package), 55 in the server; clippy on Linux,
Windows and macOS; Rust 1.88; the live Linux tests 10 of 10 with the
natural mouse on, the overlay test 10 runs of 10 (5 of 10 before); four
agents on one hub under Xvfb showed four different pointers. Under Xvfb
the real pointer was traced through a click: 650 px along a curve up to
54 px off the straight line in about 0.55 s, then back where it was;
keycaps, the typed bubble and a drag's line were seen on the live
overlay. Updates end to end: a build calling itself 3.9.6 downloaded
the real v3.9.7 from GitHub (its SHA-256 matched), waited while the
computer had not restarted, and withinstall = "start"put v3.9.7 and
its package in place and went on as it; the look five minutes in found
this version the latest. Not seen on a Windows or macOS desktop, nor on
Wayland.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
What's Changed
- v4.0.0: picture pointers, natural mouse in five ways, keys/typing/drags/scrolls by the pointer, self-updates after restart; overlay kept out of X11 screenshots by @mhrsdev in #17
Full Changelog: v3.9.7...v4.0.0
computer-use-mcp v3.9.7
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v3.9.7
A debugging release: the whole project read twice, line by line, and what
was wrong fixed (all commits).
The first read found about 100 problems, the second (of the fixed code)
about 50 more, some of them in the first read's fixes. Most are small; the
ones that matter:
Security and privacy
- Anyone who could reach the HTTP port could stop the server, without
the token: a request declaring a huge body made the HTTP library
allocate that much and abort, and requests that never sent their body
could hold every slot for good. The HTTP library (tiny_http 0.12) is now
a patched copy invendor/(each change invendor/tiny_http/PATCHED.md):
unread bodies are drained within limits, header lines are capped, and a
request that stops arriving times out after 10 s. A body left unread is
no longer read as the next request. - Text read off the screen inside a private field reached the model
(a verification code in a field whose value the app doesn't expose):
the screenshot was blacked out, the tree still had it. OCR lines inside
private areas are left out, also after the window moves. - The audit log kept values: the first line of a
set_valueresult
holds the value set, passwords included. The log keeps only what comes
before any quoted text or expectation. - Scripts: a path going up (
..) out of a folder not made yet got past
the private-folder check (with[script] files = "all"a script could
rewrite the server's settings); a script importing itself crashed the
server; regular expressions, CSV and numbers could use up all memory or
run past the time limit; a failed download deleted the file it was to
replace;elements(),colors()andpage()ignored tools switched off. - A settings file that holds the HTTP token is now readable by its owner
only, andconfig show/config getshow only the token's end. - Exports go to a folder only the user can open (
computer-use-exports-<uid>
on Linux and macOS), not a shared one. - Windows: text a password manager marks as concealed is not read from
the clipboard (as on macOS).
Wrong results
- After
windowmoved a window, a click by element index landed where
the element used to be (perhaps in another app), and full-screen
screenshots blacked out private areas at their old places. - Text read off a window (OCR) was reused at its old place after the window
moved; it now moves with the window. decide pick: a number in the model's answer was taken as a position
(the 57th option, not element 57), and 65, 129, … candidates made the
whole pick fail.- The two OCR readings were merged badly when they split words differently
(a word lost or doubled); "7 8 9" and "1 2 3 4 5" were taken for a ruler
and dropped; a lone digit read unsurely was kept as text. - macOS: text with a broken emoji (a lone half of a pair) crashed reading a
window or the clipboard. Windows: such text was dropped. - Windows: a console program launched with
launch_appshared the
server's (often hidden) console instead of getting its own window. - Linux: windows of apps without accessibility could be confused (two
terminals titled "~"); a missing modifier key (no Super on the layout)
was silently left out of a shortcut; a hung session bus could switch
accessibility off for good; minimize on window managers that keep
minimized windows mapped was reported as refused. - Wayland overlay: a cursor moved to another monitor went invisible.
- The hub: a working stop key could be reported as not working, and an
agent could miss that its key was replaced; a stop could undo the user's
"continue" a moment after it. press_key "ctrl + s"(with spaces) failed; a batch step written as
{"tool": "get_app_state", "app": "Safari"}dropped the app; a zoom on the
last column of a screenshot was refused; a notification's code was not
masked when only its title said "PIN".- The
longbench scenario's rare failure: the test app filtered its table
150 ms late, and the scripted run reused an old element number. - Two servers writing
apps.jsonat once lost counts; new apps were never
kept once 200 were recorded. - CI could publish a release with failing tests; it now waits for them.
Not fixed
- On Hyprland with
force_zero_scalingand a scaled monitor, element
positions in X11 apps may be off (needs that desktop to fix safely). - A client with the token that stops reading answers can still slow the
other sessions (the HTTP library gives no write timeout). - The hub doesn't prove to an agent that it is the real one (a protocol
change).
Checked
- 501 tests in the library, 55 in the server (each fix with a test where it
can run without a desktop); clippy on Linux, Windows and macOS; Rust 1.88;
the live Linux tests under Xvfb (10 of 10); the scriptedlongandtable
benchmark 40 of 40 runs. The Windows and macOS fixes were checked by
reading and by CI (the Windows overlay live test), not on real desktops.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
What's Changed
- v3.9.7: a debugging release, the whole project read twice line by line by @mhrsdev in #15
- Fix a Windows test that rewrote the settings file twice in a moment by @mhrsdev in #16
Full Changelog: v3.9.6...v3.9.7
computer-use-mcp v3.9.6
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v3.9.6
The stop key on a Mac, named so it is pressed
(all commits).
- On a Mac the stop key was called "Ctrl+Option+Esc" (and "Ctrl+Alt+Esc"
in the README and indoctor). Read on a Mac keyboard, "Ctrl" passes for
Cmd, and Cmd+Option+Esc is the system's Force Quit window: pressed in an
emergency, it opened that window and the agent went on. The key itself
was always Control+Option+Esc (the two don't clash). Now the overlay,
what the agent is told anddoctorname it as the Mac keyboard does,
Control+Option+Esc, and the README and the guide say it isn't
Cmd+Option+Esc. Windows and Linux keep "Ctrl+Alt+Esc". doctorshows both keys as the keyboard names them (it printed the
setting as written, "ctrl+alt+escape").
Checked
- 429 tests in the library (a new one for the names on each system), 41
in the server; clippy on Linux, Windows and macOS; Rust 1.88. Not seen on
a Mac: CI only type-checks macOS.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
What's Changed
Full Changelog: v3.9.5...v3.9.6
computer-use-mcp v3.9.5
MCP server for Claude Code (and any MCP client): control desktop apps
through their accessibility tree plus screenshots.
What's new in v3.9.5
An urgent fix for Windows: the overlay and the stop key went away during a
session (all commits).
- The overlay disappeared, and with it the emergency stop key, on
Windows, from v3.9.0 (when the hub came) to v3.9.4. Joining the hub, the
server waits at most 3 s for its welcome and then clears that wait; but
Windows keeps a socket's read timeout per handle, and it was cleared on
another handle than the one that reads. So every 3 quiet seconds (a
model thinking between two calls) read as "the hub went away": the
server joined again, three times, then counted it as a failure, and
after a few of those stopped trying. From then on the agent worked
with no overlay and Ctrl+Alt+Esc did nothing ("the emergency stop key
is not working" in the server's log). Now the wait is cleared on every
handle, a read that times out is never taken for the end, and a hub
connection that held for a minute starts the count of losses again.
Linux and macOS share a socket's settings between handles and weren't
affected. - Found and checked on Windows. A new live test runs the server on a
Windows runner against Notepad, with calls 4 s apart as a model's
come, and lists the overlay's windows after each call. v3.9.4 lost the
hub three times in 12 s and showed no overlay after the fifth call; this
release kept the hub and showed it after every call, on Windows Server
2025 (the Windows 11 24H2 core) and 2022. It is now part of CI. - Not yet seen on the Windows 11 desktop where it was reported.
Install
Windows: download computer-use-mcp-windows-x64.zip, extract it to a
permanent folder (for example C:\Tools\computer-use-mcp), then double-click
install.cmd (or run claude mcp add --scope user computer-use -- C:\Tools\computer-use-mcp\computer-use-mcp.exe serve).
Check with claude mcp list.
As a plugin (Customize ▸ Plugins ▸ Upload local plugin): upload the full
computer-use-mcp-<os>.zip. If "Upload failed" appears and a computer-use plugin is
already installed, remove the old one first, then upload again.
Only if the full zip is refused for containing a program, use the small
computer-use-plugin-<os>.zip (about 50 KB, no program inside on purpose): first run
install.cmd -NoRegister (Windows) / ./install.sh --no-register from the full zip,
which copies the program to ~/.computer-use/bin; then upload the plugin zip.
macOS / Linux: download your platform's zip, extract it, run ./install.sh.
macOS needs Accessibility and Screen Recording permission for the app that runs Claude Code.
Every zip contains the binary, the installers, docs/CONNECT.md (Claude Code, Claude Desktop,
Codex, Cursor, VS Code, HTTP) and ready-to-copy configs in examples/.
The binaries are not code-signed, so Windows SmartScreen may ask you to confirm.
What's Changed
- README: v3.9.4 by @mhrsdev in #12
- v3.9.5: on Windows the overlay and the stop key no longer go away by @mhrsdev in #13
Full Changelog: v3.9.4...v3.9.5