Computer MCP / Install / VS Code
Install Computer MCP for VS Code
Three steps, about two minutes. VS Code drives your real Mac with password fields blacked out before any screenshot is written, and it works without asking - except anything that deletes, and it refuses password managers.
What you get today, honestly. npx currently serves
0.1.0, which has 12 tools. The code in the repository has 32: menu bar
access, window control, moving windows between screens, pasting, opening and
quitting apps, waiting for something to appear, writing into a field behind
another window, and asking you for a password without the model ever seeing it.
Those ship with 0.4.0, which is built and tested but not published yet.
Everything else on this page works with what you install today. If you want all of them now, build from source: about thirty-five seconds, and nothing to download.
The whole thing, in three steps
- Register the server with VS Code.
- Grant two macOS permissions. This is the step only you can do. Nothing works until it is done.
- Restart VS Code and verify by asking the agent to call
computer_permissions.
Start in read-only. Set CMCP_MODE=readonly for the first run and the
eighteen write tools are not even listed to the model. It can look at your screen and it cannot
touch anything. You see the whole tool list before you grant anything.
Step 1: Add the server to VS Code
VS Code can register it from the command line, which avoids editing JSON by hand:
code --add-mcp '{"name":"computer","command":"npx","args":["-y","@agent360/computer-mcp@latest"]}'
Or write it into mcp.json yourself - Command Palette, then
MCP: Open User Configuration:
{
"servers": {
"computer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@agent360/computer-mcp@latest"]
}
}
}
Step 1b: pick the mode before the first run
CMCP_MODE | What the agent can do | Use it when |
|---|---|---|
readonly | Only the 14 read tools are listed. The write tools do not exist as far as the model is concerned. | Evaluating, or the agent only needs to look. Start here. |
ask | The first write asks in the menu bar icon; if the icon is not running, it is refused in background mode and opens a dialog in the foreground. One yes grants the session.
Password managers are refused in background mode (the default) and ask every single time in the foreground (while an agent has the screen, or with CMCP_BACKGROUND=0); terminals and editors once per session. | You want to approve before anything is touched. |
allow | The default. Writes proceed without asking, still logged.
Password managers are refused in background mode (the default) and ask every time in the foreground (while an agent has the screen, or with CMCP_BACKGROUND=0); terminals and editors once per session. Not configurable. | Normal use: an agent you can leave running. |
To start read-only:
code --add-mcp '{"name":"computer","command":"npx","args":["-y","@agent360/computer-mcp@latest"],"env":{"CMCP_MODE":"readonly"}}'
Step 2: grant two macOS permissions
This is the step only a human can do. No agent, script or installer can click it for you, by design: these are the permissions that let software see and drive your screen.
Open System Settings → Privacy & Security and add the app to both:
1. Accessibility · 2. Screen Recording
Which app do you add? Whichever one the dialog names when it appears. macOS decides for itself which program a permission belongs to, and it is not always the one you would expect: if you started things from a terminal window it is usually the terminal, and if VS Code started it, it may be VS Code itself. No dialog at all? Start with the app you launched from, and check again.
Something we have not tested, and would rather say so. We have not tried this on a fresh Mac with the permissions wiped, so we cannot promise which of the two it lands on in your setup. Updating is measured for Accessibility (issue #4): the grant belonged to the app you granted it to, not to the small helper program, so a new build did not ask again. Screen Recording after an update has not been measured separately. If you see something else, telling us is genuinely useful.
Step 3: restart and verify
In VS Code, run MCP: List Servers from the Command Palette; computer should be listed. Then ask the agent in chat to call computer_permissions. It reports each permission separately, so a partial grant shows up as a
partial grant rather than as a mysterious failure later.
Then ask for one screenshot. An image that comes back with both permissions granted is the real end-to-end proof that the install worked.
Now what: things worth actually saying
- "What is on my screen right now?": the plain read, with every password field already black.
- "Wait until the export finishes, then tell me.":
computer_wait_forwatches for the element instead of taking twenty screenshots. Twenty polls cost one call here and twenty images the other way. - "Fill in the form in the window behind this one.":
computer_set_valueandcomputer_presswork on a background window without moving your pointer, so you can keep working while it does. - "Log in to this and tell me when you are in.": the agent puts the cursor
in the field and calls
computer_ask_user, which returns only true or false. You type the password on your own keyboard. There is deliberately no route through this server for a password to reach a model. - "What did you do while I was away?":
computer_auditreads back a log that only grows. Typed text is stored as a length and a scrambled fingerprint, never in clear.
What it deliberately will not do
No shell execution, no arbitrary file access, no URL fetching. Each would be a few lines of code. A computer-control server with a shell inside it is remote access under a friendlier name. If you want a shell, install a shell MCP server: then you have chosen it, and the choice is visible in your config.
Other clients
Same server, same three steps: Claude Code · Codex · Cursor · GitHub Copilot · Claude Desktop. Any other MCP client reads the same JSON block shown for Cursor. There is also an AI-assisted install guide written for an agent that is setting this up on your behalf.
FAQ
Does Computer MCP need an API key or an account?
No. There is no account, no key, and no model inside the server. It has no network calls of its own: the only thing that talks to a model is the MCP client you already use. You can verify that with a single grep for fetch, http or net in the source.
Which app do I grant the macOS permissions to?
Whichever app the system dialog names. macOS attributes Accessibility and Screen Recording to the responsible process, and which process that is depends on how the server was launched: from a terminal it is usually the terminal, launched by an MCP client over npx it may be the client. If no dialog appears, start with the app that launched the client and call computer_permissions again. We have not yet measured this from a machine with permissions reset, and we would rather say so than guess.
Can the agent see my passwords?
Not through a screenshot. Secure text fields and the windows of listed password managers are painted opaque black on the bitmap while it is still in memory, before any PNG is written to disk. computer_inspect never returns the value of a secure field, and computer_set_value refuses to write into one. The honest limit: only what macOS itself marks as secure is covered. A password sitting in a plain text editor, or a token in a terminal buffer, is not marked and will not be hidden.
Does it take over my screen while it works?
It does not have to. computer_press fires an element's own accessibility action instead of simulating a click, so it works on a window behind another one and never moves your pointer. computer_set_value types into a field the same way. computer_wait_for waits for an element to appear instead of taking screenshots in a loop. Clicking and typing with an app named go into that app's own queue, behind your window and without moving your pointer (measured in AppKit apps); without an app they use the real cursor and keyboard, and in background mode (the default) that is refused.
What happens if I walk away and never answer a consent dialog?
The question waits in the menu bar icon and the box. After about 45 seconds the agent's call answers that you have not answered yet; the question stays about ten minutes and then expires with nothing done. A dialog appears only in the foreground, for a question the icon may never approve or when the icon is not running; it waits CMCP_ASK_TIMEOUT seconds (default 60) and then counts as a refusal. It never counts as approval: the log shows the call as waiting in the first case and as denied in the second.
Can several agents use it at the same time?
Yes. Each MCP client starts its own server process, and every line in the audit log carries a per-server session mark so you can tell afterwards which agent did what. Set CMCP_CLIENT to give a session a readable name.
Is there a Windows or Linux build?
No, and there is no plan for one. The three guarantees are built on macOS APIs: the Accessibility API for what an element is, and ScreenCaptureKit for the screenshot. A port would be a different product with different guarantees, not the same one recompiled.