Skip to main content
Glama
sheares

easyeda-mcp-fix

by sheares

pcb_modify_primitive

Idempotent

Modify PCB primitive properties such as vias, pads, traces, pours, fills, and regions using type-specific keys to update nets, layers, geometry, and locks on your board.

Instructions

Modify properties of a PCB primitive. Property keys vary by type:

  • via: net, x, y, holeDiameter, diameter, viaType ("through"/"blind"/"suture" or 0/1/2)

  • polyline: net, layer, lineWidth

  • arc: net, layer, startX, startY, endX, endY, arcAngle, lineWidth

  • pad: x, y, rotation, net, padNumber, layer

  • pour: net, layer, pourFillMethod, preserveSilos, pourName, pourPriority, lineWidth

  • fill: layer, net, fillMode ("solid"/"mesh"/"inner_electrical_layer" or 0/1/2), lineWidth

  • region: layer, ruleType (array of "no_components"/"no_wires"/"no_fills"/"no_pours"/"no_inner_layers"/"follow_region_rule" or 2/5/6/7/8/9), regionName, lineWidth Enum names are converted to the numeric values EasyEDA requires. Fill and region results are read back from the board, with notApplied listing any requested value EasyEDA did not keep. All types support: primitiveLock Coordinates are PCB canvas coordinates in mil (1 mil = 0.001 inch), relative to the canvas origin: +X = rightward, +Y = upward. Lengths (widths, diameters) are also in mil. Use pcb_canvas_origin to read/set the origin offset and pcb_convert_coordinates to convert between canvas and data coordinates.

Input Schema

NameRequiredDescriptionDefault
typeYesPrimitive type to modify
documentYesTarget document UUID — auto-switches to this document before executing. Get UUIDs from list_instances or editor_get_open_tabs.
propertyYesProperties to modify (see description for valid keys per type)
instance_idNoTarget EasyEDA instance ID (8-char hex). Required when multiple instances are connected. Omit when only one instance is connected (auto-selected). Use list_instances to see connected instances.
primitiveIdYesThe primitive ID

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.6.5

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare non-readOnly, idempotent, non-destructive, so the bar is lower. The description adds genuinely useful behavior beyond them: enum names are converted to the numeric values EasyEDA requires, and fill/region writes are read back with a notApplied list of values EasyEDA rejected — a partial-success contract an agent needs. It stops short of describing failure modes (unknown primitiveId, locked primitives, error responses).

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, then a scannable per-type bullet list; dense but nearly every clause carries information the agent cannot get elsewhere. The closing coordinate-system paragraph is somewhat verbose and partially duplicates what pcb_canvas_origin and pcb_convert_coordinates already provide.

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 5-parameter mutation tool with a nested free-form object and no output schema, the definition covers the important ground: valid properties per type, unit system and axis orientation, enum conversion, and post-write verification. It omits error/rejection behavior for invalid primitiveId or locked primitives and does not explain the interaction with pcb_modify_track.

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 description coverage is nominally 100%, but the critical 'property' parameter is an empty nested object (additionalProperties: {}), so the schema documents nothing about its contents. The description fully compensates by listing the valid keys per primitive type and the accepted enum forms, which is exactly the semantics the schema omits. Remaining gap: key values are not described beyond unit notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Modify properties of a PCB primitive') and enumerates the supported primitive types, so the agent knows the scope immediately. It does not, however, distinguish itself from the sibling pcb_modify_track, which plausibly overlaps with the 'polyline' type here, leaving a real ambiguity for the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent must infer that a primitive must already exist and that its primitiveId comes from pcb_get_all_primitives or pcb_get_primitives_by_id. The description does give concrete workflow guidance for coordinates (use pcb_canvas_origin, use pcb_convert_coordinates), but there is no explicit when-to-use / when-not / alternative-tool statement.

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

Deploy Server

Other Tools