Skip to main content
Glama

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.

The server builds a traffic light on an empty breadboard, then runs it in the Tinkercad simulator: green, yellow, red

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 login

This 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-mcp

Claude 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 login

and 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

tinkercad_status

Checks that the Chrome profile is signed in to Tinkercad.

tinkercad_list_parts

Parts, pin names and settings.

tinkercad_open_circuit

Opens a design by link or id, or creates a new one.

tinkercad_build_circuit

Replaces the open circuit with the one in the spec and saves the code.

tinkercad_get_circuit

Reads the saved circuit back.

tinkercad_set_code

Replaces the sketch.

tinkercad_set_part

Changes a part setting (knob position, sensor distance).

tinkercad_simulate

Runs the simulator with button presses and serial input; returns LED, servo and serial readings.

tinkercad_screenshot

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 smoke tells you quickly whether it still works.

Documentation

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

The 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 tools
tinkercad_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.

NameRequiredDescriptionDefault
codeNo
partsNo
titleNo
wiresNo
arduinoNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 circuitA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 partsA
Read-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'.

NameRequiredDescriptionDefault
queryNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
titleNo
targetYes"new", a design link like https://www.tinkercad.com/things/abc123, or just the id

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_screenshotScreenshotB
Read-only

Returns a PNG of the Tinkercad window as it is right now.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

NameRequiredDescriptionDefault
codeYes

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
refYes
propsYesfriendly settings, e.g. {"position": 0.8} or {"distance_cm": 40}

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
ledsNorefs of LEDs to read
serialNoreturn the Serial Monitor text
servosNorefs of servos to read
pressesNo
samples_msYes
keep_runningNo
serial_inputNo
wait_for_serialNostart the timeline only after this text is printed (e.g. READY)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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-inA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 9 tool updatesv0.1.0
    • First observedtinkercad_build_circuit
    • First observedtinkercad_get_circuit
    • First observedtinkercad_list_parts
    • First observedtinkercad_open_circuit
    • First observedtinkercad_screenshot
    • First observedtinkercad_set_code
    • First observedtinkercad_set_part
    • First observedtinkercad_simulate
    • First observedtinkercad_status

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables building and simulating electronic circuits by converting netlist descriptions or drawings into live CircuitJS1 simulation URLs.
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    6
    17
    3
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI to operate Tinkercad's 3D editor through a semantic toolset, using remote browser automation to create and manipulate 3D designs.
    MIT