Advanced Tools
Blender MCP
Use a standard stdio Blender MCP server with BLENDER_MCP_COMMAND and BLENDER_MCP_ARGS. For the common Blender MCP server, install uv and its matching Blender addon, enable the addon, and start its connection inside Blender. Set the command to your full uvx path and the argument array to ["blender-mcp"]. The Claude Desktop extension also offers these two optional settings. Printer tools work without Blender configured.
blender_mcp_setup checks the MCP for Blender add-on that the configured package needs, when the bridge is that package run with uvx: which add-on file Blender loads (for the running Blender's version), its protocol and the one the package expects, whether Blender is listening, and the running add-on's own get_addon_status. It changes nothing. With {"update": true} it stages the add-on with the package's own installer (mcp-for-blender install-addon) at the inspected version, checks that the installed and staged files are both regular MCP for Blender add-ons and that the staged one carries the expected protocol, keeps the old file as a backup next to it, and renames the new one into place. It never starts, stops or edits Blender: re-enable the add-on or restart Blender to load it. Another bridge reports supported: false and keeps its own installer.
- Call
blender_mcp_statuswith{"connect": true}to initialize the server and discover its tools and input schemas. A connected MCP server does not by itself prove that the Blender addon is running. - Call
blender_mcp_callwith a discovered tool name and its arguments. The full MCP result, including images and errors, is returned. For example:
{
"tool_name": "get_scene_info",
"arguments": {"user_prompt": "Inspect the scene before preparing a print."}
}For advanced Blender operations, forward execute_blender_code with code and the user's original user_prompt. These calls may edit the active scene. Use the discovered schema rather than assuming a tool exists.
blender_mcp_edit_model
The standard MCP edit helper imports an STL, applies ordered edits, and exports an STL without replacing the input or an existing output. Supported operations are decimate:<ratio> (greater than 0 through 1), remesh:<voxel size> (positive, in STL coordinate units), and boolean_union:<STL path>. Other operations can use blender_mcp_call. Both processes must have access to the same file paths. When BLENDER_MCP_COMMAND selects standard MCP, the advertised tool schema requires an explicit output_path for both preview and execution. Legacy-only bridge configurations keep output_path optional for compatibility.
{
"stl_path": "/path/to/model.stl",
"output_path": "/path/to/model-edited.stl",
"operations": ["decimate:0.5"],
"user_prompt": "Reduce the triangle count of this model for printing.",
"execute": false
}The default preview returns the plan and generated Python without launching Blender. Set execute to true to run it. A successful standard edit returns output_verified: true, output_path, byte count, and triangle count after checking the matching export receipt and a valid finite mesh. The helper preserves existing scene objects and requires Object Mode. Inspect the result before slicing; a valid STL is not a guarantee of printability.
The bridge enforces request deadlines, closes child connections, and never replays interrupted editing requests. After a timeout, inspect Blender before trying the edit again because execution may already have started.
Existing custom executables still work through BLENDER_MCP_BRIDGE_COMMAND. They receive MCP_BLENDER_PAYLOAD with the requested file and operations; their results explicitly report output_verified: false. A missing executable configuration is an error when execution is requested. Per-call legacy bridge_command overrides remain disabled unless MCP_ALLOW_EXECUTABLE_ARG=1.
Fusion MCP
Design a part from scratch in Autodesk Fusion through faust-machines/fusion360-mcp-server (MIT). It is a stdio MCP server that talks TCP on localhost:9877 here to its Fusion360MCP add-in inside Fusion. Fusion and its licence, including Autodesk's free personal-use licence, are yours: this server never installs or requires Fusion, and printer tools work without it.
The bridge and its setup pin DMontgomery40/fusion360-mcp-server at commit 86a3016a5a5b: faust-machines' server and add-in with document binding, which fusion_mcp_new_design's bind_document needs, while that change is reviewed upstream.
On macOS, fusion_mcp_setup sets it up. Without arguments it reports, changing nothing: whether Fusion is installed, whether the add-in in ~/Library/Application Support/Autodesk/Autodesk Fusion 360/API/AddIns/Fusion360MCP is at the pin and runs on startup, whether the login item that gives Fusion FUSION_MCP_PORT is installed, and whether this server has its Fusion settings. With {"install": true} it installs what is missing:
- the add-in from the pinned commit's archive, after checking every file against its SHA-256 (a symlink, an extra file or a changed byte installs nothing), set to Run on Startup. An add-in already at the pin is left in place;
- a login LaunchAgent,
com.scantomake.mac.fusion-port, that runslaunchctl setenv FUSION_MCP_PORT 9877at login, because Fusion opened from the Dock never reads this server's env file; - the settings this server is missing, added to its own
.envafter a copy of the file. A configuredFUSION_MCP_COMMANDis kept with its arguments, so a reviewed local runtime isn't replaced. The running server uses them at once.
It never starts or quits Fusion; fusion_mcp_status checks the connection. On other systems, or by hand: copy the repository's addon/ folder at that commit to the AddIns folder above, set it to Run on Startup, and add these settings next to the Blender ones in your env file:
FUSION_MCP_COMMAND=uvx
FUSION_MCP_ARGS='["--from","git+https://github.com/DMontgomery40/fusion360-mcp-server@86a3016a5a5b","fusion360-mcp-server","--mode","socket"]'
FUSION_MCP_TIMEOUT_MS=180000
FUSION_MCP_HOST=localhost
# The default here; Blender's MCP add-on holds the add-in's own default, 9876.
FUSION_MCP_PORT=9877Don't use the PyPI release (0.1.0): it crashes under mcp 2.x (faust issue #30), and the pinned commit pins mcp<2. Without FUSION_MCP_ARGS, the bridge uses the pinned arguments above. FUSION_MCP_HOST and FUSION_MCP_PORT reach the server; the child process gets only FUSION_* settings, never printer access codes.
The bridge uses port 9877 when FUSION_MCP_PORT is unset, as PRD §8.9 and Counterpart do. The add-in and the faust server default to 9876, which Blender's MCP add-on also uses, and while Blender holds that port the add-in can't listen there. The bridge passes the port to the faust server. The add-in reads FUSION_MCP_PORT from Fusion's environment, and Fusion started from the Dock or Finder gets none, so it falls back to 9876. fusion_mcp_status with {"launch": true} starts Fusion with open -a "Autodesk Fusion" --env FUSION_MCP_PORT=<port>. To start Fusion yourself, run the same command. If Fusion is already open on the default port, quit it first, because --env takes effect only when the app starts.
fusion_mcp_statusreturns{configured, connected, addinReachable, fusionRunning, tools[]}, pluslaunched,pin, the server'sserverinfo and anyerror.addinReachableis true only when theFusion360MCPadd-in answers its ownpingonFUSION_MCP_HOST:FUSION_MCP_PORT; Blender's MCP add-on, which also defaults to port 9876, doesn't count, so it can't hide a stopped Fusion.connectedis true only when the add-in answers the server'sping. With{"launch": true}, it starts Fusion on macOS (open -a "Autodesk Fusion" --env FUSION_MCP_PORT=<port>) when it is not running and waits up to 90 seconds for the add-in.fusion_mcp_calltakes{tool_name, arguments?, timeout_ms?}and passes the call to a discovered Fusion tool (create_sketch,extrude,fillet,create_parameter,set_parameter,check_interference,execute_codeand the rest), returning its full content and errors. It is never retried, the same contract asblender_mcp_call.fusion_mcp_new_designopens a new parametric design document throughexecute_codewithapp.documents.add(FusionDesignDocumentType). The Fusion tools work on the open design, so a design pass calls this first. At the pinned commit the add-in refuses every command,execute_codeincluded, until some design is open (faust issue #12). After Fusion starts at its Home tab, open any design once.fusion_mcp_exporttakes{output_dir, name, body_name?}. It writes<name>.stl(export_stlof one visible solid body),<name>.f3d(export_f3d) and<name>.parameters.json(the user parameters, with the fieldsget_parametersreports) into an existing directory, and returns their absolute paths. Hidden and surface bodies are never exported. Withoutbody_namethe design must have exactly one visible solid body. Fusion'sexport_stltakes the first body with a name, hidden or not, so a name that another body shares is refused. That includes hidden bodies, surface bodies and copies of a component. It writes all three files or none, never overwrites a file, and checks the STL is a finite triangle mesh. The result also has:boundingBox: the STL's{min, max, dimensions}in its own units;fusionSizeMm: the body's size in Fusion, in mm;stlUnits:mm,cmorunknown, from comparing the two;warnings: present when the STL isn't in millimetres.
Fusion writes the files itself, so it must run on this computer. Slice the STL like any other model.
The stdio session stays open for the life of this server, so a design pass does not start a new uvx process and add-in connection for every call. A timeout, cancellation or transport failure closes it, and the next call starts a new one. An interrupted call may still be running in Fusion and is never replayed. At the pinned commit measure_distance is broken (faust issue #27); measure the exported STL with get_stl_info instead.