tinkercad-circuits-mcp
Provides tools to create or open Tinkercad Circuits designs, build and read back Arduino breadboard circuits, write sketches, and run the Tinkercad simulator to observe LEDs, servos, buttons, and Serial Monitor output.
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., "@tinkercad-circuits-mcpBuild a traffic light on pins 10, 9, 8 in Tinkercad and run it."
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.
tinkercad-circuits-mcp
An MCP server that builds Arduino circuits in Tinkercad Circuits and runs them in the simulator. You describe the circuit (which part goes in which breadboard hole, the wires, the sketch) and it appears in your Tinkercad account, wired on a breadboard, with the code saved. It can then start the simulation, press buttons, type into the Serial Monitor and tell you what the LEDs, servos and serial output did.
It works with Claude Code, Claude Desktop, Cursor, Codex and any other client that speaks the Model Context Protocol.

examples/traffic-light.json, built and simulated by the server. The LEDs are read back from the simulator to check the order.
I wrote it to get through a course with 70-odd Arduino lab tasks that all had to be handed in as Tinkercad designs. Building them by hand took forever.
If you found sethski/tinkercad-mcp-server first: that one works by clicking and dragging in the editor. When I tried it in November 2026 it could not create a circuit or find the breadboard in the parts panel, and it had no way of knowing which hole a leg ended up in. This server changes the editor's circuit model directly, so parts land in the holes you name, and it reads the result back and checks it in the simulator.
Not affiliated with Autodesk. Tinkercad has no public API for Circuits; this uses the editor's internals, which can change without notice. See How it works.
What it can do
Create or open a design and build a whole circuit in one call: Arduino Uno, small breadboard, parts in the holes you name, colour-coded jumper wires routed around the board.
Write the Arduino sketch into the design.
Read a design back: every part, the hole under each pin, its settings, every wire, the code.
Run the simulator and sample LED brightness, servo angles and the Serial Monitor at the times you choose, while pressing buttons or sending serial input.
Change a setting between runs, like a potentiometer position or the distance an ultrasonic sensor sees, to test different inputs.
About 20 parts are supported: LEDs, resistors, buttons, potentiometers, servos, a piezo, the HC-SR04, TMP36, DC motors (with and without encoder), the L293D, an IR receiver, an RGB LED and a few more. The full list is in docs/parts.md.
Related MCP server: circuitsnap
Setup
You need Node.js 20 or newer and Google Chrome. First sign in to Tinkercad once:
npx -y tinkercad-circuits-mcp loginThis opens Chrome on the Tinkercad page. Sign in the way you normally do; it is an ordinary Chrome window. It closes once you reach your dashboard. The session lives in ~/.tinkercad-circuits-mcp/profile; your password never passes through this project.
Then add the server to your client.
Claude Code
claude mcp add tinkercad-circuits -- npx -y tinkercad-circuits-mcpClaude Desktop, Cursor and other clients
Add this to the client's MCP config: claude_desktop_config.json for Claude Desktop, ~/.cursor/mcp.json for Cursor.
{
"mcpServers": {
"tinkercad-circuits": {
"command": "npx",
"args": ["-y", "tinkercad-circuits-mcp"]
}
}
}Codex
In ~/.codex/config.toml:
[mcp_servers.tinkercad-circuits]
command = "npx"
args = ["-y", "tinkercad-circuits-mcp"]From source
git clone https://github.com/netchuu/tinkercad-circuits-mcp.git
cd tinkercad-circuits-mcp
npm install
npm run build
npm run loginand use node /full/path/to/tinkercad-circuits-mcp/dist/index.js as the command in the configs above.
Skill
There is also a Claude Code skill in skills/tinkercad-circuits that explains the workflow to Claude: how to lay out a breadboard, what to use when Tinkercad lacks a part, and how to check that a circuit does what the task asks. Copy the folder to ~/.claude/skills/ to use it.
Using it
Ask for a circuit in plain words:
Build a traffic light in Tinkercad: red, yellow and green LEDs on pins 10, 9 and 8, green for 5 s, yellow 2 s, red 5 s. Then run it and check the order.
Claude turns that into a spec for tinkercad_build_circuit. A smaller one, a single blinking LED, looks like this:
{
"title": "Blink an LED on a breadboard",
"parts": [
{ "ref": "r1", "type": "resistor", "at": "5g", "pin": "1", "angle": 90, "props": { "ohms": 220 } },
{ "ref": "led1", "type": "led", "at": "9i", "pin": "anode", "angle": 180 }
],
"wires": [["uno.GND1", "T-1"], ["uno.D13", "5i"], ["10h", "T-10"]],
"code": "void setup() { pinMode(13, OUTPUT); }\nvoid loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }"
}The resistor spans columns 5 to 9 in row g, the LED's anode shares column 9 and its cathode goes to the ground rail. The format is explained in docs/circuit-spec.md, and there are more complete circuits in examples/.
To check the circuit, Claude calls tinkercad_simulate:
{ "samples_ms": [500, 1500, 2500], "leds": ["led1"] }and gets back, for each sample, whether led1 was on and the simulator clock at that moment.
Tools
Tool | What it does |
| Checks that the Chrome profile is signed in to Tinkercad. |
| Parts, pin names and settings. |
| Opens a design by link or id, or creates a new one. |
| Replaces the open circuit with the one in the spec and saves the code. |
| Reads the saved circuit back. |
| Replaces the sketch. |
| Changes a part setting (knob position, sensor distance). |
| Runs the simulator with button presses and serial input; returns LED, servo and serial readings. |
| Returns a picture of the editor. |
Limits
One small breadboard per circuit, Arduino Uno only.
Tinkercad has no KY-023 joystick, LM35, HC-05 Bluetooth module, L298N or IR line sensor. The skill lists the usual stand-ins (two potentiometers, TMP36, the Serial Monitor, L293D, pushbuttons).
The simulator runs slower than real time, and LED readings come from a screenshot, so leave some margin in your timings. Hold buttons for at least 0.6 s.
Only one process can use the Chrome profile at a time.
If Tinkercad changes its editor internals, building will fail until the code is updated.
npm run smoketells you quickly whether it still works.
Documentation
Circuit spec: holes, rails, parts, wires, settings
Simulation: timelines, reading LEDs, servos and serial, testing a task
How it works: the Tinkercad internals this relies on
Parts: every supported part with its pins
Development
npm test # unit tests for the spec and catalog, no browser needed
npm run smoke # builds and simulates two circuits in your Tinkercad account
npm run parts-doc # regenerates docs/parts.mdThe smoke test creates a design called "tinkercad-circuits-mcp smoke test". Pass its link to reuse it: npm run smoke -- https://www.tinkercad.com/things/<id>.
Issues and pull requests are welcome, especially new parts. Adding one is mostly finding its device id (the data-did attribute on the tile in Tinkercad's parts panel) and its pin names; How it works has the details.
License
MIT
Available Tools
9 toolstinkercad_build_circuitBuild a circuitA
Replaces everything in the open circuit with the one described here: an Arduino Uno, one small breadboard, the listed parts placed in breadboard holes, the wires and (optionally) the Arduino code. If no circuit is open, a new one is created. Holes are named like '12e' (columns 1-30, rows a-j; a-e and f-j are the two halves). Rails are T+, T-, B+, B- with an optional column (T-12). Wire ends are holes, rails, uno.PIN (uno.D13, uno.A0, uno.5V, uno.GND1) or ref.pin (led1.anode). pin says which leg of the part goes into at; the part is rotated until all legs land in holes. See docs/circuit-spec.md for examples.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| parts | No | ||
| title | No | ||
| wires | No | ||
| arduino | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose the crucial destructive trait ('replaces everything in the open circuit') and the create-if-none-open fallback, which is exactly the kind of behavior an agent needs. It stops short of stating error behavior for invalid hole/pin references, whether a running simulation is affected, or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the replacement contract comes first, followed by the coordinate vocabulary needed to actually fill the schema. Every sentence carries specification value; the only soft spot is that the part/wire grammar and the doc pointer could be split into clearer segments.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex, high-arity builder with no annotations and no output schema, and the description supplies the domain syntax an agent could not guess from the schema. It is still missing declared limits (60 parts, 150 wires), the optional-code vs `arduino` interaction, and any note on failure modes or the response, so it is strong but not self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description does substantial work: hole naming ('12e', columns 1-30, rows a-j with the two halves), rail notation with optional column (T-12), valid wire endpoints (holes, rails, uno.PIN, ref.pin), and the meaning of `pin` relative to `at` including auto-rotation. Gaps remain for `title`, `raw`, `props`, `free`, and `angle`, and the `arduino` boolean is not addressed at all (the text implies an Arduino is always present).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Replaces everything in the open circuit with the one described here') and enumerates the fixed composition (Arduino Uno, small breadboard, parts, wires, optional code). The replace-vs-create semantics also separate it from siblings like tinkercad_set_part and tinkercad_open_circuit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes when the tool applies in terms of state ('If no circuit is open, a new one is created'), which is useful context. However, it never says when to prefer this whole-circuit builder over incremental siblings such as tinkercad_set_part or tinkercad_set_code, nor any prerequisites or exclusions, so the agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_get_circuitRead the open circuitARead-only
Returns the open circuit as Tinkercad has it saved: each part with the hole under every pin, its properties, every wire and the Arduino code.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, so the description's job is lighter. It does add genuine value by disclosing the return contents and that the snapshot reflects saved state rather than a running simulation, but it says nothing about behavior when no circuit is open or about output size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core action and then enumerates the payload items. Nothing is redundant or padded, and every clause carries information an agent can use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey the return shape, and it does so concretely across parts, pins/holes, properties, wires, and code. The only omissions are edge cases such as an empty or unopened circuit, which is minor for a zero-argument read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema declares zero properties, so there are no parameters to explain and the baseline is 4. The description correctly implies the tool takes no input, staying consistent with the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-and-resource pair ("returns the open circuit") and enumerates exactly what is included: parts, the hole under each pin, part properties, wires, and the Arduino code. That lets an agent distinguish it from tinkercad_list_parts or tinkercad_simulate, though it never names or contrasts a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "as Tinkercad has it saved" implies reading persisted state of the currently open circuit, which indirectly tells the agent when this applies. There is no explicit when-to-use guidance and no stated alternative for live/simulated state or part-only listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_list_partsList partsARead-only
Lists the parts that can go in a circuit spec, with their pin names, pin offsets (in breadboard holes, at angle 0) and settable properties. Filter with a word like 'led', 'motor' or 'sensor'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation establishes that this is a safe, non-mutating operation, and the description is consistent with it. Beyond that annotation, it discloses the returned metadata, the breadboard-hole units and angle-0 reference for pin offsets, and filtering behavior, though it says nothing about result limits or unfiltered-query behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences front-load the purpose and returned information, then immediately explain filtering. The parenthetical units and examples add useful precision without introducing unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only lookup, the definition covers the resource, important result contents, measurement conventions, and basic filtering despite having no output schema. Minor omissions remain around what happens when query is omitted or empty and whether results are capped or paginated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema leaves query completely undocumented, the description explains that it accepts a filter word and provides three useful example terms. For the tool's only parameter, this supplies enough practical meaning to compensate for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb and resource—listing parts usable in a circuit spec—with concrete output details such as pin names, offsets, and settable properties. This suggests a parts catalog rather than inspection of an existing circuit, but it does not explicitly differentiate itself from siblings such as tinkercad_get_circuit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The circuit-spec wording provides a clear discovery-before-build context, and the second sentence explains how to narrow the catalog with terms such as 'led', 'motor', or 'sensor'. It would be stronger if it explicitly directed agents to use it before tinkercad_build_circuit or tinkercad_set_part, rather than leaving that routing implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_open_circuitOpen or create a circuitA
Opens an existing Tinkercad Circuits design (link or id) in the editor, or creates a new one with target "new". Optionally renames it.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| target | Yes | "new", a design link like https://www.tinkercad.com/things/abc123, or just the id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose a side effect ('optionally renames it') and the dual open/create nature, but it never says what happens on an invalid or unreachable link, whether creating consumes an account/design slot, or whether the editor navigation has any persistent effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the primary action, and every clause carries information (mode switch, acceptable target formats, rename side effect). Nothing is redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only structured guidance available, yet it never indicates what the tool returns (a design id, URL, or editor handle) or how the agent should reference the design afterward. For a create-or-open tool whose result is likely needed by downstream siblings like set_part or simulate, that is a meaningful omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: target is documented in the schema itself (the 'new'/link/id forms are repeated verbatim in the description), while title has no schema description at all. The description partially compensates for that gap by explaining that title triggers a rename, but it does not clarify whether renaming applies to newly created designs only, whether it overwrites an existing title, or the 80-character limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Opens an existing Tinkercad Circuits design ... or creates a new one') and names the sentinel value 'new' that switches modes, so an agent can tell open-from-existing apart from create-new. It never names or contrasts the sibling tools (get_circuit, build_circuit) that an agent might confuse it with, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it tells the agent that target='new' means create and a link/id means open, which is real routing guidance for the mode choice. It offers no when-to-use versus the alternatives (e.g. get_circuit for reading an existing design, build_circuit for assembly) and no prerequisites or failure conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_screenshotScreenshotBRead-only
Returns a PNG of the Tinkercad window as it is right now.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the description adds real value by naming the return format (PNG) and freshness (current state, not a stored snapshot). It does not say what region is captured (full window vs canvas), resolution, or whether it blocks while rendering, so gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no wasted words and the key fact (PNG output, live state) front-loaded. It is appropriately sized for a parameterless tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only capture tool with no output schema, the description covers what is returned and when it is captured. Only minor details (capture scope, resolution) are absent, and those are low-stakes here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema is trivially complete and no parameter meaning needs to be conveyed. Baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Returns) and resource (a PNG of the Tinkercad window) plus a scope qualifier (as it is right now). It is clearly the only capture-style tool among siblings like tinkercad_list_parts and tinkercad_simulate, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance and no alternatives named. The phrase 'as it is right now' hints that it is for inspecting current live state, but the agent is left to infer that on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_set_codeSet the Arduino codeB
Replaces the Arduino sketch of the open circuit (text code, not blocks).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the key trait: 'Replaces' signals that the existing sketch is overwritten and lost. Beyond that, it says nothing about whether the circuit must be simulating, whether the code is validated against the Arduino sketch format, or what happens to an active simulation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence of about thirteen words, with the action and resource front-loaded and the 'not blocks' disambiguation clearly parenthesized. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation tool with no annotations and no output schema, the description covers the essential identity and overwrite semantics but leaves open the preconditions (open circuit, simulation state), validation behavior, and the result of a successful or failed call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the one parameter, and it adds meaning by specifying 'Arduino sketch ... text code, not blocks.' However, it still doesn't say whether 'code' means a full sketch with setup() and loop() or a fragment, and the 1–80000 character bounds exist only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Replaces') paired with a specific resource ('the Arduino sketch of the open circuit'), so the agent knows exactly what it does. The parenthetical '(text code, not blocks)' distinguishes it from block-based editing, although it doesn't distinguish it from siblings like tinkercad_set_part or tinkercad_build_circuit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no comparison with alternatives; the only usage hint is implicit, in that the circuit must be 'open.' An agent must infer that this is the write counterpart to tinkercad_get_circuit and that it is not the right tool for building circuits from parts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_set_partChange a part settingA
Changes a setting on a part that is already in the circuit, e.g. a potentiometer position (0-1) or the distance an ultrasonic sensor sees. Use it between simulation runs to test different inputs.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| props | Yes | friendly settings, e.g. {"position": 0.8} or {"distance_cm": 40} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden. It usefully discloses that the target part must already exist in the circuit and that the change is meant to sit between simulation runs, but says nothing about permissions/prerequisites (open circuit, valid ref), whether a re-run is needed to observe the effect, or what happens for an unknown prop key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the mutation and followed by the usage timing; the inline examples replace what would otherwise be a longer explanation. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with a free-form nested props object and no output schema, the definition leaves the biggest question open: which prop keys each part type accepts and where to get a valid 'ref' (presumably tinkercad_list_parts). It is adequate to attempt a call but not to call correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: the 'props' object is documented in both places, and the description adds genuine meaning by giving concrete key/value examples (position 0-1, distance_cm). The 'ref' parameter has no description anywhere, and the fact that valid prop keys vary per part type is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Changes a setting') against a specific resource ('a part that is already in the circuit'), and the two examples (potentiometer position 0-1, ultrasonic distance) make the operation concrete. The 'already in the circuit' qualifier implicitly separates it from tinkercad_build_circuit, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it between simulation runs to test different inputs' gives a real when-to-use condition tied to the simulate workflow. It stops short of stating when NOT to use it (e.g. use build_circuit to add a new part, or that the circuit must already be open) or naming alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_simulateRun the simulationA
Starts the simulator, optionally presses buttons and types into the Serial Monitor, and samples LED brightness, servo angles and simulator time at the given moments (milliseconds after start). Returns the samples and the end of the Serial Monitor text. The simulator usually runs a bit slower than real time, so leave some margin and check sim_time.
| Name | Required | Description | Default |
|---|---|---|---|
| leds | No | refs of LEDs to read | |
| serial | No | return the Serial Monitor text | |
| servos | No | refs of servos to read | |
| presses | No | ||
| samples_ms | Yes | ||
| keep_running | No | ||
| serial_input | No | ||
| wait_for_serial | No | start the timeline only after this text is printed (e.g. READY) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explains that the tool starts the simulator, injects button presses and serial input, samples at specified times, and returns samples plus the trailing Serial Monitor text. It also discloses the important behavioral quirk that the simulator runs slower than real time. It omits what happens to simulator state afterwards (e.g., whether it keeps running by default, restart behavior).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and results, with the timing caveat placed appropriately at the end. No filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter tool with no output schema, the description does the necessary work by summarizing what is returned (samples and end of Serial Monitor text) and explaining sampling semantics. The unexplained keep_running flag and the absence of workflow context relative to siblings are the remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, so the description meaningfully compensates by defining samples_ms as moments in milliseconds after start, and by linking presses, serial_input, LED refs, servo refs, and serial text return to their roles. The notable gap is keep_running, which is undocumented in both schema and description, leaving one of eight parameters opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource set: starts the simulator, presses buttons, types serial input, and samples LEDs/servos/time. It is clearly distinct from siblings like tinkercad_set_code or tinkercad_screenshot by its run-and-observe role. It stops short of explicitly naming which sibling to use instead, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the sampling timeline and the note that the simulator runs slower than real time, so callers should leave margin and check sim_time. However, there is no explicit statement of when to call this versus tinkercad_status or tinkercad_screenshot, and no stated prerequisites such as needing a built circuit or loaded code first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinkercad_statusCheck Tinkercad sign-inARead-only
Opens the Tinkercad dashboard in the server's Chrome profile and reports whether you are signed in. If not, the user has to run npm run login once.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the readOnlyHint annotation: the tool has a visible side effect (launches the dashboard in the server's Chrome profile), it depends on an existing browser profile, and failure requires a manual one-time login step the agent cannot perform itself. Missing only latency/error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: the first covers action and result, the second covers the failure/remediation path. Front-loaded with the primary behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and a single annotation, the description covers what the agent needs: what happens, what is reported, and the human-in-the-loop fix if unauthenticated. It could mention how the signed-in result is surfaced, but the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the schema coverage is moot. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (opens the Tinkercad dashboard in the server's Chrome profile) and the specific result it reports (whether you are signed in). The auth-status focus clearly distinguishes it from the parts/circuit siblings, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — check sign-in status before doing Tinkercad work — and it gives a concrete remediation path (`npm run login`). However it never states explicitly when to call it (e.g. 'call this first if other tools fail with auth errors') or what to do with the answer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
tinkercad_build_circuit - First observed
tinkercad_get_circuit - First observed
tinkercad_list_parts - First observed
tinkercad_open_circuit - First observed
tinkercad_screenshot - First observed
tinkercad_set_code - First observed
tinkercad_set_part - First observed
tinkercad_simulate - First observed
tinkercad_status
TDQS
Scored across 9 tools
Each tool maps to a distinguishable action: status check, part catalog, open/create, build, read state, set code, set a part property, simulate, screenshot. The only soft overlaps are open_circuit vs build_circuit (both can create a circuit) and set_code vs build_circuit's optional code argument, but the descriptions make the primary purpose of each clear enough.
All tools share the tinkercad_ prefix and snake_case, with a mostly verb_noun shape (list_parts, open_circuit, build_circuit, get_circuit, set_code, set_part). tinkercad_status and tinkercad_screenshot are noun-only outliers, but the pattern remains predictable.
Nine tools is well within the sweet spot and every tool covers a distinct phase of the workflow: auth check, discovery, circuit setup, mutation, inspection, simulation, and visual capture. No tool looks redundant or padded.
The surface covers the full loop of discover parts, open/build, read back, tweak code and part settings, simulate, and screenshot, so an agent can accomplish the core task. Gaps are incremental edits (removing a single wire or part, moving a part without a full rebuild) and persistence/export, which are workable via build_circuit replacement but add friction.
Maintenance
Related MCP Connectors
Arduino benches simulated in the browser: sessions, sketch push, simulation, tests, challenges.
Electronics prototyping: real parts and pinouts, wiring checks, and shareable circuit designs.
Search, read, preview, create, update, rename, arrange and trash sketches in your Google Drive.
Build 3D web apps: physics, audio, music, Blender import. Live edits, undo, versions, publishing.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Arduino development through arduino-cli, allowing sketch management, code compilation and uploading, library and board operations, serial monitoring, and AI-powered circuit diagram generation using WireViz.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables building and simulating electronic circuits by converting netlist descriptions or drawings into live CircuitJS1 simulation URLs.2MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to build and simulate Tinkercad Circuits through a real Chrome session, including placing parts, wiring pins, writing Arduino code, running simulations, and reading serial output.6173MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI to operate Tinkercad's 3D editor through a semantic toolset, using remote browser automation to create and manipulate 3D designs.MIT