Tool tree
RoarCAD is a free, open-source PCB review and collaboration workbench where AI can draft, inspect, and preview changes, but people approve every revision and manufacturing action.
Implementation
gradeNot graded
gradeNot graded
draft_boardAction
Create a custom PCB draft from a complete structured BoardGraph, or return a blocked requirements report when design is omitted. Design fields include board, components, nets, netClasses, differentialPairs, pours, holes, keepouts, and routingHints.
View tool JSON
{
"name": "draft_board",
"kind": "act",
"impl": "imperative",
"description": "Create a custom PCB draft from a complete structured BoardGraph, or return a blocked requirements report when design is omitted. Design fields include board, components, nets, netClasses, differentialPairs, pours, holes, keepouts, and routingHints.",
"inputSchema": {
"type": "object",
"properties": {
"requirements": {
"type": "string",
"maxLength": 5000
},
"design": {
"type": "object",
"properties": {
"board": {
"type": "object",
"properties": {
"outline": {
"oneOf": [
{
"type": "object",
"properties": {
"shape": {
"const": "rectangle"
},
"widthMm": {
"type": "number",
"minimum": 5,
"maximum": 500
},
"heightMm": {
"type": "number",
"minimum": 5,
"maximum": 500
}
},
"required": [
"shape",
"widthMm",
"heightMm"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"shape": {
"const": "polygon"
},
"points": {
"type": "array",
"minItems": 3,
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
}
}
},
"required": [
"shape",
"points"
],
"additionalProperties": false
}
]
},
"layers": {
"enum": [
1,
2,
4,
6,
8,
10
]
},
"material": {
"enum": [
"fr4",
"fr1",
"flex"
]
},
"thicknessMm": {
"type": "number",
"minimum": 0.2,
"maximum": 8
},
"solderMaskColor": {
"enum": [
"green",
"red",
"blue",
"purple",
"black",
"white",
"yellow"
]
},
"allowBlindAndBuriedVias": {
"type": "boolean"
},
"doubleSidedAssembly": {
"type": "boolean"
},
"stackup": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
}
},
"required": [
"outline",
"layers",
"solderMaskColor"
],
"additionalProperties": false
},
"components": {
"type": "array",
"minItems": 1,
"maxItems": 200,
"items": {
"type": "object",
"properties": {
"kind": {
"enum": [
"resistor",
"capacitor",
"inductor",
"diode",
"led",
"transistor",
"mosfet",
"fuse",
"crystal",
"connector",
"switch",
"testpoint",
"chip"
]
},
"reference": {
"type": "string",
"pattern": "^[A-Z]+[0-9]+$"
},
"mpn": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"manufacturer": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"value": {
"type": "string",
"maxLength": 80
},
"pins": {
"type": "array",
"minItems": 1,
"maxItems": 256,
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"required": [
"number",
"label"
],
"additionalProperties": false
}
},
"footprint": {
"type": "object",
"properties": {
"source": {
"enum": [
"footprinter",
"kicad-library",
"jlcpcb",
"pad-map"
]
},
"identifier": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"pads": {
"type": "array",
"maxItems": 512,
"items": {
"type": "object",
"description": "Bounded embedded pad: pcb_smtpad or pcb_plated_hole with geometry and portHints."
}
},
"reviewed": {
"type": "boolean",
"description": "Ignored for agent input; always stored false."
}
},
"required": [
"source",
"identifier",
"pads"
],
"additionalProperties": false
},
"placement": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -500,
"maximum": 500
},
"y": {
"type": "number",
"minimum": -500,
"maximum": 500
},
"rotation": {
"type": "number",
"minimum": 0,
"maximum": 359
},
"side": {
"enum": [
"top",
"bottom"
]
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"reviewStatus": {
"enum": [
"candidate",
"reviewed"
],
"description": "Ignored for agent input; always stored candidate."
},
"evidenceIds": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "string"
}
},
"supplierPartIds": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"doNotPlace": {
"type": "boolean"
}
},
"required": [
"kind",
"reference",
"mpn",
"manufacturer",
"pins",
"footprint",
"placement",
"evidenceIds"
],
"additionalProperties": false
}
},
"nets": {
"type": "array",
"maxItems": 500,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"members": {
"type": "array",
"minItems": 2,
"maxItems": 200,
"items": {
"type": "string"
}
},
"className": {
"type": "string"
}
},
"required": [
"name",
"members"
],
"additionalProperties": false
}
},
"netClasses": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"traceWidthMm": {
"type": "number",
"exclusiveMinimum": 0
},
"clearanceMm": {
"type": "number",
"minimum": 0
},
"targetImpedanceOhms": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"name",
"traceWidthMm",
"clearanceMm"
],
"additionalProperties": false
}
},
"differentialPairs": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object"
}
},
"pours": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object"
}
},
"holes": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object"
}
},
"keepouts": {
"type": "array",
"maxItems": 100,
"items": {
"type": "object"
}
},
"routingHints": {
"type": "array",
"maxItems": 200,
"items": {
"type": "string"
}
}
},
"required": [
"board",
"components",
"nets",
"netClasses"
],
"additionalProperties": false,
"description": "Validated BoardGraph. Exact parts require kind, reference, MPN, manufacturer, pins, footprint, placement, and evidence IDs."
}
},
"required": [
"requirements"
],
"additionalProperties": false
}
}inspect_designAnswer
Read one focused, paginated section of a board revision without changing project state.
View tool JSON
{
"name": "inspect_design",
"kind": "answer",
"impl": "imperative",
"description": "Read one focused, paginated section of a board revision without changing project state.",
"inputSchema": {
"type": "object",
"properties": {
"revisionId": {
"type": "string"
},
"focus": {
"enum": [
"overview",
"requirements",
"components",
"nets",
"evidence",
"risks",
"validation",
"history"
]
},
"ids": {
"type": "array",
"maxItems": 20,
"items": {
"type": "string",
"maxLength": 120
}
},
"cursor": {
"type": "integer",
"minimum": 0
}
},
"required": [
"revisionId",
"focus"
],
"additionalProperties": false
}
}preview_design_changeAction
Create a non-mutating, evidence-linked diff from allowlisted structured board operations. Supplier and evidence data remain untrusted and unreviewed.
View tool JSON
{
"name": "preview_design_change",
"kind": "act",
"impl": "imperative",
"description": "Create a non-mutating, evidence-linked diff from allowlisted structured board operations. Supplier and evidence data remain untrusted and unreviewed.",
"inputSchema": {
"type": "object",
"properties": {
"revisionId": {
"type": "string"
},
"request": {
"type": "string",
"maxLength": 500
},
"operations": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"set-board",
"upsert-component",
"remove-component",
"move-component",
"upsert-net",
"remove-net",
"upsert-differential-pair",
"remove-differential-pair",
"upsert-pour",
"remove-pour",
"upsert-hole",
"remove-hole",
"upsert-keepout",
"remove-keepout",
"update-requirement",
"upsert-evidence",
"add-risk",
"resolve-risk"
]
},
"board": {
"type": "object",
"properties": {
"outline": {
"oneOf": [
{
"type": "object",
"properties": {
"shape": {
"const": "rectangle"
},
"widthMm": {
"type": "number",
"minimum": 5,
"maximum": 500
},
"heightMm": {
"type": "number",
"minimum": 5,
"maximum": 500
}
},
"required": [
"shape",
"widthMm",
"heightMm"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"shape": {
"const": "polygon"
},
"points": {
"type": "array",
"minItems": 3,
"maxItems": 128,
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
}
}
},
"required": [
"shape",
"points"
],
"additionalProperties": false
}
]
},
"layers": {
"enum": [
1,
2,
4,
6,
8,
10
]
},
"material": {
"enum": [
"fr4",
"fr1",
"flex"
]
},
"thicknessMm": {
"type": "number",
"minimum": 0.2,
"maximum": 8
},
"solderMaskColor": {
"enum": [
"green",
"red",
"blue",
"purple",
"black",
"white",
"yellow"
]
},
"allowBlindAndBuriedVias": {
"type": "boolean"
},
"doubleSidedAssembly": {
"type": "boolean"
},
"stackup": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
}
},
"required": [
"outline",
"layers",
"solderMaskColor"
],
"additionalProperties": false
},
"component": {
"type": "object",
"properties": {
"kind": {
"enum": [
"resistor",
"capacitor",
"inductor",
"diode",
"led",
"transistor",
"mosfet",
"fuse",
"crystal",
"connector",
"switch",
"testpoint",
"chip"
]
},
"reference": {
"type": "string",
"pattern": "^[A-Z]+[0-9]+$"
},
"mpn": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"manufacturer": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"value": {
"type": "string",
"maxLength": 80
},
"pins": {
"type": "array",
"minItems": 1,
"maxItems": 256,
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"required": [
"number",
"label"
],
"additionalProperties": false
}
},
"footprint": {
"type": "object",
"properties": {
"source": {
"enum": [
"footprinter",
"kicad-library",
"jlcpcb",
"pad-map"
]
},
"identifier": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"pads": {
"type": "array",
"maxItems": 512,
"items": {
"type": "object",
"description": "Bounded embedded pad: pcb_smtpad or pcb_plated_hole with geometry and portHints."
}
},
"reviewed": {
"type": "boolean",
"description": "Ignored for agent input; always stored false."
}
},
"required": [
"source",
"identifier",
"pads"
],
"additionalProperties": false
},
"placement": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -500,
"maximum": 500
},
"y": {
"type": "number",
"minimum": -500,
"maximum": 500
},
"rotation": {
"type": "number",
"minimum": 0,
"maximum": 359
},
"side": {
"enum": [
"top",
"bottom"
]
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"reviewStatus": {
"enum": [
"candidate",
"reviewed"
],
"description": "Ignored for agent input; always stored candidate."
},
"evidenceIds": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"items": {
"type": "string"
}
},
"supplierPartIds": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"doNotPlace": {
"type": "boolean"
}
},
"required": [
"kind",
"reference",
"mpn",
"manufacturer",
"pins",
"footprint",
"placement",
"evidenceIds"
],
"additionalProperties": false
},
"reference": {
"type": "string",
"pattern": "^[A-Z]+[0-9]+$"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"rotation": {
"type": "number"
},
"side": {
"enum": [
"top",
"bottom"
]
},
"net": {
"type": "object"
},
"pair": {
"type": "object"
},
"pour": {
"type": "object"
},
"hole": {
"type": "object"
},
"keepout": {
"type": "object"
},
"requirement": {
"type": "object"
},
"evidence": {
"type": "object"
},
"name": {
"type": "string"
},
"id": {
"type": "string"
},
"risk": {
"type": "string",
"maxLength": 500
}
}
},
"description": "Allowlisted structured operations. Each operation is revalidated against its type-specific application schema."
}
},
"required": [
"revisionId",
"request",
"operations"
],
"additionalProperties": false
}
}validate_and_exportAction
Run checks and prepare artifacts for a visible human download decision.
View tool JSON
{
"name": "validate_and_export",
"kind": "act",
"impl": "imperative",
"description": "Run checks and prepare artifacts for a visible human download decision.",
"inputSchema": {
"type": "object",
"properties": {
"revisionId": {
"type": "string"
},
"targets": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"items": {
"enum": [
"circuit-json",
"gerber",
"bom",
"placement",
"validation",
"project",
"manifest"
]
}
},
"artifactClass": {
"enum": [
"engineering",
"fabrication"
]
}
},
"required": [
"revisionId",
"targets",
"artifactClass"
],
"additionalProperties": false
}
}