Skip to main content
Glama
Copper

Copper

Place footprints

pcb_place

Places PCB footprints automatically using connectivity-driven, courtyard-legal placement or applies exact moves, while keeping locked parts fixed and reporting ratsnest length.

Instructions

Place footprints. auto=true: connectivity-driven placement inside the outline (connectors on the edges, decoupling caps at their IC pin, crystal at the MCU, RF antennas on an edge), courtyard-legal on a 0.5 mm grid; several candidates are scored for elegance and the best is written. Locked parts and keep=[..] stay put; refs=[..] places only those around what is there. On a routed board, placing everything is refused unless clear_tracks=true. overhang={"J1": 1.2} lets a side-entry connector stick out past the edge. moves=[{ref, x, y, rot, side, lock}]: exact positions in mm (board coordinates, as pcb_read), applied after auto placement. Returns the ratsnest length before/after and the elegance score. Examples: pcb_place(auto=true) · pcb_place(moves=[{"ref":"J1","x":101,"y":115,"rot":90}])

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_place"
  }
}

Input Schema

NameRequiredDescriptionDefault
autoNoRun automatic placement
keepNoRefs auto placement must not move
refsNoAuto-place only these refs
movesNo[{ref,x,y,rot,side,lock,unlock,force}]
renderNoattach a PNG (default false)
dry_runNoCompute and report the auto placement without writing
projectNoproject path (default: active)
spacingNoCourtyard gap mm between parts (default: adaptive 0.3–1.5 by board fill)
eleganceNoReport the elegance score (default true; false saves about 1 s)
overhangNo{ref: mm} a side-entry connector may stick out past the edge (default 0 = flush)
tidy_silkNoRe-seat moved parts' reference designators clear of pads/parts (default true)
candidatesNoMax placement candidates to try and score (default 6; 1 = one pass)
while_openNorefuse (default) | revert
clear_tracksNoauto=true on a routed board: delete all tracks/vias first
edge_clearanceNoCourtyard distance from the board edge mm (default 0.5)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.0

TDQS

A4.4/5.0
Behavior4/5

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

The description carries the full behavioral burden well beyond the thin annotations (openWorldHint=false, destructiveHint=false): courtyard legality on a 0.5 mm grid, candidate scoring, that locked parts and keep= refs stay put, that clear_tracks=true deletes all tracks/vias, and what is returned (ratsnest before/after, elegance score). The clear_tracks deletion is a mildly destructive opt-in path not reflected in destructiveHint=false, which is a tension but not a contradiction of the default read-safe behavior.

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 mode selection (auto, then refs/keep, then moves), and every sentence carries operational content with no filler. It is a dense single paragraph with parenthetical asides and line-wrapped examples, which is slightly harder to scan than a bulleted structure would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation tool with no output schema, the description covers the decision-critical surface — modes, side effects, refusal conditions, and return values — and the remaining tuning parameters are fully documented in the schema. An agent can call this correctly from the description 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 baseline is 3; the description still adds real meaning — the moves object's coordinate system ('board coordinates, as pcb_read'), the overhang map format with a worked example, the interaction of moves applying after auto placement, and the refusal semantics of placing on a routed board. Remaining parameters (spacing, candidates, tidy_silk, edge_clearance, elegance) are left entirely 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?

The description opens with a specific verb and resource ('Place footprints') and immediately disambiguates the two operating modes — connectivity-driven auto placement vs. explicit coordinate moves. It is clearly distinguishable from routing/editing siblings without needing their schemas.

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?

It gives concrete when-to-use branches: auto=true for full connectivity-driven placement, refs=[..] to place a subset, moves=[..] for exact coordinates, and it states the precondition that placing everything on a routed board is refused unless clear_tracks=true. It does not name an alternative sibling tool for simple component nudging, so a small gap remains.

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