Skip to main content
Glama
Copper

Copper

Update PCB from schematic

pcb_sync
Idempotent

Update a KiCad PCB from its schematic: add missing footprints, refresh fields and nets, swap changed parts, optionally remove deleted components, preserve placements, and create the board if missing.

Instructions

Update the PCB from the schematic (KiCad's "Update PCB from Schematic"); creates the .kicad_pcb if missing. Adds missing footprints beside the outline, updates fields, swaps changed footprints in place, assigns every pad's net and keeps existing positions. Copper follows renamed nets; copper left from deleted parts is reported. remove_extra=true deletes footprints (and their orphaned copper) that are no longer in the schematic. Refuses if the schematic has unannotated or duplicate references. board_build() runs this and the following steps. Example: pcb_sync()

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "pcb_sync"
  }
}

Input Schema

NameRequiredDescriptionDefault
renderNoattach a PNG (default false)
projectNoproject path (default: active)
while_openNorefuse (default) | revert
remove_extraNoDelete board footprints whose symbol was deleted (default false: report only)
update_footprintsNoSwap footprints whose schematic Footprint field changed (default true)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.0

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only supply openWorldHint=false, idempotentHint=true and destructiveHint=false; the description goes well beyond them by disclosing what is preserved ('keeps existing positions'), how renames propagate ('Copper follows renamed nets'), what is reported ('copper left from deleted parts is reported'), and what the file-creation side effect is. Note the mild tension with destructiveHint=false: remove_extra=true deletes footprints and orphaned copper, but the description makes clear this is opt-in and off by default, so the annotation remains accurate for default behavior rather than being contradicted.

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?

Front-loaded with the core action and file-creation side effect, then effects in order, then the destructive option, then the refusal condition, then the sibling relationship and a one-line example. Every sentence carries information, though the middle enumeration of effects is dense enough that it reads as a block rather than scannable items.

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 five-parameter mutation tool with no output schema, this covers side effects, preservation guarantees, refusal preconditions, and what gets reported back. The gaps are the return/report shape (only hinted at via 'is reported') and the meaning of while_open's 'revert' option, which an agent must infer from the enum alone.

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 100%, so the baseline is 3, but the text adds genuine semantics beyond the schema: remove_extra also removes 'their orphaned copper', and the footprint-swap behavior of update_footprints is described in terms of nets and positions rather than just 'swap footprints'. It does not explain render, project, or while_open (notably the revert branch), leaving those to the schema.

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 ('Update the PCB from the schematic') and enumerates the concrete effects: creates the .kicad_pcb if missing, adds missing footprints beside the outline, updates fields, swaps changed footprints in place, assigns nets. It also positions the tool against the orchestration sibling by noting 'board_build() runs this and the following steps', so an agent can tell whether to call the step directly or the batch.

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?

Gives a clear trigger (schematic edits need to propagate to the board) and an explicit precondition for failure: 'Refuses if the schematic has unannotated or duplicate references'. It also implies the single-step vs board_build() choice. What it lacks is an explicit 'use this rather than X when you only want Y' statement or guidance on when to prefer board_build over the atomic call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.