Schematic design
Skill ProductOfAmerica/mcp-server-kicad/skills/schematic-design
Use when executing a schematic placement plan (plan mode) or modifying an existing schematic (modification mode).From its SKILL.md
npx -y skills add ProductOfAmerica/mcp-server-kicad --skill schematic-designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
14.2 KB, as published. Nobody here has run it
EVERY KiCad operation has a corresponding MCP tool. Do NOT claim a tool does not exist without first listing all available tools. Key tools that MUST be used instead of file writes:
add_symbol— create custom symbol definitions in .kicad_sym filescreate_symbol_library— create new .kicad_sym library filescreate_schematic— create new .kicad_sch filescreate_project— create new .kicad_pro project files If you find yourself thinking "there's no MCP tool for this," you are wrong. Check the tool list again. </CRITICAL-RULE>
KiCad Schematic Design — Plan Executor
This skill executes schematic plans mechanically. All intelligence (component selection, coordinate calculation, wiring decisions) happened in prior phases. This skill reads a plan and executes it.
Response Format
When this skill activates, announce the mode:
- Plan mode: Print exactly: "Using schematic-design to execute the placement plan."
- Modification mode: Print exactly: "Using schematic-design to modify the existing schematic."
Then proceed directly to the pre-flight checks for the appropriate mode. Do not ask the user what to do — the plan or user instructions are the input. Report progress as each placement/wiring step completes, but keep updates brief (one line per step).
Two Modes
Plan Mode (new designs)
Reads specs/schematic-plan.md and executes mechanically. The plan
file is the sole source of truth — ignore prior conversation context
about how the plan was created. Read the plan, execute the plan.
Pre-flight checks:
- Verify
specs/schematic-plan.mdexists and its reviewer returned APPROVED - Read page size from plan, call
set_page_sizeimmediately if not A4 - Verify project/schematic files exist (create if needed)
- If plan references custom symbol library, verify it exists via
list_lib_symbols
Execution order:
- Project setup (
create_project,create_schematic, etc.) - Set page size (if plan specifies non-A4)
- Register symbol libraries (
create_sym_lib_table) - Create custom symbols (
add_symbol) - Place all components (
place_componentper coordinate table) - Wire all connections per wiring table — group all pins for the
same net into a single
wire_pins_to_netcall - Add no-connect flags
- Add power flags
- Add hierarchical sheets (if applicable)
- Annotate — run
annotate_schematicto assign reference designators. For hierarchical designs, passproject_pathto avoid cross-sheet ref conflicts. - Validate hierarchy — run
validate_hierarchyfrom root to check for orphaned labels, direction mismatches, duplicate refs. - Run ERC
Modification Mode (existing schematics)
No plan artifact required. User instructions serve as the plan.
Pre-flight checks:
- Verify the schematic file exists
- List current components via
list_schematic_components - For each new component to be added, call
list_lib_symbolsto verify its lib_id exists before placement
Follow existing spacing/wiring/naming conventions in the schematic.
Error Handling — Escalate, Don't Improvise
| Situation | Response |
|---|---|
| Symbol not found | STOP. Do not fuzzy-match or substitute. Report the error. If a previously-verified symbol is missing, instruct the user to re-run from circuit-design to re-validate the BOM. |
| Position outside page bounds | STOP. Report error. The plan's page calculation should have prevented this. Instruct the user to re-run schematic-plan. |
| connect_pins fails | Try wire_pins_to_net for that connection. If that fails, report and continue with remaining wiring. |
| ERC violations | Report violations. Invoke verification skill. |
Checklist (Plan Mode)
IMPORTANT: Use TodoWrite to create todos for EACH checklist item below.
- Verify
specs/schematic-plan.mdexists and is APPROVED - Pre-flight: verify project/schematic files exist
- Set page size (if non-A4)
- Register symbol libraries
- Create custom symbols (if needed)
- Place all components per coordinate table
- Wire all connections per wiring table
- Add no-connect flags
- Add power flags and PWR_FLAG symbols
- Annotate schematic — no
?refs remaining - Validate hierarchy — no orphaned labels or duplicate refs
- Run ERC — must show zero violations
Rationalization Prevention
| Thought | Reality |
|---|---|
| "This pin name is close enough" | Use the exact pin name from the plan. The plan was verified against get_symbol_info. |
| "I can adjust the coordinates slightly" | Use the exact coordinates from the plan. The plan was verified against page bounds. |
| "I'll add an extra component not in the plan" | Do not improvise. If the design needs changes, go back to schematic-plan. |
| "The plan is probably outdated, I'll adapt" | The plan is the source of truth. If it's wrong, re-plan. Don't patch on the fly. |
Exit Gate
Run run_erc. Zero violations → proceed to pcb-layout.
Violations → invoke verification skill.
Commit strategy: Commit after schematic-design completes and ERC passes (not after each chunk). If ERC fails, fix violations via verification skill, then commit the clean state. Do not commit intermediate broken states.
Placement Spacing Reference
All coordinates are on the 1.27mm grid (auto-snapped by the tools).
Minimum spacing (for modification mode and plan verification):
- Vertical between components: 10.16mm (8 grid units)
- Horizontal between passives in a row: 12.7mm (10 grid units)
- IC to its supporting passives: 25.4mm (20 grid units) horizontal
- Between functional stages: 25.4–50.8mm gap
Title block clearance: ~108x32mm at bottom-right corner. On A4 landscape (297x210mm), keep components within X < 180mm and Y < 175mm.
Wiring Strategy Reference
Use connect_pins (direct Manhattan wire) when:
- Two pins are within ~25mm of each other
- The wire path is visually obvious (one L-shaped segment)
Use wire_pins_to_net (batch: multiple pins to one net label) when:
- A net connects 3 or more components that are not all adjacent
- The net spans across functional stages
- Power and ground rails — always use net labels, never daisy-chain
Power and Ground
- Use
add_power_symbolfor VCC, GND, and named power rails - Use
wire_pins_to_netfor custom power nets (VIN_PROT, 5V_REL, etc.) - Place decoupling capacitors visually adjacent to the IC they serve
- Add
PWR_FLAGon every power net that would otherwise trigger "power pin not driven" ERC errors - Use
auto_pwr_flag=Falsein wire_pins_to_net when:- The net will later receive an output pin via connect_pins
- The net already has a power source on another sheet (hierarchical designs)
- You plan to manually control PWR_FLAG placement
- PWR_FLAG is only needed on nets with power_in pins and NO power_out/output pins
Naming
- Use uppercase descriptive names for nets: VIN_PROT, 5V_REL, SPI_MOSI
- Active-low signals: suffix with
_N(e.g., RESET_N, CS_N) - Do not use generic names like NET1 or WIRE3
MCP Tools for This Skill
Reading / inspection:
get_schematic_summary— get item counts for a sheetlist_schematic_components— list symbols on a sheetlist_schematic_labels— list net labels on a sheetlist_schematic_wires— list wires on a sheetlist_schematic_global_labels— list global labels on a sheetlist_schematic_hierarchical_labels— list hierarchical labels on a sheetlist_schematic_sheets— list hierarchical sheet blocks on a sheetlist_schematic_junctions— list junctions on a sheetlist_schematic_no_connects— list no-connect flags on a sheetlist_schematic_bus_entries— list bus entries on a sheetget_symbol_pins— get pin names and types for a placed symbolget_pin_positions— get placed pin coordinates (for wiring)get_net_connections— trace a net to see what's connectedlist_unconnected_pins— find pins that need wiring or no-connect
Placing components:
place_component— place a symbol instance on the schematicmove_component— reposition a placed componentremove_component— delete a placed componentset_component_property— change reference, value, footprint, etc.set_page_size— resize the schematic sheetadd_lib_symbol— load a symbol from a library into the schematic
Wiring and connectivity:
connect_pins— direct Manhattan wire between two pinswire_pins_to_net— connect multiple pins to a named net labeladd_wires— add raw wire segments by coordinateadd_label— place a net labeladd_global_label— place a global (cross-sheet) labeladd_junctions— add junction dots at wire intersectionsno_connect_pin— mark a pin as intentionally unconnected (idempotent)remove_no_connect— clear no-connect flag(s) from a pinremove_label/remove_wire/remove_junction— cleanup (labels and global labels)
Power and decoupling:
add_power_symbol— place VCC, GND, +3V3, PWR_FLAG, etc.auto_place_decoupling_cap— auto-place a decoupling cap near an IC
Annotations and hierarchy:
add_text— add text annotations to the sheetadd_hierarchical_label— add a hierarchical label for sheet-to-sheet connectionsremove_hierarchical_label— remove a hierarchical label by name or UUIDmodify_hierarchical_label— modify text, shape, or position of a hierarchical labelannotate_schematic— auto-assign reference designators (project server)remove_text— remove text annotations by position or content
Hierarchy management (project server):
add_hierarchical_sheet/remove_hierarchical_sheet— create/remove sub-sheet blocksmodify_hierarchical_sheet— change sheet name, file, dimensionsadd_sheet_pin/remove_sheet_pin— manage pins on sheet blocksvalidate_hierarchy— check for orphaned labels/pins, direction mismatcheslist_hierarchy/get_sheet_info— inspect hierarchy structureis_root_schematic— check if a schematic is root or sub-sheetmove_hierarchical_sheet— reposition a sheet block on the canvasreorder_sheet_pages— change the page order of hierarchical sheetsduplicate_sheet— create a copy of a sheet with new UUIDsflatten_hierarchy— merge all sub-sheets into a single flat schematictrace_hierarchical_net— trace a net across the hierarchy for debuggingexport_hierarchical_netlist— export netlist with hierarchy info (use instead ofexport_netlistfor hierarchical designs)
Hierarchy Workflow Sequences
Sequence: Setting up a hierarchical design
add_hierarchical_sheet— create the sub-sheet block on the parentadd_sheet_pin— add pins to the sheet block for each signal crossing the boundary- In the child schematic:
add_hierarchical_labelfor each pin validate_hierarchy— verify pins match labels, no orphans
Sequence: Duplicating a channel (e.g., 4 identical sensor channels)
- Design the first channel as a sub-sheet
duplicate_sheet— creates a copy with new UUIDs and a new file- Repeat for each additional channel
annotate_schematicwithproject_path— assigns unique refs across all copies
Sequence: Pre-ERC annotation and validation
annotate_schematicwithproject_path— assign refs to all?componentsvalidate_hierarchyfrom root — check for duplicates, orphans, mismatches- If duplicates:
set_component_propertyto reset toX?, then re-annotate run_erc— only after validate_hierarchy is clean
Sequence: Debugging cross-sheet connectivity
trace_hierarchical_net— follow the net across sheet boundariesget_net_connections— check connections on each sheetlist_cross_sheet_nets— see all nets crossing boundaries- Fix with
add_sheet_pin,add_hierarchical_label, orconnect_pins
Sequence: Restructuring hierarchy
flatten_hierarchy— merge all sheets into one (creates new file, non-destructive)- OR
move_hierarchical_sheet— reposition sheet blocks on the parent - OR
reorder_sheet_pages— change page numbering order validate_hierarchy— verify structure is still valid
Sequence: Cleaning up after modifications
remove_text— delete temporary text annotationsvalidate_hierarchy— check for new orphaned labels or direction mismatchesannotate_schematic— reassign any?refs introduced during modifications
Verification and export:
run_erc— run electrical rules checkexport_schematic— export schematic as PDF/SVGexport_netlist— generate a netlist file (PCB import itself isupdate_pcb_from_schematicon the PCB server)export_bom— export bill of materials
Symbol authoring (when a part isn't in KiCad's libraries):
create_symbol_library— create a project-local .kicad_sym fileadd_symbol— define a custom symbol with pins, footprint, datasheetlist_lib_symbols/get_symbol_info— browse available symbols
Custom Symbols
When a part is not in KiCad's built-in libraries, create a custom symbol using MCP tools — NEVER by writing .kicad_sym files directly:
create_symbol_library— create a project-local .kicad_sym file (if it doesn't exist yet)add_symbol— define the symbol with pin names, pin types, pin numbers, footprint, and datasheetadd_lib_symbol— load the custom symbol into the schematic
Verification
After completing placement and wiring:
- Run
run_ercto check for violations - Fix "power pin not driven" with PWR_FLAG symbols
- Fix unconnected pins with
wire_pins_to_netorno_connect_pin3.5. If components have?references, runannotate_schematicwithproject_pathbefore re-running ERC. - Re-run ERC until clean