Computer MCP / Install / GitHub Copilot
Install Computer MCP for GitHub Copilot
Three steps, about two minutes. Copilot in VS Code drives your real Mac with password fields blacked out before any screenshot is written, and a consent gate on every write.
The whole thing, in three steps
- Register the server with GitHub Copilot.
- Grant two macOS permissions. This is the step only you can do. Nothing works until it is done.
- Restart GitHub Copilot and verify by asking the agent to call
computer_permissions.
Start in read-only. Set CMCP_MODE=readonly for the first run and the
fourteen 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 Copilot
Copilot reads MCP servers from .vscode/mcp.json in your project, or
from your user settings for every project. Note the shape: Copilot uses servers,
not mcpServers, and each entry names its transport.
{
"servers": {
"computer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@agent360/computer-mcp@latest"]
}
}
}
That one difference is the most common reason a server that works everywhere else stays invisible in Copilot.
Step 1b: pick the mode before the first run
CMCP_MODE | What the agent can do | Use it when |
|---|---|---|
readonly | Only the 9 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 default. One dialog grants the session. Password managers and terminals ask every single time regardless. | Normal use. |
allow | Writes proceed without asking, still logged. Dangerous apps still ask, and that is not configurable. | Long unattended runs you have already decided to trust. |
To start read-only:
{
"servers": {
"computer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@agent360/computer-mcp@latest"],
"env": { "CMCP_MODE": "readonly" }
}
}
}
What you get today, honestly. npx currently serves
0.1.0, which has 12 tools. The code in the repository has 25: 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.2.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 seventeen seconds, and nothing to download.
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 Copilot started it, it may be Copilot 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. We also do not know what happens when you update: the small helper program gets rebuilt each time, and macOS may see the new build as a different program and ask you again. If that happens to you, telling us is genuinely useful - issue #4 is where we are collecting it.
Step 3: restart and verify
Run codex mcp list. The server should appear. Then start GitHub Copilot and ask it 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 · Claude Desktop · VS Code. 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.
Other clients
Same server, same three steps: Claude Desktop · VS Code · Claude Code · Codex · Cursor. There is also an AI-assisted install guide written for an agent 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. Plain clicking and typing do use the real cursor and keyboard, because macOS offers no other route for those.
What happens if I walk away and never answer a consent dialog?
It is refused. A dialog that times out is a refusal and never an approval, and the refusal is written to the log like any other outcome. CMCP_ASK_TIMEOUT sets the wait in seconds, default 60.
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.