Skip to main content
Glama
Avinash1286

KiCAD MCP Server

by Avinash1286

Suggest Placement

suggest_placement
Destructive

Propose optimized PCB component placements that shorten net length, orient parts toward connections, and remove courtyard overlaps. Returns dry-run proposals with scores before applying.

Instructions

Propose an optimized PCB footprint placement that shortens net length, orients parts toward their partners, and removes courtyard overlaps. Force-directed clustering pulls connected parts together (a converter's feedback divider and decoupling caps end up hugging its IC), power/high-current nets are weighted short & direct, and each part is rotated (0/90/180/270) to face neighbours so airwires stop crossing. PCB ONLY — does not touch the schematic. DRY RUN by default: returns proposals {ref:[x,y,rot]} plus a score (HPWL before/after, overlap counts) without modifying the board. Validate via check_courtyard_overlaps(positions=proposals), then re-run with apply=true before autoroute.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
refsNoReferences to move (default: every non-locked footprint on the board).
alignNoTidy the result into rows/columns (default true). Snaps near-collinear part centers onto shared row (Y) and column (X) lines so passives line up cleanly with centers aligned — like KiCad's Align Centers + Distribute. Disable for a pure shortest-wire layout.
applyNoIf true, move + rotate components to the proposed positions. Default false (dry run — board untouched).
boundsNoSCOPED REGROUP: confine movable parts to this box (mm) — e.g. the area beside one IC. Combine with `refs` (that IC's passives) to regroup one cluster at a time; unlisted parts stay as anchors. Far more reliable than a whole-board run on a dense board. Default: whole board.
lockedNoReferences to hold fixed as anchors (connectors, mounting-constrained, RF, edge parts). They still pull movable parts. KiCad-locked footprints are added automatically.
rotateNoEnable pin-facing rotation (default true).
spreadNoEnable density spreading (default true). Diffuses parts across free board area so a whole-board run stays legal (few/zero courtyard overlaps) instead of over-packing into a blob. Leave on for whole-board runs.
grid_mmNoSnap proposed positions to this grid (default 0.5).
margin_mmNoExtra keepout enforced between courtyards (default 0.3).
iterationsNoForce-directed relaxation passes (default 200).
power_netsNoNet-name fragments treated as high-current and pulled short & direct (case-insensitive). Defaults to common rails (VBAT, VBUS, VCC, 3V3, 5V, ...). Pass [] to disable.
align_tol_mmNoMax center spacing (mm) for parts to be pulled onto the same row/column line during align (default 1.5).
power_weightNoPull multiplier for power nets (default 3.0).
board_outlineNoOptional board containment bbox override. Default: derived from Edge.Cuts.
rotation_stepsNoCandidate orientations in degrees (default [0, 90, 180, 270]).
decoupling_boostNoExtra pull for 2-pin-passive <-> multi-pin-IC links so caps/feedback parts hug their IC (default 2.0).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

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

The description explicitly discloses the default non-destructive behavior ('DRY RUN by default... without modifying the board') and the apply=true flag that enables mutation, which aligns with the destructiveHint annotation while adding crucial nuance. It also reveals internal behavior: force-directed clustering, rotation logic, power-net weighting, and what the output contains ({ref:[x,y,rot]} plus score). This goes far beyond the annotations, which only say readOnlyHint false and destructiveHint true.

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?

The description is long (about 150 words) but every sentence contributes meaningful information: purpose, mechanism, scope, default behavior, validation step, and application requirement. It is front-loaded with a one-sentence summary and then elaborates efficiently. It loses a point only because it could be slightly tighter, but for a complex 16-parameter tool with safety implications, the detail is justified.

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?

Given the tool's complexity (16 parameters, nested objects, potentially destructive behavior), the description is remarkably complete. It covers the output format, the dry-run/apply lifecycle, the validation step, the scoped-use strategy, and PCB-only scope. There is also a clear distinction between dry-run proposals and actual modification. It leaves no major contextual gaps for an agent to make a wrong decision.

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?

The input schema already provides detailed descriptions for all 16 parameters (100% coverage), so the baseline is 3. The tool description goes further by giving examples and domain meaning: 'align' is compared to 'KiCad's Align Centers + Distribute', 'bounds' gets a concrete use case ('the area beside one IC'), and 'decoupling_boost' is explained with the feedback-divider/caps-hugging-IC behavior. This adds value beyond the schema's field-level descriptions.

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: 'Propose an optimized PCB footprint placement that shortens net length, orients parts toward their partners, and removes courtyard overlaps.' It clearly distinguishes itself from schematic tools with 'PCB ONLY — does not touch the schematic' and from simple move tools by describing the force-directed optimization and dry-run/apply workflow. This effectively separates it from sibling tools like move_component and align_components.

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?

The description provides clear context for when to use this tool: it proposes placements, defaults to dry-run, and advises validating via check_courtyard_overlaps before applying. It also includes scoped-regroup guidance ('SCOPED REGROUP: confine movable parts to this box... Far more reliable than a whole-board run') and notes it is for PCB only. It does not explicitly list alternatives like 'use move_component for single-part moves,' but the workflow it describes is specific enough to guide selection.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Avinash1286/KiCAD-MCP-Server-THEAVI'

If you have feedback or need assistance with the MCP directory API, please join our Discord server