Repository navigation
Releases
v1.2.0
Added
- The per-call OpenTelemetry log record now also carries
enduser.id(mirroring the resource attribute) and, whenOTEL_CAPTURE_TOOL_ARGSis enabled,tool.args(the same JSON already recorded on the span) as log-record attributes. Log/label-based backends index only log-record attributes (resource attributes are dropped and span attributes are never carried), so per-user and per-input analytics are now possible from logs alone. Args stay opt-in behind the existingOTEL_CAPTURE_TOOL_ARGSflag;enduser.idmirrors a value already exported on every signal (#56)
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v1.1.0
Added
get_pcb_netwithdetail="full"now returns asegmentsarray of per-trace centerline routing geometry alongside the existing per-via coordinates. Each entry is one<Polyline>/<Line>conductor primitive:{ layer, width, points }(vertices in microns), plusarcscarrying full<PolyStepCurve>curvature (index,centerX,centerY,clockwise) when the trace is curved. The array is stratified across layers and capped atMAX_COORD_ROWS = 300withtruncated: truewhen sampled; the per-layerroutingrollup still reports the true Set-level totals.detail="full"must be set explicitly —summary(the default) output is unchanged and emits nosegments. Poured<Contour>copper has no centerline and is excluded fromsegments; the rollup still reports it routed.segments.lengthis per-primitive and intentionally differs fromtotalSegments/routing[].segmentCount, which are Set-level (#55)
Changed
get_pcb_netreports each trace's own width from its<LineDescRef>/<LineDesc>rather than a single set-level value, so two<Line>(or<Polyline>) conductors of differing width inside one<Set>keep their distinct widths instead of collapsing to the last descriptor seen; a primitive falls back to the set/feature-level width only when it carries none of its own. The summaryrouting[].traceWidthsrollup is tightened the same way and now lists every distinct conductor width a<Set>uses.<PolyStepCurve>(curved) vertices, previously dropped, are now parsed for the geometry export (#55)
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v1.0.4
Changed
detail="full"via-row truncation is now stratified across drill spans. When theMAX_COORD_ROWS = 300cap applies, the returned rows are apportioned across drill spans in proportion to each span's share oftotalVias(largest-remainder / Hamilton method) instead of head-slicing the first span, so the truncated sample is representative of the whole net.truncated: trueand the per-spanviaCountstotals are unchanged; a span whose proportional share rounds below one row can still get zero sampled rows, but its true count is always preserved inviaCounts(#49, #41 follow-up)get_pcb_nettool description and docs no longer advertise trace widths/lengths/segment counts unconditionally. Routing is read from conductor-layer copper geometry; an IPC-2581 export generated without conductor/etch (cline) feature output carries no conductor geometry, so routing is empty even though pins, vias, andlayersUsedstill populate. The fix on such files is to re-export with conductor features enabled.<PhyNetPoint>is documented as a deliberately-unused connection-point set (no edges or width reference), so it is not used to synthesize segment counts, lengths, or widths (#39)
Added
- An OpenTelemetry integration guide under
docs/; the README was simplified alongside it (#51)
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v1.0.3
Fixed
get_pcb_netnow reports routing for nets routed as filled copper shapes (<Contour>/<Polygon>), not just centerline conductors (<Polyline>/<Line>). Modern Cadence/Allegro pours even short signal traces and all planes as filled copper, so those nets previously returned emptyrouting(onlylayersUsedpopulated) despite being fully routed. A poured shape is now recorded as routing presence on its layer (the layer plus a per-<Set>segment count); a filled shape has no centerline, sotraceWidths/traceLengthare left empty rather than fabricated, and a<Contour>inside a<Pad>is not counted as routing (#39)
Changed
- The opt-in
detail="full"coordinate cap is tightened so even a full response stays within a typical tool-response budget (#41 follow-up). The singleMAX_DETAIL_ROWS = 2000cap was split intoMAX_COORD_ROWS = 300for the heavy per-coordinate arrays (viaRows/padRows) andMAX_PIN_ROWS = 2000for the connectivity pin list. Adetail="full"query on the largest net now returns at most 300 coordinate rows (~18 KB) instead of 2000 (~93 KB), withtruncated: trueand the true totals preserved, while high-fanout connectivity (e.g. a 1265-pin GND) is kept under the separate, higher pin cap
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v1.0.2
Fixed
get_pcb_componentno longer reports a wrongparsed.pinCountfor two-terminal chip passives. The count was derived from the digits after the family prefix in the package name, which forRES/CAP/IND/INDPchip parts is the imperial case-size code (soRES0402reported402instead of2). Pin count is now derived authoritatively from pad/net geometry; the package name is trusted only for families where the number genuinely encodes a pin count.parsedis also emitted consistently, including when the package name has no trailing digits (#38)get_pcb_componentnow returns pad geometry for chip-passive and other footprints that previously came back empty.extractShapeshandles oval, rounded/chamfered/cornered rectangle, and polygon/contour pad primitives (contours reported by bounding box), and pads can resolve their shape through apadstackDefRefwhen there is no inline primitive (#40)get_pcb_netnow returns trace routing for nets routed with<Line>conductor segments, not just<Polyline>. Previously a net routed entirely with<Line>elements returned no per-layer trace widths, lengths, or segment counts at all (#39)
Changed
- Tool responses are now token-bounded, which changes the default output shape (#41). Per-coordinate arrays are summarized by default so a single query can no longer blow the caller's context:
get_pcb_netreturns a compactviaCountsrollup (count per drill type + layer) by default; the raw per-viaviaRows/viaColumnsare now returned only withdetail="full". The redundantviaDrillsfield was removed — aviaRowsentry'sdrillIndexreferencesviaCountsby position. ApinCounttotal is now included.get_pcb_componentreturnspadCount+ dedupedpadShapesby default; the per-pinpadRows/padColumnsare now returned only withdetail="full".- Both tools accept a new
detailparameter ("summary"default, or"full"). Even infullmode the raw coordinate arrays are capped and the response is flaggedtruncated: true, so no response can exceed a safe size.
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v1.0.1
Fixed
- Documentation now matches the registered tool names. Five tool docs were renamed and rewritten field-by-field against the actual schemas and result types:
export_cadence_board→export_cadence_ipc2581,get_design_overview→get_pcb_metadata,query_components→get_pcb_component,query_net→get_pcb_net,query_constraints→get_constraints. Corrected drifted response schemas (notablyget_pcb_netvia geometry andget_pcb_componentlookup model) and error strings, and updated both README indexes - Removed the
render_netreference from the server's MCP instructions, since that tool is not registered (it remains dormant in source)
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v1.0.0
First stable release.
Added
- OpenTelemetry instrumentation: every tool call emits a span (
tool/<tool_name>), metrics (tool.calls,tool.duration,tool.errors), and a structured log correlated by trace/span id, exported to any OTLP-compatible backend purely via the standardOTEL_*environment variables. Disabled and zero-overhead unless an OTLP endpoint is configured enduser.idresource attribute set from the host OS account name, attributing telemetry to the per-session user across traces, metrics, and logs- Opt-in raw tool-argument capture on spans via
OTEL_CAPTURE_TOOL_ARGS=1(off by default)
Changed
- Consolidated telemetry into
src/telemetry/: local JSONL usage analytics (local) and OpenTelemetry (otel) behind a single barrel
Fixed
- Self-update now runs only for the compiled standalone binary; running from source (tsx/node) no longer performs a GitHub update check or re-execs into a downloaded binary
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v0.1.0
Added
- Per-pin pad geometry in
get_pcb_componentoutput (positions and shapes with deduplication) - Net connectivity in
get_pcb_componentoutput (connected nets with pin names and total pin counts) - Structured package parsing from Cadence footprint naming (packageFamily, pinCount, bodySize_mm, pitch_mm)
- Shared geometry extraction module (
lib/geometry.ts) for pad, shape, and via utilities
Changed
- Renamed
get_pcb_componentstoget_pcb_component: single exact-refdes lookup instead of regex multi-match - Switched pads to columnar format with deduplicated shapes (
padShapes[]+padRows[]of[pin, x, y, shapeIndex]) - Switched component nets to columnar format (
netColumns+netRows[]of[netName, pins, pinCount]) - Switched vias in
get_pcb_netto columnar format with deduplicated drill types (viaDrills[]+viaRows[]of[x, y, drillIndex]) - Rounded all micron coordinate and dimension values to integers
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v0.0.10
Changed
- CLI
updatecommand no longer prompts for confirmation before installing - Moved internal architecture docs from CLAUDE.md into source files as inline comments
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.
v0.0.9
Added
- Library exports for programmatic use from TypeScript codebases (
@intelligentelectron/pcb-lens/service) - New
src/service.tsbarrel file re-exporting all tool functions and public types - Package
exportsmap with./serviceand./typessubpath entry points
Installation
See Setup Instructions for installation and configuration.
Checksums
See checksums.txt for SHA256 checksums.