Skip to main content
Glama
easyeda-mcp-pro
by oaslananka

Review observed PCB route geometry and evidence gaps

easyeda_pcb_route_geometry_review
Read-onlyIdempotent

Reads PCB tracks and vias in paginated pages and checks route width, clearance, differential-pair, and placement relations, flagging anything unproven as UNKNOWN rather than a DRC or fabrication pass.

Instructions

Read native PCB tracks/vias in 200-row pages, bounded at 1200 tracks and 600 vias, plus opt-in source-declared component-origin/pad-pair and exact native endpoint-chain observations. Incomplete/non-atomic evidence remains UNKNOWN; no DRC or fabrication approval.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "projectId": "<projectId>"
    },
    "name": "easyeda_pcb_route_geometry_review"
  }
}

Input Schema

NameRequiredDescriptionDefault
intentNogeneral
projectIdYes
minWidthMmNoOptional caller-supplied minimum route width in millimeters; not native DRC or fabricator evidence.
traceCurrentNoOptional source-bound native net-width check against a caller-declared empirical current reference; never a thermal design pass.
minClearanceMmNoOptional caller-supplied minimum same-layer, different-net line-edge clearance in millimeters; not an active native DRC or fabricator limit.
differentialPairNo
placementRelationsNo
includeNativePadContactsNoOpt in to narrowly scoped beta native pad.getConnectedPrimitives(false) read-only association evidence for declared pad pairs. Associations never certify electrical continuity.

Output Schema

NameRequiredDescriptionDefault
errorsYes
methodYes
runtimeYes
coverageYes
findingsYes
referenceYes
project_idYes
width_unitYes
limitationsYes
review_intentYes
input_evidenceYes
overall_statusYes
coordinate_unitYes
placement_reviewNo
differential_pairNo
engineering_sign_offYes
trace_current_reviewNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.19.10
    • addedInput schema / properties / includeNativePadContacts
      Added value: +{
      +  "default": false,
      +  "description": "Opt in to narrowly scoped beta native pad.getConnectedPrimitives(false) read-only association evidence for declared pad pairs. Associations never certify electrical continuity.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / placementRelations / items / properties / padPairs
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "expectedNet": {
      +        "maxLength": 100,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "firstPin": {
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxCenterDistanceMm": {
      +        "exclusiveMinimum": 0,
      +        "type": "number"
      +      },
      +      "secondPin": {
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "firstPin",
      +      "secondPin",
      +      "expectedNet"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 2,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedOutput schema / properties / differential_pair / properties / spacing / properties / observed_contact_count
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / pad_pairs
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "declared_max_pad_center_distance_mm": {
      +        "exclusiveMinimum": 0,
      +        "type": "number"
      +      },
      +      "electrical_loop_status": {
      +        "const": "UNKNOWN",
      +        "type": "string"
      +      },
      +      "evidence": {
      +        "enum": [
      +          "native_component_pads",
      +          "unavailable"
      +        ],
      +        "type": "string"
      +      },
      +      "expected_net": {
      +        "type": "string"
      +      },
      +      "first_pin": {
      +        "type": "string"
      +      },
      +      "measured_pad_center_distance_mm": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "native_first_net": {
      +        "type": "string"
      +      },
      +      "native_pad_associations": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "electrical_continuity_status": {
      +            "const": "UNKNOWN",
      +            "type": "string"
      +          },
      +          "evidence": {
      +            "enum": [
      +              "native_reported",
      +              "unavailable"
      +            ],
      +            "type": "string"
      +          },
      +          "first_primitive_ids": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "reasons": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "second_primitive_ids": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "shared_primitive_ids": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "evidence",
      +          "first_primitive_ids",
      +          "second_primitive_ids",
      +          "shared_primitive_ids",
      +          "reasons",
      +          "electrical_continuity_status"
      +        ],
      +        "type": "object"
      +      },
      +      "native_pad_layer_codes": {
      +        "items": {
      +          "type": "number"
      +        },
      +        "type": "array"
      +      },
      +      "native_second_net": {
      +        "type": "string"
      +      },
      +      "reasons": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "route_chain": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "electrical_continuity_status": {
      +            "const": "UNKNOWN",
      +            "type": "string"
      +          },
      +          "evidence": {
      +            "enum": [
      +              "observed_exact_endpoint_chain",
      +              "unavailable"
      +            ],
      +            "type": "string"
      +          },
      +          "native_layer": {
      +            "type": "number"
      +          },
      +          "observed_centerline_length_mm": {
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "primitive_ids": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "reasons": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "selection": {
      +            "enum": [
      +              "fewest_segments",
      +              "unavailable"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "evidence",
      +          "selection",
      +          "primitive_ids",
      +          "reasons",
      +          "electrical_continuity_status"
      +        ],
      +        "type": "object"
      +      },
      +      "second_pin": {
      +        "type": "string"
      +      },
      +      "status": {
      +        "enum": [
      +          "WARNING",
      +          "UNKNOWN"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "first_pin",
      +      "second_pin",
      +      "expected_net",
      +      "status",
      +      "evidence",
      +      "reasons",
      +      "electrical_loop_status"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 2,
      +  "type": "array"
      +}
  2. Changed18 schema fields changedv0.19.9
    • addedInput schema / properties / differentialPair / properties / constraintSource
      Added value: +{
      +  "maxLength": 200,
      +  "minLength": 3,
      +  "type": "string"
      +}
    • addedInput schema / properties / minClearanceMm
      Added value: +{
      +  "description": "Optional caller-supplied minimum same-layer, different-net line-edge clearance in millimeters; not an active native DRC or fabricator limit.",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / placementRelations / items / properties / firstFootprintName
      Added value: +{
      +  "maxLength": 180,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / placementRelations / items / properties / secondFootprintName
      Added value: +{
      +  "maxLength": 180,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / placementRelations / items / properties / secondRotationDeg
      Added value: +{
      +  "type": "number"
      +}
    • addedInput schema / properties / placementRelations / items / properties / secondRotationToleranceDeg
      Added value: +{
      +  "maximum": 180,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedOutput schema / properties / differential_pair / properties / constraint_source
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / differential_pair / required
      Previous value: -[
      -  "status",
      -  "nets",
      -  "protocol",
      -  "protocol_guidance",
      -  "impedance_status",
      -  "evidence",
      -  "length_units",
      -  "coordinate_units",
      -  "paths",
      -  "skew",
      -  "spacing",
      -  "findings",
      -  "limitations",
      -  "engineering_sign_off"
      -]New value: +[
      +  "status",
      +  "nets",
      +  "protocol",
      +  "protocol_guidance",
      +  "constraint_source",
      +  "impedance_status",
      +  "evidence",
      +  "length_units",
      +  "coordinate_units",
      +  "paths",
      +  "skew",
      +  "spacing",
      +  "findings",
      +  "limitations",
      +  "engineering_sign_off"
      +]
    • addedOutput schema / properties / findings / items / properties / native_layers
      Added value: +{
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / findings / items / properties / observed_edge_gap_mm
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / findings / items / properties / other_net
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / findings / items / properties / rule_id / enum
      Previous value: -[
      -  "TRACE_WIDTH_BELOW_CONTEXT_MINIMUM",
      -  "TRACK_GEOMETRY_UNAVAILABLE",
      -  "RIGHT_ANGLE_STYLE_REVIEW",
      -  "VIA_ANNULAR_GEOMETRY",
      -  "VIA_CURRENT_CAPACITY_UNKNOWN",
      -  "REFERENCE_PLANE_UNVERIFIED",
      -  "COPPER_CLEARANCE_UNVERIFIED",
      -  "NATIVE_COLLECTION_INCOMPLETE"
      -]New value: +[
      +  "TRACE_WIDTH_BELOW_CONTEXT_MINIMUM",
      +  "TRACE_CLEARANCE_BELOW_CONTEXT_MINIMUM",
      +  "OBSERVED_TRACK_COPPER_OVERLAP",
      +  "TRACK_GEOMETRY_UNAVAILABLE",
      +  "RIGHT_ANGLE_STYLE_REVIEW",
      +  "VIA_ANNULAR_GEOMETRY",
      +  "VIA_GEOMETRY_UNAVAILABLE",
      +  "VIA_LAYER_TRANSITION_CANDIDATE",
      +  "VIA_CURRENT_CAPACITY_UNKNOWN",
      +  "REFERENCE_PLANE_UNVERIFIED",
      +  "COPPER_CLEARANCE_UNVERIFIED",
      +  "NATIVE_COLLECTION_INCOMPLETE"
      +]
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / declared_first_footprint_name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / declared_second_footprint_name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / declared_second_rotation_deg
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / first_footprint_name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / second_footprint_name
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / placement_review / properties / findings / items / properties / second_rotation_deg
      Added value: +{
      +  "type": "number"
      +}
  3. Addedv0.19.8

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, but the description adds real behavioral content the annotations cannot: page size, hard caps on tracks and vias, the fact that optional observations are opt-in and source-declared, and that incomplete evidence is reported as UNKNOWN rather than as a pass. It omits what happens when the 1200/600 bounds are exceeded (truncation vs. error).

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?

Two sentences, front-loaded with verb, resource, and pagination limits; every clause earns its place. Dense jargon ('exact native endpoint-chain observations', 'Incomplete/non-atomic evidence remains UNKNOWN') slightly hurts first-read parseability.

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?

Return shape is covered by an output schema, so the description only needs the caveats — and it supplies the critical ones (bounds, opt-in only, evidence gaps stay UNKNOWN, not a DRC/fab sign-off). Adequate for an 8-param nested read tool, with the truncation/limit-exceeded behavior being the main unanswered question.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 8 params, nested objects, and only 50% schema description coverage, the description contributes some meaning: it characterizes the placement/pad-pair checks as 'source-declared' and the endpoint-chain reads as 'exact native', which signals the provenance distinction. It says nothing about intent, minWidthMm, minClearanceMm, traceCurrent, or differentialPair, leaving half the surface to the schema.

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 ('Read native PCB tracks/vias') plus concrete scope (200-row pages, 1200 tracks / 600 vias) and optional extras. It is distinguishable from raw listing siblings like easyeda_pcb_tracks/vias by the pagination bounds and review/evidence framing, though it never names those siblings directly.

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 implied through exclusions ('no DRC or fabrication approval', evidence stays UNKNOWN) rather than stated positively. There is no explicit 'use this when...; use easyeda_drc_run or easyeda_pcb_production_review instead' routing, so the agent must infer the boundary from the sibling names.

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