Fusion360 MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FUSION_MCP_HOST | No | Host the server/add-in binds to or connects to. On the Fusion host, set it before Fusion starts (e.g. 0.0.0.0 to bind all interfaces for LAN use); in the client config, set it to the Fusion host's LAN IP (or pass --host 192.168.1.42). Defaults to the local socket at 127.0.0.1:9876. | 127.0.0.1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_scene_infoB | Get design name, bodies, sketches, features, camera info |
| get_object_infoB | Get detailed info about a named body or sketch |
| get_bounding_boxA | Axis-aligned bounding box for a body or component by name. Returns min, max, size, and center in cm (Fusion internal units). For components, unions bounding boxes of all contained bodies. Useful for measuring imported reference geometry. |
| create_sketchB | Create a new sketch on xy/yz/xz plane, optionally offset |
| draw_rectangleB | Draw a rectangle in the most recent sketch |
| draw_circleB | Draw a circle in the most recent sketch |
| draw_lineC | Draw a line in the most recent sketch |
| extrudeC | Extrude a sketch profile |
| revolveA | Revolve the most recent sketch's profile about an axis. axis_origin and axis_direction are model space (cm). The axis must be coplanar with the profile: a world-aligned direction through the model origin uses Fusion's own construction axis, anything else becomes a construction line in the sketch, and an axis leaving the sketch plane is refused with AXIS_OUT_OF_PLANE. The result reports axis_model_start/axis_model_end. |
| filletB | Round edges of a body |
| chamferC | Chamfer edges of a body |
| shellB | Hollow out a body by removing a face |
| mirrorB | Mirror a body across a construction plane |
| rename_bodyA | Rename a body (searches root and all components) |
| move_bodyB | Translate a named body by (x, y, z) |
| export_stlB | Export a named body as an STL file |
| boolean_operationB | Combine two named bodies (join/cut/intersect) |
| delete_allA | Clear the design (delete all timeline items) |
| undoA | Step the design back one operation. Parametric designs move the timeline marker back one step (synchronous and verified; the feature stays in the timeline, suppressed, and returns if you roll forward). Direct designs issue Fusion's asynchronous undo command and report undone: 'issued', verified: false — confirm with get_scene_info. Reports undone: false when there is nothing to undo. |
| execute_codeA | Run arbitrary Python in Fusion 360. The last expression's value is returned (REPL-style). Pre-defined names: app, ui, design, component, adsk, math. |
| sweepB | Sweep a sketch profile along a path (sketch curve) |
| loftB | Loft between two or more sketch profiles |
| create_polygonC | Draw a regular polygon in the most recent sketch |
| draw_arcB | Draw an arc in the most recent sketch (center + start point + sweep angle) |
| create_holeB | Create a hole feature on a body face |
| rectangular_patternB | Pattern a body in rows and columns |
| circular_patternC | Pattern a body around an axis |
| new_documentA | Create a new design document and make it active. Every other tool needs an active design, and Fusion sits at the data tab with none after a fresh launch, so this is the way in from a cold start. The document is created through the API on purpose: documents created in the Fusion UI are Part Design documents, which reject addNewComponent, so components and joints are impossible in them. |
| create_componentB | Create a new component (sub-assembly) in the design |
| add_jointA | Add a joint between two components using a pair of faces as joint geometry. face_one/face_two are mandatory: a joint cannot be built from component origins, because a bare point carries no component association. Pass a cylindrical face on each side (see get_object_info for the face indices) - for a hinge that is the knuckle bore on each leaf. NOTE: creating a joint MOVES the components so the joint geometry becomes coincident - use create_as_built_joint when the parts are already positioned. |
| set_joint_valueA | Drive a joint to a value and confirm Fusion kept it. Angles are in degrees unless units='rad'; slide values are lengths in cm and are never converted. Works on as-built joints unless as_built=False. Fusion resets joint values to zero on the next design.computeAll(), so avoid recomputing after this call - the command itself does not. |
| list_componentsB | List all components in the design |
| export_stepB | Export a body or component as a STEP file |
| export_f3dA | Export the design as a native Fusion 360 archive (.f3d) |
| export_view_sheetA | Render canonical orthographic + isometric views as PNGs and emit a self-contained HTML sheet suitable for sharing with a mechanical engineer. Opens in any browser; Print -> Save as PDF for a static artifact. Restores the viewport camera after rendering. |
| exportA | Unified export wrapper — dispatches to export_stl / export_step / export_f3d based on format or file extension. Format is auto-detected from file_path extension if not specified. STL and STEP require body_name; F3D exports the whole design. |
| import_meshA | Import a mesh file (STL, OBJ, or 3MF) as a mesh body. Returns the mesh name and bounding box. Use for reference geometry (e.g. exported SketchUp model). |
| get_parametersB | List all user parameters in the design |
| create_parameterC | Create a new user parameter |
| set_parameterA | Update the value of an existing user parameter |
| delete_parameterB | Remove a user parameter |
| draw_circlesA | Add several equally spaced circles to the most recent sketch in a single solve. Fusion re-solves the sketch on every entity insert, so adding circles one per call is superlinear in the entity count; this defers the solve across all inserts and restores the previous state afterwards. Measured at 100 circles: 68 ms against 912 ms for the same inserts one at a time. |
| add_constraintB | Add a geometric constraint in the active sketch. Entities are referenced by index within the sketch. |
| auto_constrainA | Automatically add geometric constraints and dimensions to fully constrain a sketch (Fusion 2026+ AutoConstrain API). result_option: 1 = thorough/slow (default), 2 = fast, 3 = may move geometry within tolerance. |
| add_dimensionB | Add a driving dimension to constrain sketch geometry. Value is in cm for distances, degrees for angles. |
| create_construction_planeB | Create a construction plane for sketching |
| create_construction_axisC | Create a construction axis |
| create_ucsA | Create a UCS at (x, y, z) with optional rotation (Fusion 2026+ UCS API, preview). A hidden reference sketch is created to anchor the UCS — do not delete it. |
| draw_splineA | Draw a spline in the most recent sketch. Use fit_points for a curve through points, or control_points for a control-polygon spline. |
| offset_curveB | Offset connected sketch curves by a distance. Direction is determined by the direction_point. |
| trim_curveA | Trim a sketch curve at its intersections. The segment nearest to the given point is removed. |
| extend_curveA | Extend a sketch curve to the nearest intersection. The end nearest to the given point is extended. |
| create_threadA | Add threads to a cylindrical face (cosmetic or modeled) |
| draft_facesB | Add a draft angle to faces of a body (for mold release / injection molding) |
| split_bodyB | Split a body using a plane or face |
| split_faceB | Split faces of a body using a plane |
| offset_facesB | Push/pull faces of a body by a distance |
| scale_bodyB | Scale a body uniformly or non-uniformly |
| create_boxC | Create a box primitive (non-parametric via TemporaryBRepManager) |
| create_box_parametricA | Create a history-based rectangular box via sketch rectangle + extrude (unlike create_box which uses TemporaryBRepManager). length/width/height accept a number (cm, Fusion internal unit) or a string expression referencing User Parameters (e.g. 'boxL', '56 mm', 'outer - 2 * wall_t'). Call create_parameter first to define named parameters. |
| create_cylinderC | Create a cylinder primitive (non-parametric via TemporaryBRepManager) |
| create_sphereB | Create a sphere primitive (non-parametric via TemporaryBRepManager) |
| create_torusB | Create a torus primitive (non-parametric via TemporaryBRepManager) |
| create_as_built_jointA | Create a joint that keeps both components exactly where they are, capturing the current pose instead of enforcing a new one. Use this when the parts are already positioned correctly; add_joint instead moves components to make the joint geometry coincident. Fusion needs a face pair (face_one/face_two) for every joint type except rigid. |
| create_rigid_groupB | Lock multiple components together |
| measure_distanceB | Measure minimum distance between two entities |
| measure_angleB | Measure angle between two entities |
| get_physical_propertiesB | Get mass, volume, surface area, center of mass, and density of a body |
| create_section_analysisB | Cut a section plane through the model |
| check_interferenceB | Detect collisions between components/bodies |
| compare_meshesA | Compare two mesh bodies and return deviation statistics (min/max/mean/RMS signed distance in cm) — e.g. validate an imported STL against a reference mesh. Requires Fusion 2026+. |
| set_appearanceB | Assign a material appearance to a body, face, or component from the Fusion appearance library |
| set_colorA | Assign a flat RGB color to a body (creates/reuses a design-local appearance). Useful for visually distinguishing parts before render_view. |
| project_geometryB | Project edges or bodies onto the active sketch plane |
| suppress_featureB | Suppress (disable) a feature in the timeline |
| unsuppress_featureB | Unsuppress (re-enable) a feature in the timeline |
| patch_surfaceB | Create a patch surface from boundary edges |
| stitch_surfacesB | Stitch surface bodies into a single body |
| thicken_surfaceB | Thicken a surface body into a solid |
| ruled_surfaceB | Create a ruled surface from an edge or sketch curve |
| trim_surfaceB | Trim a surface body with another body |
| create_flangeA | Create a sheet metal flange on an edge |
| create_bendB | Add a bend to a sheet metal body |
| flat_patternB | Create a flat pattern from a sheet metal body |
| unfoldB | Unfold specific bends in a sheet metal body |
| cam_create_setupB | Create a manufacturing setup for a body. Defines the stock, coordinate system, and operation type (milling/turning/cutting). |
| cam_create_operationC | Add a machining operation to a setup. Strategy determines the toolpath type. |
| cam_generate_toolpathB | Generate toolpaths for a specific operation or all operations in a setup |
| cam_post_processA | Post-process toolpaths to generate NC code (G-code) |
| cam_list_setupsB | List all manufacturing setups in the document |
| cam_list_operationsA | List operations within a setup |
| cam_get_operation_infoB | Get details about a specific operation (strategy, tool, parameters, toolpath status) |
| pingA | Health check — returns immediately without touching Fusion API |
| get_design_typeA | Check if the design is in parametric or direct mode. Use this to detect accidental mode switches. |
| set_design_typeA | Switch design type between 'parametric' and 'direct'. Use 'parametric' to recover from accidental direct-mode switches (equivalent to Capture Design History in the UI). |
| render_viewA | Capture the active viewport as a PNG so you can visually verify the model. Pass a canonical view (iso/front/top/etc.) to reposition the camera first, or 'current' to keep it as is. Returns base64-encoded image bytes alongside metadata; the MCP server delivers it as an image content block. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create-box | Guide for creating a parametric box in Fusion 360 |
| model-threaded-bolt | Step-by-step guide for modeling a threaded bolt in Fusion 360 |
| sheet-metal-enclosure | Guide for creating a sheet metal enclosure |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Connection Status | Check whether Fusion 360 is reachable |
| Design Tree | Full design tree: bodies, sketches, features, components |
| User Parameters | All user-defined parameters in the design |
TDQS
Scored across 96 tools
Most tools have clearly distinct purposes with rich descriptions, e.g. add_joint vs create_as_built_joint is explicitly differentiated. However, there are overlapping clusters: export vs export_stl/export_step/export_f3d (a unified wrapper duplicating three primitives), create_box vs create_box_parametric, and draw_circle vs draw_circles (batch). These overlaps slightly muddy selection.
Nearly the entire surface follows a consistent snake_case verb_noun pattern (create_sketch, draw_line, split_body, cam_create_setup). Minor deviations like the bare 'export' wrapper and 'ping' are cosmetic and do not break readability.
96 tools far exceeds a workable set, even for a broad CAD domain. While sketching, modeling, surfaces, sheet metal, CAM, measurement, and export are genuine sub-domains, several tools (export family, box family) could be consolidated, and the sheer count risks decision fatigue and misselection.
Coverage is impressive across sketching, solid/surface modeling, sheet metal, assembly/joints, parameters, measurement, CAM, and export, giving near-full lifecycle support. Minor gaps exist: no explicit delete_body/delete_component, mirror is body-only, and there is limited feature-editing / timeline-inspection beyond undo and suppress.