{"ok":true,"site":{"host":"protoboard-kappa.vercel.app","url":"https://protoboard-kappa.vercel.app/","type":"live","desc":"Agent-native breadboard simulator. Build real circuits with an AI agent through WebMCP tools.","tools":[{"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.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"hole":{"type":"string","description":"Hole to probe: bank hole like \"E16\" or a rail name like \"+top\"."}},"required":["hole"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","annotations":{"readOnlyHint":true},"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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).","annotations":{"destructiveHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"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"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Health & Education","favicon":"/favicons/protoboard-kappa.vercel.app.svg","apiSurface":"spec","toolCount":13}}