← WebMCP Directory

Tool tree

protoboard-kappa.vercel.app

Health & EducationTools verified
Website
Agent-native breadboard simulator. Build real circuits with an AI agent through WebMCP tools.
Explore capabilities
    describe_boardAnswer

    Get breadboard state as compact JSON: components (id, type, value, pin→hole map), wires, nets (label + attached pins), staged change count, sim status. Call this first and after errors to see the board. Holes: rows A–E and F–J × columns 1–30 (e.g. E14); rails +top, -top, +bot, -bot.

    View tool JSON
    {
      "name": "describe_board",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get breadboard state as compact JSON: components (id, type, value, pin→hole map), wires, nets (label + attached pins), staged change count, sim status. Call this first and after errors to see the board. Holes: rows A–E and F–J × columns 1–30 (e.g. E14); rails +top, -top, +bot, -bot.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    list_component_typesAnswer

    Catalog of placeable component types: pin names in order, footprint (which holes get occupied relative to the anchor), parameters with units, ranges and defaults, and placement notes. Call before your first place_component.

    View tool JSON
    {
      "name": "list_component_types",
      "kind": "answer",
      "impl": "imperative",
      "description": "Catalog of placeable component types: pin names in order, footprint (which holes get occupied relative to the anchor), parameters with units, ranges and defaults, and placement notes. Call before your first place_component.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    probe_nodeAction

    Read the instantaneous voltage at a hole from the running/last simulation, plus the current through the component pin there, if any. Requires run_simulation first.

    View tool JSON
    {
      "name": "probe_node",
      "kind": "act",
      "impl": "imperative",
      "description": "Read the instantaneous voltage at a hole from the running/last simulation, plus the current through the component pin there, if any. Requires run_simulation first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hole": {
            "type": "string",
            "description": "Hole to probe: bank hole like \"E16\" or a rail name like \"+top\"."
          }
        },
        "required": [
          "hole"
        ]
      }
    }
    measure_signalAction

    Measure the recorded signal at a hole: frequency_hz, duty_cycle, v_min, v_max, v_mean, edge_count. Use this to verify behavior (e.g. blink rate) instead of predicting it. Requires run_simulation first.

    View tool JSON
    {
      "name": "measure_signal",
      "kind": "act",
      "impl": "imperative",
      "description": "Measure the recorded signal at a hole: frequency_hz, duty_cycle, v_min, v_max, v_mean, edge_count. Use this to verify behavior (e.g. blink rate) instead of predicting it. Requires run_simulation first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "hole": {
            "type": "string",
            "description": "Hole on the net to measure, e.g. \"A16\" for the 555 OUT net."
          },
          "window_ms": {
            "type": "number",
            "description": "Analysis window in ms of recent sim time (1–10000). Default: the full recorded buffer."
          }
        },
        "required": [
          "hole"
        ]
      }
    }
    check_circuitAnswer

    Run design rule checks on the board including staged changes: missing ground/supply, rail shorts, floating pins, LEDs without series resistors or reversed. Returns issues with severity and the holes involved.

    View tool JSON
    {
      "name": "check_circuit",
      "kind": "answer",
      "impl": "imperative",
      "description": "Run design rule checks on the board including staged changes: missing ground/supply, rail shorts, floating pins, LEDs without series resistors or reversed. Returns issues with severity and the holes involved.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    place_componentAction

    Stage a new component with its anchor at a hole; returns its id and occupied holes. Changes stay ghosted until commit_changes or user approval. Check list_component_types for footprints. DIP-8 parts must straddle the center channel (anchor on row E or F).

    View tool JSON
    {
      "name": "place_component",
      "kind": "act",
      "impl": "imperative",
      "description": "Stage a new component with its anchor at a hole; returns its id and occupied holes. Changes stay ghosted until commit_changes or user approval. Check list_component_types for footprints. DIP-8 parts must straddle the center channel (anchor on row E or F).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "resistor",
              "capacitor",
              "led",
              "ne555",
              "piezo",
              "switch",
              "battery",
              "ground"
            ],
            "description": "Component type — see list_component_types."
          },
          "anchor_hole": {
            "type": "string",
            "description": "Hole for pin 1 / anode / \"+\", e.g. \"B2\" or \"E14\". Ground may anchor on a rail like \"-top\"."
          },
          "params": {
            "type": "object",
            "description": "Initial parameters, e.g. {\"resistance\":\"12k\"} or {\"color\":\"red\"}. Engineering-notation strings accepted."
          },
          "orientation": {
            "type": "string",
            "enum": [
              "horizontal",
              "vertical"
            ],
            "description": "Two-pin parts: horizontal = pin2 three columns right; vertical = pin2 across the center channel. Default horizontal."
          }
        },
        "required": [
          "type",
          "anchor_hole"
        ]
      }
    }
    connectAction

    Stage a jumper wire between two holes (bank hole like B7, or a rail: +top, -top, +bot, -bot). Refuses no-op wires within one net and +/− rail shorts. Convention: red = VCC, black = GND; other colors from the ribbon rainbow.

    View tool JSON
    {
      "name": "connect",
      "kind": "act",
      "impl": "imperative",
      "description": "Stage a jumper wire between two holes (bank hole like B7, or a rail: +top, -top, +bot, -bot). Refuses no-op wires within one net and +/− rail shorts. Convention: red = VCC, black = GND; other colors from the ribbon rainbow.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from_hole": {
            "type": "string",
            "description": "Start hole: bank hole like \"A14\" or a rail: +top, -top, +bot, -bot."
          },
          "to_hole": {
            "type": "string",
            "description": "End hole, same format as from_hole."
          },
          "color": {
            "type": "string",
            "description": "Optional CSS color. Convention: red = VCC, black = GND. Auto-picked when omitted."
          }
        },
        "required": [
          "from_hole",
          "to_hole"
        ]
      }
    }
    disconnectAction

    Stage removal of one jumper wire by id (see describe_board for wire ids).

    View tool JSON
    {
      "name": "disconnect",
      "kind": "act",
      "impl": "imperative",
      "description": "Stage removal of one jumper wire by id (see describe_board for wire ids).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "wire_id": {
            "type": "string",
            "description": "Wire id like \"w3\" — listed by describe_board."
          }
        },
        "required": [
          "wire_id"
        ]
      }
    }
    remove_componentAction

    Stage removal of a component by id. Any wires ending on its holes are removed too and listed in the result.

    View tool JSON
    {
      "name": "remove_component",
      "kind": "act",
      "impl": "imperative",
      "description": "Stage removal of a component by id. Any wires ending on its holes are removed too and listed in the result.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "component_id": {
            "type": "string",
            "description": "Component id like \"r1\" or \"u1\" — listed by describe_board."
          }
        },
        "required": [
          "component_id"
        ]
      }
    }
    set_component_paramAction

    Set a component parameter, e.g. resistance or capacitance. Value accepts engineering notation strings: "12k", "10u", "4.7n", "330", "3.3M". Resistor color bands on the board update to match.

    View tool JSON
    {
      "name": "set_component_param",
      "kind": "act",
      "impl": "imperative",
      "description": "Set a component parameter, e.g. resistance or capacitance. Value accepts engineering notation strings: \"12k\", \"10u\", \"4.7n\", \"330\", \"3.3M\". Resistor color bands on the board update to match.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "component_id": {
            "type": "string",
            "description": "Component id, e.g. \"r1\"."
          },
          "param": {
            "type": "string",
            "description": "Parameter name: \"resistance\", \"capacitance\", \"voltage\", \"color\" or \"closed\" — see list_component_types."
          },
          "value": {
            "type": [
              "string",
              "number"
            ],
            "description": "New value. Engineering notation accepted: \"12k\", \"10u\", \"4.7n\", 330."
          }
        },
        "required": [
          "component_id",
          "param",
          "value"
        ]
      }
    }
    run_simulationAction

    Compile and run the circuit (committed + staged) for duration_ms of simulated time at speed× real time, then report: convergence, DRC issues, and frequency of the most active net. The sim keeps running afterward (stop_simulation appears). Then verify with measure_signal.

    View tool JSON
    {
      "name": "run_simulation",
      "kind": "act",
      "impl": "imperative",
      "description": "Compile and run the circuit (committed + staged) for duration_ms of simulated time at speed× real time, then report: convergence, DRC issues, and frequency of the most active net. The sim keeps running afterward (stop_simulation appears). Then verify with measure_signal.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "duration_ms": {
            "type": "number",
            "default": 3000,
            "minimum": 1,
            "maximum": 30000,
            "description": "Simulated time to run, in ms (1–30000). Default 3000."
          },
          "speed": {
            "type": "number",
            "minimum": 0.1,
            "maximum": 1000,
            "description": "Speed multiplier vs real time (0.1–1000). Use 1000 to fast-forward slow circuits."
          }
        }
      }
    }
    reset_boardAction

    Remove every component and wire, committed and staged, and stop the simulation. Cannot be undone by the agent (the user can press Cmd+Z).

    View tool JSON
    {
      "name": "reset_board",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove every component and wire, committed and staged, and stop the simulation. Cannot be undone by the agent (the user can press Cmd+Z).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    request_approvalAction

    Show the user a modal summarizing your staged changes and wait for their decision. Returns "approved" (then auto-commits the staged changes), "rejected" (changes stay staged), or "timeout" after 120s.

    View tool JSON
    {
      "name": "request_approval",
      "kind": "act",
      "impl": "imperative",
      "description": "Show the user a modal summarizing your staged changes and wait for their decision. Returns \"approved\" (then auto-commits the staged changes), \"rejected\" (changes stay staged), or \"timeout\" after 120s.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string",
            "description": "Short human-readable summary of the staged changes for the user to approve."
          }
        },
        "required": [
          "summary"
        ]
      }
    }