computermcp

Computer MCP / Use cases / Without taking over your screen

Let an agent work while you keep using your Mac

Three of the eighteen tools act on a background window without moving your pointer: press an element by its own accessibility action, write into a field, and wait for something to appear instead of looping on screenshots.

The usual complaint about computer-use tools is not that they are weak. It is that using one means giving up your machine: the pointer jumps, windows come forward, and you sit and watch instead of working. Three of the eighteen tools exist specifically so that does not have to happen.

The three that do not touch your pointer

ToolWhat it does instead
computer_press Fires an element's own accessibility action, the same one a screen reader would trigger. No synthetic click, no pointer movement, and it works on a window that is behind another one. The button is pressed where it stands.
computer_set_value Writes a value straight into a field through the accessibility API. No focus change, no keystrokes, no cursor. It refuses on a secure field every single time.
computer_wait_for Waits for an element to appear, then returns. The alternative is a screenshot loop, and twenty polls cost one call here against twenty images the other way.

Those three cover a surprising share of real work: press the button, fill the field, wait for the result. What they do not cover is anything that has no accessibility element behind it, such as dragging on a canvas or clicking a spot in a video. Those still need the real pointer, and there is no way around that on macOS.

A concrete run

Say an export takes four minutes and then a dialog appears. The version that takes over your screen looks like this: activate the app, click, screenshot, screenshot, screenshot, screenshot, click. Every one of those steals focus, and the screenshots cost tokens for pictures of a progress bar.

The version that leaves you alone:

computer_find    role=AXButton title="Export"     -> element
computer_press   that element                      # no pointer, window stays behind
computer_wait_for role=AXSheet timeout=300         # one call, returns when it appears
computer_press   the sheet's "Save" button

Four calls, no focus change, one image at most. You carry on typing in another app the whole time.

What still takes the screen, honestly

Several agents at once

Each MCP client starts its own server process, so running Claude Code and Cursor side by side gives you two independent servers with two independent consent states. They do not queue behind each other. Every line in the audit log carries a per-server session mark, and CMCP_CLIENT lets you give each one a readable name, so afterwards you can tell which agent pressed what.

The log is opened only-grows per write, which is what keeps two servers from tearing each other's lines. That is not an assumption: there is a test in the repo that runs two servers through fifty interleaved writes and fails if a single line comes out torn.

FAQ

Can an agent use my Mac without taking over the screen?

Largely, yes. computer_press fires an element's own accessibility action rather than simulating a click, so it works on a background window without moving your pointer. computer_set_value writes into a field the same way, and computer_wait_for waits for an element instead of taking screenshots in a loop. What still needs the real screen is anything with no accessibility element behind it, such as dragging on a canvas.

Does clicking a button require bringing the app forward?

Not with computer_press. It triggers the button's own AXPress action where the window stands, behind whatever else is open. computer_click does use the real cursor, so if the agent falls back to it you will see the pointer move.

Can I run two agents at the same time?

Yes. Each MCP client starts its own server process with its own consent state, so they do not queue behind each other. Every audit line carries a per-server session mark, and CMCP_CLIENT gives each one a readable name.

Will two servers corrupt the shared audit log?

No. Each write is an only-grows open, and the repo has a test that runs two servers through fifty interleaved writes and fails if a single line comes out torn.

Why does computer_wait_for matter for cost?

Because the alternative is a screenshot loop. Twenty polls through wait_for cost one tool call; twenty screenshots cost twenty images in the model's context, of a progress bar.

The agent says it cannot see a window that is open. Why?

Almost always a full-screen app. True full-screen puts an app on its own Space, and from outside that Space neither the accessibility API nor the screenshot sees the windows underneath. Leave the target app windowed.

Does the consent dialog interrupt me every time?

In ask mode the first write opens one dialog that grants the session; after that only password managers and terminals ask again, every time, regardless of mode. In allow mode nothing asks except those, and everything is still logged.

Related

Install for Claude Code All 18 tools What it can and cannot reach When not to use it Threat model