tinkercad-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TINKERCAD_HEADED | No | Set to 0 to hide Chrome after you have already logged in. First login should stay headed. | |
| TINKERCAD_PROFILE_DIR | No | Chrome profile folder (default: .browser-profile/ in this repo) | |
| TINKERCAD_SCREENSHOT_DIR | No | Where screenshots are saved |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tinkercad_login_statusA | Check whether the persistent Chrome profile is signed in to Tinkercad. Use this first on a new machine. If it reports not logged in, complete Autodesk sign-in in the opened Chrome window, then call this tool again. Args:
Returns: loggedIn, current URL, and the next action to take. |
| tinkercad_open_circuitA | Open an existing Circuits design or start from the Circuits dashboard. Args:
Returns: Circuit snapshot after the editor is ready. Examples:
Error Handling:
|
| tinkercad_get_circuitA | Read the currently open Circuits editor: components, pins, wires, code, serial, and simulation flag. Call this after every build step so later tools use real component ids. Args:
Returns: Structured circuit state. Component ids from this tool are required by move/delete/wire tools. |
| tinkercad_screenshotA | Capture the visible Circuits editor as a PNG. Use when SVG scrape is incomplete and you need to see placement, wiring, or LED state. Returns: An image plus the temp file path. |
| tinkercad_list_componentsA | List the local catalog of Tinkercad Circuits parts this server knows how to search for. This does not scrape Autodesk. It is the allowed vocabulary for tinkercad_add_component and tinkercad_build_circuit. Args:
|
| tinkercad_add_componentA | Search the Circuits parts panel and drop a component onto the canvas. Args:
Returns: Updated circuit snapshot. Prefer ids from the returned components list for later wiring. Error Handling:
|
| tinkercad_move_componentB | Drag an existing component to a new canvas position. Args:
|
| tinkercad_delete_componentA | Select a component and delete it from the open circuit. Args:
This removes the part and its attached wires. |
| tinkercad_connect_pinsA | Click-to-wire two pins on the open circuit. Args:
Call tinkercad_get_circuit first so pin names match what the editor actually exposed. |
| tinkercad_delete_wireB | Select a wire by id and delete it. Args:
|
| tinkercad_set_component_attributeB | Change an inspector field on a selected component (resistance, color, value). Args:
|
| tinkercad_get_codeA | Open the Code panel, switch to Text mode, and return the sketch. Args:
|
| tinkercad_set_codeA | Replace the entire Text-mode Arduino sketch. Args:
Switching from Blocks to Text is done automatically when the dropdown is present. |
| tinkercad_start_simulationA | Press Start Simulation in the open editor. After starting, wait and call tinkercad_read_serial or tinkercad_screenshot to observe results. |
| tinkercad_stop_simulationB | Press Stop Simulation in the open editor. |
| tinkercad_read_serialA | Read text currently shown in the Circuits serial monitor. Args:
The Code panel is opened if needed. Empty output usually means the sketch never called Serial.begin / Serial.println, or simulation is stopped. |
| tinkercad_build_circuitA | Place components, set attributes, wire pins, and optionally write Arduino code in one call. This is a convenience workflow over the primitive tools. Prefer primitives when you need to recover from a single failed step. Args:
Example: components: [ { "ref": "uno", "type": "arduino_uno_r3", "x": 220, "y": 220 }, { "ref": "led1", "type": "led", "x": 520, "y": 220, "attributes": { "color": "red" } }, { "ref": "r1", "type": "resistor", "x": 520, "y": 340, "attributes": { "resistance": "220" } } ] wires: [ { "from": "uno.D13", "to": "led1.anode" }, { "from": "led1.cathode", "to": "r1.pin1" }, { "from": "r1.pin2", "to": "uno.GND" } ] |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Each tool targets a clear editor action, and the descriptions make the intended usage explicit. Minor ambiguity exists between tinkercad_get_circuit (which can include code) and tinkercad_get_code, and between tinkercad_build_circuit and the primitive tools it wraps, but the documentation explains these relationships.
All tools share the tinkercad_ prefix and almost all use snake_case verb_noun names like open_circuit, add_component, and delete_wire. A couple of names deviate from the strict verb_noun pattern, such as tinkercad_login_status and tinkercad_screenshot, so the consistency is strong but not perfect.
With 17 tools, the set is slightly above the ideal 3-15 range, but every tool maps to a meaningful step in the Cireuits workflow: opening, inspecting, placing, wiring, coding, simulating, and observing. The convenience build_circuit tool adds some redundancy, but it is justified as a higher-level workflow over the primitives.
The tool surface covers the main build/edire/simulate lifecycle well: open, read, add, move, delete, wire, set attributes, write code, run simulation, read serial, and capture screenshots. Notable non-critical gaps include serial input, explicit save/export, undo/redo, and project-level operations like deleting or renaming circuits.