self-host-fusion360-mcp
Provides tools for driving Autodesk Fusion 360, enabling AI agents to create and modify 3D models, sketches, assemblies, CAM operations, and file exports.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@self-host-fusion360-mcp Create a 50mm cube in a new design and export it as STL."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
self-host-fusion360-mcp
A self-hosted, unified MCP server that lets Claude (or any MCP client) drive Autodesk Fusion 360 on your own machine.
简体中文 · Full manual · Tool reference · Troubleshooting

An L-bracket built entirely from a Claude conversation through this MCP — base + wall + boolean join + fillets + 4 mounting holes + mass check + export. See scripts/demo_conversation.py.
It unifies the best ideas from the community Fusion-MCP projects into one well-documented, foolproof package: bilingual docs (中/英), a Windows one-click installer, Docker one-command run, mm-first units, a shared auto-generated token, ~100 tools (plus a generic-API escape hatch for full coverage), auto-create-document, and a doctor that tells you exactly what's wrong. No Fusion subscription required — it works with the free personal-use license too.
✅ Validated against a real Fusion 360 install (Jan 2026 build, Python 3.14): a 57-step coverage test and a full bolt-circle-flange build pass end-to-end, with numerically-verified mass/volume. See Development & testing.
How it works (read this first)
Fusion's adsk.* API can only be called inside Fusion, on its main thread — no external process can touch it directly. So this project has two parts:
┌────────────────┐ MCP (stdio / http) ┌─────────────────────┐ HTTP + token ┌──────────────────────────┐
│ Claude │ ─────────────────────▶ │ MCP server │ ──────────────▶ │ Fusion add-in (in-process)│
│ Desktop / Code │ ◀───────────────────── │ (this repo, server/) │ ◀────────────── │ (this repo, addin/) │
└────────────────┘ │ native OR Docker │ │ 127.0.0.1, main thread │
└─────────────────────┘ └─────────────┬────────────┘
│ adsk.* API
┌─────▼─────┐
│ Fusion 360 │
└───────────┘⚠️ Fusion cannot run in Docker. It is a desktop GUI app. Docker only containerizes the MCP server; the add-in must run inside Fusion on the host. In Docker the server reaches the host add-in via
host.docker.internal. This is the single most common point of confusion — the installer anddoctorkeep reminding you.
Related MCP server: Fusion Native MCP
Features
Two transports —
stdio(Claude Desktop / Claude Code) andstreamable-http(Docker / remote).~100 tools — one-call primitives (box/cylinder/sphere), sketches (rect/circle/line/arc/polygon/spline, on construction planes or body faces) with constraints & dimensions for robust parametric sketches, extrude/revolve/sweep/loft, fillet/chamfer/shell/holes/draft/scale, split/offset faces, threads, rectangular & circular patterns, mirror, boolean combine, parameters, body ops, construction planes, appearances, surfaces (patch/thicken/ruled/stitch), inspection (physical properties, min-distance, angle, interference, face listing), timeline edit (undo/redo/suppress), export (STL/STEP/F3D/DXF), viewport screenshots Claude can see, units, assembly (components, joints, rigid groups), and CAM (setups, operations, tool assignment, toolpaths, G-code post).
Generic API escape hatch —
fusion_api_call/fusion_api_introspect/fusion_api_docsreach anyadsk.*method by path (full coverage for anything not covered by a curated tool). Gated behind allow_arbitrary_code.Auto-create document — build tools make a new design if none is open; no community server does this.
mm-first — every dimension is millimetres; the cm conversion is done once, at the boundary (no 10× bugs).
Tool annotations — read-only/destructive/idempotent hints so clients can auto-approve safe calls.
Foolproof setup — auto-generated shared token (never copied by hand), safe Claude-config merge (your other servers are preserved), idempotent installer, UTF-8/GBK handling for Chinese Windows.
Web config dashboard —
fusion-mcp webuiopens a local browser UI to see status, edit settings, manage the token, and generate/apply MCP client config for multiple AIs (Claude Desktop/Code, Cursor, VS Code, generic, remote HTTP). Loopback-only, zero new deps.doctor— bilingual diagnostics that pinpoint connection/token/version problems.Mock mode — run the server, tests, and Docker image with no Fusion installed.
Bilingual docs — everything in English and 简体中文.
Safe by default — the arbitrary-code tool is off unless you explicitly enable it.
Quickstart
Option A — Windows one-click (recommended)
Install Fusion 360 and Python 3.10+ (tick Add to PATH).
Double-click
install/windows-install.bat(or runinstall/windows-install.ps1in PowerShell). It copies the add-in into Fusion, generates the token, installs the server, and merges your Claude Desktop config.Start Fusion 360, open a design, then go to Utilities → ADD-INS → Scripts and Add-Ins, select Fusion360MCP, and click Run (set it to Run on Startup to skip this next time).
Fully quit and reopen Claude Desktop. Ask: "Create a 20×20×10 mm box in Fusion and add 2 mm fillets."
Option B — Docker (server in a container)
The add-in still installs on the host (steps 1–3 above, or just copy addin/Fusion360MCP/ into your Fusion API/AddIns folder). Then:
cp .env.example .env # set FUSION_MCP_TOKEN to the host token (~/.fusion-mcp/token)
docker compose up -d # server listens on http://localhost:8765/mcp
docker compose run --rm fusion-mcp fusion-mcp doctor # verifyAdd it to Claude as a custom (remote/HTTP) connector pointing at http://localhost:8765/mcp.
Option C — Manual / cross-platform
pip install -e . # or: pip install -e ".[http,dev]"
cp addin/Fusion360MCP -> <Fusion>/API/AddIns/ # copy the add-in folder
fusion-mcp doctor # diagnose
fusion-mcp run # stdio (configure your client to launch this)See the full manual for the exact Claude config JSON and the Fusion AddIns paths.
Web config dashboard
fusion-mcp webui # opens http://127.0.0.1:8088 in your browserA local, loopback-only page to: check bridge status, edit add-in settings, view/
regenerate the token, and generate or one-click-apply MCP client config for
Claude Desktop, Claude Code, Cursor, VS Code, a generic client, or a remote/HTTP
connector. Adding a future AI = one entry in fusion_mcp.clientconfig.CONNECTORS.

Configuration
All optional; defaults shown. See .env.example.
Variable | Default | Meaning |
|
| Where the server reaches the add-in ( |
|
| Shared bearer token (resolution order) |
|
|
|
|
| HTTP bind (http transport) |
|
| Expose |
|
| Run without Fusion |
Safety & limitations
Verify everything. Claude is great at prismatic/parametric parts and repetitive edits, weaker at organic/freeform surfaces. A 0.1 mm slip breaks a fit — review (and ideally print) before trusting output.
The connector mutates your live model. Save a version before batch operations.
fusion_run_scriptruns arbitrary Python in Fusion; it is disabled unless you opt in.The bridge binds to
127.0.0.1and requires a bearer token. Read docs/TROUBLESHOOTING before exposing it to Docker/other hosts.License limits: IGES/SAT export is blocked on personal-use Fusion licenses (the bridge returns a clear hint); STEP/STL/F3D work on all licenses. 3MF has no Fusion API and is not exposed — use STL for 3D printing.
CAM prerequisites: the
cam_*tools require the Manufacturing workspace to have been opened once (so the CAM product exists); they return a clear hint otherwise. Most operation strategies also need a cutting tool assigned before a toolpath will generate.
Component targets & explicit threads
Component creation keeps its existing default of activating the new component:
fusion_create_component(name: str, activate: bool = True) -> dict. Pass
activate=False when the occurrence should be created without changing the current
build target, then select and inspect the target explicitly:
fusion_create_component(name="Thread demo", activate=False)
fusion_set_active_component(name="Thread demo") # name="root" is the default
fusion_get_active_component() # read-only
fusion_set_active_component() # reset to rootThe target wrappers are fusion_set_active_component(name: str = "root") -> dict
and fusion_get_active_component() -> dict. The full thread signature is
fusion_thread(body: Union[int, str], face: int, internal: bool = False, modeled: bool = True, thread_type: str = "ISO Metric profile", designation: Optional[str] = None, thread_class: Optional[str] = None, handedness: str = "right") -> dict. Omit designation to use Fusion's
diameter-based recommendation, or select a catalog entry explicitly:
fusion_thread(
body="M8 left shaft",
face=2,
modeled=True,
designation="M8x1.25",
handedness="left",
)
fusion_list_threads(component="Thread demo") # component=None uses the active targetFusion's catalog spelling is authoritative for thread_type, designation, and
thread_class; an explicit designation/class is validated against that catalog.
Only handedness="right" and handedness="left" are supported (case and outer
whitespace are normalized), and an unsupported value fails before thread mutation.
fusion_list_threads(component: Optional[str] = None) -> dict is read-only and reports
the actual feature metadata Fusion exposes, with null fields and
capability_notes when the installed API cannot expose a property.
Development & testing
Everything below was used to validate the project against a real Fusion 360 install.
# 1) Call any op directly against the live bridge (reads ~/.fusion-mcp/token)
python scripts/rpc.py health
python scripts/rpc.py primitive.box '{"width":20,"depth":20,"height":20}'
# 2) Comprehensive coverage test (fresh doc -> ~57 checks across every tool)
python scripts/smoketest.py
# 3) Realistic end-to-end part: a bolt-circle flange (+ inspection & export)
python scripts/demo_flange.py # writes screenshots/flange.png
# 4) Mock unit tests (no Fusion needed)
python -m pytest -qHot-reload loop (no Fusion restart). The add-in entry purges its package
modules on Stop→Run, and a dev-only system.reload op re-imports all op code —
including _common — in place. So the edit→test cycle is:
cp -r addin/Fusion360MCP/. "$APPDATA/Autodesk/Autodesk Fusion 360/API/AddIns/Fusion360MCP/"
python scripts/rpc.py system.reload # live-reload edited add-in code
python scripts/smoketest.py # re-testOnly changes to the HTTP/bridge layer (bridge/, config.py, __init__.py)
need a Fusion Stop→Run; op edits are picked up by system.reload.
Status & roadmap
Done (v0.6.0) — every tool below validated against a real Fusion 360 install (Jan 2026 build, Python 3.14):
Workspace discipline — the agent works in the document you already have open:
fusion_new_documentrefuses while a document is open unless it passesconfirm=true(settingguard_new_document), so strayUntitleddocuments stop piling up. Finish up from the agent side withfusion_save_document/fusion_save_document_as/fusion_close_document(save=true|false)/fusion_close_other_documents— a never-saved document is written into a real project automatically, no interactive dialog.Active component — build a multi-part model in ONE document:
assembly.activate_componentmakes later sketch/feature/primitive ops target that component (each part isolated, existing bodies untouched); default is the root component.Auto-dismiss blocking dialogs — an external guard process closes save/recover/server-verification/stray modals that would otherwise freeze Fusion (they hold the GIL, so an in-process watchdog can't); safe WM_CLOSE-first, only when an op is stuck or the title matches a nuisance allowlist.
system.restart— full in-process reload (incl. bridge/__init__) over RPC, so code changes apply without a manual Fusion Stop→Run.Two-part architecture (in-Fusion add-in bridge + external MCP server); stdio and streamable-http transports; mock mode (no Fusion needed).
~100 tools: primitives; sketches with constraints & dimensions; extrude/ revolve/sweep/loft; fillet/chamfer/shell/hole/draft/split/offset-faces/thread/ scale; rectangular & circular patterns; mirror; boolean combine; surfaces (patch/thicken/ruled/stitch); parameters; body ops; construction planes; appearances; inspection (mass, min-distance, angle, interference, face listing); timeline edit (undo/redo/suppress); export (STL/STEP/F3D/DXF); viewport screenshots; units; assembly (components, joints incl. by-face, rigid groups); CAM (setups, operations, auto tool-assignment, toolpaths, G-code post).
Generic API escape hatch (
api.call/introspect/docs, gated) for full coverage.Auto-create-document, mm-first units, mutation
_deltafeedback, bilingual hints.Foolproof Windows installer, Docker,
doctor, hot-reload dev loop.Web config dashboard (
fusion-mcp webui) + multi-AI connector registry.28 mock tests; full bilingual docs.
Roadmap / TODO:
CAM end-to-end validated (needs Manufacturing workspace + tool library): setup → operation → toolpath → G-code.
Curated sheet-metal creation — currently blocked by the Fusion API (no create methods on FlangeFeatures/BendFeatures); revisit if Autodesk exposes it. (Only
create_flat_patternon existing SM bodies works today.)Joints by edge / axis, joint limits & motion.
Drawings (2D drawing docs, auto views) + richer DXF/PDF export.
"Apply config" write-through for Cursor / VS Code (not just Claude Desktop).
One-click webui launcher (
.bat) + optional system-tray.macOS installer (
.command) at parity with the Windows installer.Publish to PyPI (
uvx fusion-mcp) + signed release.Tests for the webui API + more op-level mocks.
More AI connectors as the ecosystem grows.
Project layout
addin/Fusion360MCP/ In-Fusion add-in (pure stdlib): HTTP bridge + main-thread dispatch + ops
server/fusion_mcp/ MCP server: FastMCP app, tools, client, doctor, CLI
install/ Windows installer, token gen, safe Claude-config merge
docs/ Bilingual manual, architecture, tool reference, troubleshooting
scripts/ Dev helpers: rpc.py, smoketest.py, demo_flange.py, doctor, gen_tools_doc
tests/ Mock-driven tests (no Fusion needed)License
MIT — see LICENSE. Not affiliated with or endorsed by Autodesk or Anthropic.
Available Tools
108 toolsfusion_api_docsARead-only
Get the Autodesk cloudhelp URL for an API class or member (e.g. 'ExtrudeFeatures.createInput').
Inputs: name (required).
fusion_api_introspectARead-only
Inspect the live Fusion API: list a class's (or an object path's) properties
and method signatures. target is a class name (e.g. 'ExtrudeFeatures') or a
path ('rootComponent.bRepBodies'); query filters member names. Use this to
discover the exact API to drive via fusion_api_call.
Inputs: target (required), query.
fusion_as_built_jointB
Create an as-built joint (keeps both components in their current place).
Inputs: component_one (required), component_two (required).
fusion_body_infoARead-only
Inspect one body by index or name, including its current operative ID, component, topology counts, volume, visibility, and bounding box.
Inputs: body (required).
fusion_bounding_boxARead-only
Get the overall bounding box of the whole design, in millimetres.
Inputs: no named parameters.
fusion_boxA
Create a box (cuboid): width(X) x depth(Y) x height(Z) in mm, centered on
the XY origin and rising in +Z. Auto-creates a document if none is open.
For a cube, pass equal width/depth/height. Pass component (a component name
from fusion_create_component) to build the box INSIDE that component — useful
for building assembly parts to then joint together.
Inputs: depth (required), width (required), height (required), x, +3 more.
fusion_cam_create_operationA
Add an operation to a setup by strategy (e.g. face, pocket2d, adaptive2d,
contour2d, drill, bore). Optional tool_diameter/stepdown/stepover in mm.
Note: most strategies need a tool assigned before a toolpath will generate.
Inputs: setup (required), strategy (required), name, stepdown, +2 more.
fusion_cam_create_setupC
Create a CAM setup around a body. operation_type: milling/turning/cutting.
Inputs: body (required), name, operation_type.
fusion_cam_generateA
Generate toolpaths: one operation in a setup, a whole setup, or all=true.
Inputs: all, setup, operation.
fusion_cam_list_operationsARead-only
List operations in a CAM setup (name, has_toolpath, is_valid).
Inputs: setup (required).
fusion_cam_list_setupsARead-only
List CAM setups and their operations. Requires the Manufacturing workspace to have been opened once in Fusion.
Inputs: no named parameters.
fusion_cam_list_toolsBRead-only
List cutting tools from the local tool library (for assigning to operations).
Inputs: limit.
fusion_cam_post_processC
Post-process a setup (or one operation) to a G-code file on the host (default ~/fusion-mcp-exports/nc). post_processor is a generic post name.
Inputs: setup (required), units, operation, output_folder, +1 more.
fusion_chamferB
Chamfer edges of a body by distance mm. edges='all' or a list of indices.
Inputs: body (required), distance (required), edges.
fusion_circular_patternA
Pattern a body around axis x/y/z: count copies spread over angle degrees.
Inputs: body (required), count (required), axis, angle.
fusion_close_documentADestructive
Close a document — save=true saves it first, save=false discards unsaved changes.
Closes the active document unless document names another open one. With
save=true a never-saved document is written into the active Fusion project
first (use name / project to choose where); if that save fails the
document is left open rather than losing the work.
Inputs: save (required), name, project, document, +1 more.
fusion_close_other_documentsADestructive
Close every open document EXCEPT the active one — handy for tidying up after stray documents accumulated. save=false discards their unsaved changes.
Inputs: save.
fusion_combineADestructive
Boolean-combine a target body with one or more tool bodies (by index or name). operation: join (union), cut (subtract tools from target), or intersect. Set keep_tools=true to preserve the tool bodies.
Inputs: tools (required), target (required), operation, keep_tools.
fusion_create_componentB
Create a component occurrence, optionally making it the build target.
Inputs: name (required), activate.
fusion_create_flat_patternA
Create a flat pattern from an EXISTING sheet-metal body. Note: Fusion's API cannot create sheet-metal flanges/bends (model those interactively).
Inputs: body (required).
fusion_create_parameterB
Create a new user parameter (e.g. name='width', expression='40 mm').
Inputs: name (required), expression (required), unit, comment.
fusion_create_sketchA
Create an empty sketch on a base plane (xy/xz/yz) or construction-plane index.
Inputs: name, plane.
fusion_create_sketch_on_faceA
Create a sketch ON a planar face of a body. Get the face index from fusion_list_faces (is_planar=true). Sketch coordinates are then local to that face.
Inputs: body (required), face (required), name.
fusion_cylinderA
Create a cylinder of height mm and radius OR diameter mm, centered
on the XY origin. Auto-creates a document if none is open.
Inputs: height (required), x, y, name, +2 more.
fusion_delete_allADestructive
Delete every timeline feature, clearing the design. Destructive.
Inputs: no named parameters.
fusion_delete_bodyADestructive
Delete exactly one body and verify the resulting model state. Destructive. This does not delete sketches, features, or construction geometry.
Inputs: body (required).
fusion_delete_parameterADestructive
Delete a user parameter by name (model parameters cannot be deleted).
Inputs: name (required).
fusion_document_infoARead-only
Summarize the active document: display units, counts of bodies, components, sketches and parameters, save state, and the active component.
Inputs: no named parameters.
fusion_draftA
Apply draft to faces of a body. angle deg; pull-direction plane xy/xz/yz. faces is a list of face indices (from fusion_list_faces) or omitted for all.
Inputs: body (required), angle (required), faces, plane.
fusion_export_dxfB
Export a sketch to a 2D DXF file (e.g. for laser cutting / drawings).
Inputs: sketch (required), path.
fusion_export_f3dC
Export a native Fusion archive (.f3d), preserving the full design tree.
Inputs: path.
fusion_export_igesA
Export the whole design to IGES (.igs). Note: IGES export is restricted on personal-use Fusion licenses — prefer STEP for CAD interchange.
Inputs: path.
fusion_export_stepB
Export the whole design to STEP (.step), the best format for CAD interchange.
Inputs: path.
fusion_export_stlA
Export to STL (for 3D printing). Optional body (else whole design);
refinement low/medium/high. Saved on the host (default ~/fusion-mcp-exports).
Inputs: body, path, refinement.
fusion_extrudeB
Extrude a sketch profile by distance mm. operation: new/join/cut/
intersect. direction: positive/negative/symmetric. profile: index or 'all'.
Inputs: sketch (required), distance (required), profile, direction, +1 more.
fusion_filletA
Round edges of a body by radius mm. edges='all' (default) or a list of
edge indices.
Inputs: body (required), radius (required), edges.
fusion_fit_viewAIdempotent
Zoom/fit the view to show the whole model.
Inputs: no named parameters.
fusion_get_active_componentARead-only
Return the current build target; subsequent build operations target it.
Inputs: no named parameters.
fusion_get_bodyARead-only
Detailed info for one body (by index or name): volume, area, face/edge/ vertex counts, and bounding box.
Inputs: body (required).
fusion_get_parameterCRead-only
Get one parameter by name.
Inputs: name (required).
fusion_get_unitsBRead-only
Get the document's default length unit.
Inputs: no named parameters.
fusion_ground_componentC
Ground (lock in place) or unground a component occurrence.
Inputs: name (required), grounded.
fusion_holeA
Drill a circular hole (cut) of diameter mm at (x,y). By default it goes
through everything on plane (xy/xz/yz). For a hole on an existing body face,
pass on_body + on_face (from fusion_list_faces); (x,y) are then in that face's
local coordinates. Set depth for a blind hole.
Inputs: diameter (required), x, y, depth, +4 more.
fusion_interferenceARead-only
Check interference between 2+ bodies (list of indices/names); returns the overlapping volumes (mm³). Use to validate clearances/fits in an assembly.
Inputs: bodies (required), include_coincident_faces.
fusion_jointA
Create a joint between two components. type: rigid / revolute / slider / cylindrical / planar; axis (x/y/z) is the motion axis. By default it joins at the component origins; pass face_one/face_two (planar face indices on each component's first body) to mate specific faces.
Inputs: component_one (required), component_two (required), axis, type, +2 more.
fusion_list_appearancesARead-only
List available appearance names (optionally filtered by substring).
Inputs: limit, filter.
fusion_list_bodiesARead-only
List all solid/surface bodies with index, name, volume (mm³), and bounding box (mm). Use the index or name to target a body in other tools.
Inputs: no named parameters.
fusion_list_componentsARead-only
List all components in the design with their body counts.
Inputs: no named parameters.
fusion_list_documentsARead-only
List all open Fusion documents with their active / modified / saved state.
Inputs: no named parameters.
fusion_list_edgesARead-only
Enumerate one body's edges for selective operations. Returns a topology snapshot plus index, curve type, length, points, radius when circular, and adjacent face indices/types for each edge.
Inputs: body (required).
fusion_list_facesARead-only
List a body's faces (index, area mm², is_planar, centroid, normal). Use a planar face's index to sketch/drill on it (fusion_create_sketch_on_face, fusion_hole with on_body/on_face).
Inputs: body (required).
fusion_list_featuresARead-only
List timeline features in creation order.
Inputs: no named parameters.
fusion_list_jointsARead-only
List joints (name, type), plus as-built-joint and rigid-group counts.
Inputs: no named parameters.
fusion_list_occurrencesARead-only
List component occurrences: name, grounded, visible, body count.
Inputs: no named parameters.
fusion_list_parametersARead-only
List all parameters (user + model) with expression, value, and unit.
Inputs: no named parameters.
fusion_list_projectsARead-only
List the Fusion projects a document can be saved into, and which one is active (where fusion_save_document / _as put a never-saved document).
Inputs: no named parameters.
fusion_list_sketchesARead-only
List sketches with index, name, and number of closed profiles.
Inputs: no named parameters.
fusion_list_threadsBRead-only
Inspect thread features in the active or named component without modifying it.
Inputs: component.
fusion_loftA
Loft a smooth solid between profiles taken from a list of sketch indices/ names (>=2), in order. Each sketch should contain one closed profile.
Inputs: sketches (required), operation.
fusion_measure_angleARead-only
Angle (degrees) between the first faces of two bodies.
Inputs: body_a (required), body_b (required).
fusion_measure_distanceBRead-only
Minimum distance in millimetres between two bodies.
Inputs: body_a (required), body_b (required).
fusion_mirrorB
Mirror a body across plane xy/xz/yz.
Inputs: body (required), plane.
fusion_move_bodyA
Translate a body by (dx, dy, dz) millimetres.
Inputs: body (required), dx, dy, dz.
fusion_move_componentB
Translate a component occurrence by (dx, dy, dz) millimetres.
Inputs: name (required), dx, dy, dz.
fusion_new_documentA
Create a NEW empty Fusion design document.
Prefer NOT calling this. If a document is already open, build in THAT one — several parts belong in ONE document as separate components (fusion_create_component). Stray documents pile up and only the user can close them by hand.
Set confirm=true only when the user explicitly asked for a new document/project, or when nothing is open at all (then it is a no-op flag). Without confirm the call is refused while any document is open.
Inputs: confirm.
fusion_offset_facesB
Offset faces of a body by distance mm (creates an offset surface body).
Inputs: body (required), distance (required), faces.
fusion_offset_planeA
Create a construction plane offset from a base plane (xy/xz/yz) by
offset mm. Returns its index for use as a sketch plane.
Inputs: offset (required), base.
fusion_physical_propertiesARead-only
Mass (g), volume (mm³), area (mm²), density, and center of mass for a body (by index/name) or the whole design if omitted. Also reports material name, material source, assignment scope, and whether material evidence was verified.
Inputs: body.
fusion_rectangular_patternA
Pattern a body in a line along axis x/y/z: count copies, spacing mm apart.
Inputs: body (required), count (required), spacing (required), axis.
fusion_redoA
Redo the last undone operation.
Inputs: no named parameters.
fusion_rename_bodyCIdempotent
Rename a body.
Inputs: body (required), name (required).
fusion_revolveC
Revolve a sketch profile around axis x/y/z by angle degrees.
Inputs: sketch (required), axis, angle, profile, +1 more.
fusion_rigid_groupB
Lock 2+ components together as a rigid group (pass a list of names).
Inputs: components (required), include_children.
fusion_rotate_bodyA
Rotate a body by angle degrees (right-hand rule) about an axis through
a point. axis: "x"/"y"/"z" or a free direction vector [i, j, k].
origin: [x, y, z] in millimetres, defaults to the world origin. Use this to
build inclined geometry that revolve/extrude alone cannot produce.
Inputs: body (required), angle (required), axis, origin.
fusion_save_documentAIdempotent
Save a document (the active one unless document names another open one).
A never-saved document is saved into the active Fusion project automatically
(optionally under name / into project), so no interactive dialog is needed.
Inputs: name, project, document, description.
fusion_save_document_asA
Save a document as a NEW file called name (in project, else the active
project). Use this to keep the original untouched. The current bridge confirms
the document and project but does not return a reopenable version identifier.
Inputs: name (required), project, document, description.
fusion_scale_bodyB
Uniformly scale a body by factor about the origin (2.0 doubles its size).
Inputs: body (required), factor (required).
fusion_screenshotBRead-only
Capture the active Fusion viewport and return it as a PNG image so you can visually inspect the model. Set fit=False to keep the current camera.
Inputs: fit, width, height.
fusion_set_active_componentA
Set the build target for subsequent sketch, primitive, and feature operations.
Use root to reset targeting to the root component.
Inputs: name.
fusion_set_appearanceAIdempotent
Apply an appearance (by name) to a body. Use fusion_list_appearances to discover valid names (e.g. 'Steel', 'Aluminum', 'ABS').
Inputs: body (required), name (required).
fusion_set_body_visibleCIdempotent
Show or hide a body.
Inputs: body (required), visible (required).
fusion_set_parameterAIdempotent
Set a parameter's expression, e.g. '25 mm' or 'width * 2'. This is the preferred way to resize an existing parametric model.
Inputs: name (required), expression (required).
fusion_set_unitsAIdempotent
Set the document's display length unit: mm/cm/m/in/ft. (Note: tool inputs are always in millimetres regardless of this display setting.)
Inputs: units (required).
fusion_set_viewAIdempotent
Set a named camera orientation: home/iso/top/bottom/front/back/left/right.
Inputs: name.
fusion_shellC
Hollow out a body to a wall thickness mm.
Inputs: body (required), thickness (required).
fusion_sketch_arcA
Draw a 3-point arc (mm): from start (x1,y1), through (x2,y2), to end (x3,y3). Useful as a sweep/revolve path.
Inputs: x1 (required), x2 (required), x3 (required), y1 (required), +4 more.
fusion_sketch_circleB
Draw a circle (mm) by center (x,y) and radius OR diameter.
Inputs: x, y, plane, radius, +2 more.
fusion_sketch_constrainB
Add a geometric constraint between sketch entities (by curve index). type: coincident/parallel/perpendicular/tangent/equal/horizontal/vertical/ concentric/collinear/midpoint/symmetry. For coincident/midpoint, entity_one is a sketch-point index. This is the key to robust, editable parametric sketches.
Inputs: type (required), sketch (required), entity_one (required), entity_two, +1 more.
fusion_sketch_dimensionA
Add a driving dimension. type: distance/horizontal/vertical/angular/radial/ diameter. value is mm (degrees for angular). Drives parametric sizing.
Inputs: type (required), sketch (required), entity_one (required), value, +1 more.
fusion_sketch_lineB
Draw a single line segment from (x1,y1) to (x2,y2), in mm.
Inputs: x1 (required), x2 (required), y1 (required), y2 (required), +2 more.
fusion_sketch_offsetB
Offset a sketch curve (by index) by distance mm toward (dir_x, dir_y).
Inputs: curve (required), sketch (required), distance (required), dir_x, +1 more.
fusion_sketch_polygonB
Draw a regular polygon (mm) by center, circumradius, and side count (>=3).
Inputs: sides (required), radius (required), x, y, +3 more.
fusion_sketch_projectA
Project a body's edges onto a sketch (linked reference geometry).
Inputs: body (required), sketch (required).
fusion_sketch_rectangleA
Draw a rectangle (mm). mode='corner' treats (x,y) as a corner;
mode='center' treats (x,y) as the center. Creates a new sketch on plane
unless an existing sketch is given.
Inputs: width (required), height (required), x, y, +3 more.
fusion_sketch_splineA
Draw a spline through points [[x,y],...] (mm). type 'fit_points' or 'control_points' (uses degree).
Inputs: points (required), type, plane, degree, +1 more.
fusion_sphereA
Create a sphere of radius OR diameter mm, centered on the origin.
Auto-creates a document if none is open.
Inputs: name, radius, diameter.
fusion_split_bodyB
Split a body by a plane (xy/xz/yz) or by another body (tool_body).
Inputs: body (required), plane, tool_body.
fusion_split_faceB
Split faces of a body by a plane (xy/xz/yz).
Inputs: body (required), faces, plane.
fusion_summaryARead-only
High-level snapshot of the design: units, counts, and a body list. A good first call to understand the current model.
Inputs: no named parameters.
fusion_suppress_featureBIdempotent
Suppress a timeline feature by name (from fusion_list_features).
Inputs: name (required).
fusion_surface_patchC
Patch a closed sketch profile into a surface body.
Inputs: sketch (required).
fusion_surface_ruledA
Create a ruled surface from a body edge (by index), extended by distance mm.
Inputs: body (required), edge (required), distance (required).
fusion_surface_stitchB
Stitch surface bodies (list of indices/names) into one, with tolerance mm.
Inputs: bodies (required), tolerance.
fusion_surface_thickenB
Thicken a (surface) body's faces into a solid by thickness mm. direction 'positive' or 'symmetric'.
Inputs: body (required), thickness (required), direction.
fusion_sweepA
Sweep a profile (from profile_sketch) along the first curve of path_sketch. Draw the path as an open sketch (line/arc/spline) and the profile as a closed sketch, then sweep.
Inputs: path_sketch (required), profile_sketch (required), profile, operation.
fusion_threadA
Add a thread to a cylindrical face (face index from fusion_list_faces, the non-planar one). internal=True for a hole; modeled=True for real geometry.
Inputs: body (required), face (required), modeled, internal, +4 more.
fusion_undoA
Undo the last operation (guards against a parametric->direct design flip).
Inputs: no named parameters.
fusion_unsuppress_featureBIdempotent
Unsuppress a timeline feature by name.
Inputs: name (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 108 tools
Several tools overlap heavily (e.g., fusion_get_body vs fusion_body_info, fusion_document_info vs fusion_summary) and an agent could easily pick the wrong one. Most tools, however, have distinct resource+action targets, and the detailed descriptions help resolve most ambiguities.
All tools share a consistent fusion_ prefix and follow a predictable verb_noun pattern (get_, list_, create_, set_, etc.). Even specialized groups like sketch_ and cam_ maintain the same style, with no mixed conventions or irregular nouns.
With 108 tools, the set is far beyond the well-scoped range and will severely burden an agent's context window and tool-selection process. Even for a comprehensive CAD server, this count is excessive and clearly falls into the 50+ category per the calibration guide.
The toolset covers a very broad range of Fusion 360 workflows: documents, sketches, solids, surfaces, components, joints, CAM, exports, and API introspection. Minor gaps exist (e.g., no sketch editing/deletion, no component renaming), but most core design and manufacturing workflows are present.
Maintenance
Related MCP Connectors
Headless CAD engine & MCP server for 2D/3D drafting, solids, DXF/SVG export, and automation.
Read and edit the Revit 2024–2027 model on your PC. Needs the free Revit MCP add-in.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to inspect and automate Autodesk Fusion 360 through MCP, providing tools for CAD modeling, CAM manufacturing, and document management.-
- AlicenseCqualityCmaintenanceEnables MCP-compatible assistants to control Autodesk Fusion for mechanical modeling, assembly editing, CAM workflows, inspection, and model export through Fusion's native MCP endpoint.391MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP-compatible coding agents to inspect and automate Autodesk Fusion designs through a local add-in, with whole-task approval, recovery checkpoints, undoable transactions, and geometry validation.Apache 2.0
- AlicenseAqualityBmaintenanceEnables LLM agents to build and modify parametric 3D models in Autodesk Fusion 360 through sketches, solid features, construction geometry, inspection tools, and in-Fusion Python execution. It connects MCP clients to a local Fusion add-in with status checks, error reporting, and unit-aware operations.154MIT