[ 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 mcp
arcflare mcp --install

The 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 with arcflare mcp enable or arcflare mcp disable.

Tools#

GroupToolsFor
Runrun start logs input stop psA command that finishes, or one that doesn't
Openopen launch apps sysinfoA file or URL, an app by name, what the machine has
See and touchscreenshot mouse type key windows focus clipboardEyes and hands on the desktop
Testproject build test smoke httpWhat a directory is, and whether what it built works
Blenderblender blender_launch blender_run blender_renderFind it, start it, work without a window
Generategenerate_models generate_3d generate_speech generate_jobImage → 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 start doesn't leave a port bound.
  • The shell fits what was written. auto prefers 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_run and blender_render read the log, because Blender exits 0 after a script raises.
  • Arguments are validated against each tool's schema before any handler runs.

Limits#

FlagDoes
--root <dir>Confine commands to a directory (repeatable; also ARCFLARE_MCP_ROOTS)
--cwd <dir>Default working directory
--no-openRemove the tools that open, launch or touch the desktop
--bridge [a,b]Also expose your other MCP servers through this one
--toolsPrint 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.