Skip to main content
Glama
self-host-fusion360-mcp

self-host-fusion360-mcp

by mystify59

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 end-to-end in Fusion 360 through a Claude conversation via this MCP

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 and doctor keep reminding you.


Related MCP server: Fusion Native MCP

Features

  • Two transports — stdio (Claude Desktop / Claude Code) and streamable-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_docs reach any adsk.* 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 webui opens 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

  1. Install Fusion 360 and Python 3.10+ (tick Add to PATH).

  2. Double-click install/windows-install.bat (or run install/windows-install.ps1 in PowerShell). It copies the add-in into Fusion, generates the token, installs the server, and merges your Claude Desktop config.

  3. 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).

  4. 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   # verify

Add 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 browser

A 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.

The fusion-mcp webui local config dashboard


Configuration

All optional; defaults shown. See .env.example.

Variable

Default

Meaning

FUSION_ADDIN_URL

http://127.0.0.1:9000

Where the server reaches the add-in (http://host.docker.internal:9000 in Docker)

FUSION_MCP_TOKEN / FUSION_MCP_TOKEN_FILE

~/.fusion-mcp/token

Shared bearer token (resolution order)

FUSION_MCP_TRANSPORT

stdio

stdio or http

FUSION_MCP_HTTP_HOST / _PORT

0.0.0.0 / 8765

HTTP bind (http transport)

FUSION_MCP_ALLOW_ARBITRARY_CODE

0

Expose fusion_run_script (risky)

FUSION_MCP_MOCK

0

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_script runs arbitrary Python in Fusion; it is disabled unless you opt in.

  • The bridge binds to 127.0.0.1 and 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 root

The 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 target

Fusion'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 -q

Hot-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-test

Only 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_document refuses while a document is open unless it passes confirm=true (setting guard_new_document), so stray Untitled documents stop piling up. Finish up from the agent side with fusion_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_component makes 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 _delta feedback, 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_pattern on 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 tools
fusion_api_docsA
Read-only

Get the Autodesk cloudhelp URL for an API class or member (e.g. 'ExtrudeFeatures.createInput').

Inputs: name (required).

fusion_api_introspectA
Read-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_infoA
Read-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_boxA
Read-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_operationsA
Read-only

List operations in a CAM setup (name, has_toolpath, is_valid).

Inputs: setup (required).

fusion_cam_list_setupsA
Read-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_toolsB
Read-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_documentA
Destructive

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_documentsA
Destructive

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_combineA
Destructive

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_allA
Destructive

Delete every timeline feature, clearing the design. Destructive.

Inputs: no named parameters.

fusion_delete_bodyA
Destructive

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_parameterA
Destructive

Delete a user parameter by name (model parameters cannot be deleted).

Inputs: name (required).

fusion_document_infoA
Read-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_viewA
Idempotent

Zoom/fit the view to show the whole model.

Inputs: no named parameters.

fusion_get_active_componentA
Read-only

Return the current build target; subsequent build operations target it.

Inputs: no named parameters.

fusion_get_bodyA
Read-only

Detailed info for one body (by index or name): volume, area, face/edge/ vertex counts, and bounding box.

Inputs: body (required).

fusion_get_parameterC
Read-only

Get one parameter by name.

Inputs: name (required).

fusion_get_unitsB
Read-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_interferenceA
Read-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_appearancesA
Read-only

List available appearance names (optionally filtered by substring).

Inputs: limit, filter.

fusion_list_bodiesA
Read-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_componentsA
Read-only

List all components in the design with their body counts.

Inputs: no named parameters.

fusion_list_documentsA
Read-only

List all open Fusion documents with their active / modified / saved state.

Inputs: no named parameters.

fusion_list_edgesA
Read-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_facesA
Read-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_featuresA
Read-only

List timeline features in creation order.

Inputs: no named parameters.

fusion_list_jointsA
Read-only

List joints (name, type), plus as-built-joint and rigid-group counts.

Inputs: no named parameters.

fusion_list_occurrencesA
Read-only

List component occurrences: name, grounded, visible, body count.

Inputs: no named parameters.

fusion_list_parametersA
Read-only

List all parameters (user + model) with expression, value, and unit.

Inputs: no named parameters.

fusion_list_projectsA
Read-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_sketchesA
Read-only

List sketches with index, name, and number of closed profiles.

Inputs: no named parameters.

fusion_list_threadsB
Read-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_angleA
Read-only

Angle (degrees) between the first faces of two bodies.

Inputs: body_a (required), body_b (required).

fusion_measure_distanceB
Read-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_propertiesA
Read-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_bodyC
Idempotent

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_documentA
Idempotent

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_screenshotB
Read-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_appearanceA
Idempotent

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_visibleC
Idempotent

Show or hide a body.

Inputs: body (required), visible (required).

fusion_set_parameterA
Idempotent

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_unitsA
Idempotent

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_viewA
Idempotent

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_summaryA
Read-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_featureB
Idempotent

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_featureB
Idempotent

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

    B3.2/5.0

    Scored across 108 tools

    Disambiguation3/5

    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.

    Naming Consistency5/5

    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.

    Tool Count1/5

    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.

    Completeness4/5

    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

    ActivityStale
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables AI assistants to inspect and automate Autodesk Fusion 360 through MCP, providing tools for CAD modeling, CAM manufacturing, and document management.
      -
    • A
      license
      C
      quality
      C
      maintenance
      Enables MCP-compatible assistants to control Autodesk Fusion for mechanical modeling, assembly editing, CAM workflows, inspection, and model export through Fusion's native MCP endpoint.
      39
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables 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
    • A
      license
      A
      quality
      B
      maintenance
      Enables 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.
      154
      MIT