[ docs ] // Agents & tools
Machine server
arcflare mcp is an MCP server for the computer it runs on. It runs things, opens things, looks at the screen, clicks and types, tests the software an agent just built, and makes 3D meshes. The agent connects it automatically, and any other client takes one line.Connecting it#
claude mcp add arcflare -- arcflare mcparcflare mcp --installThe second command registers it in ~/.arcflare/mcp.json (or --project for this folder). It carries over the servers you already had, because a new file holding only ArcFlare would hide them.
It is a choice
The server runs commands, opens apps, reads the clipboard and sees the screen. ArcFlare asks once whether to install it and remembers the answer. Change your mind witharcflare mcp enable or arcflare mcp disable.Tools#
| Group | Tools | For |
|---|---|---|
| Run | run start logs input stop ps | A command that finishes, or one that doesn't |
| Open | open launch apps sysinfo | A file or URL, an app by name, what the machine has |
| See and touch | screenshot mouse type key windows focus clipboard | Eyes and hands on the desktop |
| Test | project build test smoke http | What a directory is, and whether what it built works |
| Blender | blender blender_launch blender_run blender_render | Find it, start it, work without a window |
| Generate | generate_models generate_3d generate_speech generate_job | Image → mesh, text → speech. See 3D and speech |
A verdict, then the evidence#
Any harness can run npm test. What it can't do is read 900 lines of output on a small context budget. So testruns the project's own command, parses the result (node:test, jest, vitest, pytest, cargo, go, dotnet, mocha), and leads with the answer:
tests FAILED - 1 of 3 failed - node:test - 216ms $ node --test (C:\Users\you\demo) failing: - this one is broken
build does the same for compilers and deduplicates repeated errors. When nothing recognisable was printed, both say so rather than inventing a green run.
smoke is the honest end of "it works": start it, wait for the port, fetch a URL, check the body, stop it.
smoke: PASS started p1 (pid 7984) - $ npm start ready: port 8781 open after 2.8s GET http://127.0.0.1:8781/ -> HTTP 200 OK - text/html - 13ms stopped it again
Details that matter#
- Processes are supervised. Stopping one kills the whole tree, so
npm startdoesn't leave a port bound. - The shell fits what was written.
autoprefers Git Bash on Windows, because PowerShell 5.1 has no&&. - Screenshots report their scale and how to convert back to real screen pixels, and the scripts are DPI-aware, so clicks land where intended.
- Typed text is escaped: in SendKeys
%means Alt. For anything long, set the clipboard and paste. - Blender headless:
blender_runandblender_renderread the log, because Blender exits 0 after a script raises. - Arguments are validated against each tool's schema before any handler runs.
Limits#
| Flag | Does |
|---|---|
| --root <dir> | Confine commands to a directory (repeatable; also ARCFLARE_MCP_ROOTS) |
| --cwd <dir> | Default working directory |
| --no-open | Remove the tools that open, launch or touch the desktop |
| --bridge [a,b] | Also expose your other MCP servers through this one |
| --tools | Print the tool list and exit |
The same refusal list the agent uses applies here, so rm -rf / and its relatives are rejected before they start. Nothing the server started outlives the client that connected to it.
// The machine server sees the screen. You can see something too: open the browser's developer console on this site.