Skip to main content
Glama

kicad-jlcpcb

License: MIT Python 3.10+ KiCad 8+ tests upstream contract MCP

From "I want a board that does X" to a wired .kicad_pcb EasyEDA can auto-route and JLCPCB can build — in a single Claude Code conversation.

kicad-jlcpcb is a Claude Code plugin + MCP server that automates the tedious half of going from idea to fab. It sources LCSC parts with a hard preference for JLCPCB basic-library stock, auto-fetches pin maps from EasyEDA, places KiCad-stdlib footprints, wires every net by pin name (not pad number), and hands off a .kicad_pcb that EasyEDA can route and order in two clicks.

┌─ you ──────────────────────────────────┐
│  /pcb-new An ESP32-C3 soil-moisture    │
│          sensor, USB-C, 3.3V LDO...    │
└────────────────┬───────────────────────┘
                 │
   ┌─────────────▼─────────────┐
   │  kicad-jlcpcb MCP server  │
   │  • source parts (LCSC)    │
   │  • fetch pin maps         │
   │  • place + wire footprints│
   │  • save .kicad_pcb        │
   └─────────────┬─────────────┘
                 │
       drag into easyeda.com
                 │
             Auto Route
                 │
          Order via JLCPCB

Why this plugin

Three recurring friction points in small-batch PCB work, automated:

  1. "Is this part basic or extended on JLCPCB?" — You stop needing to cross-reference LCSC's UI. The plugin queries the JLCPCB catalog directly, caches the answer, and always prefers basic-tier (no $3/part assembly setup fee).

  2. "What's the right pad number for this IC's GPIO10?" — You stop reading datasheets to build netlists. The plugin queries EasyEDA by LCSC C-number, caches the pin-name → pad-number map, and lets you reference pins by their functional names.

  3. "Why is my auto-router failing?" — You stop fighting Freerouting on RF boards. The plugin stops at "wired .kicad_pcb" and hands off to EasyEDA's cloud auto-router, which works on real designs.


Related MCP server: Altium MCP Server

Quick tour

  • Two slash commands: /pcb-new (from a description) and /pcb-from-bom (from a CSV).

  • One agent: part-sourcer — finds the best JLCPCB-stocked part for a generic spec.

  • One skill: kicad-jlcpcb-workflow — the full reference the LLM consults while driving the workflow.

  • 14 MCP tools covering setup, sourcing, schematic, PCB generation, EasyEDA handoff, and session resume.

  • Session persistence — each project writes a .kicad_jlcpcb_session.json so /pcb-new can resume mid-flow after a Claude Code restart.


Requirements

Component

Version

Notes

Python

3.10 – 3.13

Tested on all four in CI

KiCad

8.0 – 10.x

kicad-cli on PATH or in a standard install location; pcbnew Python bindings for pcb_generate. Only the 8.0 floor is enforced — KiCad 11 removed the SWIG bindings and will pass detection, then fail at pcb_generate. See TROUBLESHOOTING

EasyEDA account

free

Only needed for the final routing + ordering step

Network

required

Part data is fetched live — see below

Data dependencies

Part sourcing depends on two third-party, unofficial services. Neither is run by JLCPCB, and neither is run by us. Both are overridable, so a fork can point at a mirror without touching code:

Service

Used for

Override

jlcsearch.tscircuit.com

Catalog search, JLCPCB stock, basic/extended tier

KJLC_JLCSEARCH_BASE

easyeda.com

Exact C-number lookup, symbols, pin maps

KJLC_EASYEDA_BASE

Resolved parts are cached in ~/.cache/kicad-jlcpcb/lcsc_parts.sqlite for 24 hours. There is no bulk catalog download.

Why the overrides exist. v0.1.0 hardcoded a single third-party URL. Upstream retired that data layout, the URL started returning 404, and part sourcing broke silently for months before anyone noticed (#1). A weekly CI job now tests both services directly, and you can repoint either one yourself.

Install KiCad:

  • Fedora 40+: sudo dnf install kicad

  • Ubuntu 22.04+: sudo add-apt-repository ppa:kicad/kicad-9.0-releases && sudo apt install kicad

  • Arch: sudo pacman -Syu kicad

  • macOS: kicad.org/download


Install

/plugin marketplace add BeckhamLabsLLC/claude-plugins
/plugin install kicad-jlcpcb@beckhamlabs-plugins

Restart Claude Code, then run /mcp and look for kicad-jlcpcb.

That is the whole install. You do not need to clone the repo, and you do not need to install anything with pip — the plugin resolves its own two dependencies (mcp, httpx) on first launch via uv, which most Python toolchains already have:

curl -LsSf https://astral.sh/uv/install.sh | sh    # if you do not have it

If you would rather not use uv, install the dependencies into whichever Python python3 resolves to and the plugin will use them directly:

python3 -m pip install mcp httpx

KiCad itself is a separate install — see Requirements.

git clone https://github.com/BeckhamLabsLLC/kicad-jlcpcb.git
cd kicad-jlcpcb
pip install -e ".[dev]"

Then register the clone as a local marketplace, which is what makes Claude Code expand ${CLAUDE_PLUGIN_ROOT} for the MCP server:

/plugin marketplace add /abs/path/to/kicad-jlcpcb
/plugin install kicad-jlcpcb@beckhamlabs

Note the marketplace name differs from the published one: the repo's own .claude-plugin/marketplace.json declares beckhamlabs, while the aggregator repo declares beckhamlabs-plugins.

Do not register the checkout by enabling its .mcp.json as a project server. ${CLAUDE_PLUGIN_ROOT} is only substituted for plugin-provided MCP configs; in project scope it stays a literal string and the server cannot be found. See TROUBLESHOOTING.

Sanity check

/mcp in Claude Code should list kicad-jlcpcb with its 14 tools. If it reports the server failed, see TROUBLESHOOTING — the first step there prints the actual reason, which Claude Code does not show you.

From a clone, you can also check the whole path end to end — that the server starts, registers its handlers, and answers a real tool call:

python3 bin/launch.py --version     # prints the version, exits 0
python3 scripts/check_protocol.py   # initialize -> tools/list -> tools/call

Run the launcher with no arguments and it will appear to hang — that is correct. An MCP server speaks JSON-RPC on stdio and is waiting for a client.


Five-minute quick-start

Pick a small idea — an ESP32-C3 board with one sensor, a USB-C port, and an LDO works well. Run:

/pcb-new An ESP32-C3 soil-moisture sensor with two capacitive probes,
         USB-C 5V in, a 3.3V LDO, status LED, and JST-PH battery header.
         Place it on an 80x60 mm board.

Claude walks you through:

  1. detect_kicad — verify the toolchain (< 1 s)

  2. create_project — scaffold .kicad_pro + .kicad_sch + session file

  3. Decomposes the description into ~12 generic part specs

  4. lcsc_search per spec (live catalog query, cached locally for 24 h)

  5. BOM checkpoint — shows every resolved part, flags extended-tier ones with cost warnings, and waits for your confirmation

  6. pcb_generate — fetches EasyEDA pin maps (~12 s each, only for parts whose nets reference pins by name, first run only), places footprints, wires nets, saves .kicad_pcb

  7. easyeda_handoff — prints the import instructions

The full trace with real timings and tool outputs: examples/soilnode-esp32/walkthrough.md.

First run: ~90 s. Subsequent runs on similar designs: under 10 s.


What the plugin does not do

Set expectations honestly before you start:

  • Auto-route traces. That's why the .kicad_pcb gets handed to EasyEDA. Freerouting 2.1.0's CLI is buggy and can't handle RF matching networks; nothing else works headlessly well enough to ship.

  • Beautiful placement. The three-band grid (connectors on top, ICs in the middle, passives below) is functional, not pretty. You rearrange in EasyEDA before routing.

  • Design review. There's no DRC integration (yet — see Roadmap). The plugin trusts your spec and relies on KiCad / EasyEDA to catch rule violations.

  • PyPI distribution. Install through the Claude Code marketplace. There is no pip install kicad-jlcpcb.


MCP tool surface

Stage

Tool

Purpose

Setup

detect_kicad

Probe kicad-cli version, return install hint if missing

Setup

create_project

Scaffold .kicad_pro + subdirs + session file

Setup

load_project

Validate existing .kicad_pro; surfaces resumable session state

Resume

session_resume

Report where a prior workflow left off for a project dir

Resume

session_confirm_bom

Record the user's BOM approval so a restart doesn't re-ask

Sourcing

lcsc_search

Free-text part search, basic-only by default

Sourcing

lcsc_resolve_bom

Batch BOM resolution with cost-impact warnings

Sourcing

fetch_part_library

Symbol + footprint from EasyEDA's real geometry into project libs/

Pin maps

part_pin_map

Fetch pin-name → pad-number map from EasyEDA

Schematic

sch_generate

Emit .kicad_sch from a netlist spec

Schematic

sch_run_erc

Run kicad-cli sch erc and parse the report

PCB

pcb_generate

Main tool. Auto-fetches pin maps, places footprints, wires every net, saves .kicad_pcb

Terminal

easyeda_handoff

Recommended terminal tool. Produces EasyEDA import instructions

Legacy

package_for_jlcpcb

For users routing in KiCad: export Gerbers + package a JLCPCB upload zip

Full input-schema definitions are in src/kicad_jlcpcb_mcp/server.py under _tool_definitions().


PCB spec format

pcb_generate consumes a JSON-serializable dict:

{
  "name": "demo",
  "board": {"width_mm": 80, "height_mm": 60, "layer_count": 2},
  "components": [
    {
      "ref": "U1",
      "value": "ESP32-C3-WROOM-02",
      "lcsc": "C2934560",
      "lib": "RF_Module",
      "fp": "ESP32-C3-WROOM-02"
    }
  ],
  "nets": {
    "3V3":     [["U1", "3V3"], ["C1", "1"]],
    "GND":     [["U1", "GND"], ["C1", "2"]],
    "SPI_SCK": [["U1", "GPIO10"], ["U2", "SCK"]]
  }
}

Key rules:

  • Reference IC pins by their functional name (3V3, GPIO10, SCK). The plugin resolves them via EasyEDA's pinmap.

  • For passives (R, C, L, D), use bare pad numbers: "1", "2".

  • lib and fp are KiCad-stdlib library + footprint names. The plugin finds KiCad's footprint directory automatically on Linux, macOS, Windows and Flatpak; override with KJLC_FOOTPRINT_DIR or pcb_generate's lib_dir.

Full worked spec: examples/soilnode-esp32/spec.json.


Architecture

src/kicad_jlcpcb_mcp/
  server.py         ← MCP server + 14 tool definitions
  session.py        ← per-project state (.kicad_jlcpcb_session.json)
  project.py        ← .kicad_pro create / load / validate
  kicad_cli.py      ← async wrapper for kicad-cli (KiCad 8–10)
  lcsc_client.py    ← jlcsearch + EasyEDA lookup, SQLite cache, basic-tier filter
  part_library.py   ← EasyEDA client (EasyEdaRateLimiter + pin-map cache)
  pcb.py            ← pcbnew-based .kicad_pcb generator
  schematic.py      ← netlist spec → .kicad_sch
  gerber_pack.py    ← Protel extension normalizer + JLCPCB zip
  sexpr.py          ← s-expression reader/writer
  config.py         ← module-level constants

All HTTP goes through lcsc_client and part_library. All KiCad CLI invocations go through kicad_cli. pcbnew is lazy-imported inside pcb.py so the rest of the plugin runs fine when KiCad isn't installed (most tools don't need it).


Testing

pytest tests/       # offline suite; nothing here touches the network

Two suites are gated behind environment variables because they need something the default run can't assume:

KICAD_INSTALLED=1 pytest tests/ -v                          # needs pcbnew
KJLC_NETWORK_TESTS=1 pytest tests/test_network_contract.py  # hits live APIs

The offline suite covers subprocess wrapping, HTTP mocking, the SQLite cache, s-expression round-trip, schematic emission, Gerber renaming, EasyEDA pin-map parsing, rate-limit / retry, session persistence, MCP tool routing, and real pcbnew board generation.

test_network_contract.py earns its own paragraph. Every other test is mocked, which is why the whole suite stayed green for four months while part sourcing was completely broken in the field. The contract tests assert the shape of live upstream responses — never a specific price or stock figure — and run weekly in CI. If that badge goes red, part sourcing is broken for everyone; please open an issue.

Lint:

ruff check .
ruff format --check .

Troubleshooting

Full guide: TROUBLESHOOTING.md. Most common issues:

Symptom

Fix

MCP server shows as failed / CONNECTION_CLOSED

Run python3 bin/launch.py --version by hand — it prints what is missing. Usually: install uv, or python3 -m pip install mcp httpx.

ImportError: No module named pcbnew

Install KiCad; don't try to pip install pcbnew (it ships with KiCad)

First run stalls ~12 s per part

Expected — EasyEDA rate limit, and only for parts whose nets use pin names. Cached forever after the first fetch.

Footprint not found

The error names how many libraries were found and suggests near matches. If none were found, set KJLC_FOOTPRINT_DIR.

/pcb-new offers to resume when you wanted a clean start

Delete .kicad_jlcpcb_session.json or pick a new project name


What you get, and what to check

The plugin produces a .kicad_pcb with real footprints and every net wired, plus a JLCPCB upload zip. Two things are worth checking before you order:

Part geometry comes from EasyEDA. Symbols carry the real pin names and numbers, and footprints the real pad positions, sizes and drills — EasyEDA, LCSC and JLCPCB share a parent company, so this is the same data JLCPCB assembles against. When EasyEDA has no geometry for a part, a placeholder is written instead and fetch_part_library says so in warnings. A placeholder footprint will not match the real part — replace it from KiCad's standard libraries before ordering.

CPL rotations are passed through, not corrected. JLCPCB's expected orientation differs from KiCad's for some packages. Footprints generated from EasyEDA already share JLCPCB's convention; footprints you take from KiCad's standard libraries may not. The plugin says so rather than applying a guess that silently rotates parts — check JLCPCB's assembly preview after upload and fix anything that looks wrong there.


Design rationale: why the handoff

Earlier releases tried to route the board headlessly with Freerouting and produce a JLCPCB Gerber zip directly. That didn't work for real boards — Freerouting 2.1.0 has CLI bugs, can't route RF matching networks, and won't save partial results.

So the plugin takes the pragmatic win: it wires everything up, EasyEDA routes and orders. The tradeoff is opening a browser tab and clicking two buttons; in exchange you get reliability the open-source tooling can't match and a one-click path to a JLCPCB order.


Roadmap

  • Next — auto-placement that respects functional groupings (power domain, RF block, analog front-end), DRC integration, differential-pair awareness, and a per-package CPL rotation table so JLCPCB orientations need no manual correction.

  • Later — vision-based schematic extraction: drop in a photo of a hand-drawn schematic, out comes a wired .kicad_pcb.


Contributing

See CONTRIBUTING.md for dev setup, test running, and PR conventions. All contributors follow the Code of Conduct. Bug reports: open an issue.


License

MIT — see LICENSE.

Available Tools

14 tools
create_projectA

Scaffold a new KiCad project at // with a .kicad_pro carrying JLCPCB-tuned design rules, an empty .kicad_sch, and libs/ + manufacturing/ subdirectories. Sets the new project as the active session workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name. Letters, digits, underscore, hyphen only. Becomes both the folder name and the .kicad_pro/.kicad_sch stem.
parent_dirYesExisting directory under which to create the project folder.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose a key side effect: 'Sets the new project as the active session workspace.' It also specifies the exact file/directory structure. However, it doesn't mention failure conditions (e.g., if parent_dir doesn't exist or project already exists), permissions, or reversibility. For a mutation tool, this is a partial disclosure—better than a bare 'Creates a project' but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero wasted words. The first sentence front-loads the action, target path, and key outputs; the second discloses the side effect. Perfectly concise and well-structured.

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 scaffolding tool with only 2 parameters and no output schema, the description is quite complete. It specifies the exact artifacts created and the session side effect. It doesn't describe return values or error handling, but those are not essential for a creation tool's basic invocation. The description covers everything an agent needs to know to call it correctly and understand the outcome.

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?

Schema description coverage is 100%, so the schema fully documents both parameters (name, parent_dir). The description references them in the path template but doesn't add new semantic detail beyond what the schema provides (e.g., validation rules for name are in schema). Baseline 3 applies because the schema already does the heavy lifting.

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 states a specific verb ('scaffold') and a specific resource ('a new KiCad project'), and details the exact directory structure and file contents (.kicad_pro, .kicad_sch, libs/, manufacturing/). It clearly distinguishes from siblings like load_project (loading vs creating) and detect_kicad (detection). No ambiguity.

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 context is clear: use this to create a new project. It doesn't explicitly name alternatives or exclusions, but the scope is obvious given the sibling list (all other operations assume an existing project). It could have stated 'use load_project to open existing projects', but the description's focus on scaffolding suffices for a creation tool.

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

detect_kicadA

Detect the local KiCad install. Returns version, path, and whether it meets the minimum required version. On a missing or outdated install, returns an install_hint with platform-specific guidance. Never runs installs itself.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it does so well. It discloses detection-only behavior, the failure branch returning an install_hint, platform-specific guidance, and explicitly states it never runs installs itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core action is front-loaded, return values are stated compactly, and the critical non-installing boundary is called out without extra prose.

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?

Even without an output schema, the description explains what the tool returns, the failure mode with install_hint, and the platform-specific nature of guidance. This is complete for a zero-parameter detection utility.

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 tool takes zero parameters, so the baseline is 4. There is nothing for the description to add about parameter meaning; the schema already covers everything.

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?

States a specific verb ('Detect'), a clear resource ('local KiCad install'), and the key return values (version, path, minimum version check). No sibling tool overlaps with environment detection, so it is easily differentiated.

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?

The description implies it is a prerequisite/environment check, but it never explicitly says when to run it relative to other tools or names alternatives. Since none of the siblings perform a similar function, the lack of explicit routing is a minor gap.

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

easyeda_handoffA

Produce the final handoff message for the user: the path to the generated .kicad_pcb and step-by-step instructions for importing it into easyeda.com for routing and ordering. This is the recommended terminal tool of the plugin — EasyEDA handles the final routing + JLCPCB ordering step far more reliably than any headless auto-router we could ship.

ParametersJSON Schema
NameRequiredDescriptionDefault
pcb_pathNoOptional .kicad_pcb path. Defaults to the active project's board file.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool generates a handoff message (not a file), that it references a .kicad_pcb path, and that it is the recommended terminal step. It could add more about what the message contains or side effects, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and every sentence earns its place. The first sentence states what it does; the second explains why it is the recommended terminal tool. No wasted words.

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 simple tool with one optional parameter and no output schema, the description is nearly complete. It explains the purpose, the default parameter behavior, and the rationale for being the terminal step. It could mention what the handoff message includes beyond the path and import steps, but that is minor given the tool's simplicity.

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 100%, so the schema already documents the single optional parameter. The description adds context by explaining the default behavior ('Defaults to the active project's board file'), which is valuable beyond the schema. With full coverage and one simple param, this is strong.

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 clearly states the tool's purpose: produce the final handoff message with the path to the generated .kicad_pcb and step-by-step import instructions for easyeda.com. It uses a specific verb ('produce') and resource ('handoff message'), and distinguishes itself from siblings by explaining it is the recommended terminal tool.

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

Usage Guidelines5/5

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

The description explicitly says this is the recommended terminal tool and explains why: EasyEDA handles final routing and JLCPCB ordering more reliably than a headless auto-router. This gives clear guidance on when to use it versus alternatives, and the context signals show it is the final step in the workflow.

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

fetch_part_libraryA

Download symbol + footprint (and 3D model when available) for a single LCSC C-number and install them into the active project's libs/ directory. Geometry comes from EasyEDA: real pin names and numbers for the symbol, real pad positions, sizes and drills for the footprint. If EasyEDA is unreachable or has no geometry for the part, a placeholder is written instead and the response says so in warnings — read them, because a placeholder footprint will NOT match the real part and must be replaced before ordering.

ParametersJSON Schema
NameRequiredDescriptionDefault
lcscYesLCSC C-number, e.g. 'C25804'.
libs_dirNoOptional override for the install directory. Defaults to the active project's libs/.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that it writes files to the libs/ directory, that it downloads from EasyEDA, and that it writes a placeholder if geometry is unavailable, with a warning about the placeholder not matching the real part. It does not mention whether the operation is reversible or any permission requirements, but for a download/install tool, these disclosures are adequate.

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 moderately long but every sentence contributes: it states the purpose, the source of geometry, the fallback behavior, and the importance of warnings. The key information is front-loaded, with the caveat about placeholders placed at the end. It is well-structured and not padded with redundant text.

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?

Given that there is no output schema, the description explains what the response will contain (warnings) and explicitly warns about placeholder mismatches. It covers the failure mode (EasyEDA unreachable or no geometry) and directs the user to read warnings. It does not describe the exact return format or success indicators, but for a tool of this complexity, it is sufficiently complete.

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?

The input schema provides 100% description coverage for both parameters (lcsc and libs_dir), including examples and defaults. The description adds marginal value by reinforcing that lcsc is a C-number and that libs_dir overrides the default directory, but this is already in the schema. The description does not compensate for any missing schema details, so a baseline of 3 is appropriate.

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 states a specific verb (Download) and resource (symbol + footprint + 3D model for a single LCSC C-number) and explicitly mentions the install location (active project's libs/). It also distinguishes itself from siblings by focusing on a single part and sourcing from EasyEDA, making it clear what this tool does versus search or BOM resolution tools.

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 clearly implies when to use it: when you need to fetch a specific part's library by LCSC number. It also provides guidance on reading warnings when a placeholder is written, which is important for downstream actions. It does not explicitly state when not to use it or list alternative tools, but the context is sufficient for an agent to select it appropriately.

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

lcsc_resolve_bomA

Resolve a list of BOM rows to concrete LCSC parts. Each row may specify an LCSC C-number directly or a free-text query with an optional package. Hard-prefers basic-tier parts; for any row that resolves to an extended part, attaches a cost-impact warning and tallies the JLCPCB assembly setup fee.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYesBOM rows. Each row needs either 'lcsc' or 'query'.

TDQS

A4/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It transparently states that the tool hard-prefers basic-tier parts, attaches a cost-impact warning for extended parts, and tallies the JLCPCB assembly setup fee. This goes beyond a simple description and informs the agent of potential side effects and cost implications. However, it does not explicitly state whether the operation is read-only or has other side effects, though the resolution focus suggests a non-mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, two sentences long, with no filler. It front-loads the core purpose, then efficiently covers input options and the behavioral nuance of basic-tier preference and cost warnings. Every sentence contributes meaning, and the structure is clear and scannable.

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?

The description adequately covers the tool's complexity: it handles both direct C-numbers and queries, applies a package filter, prefers basic-tier parts, and manages cost warnings and setup fees. It does not explicitly describe the return format (e.g., the structure of resolved rows), but the purpose 'resolve to concrete LCSC parts' implies the output is a list of resolved parts. Given the lack of an output schema, a more explicit return structure would improve completeness, but the description is still fairly complete for an agent to understand the tool's function and behavior.

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?

The schema description coverage is 100%, so each parameter (rows, qty, lcsc, query, package) is already documented. The description adds context by clarifying that each row may specify an LCSC C-number or a free-text query with an optional package, and notes that qty is passed through and not used for matching. This provides a high-level framing but does not add substantial new details beyond the schema. The baseline of 3 is appropriate given the complete schema coverage.

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 clearly states the tool's function: resolving a list of BOM rows to concrete LCSC parts. It specifies the input options (direct C-number or free-text query with package) and the key behavior of preferring basic-tier parts. This distinguishes it from siblings like lcsc_search (which likely searches for individual parts) and session_confirm_bom (which likely confirms a BOM). The verb 'resolve' and resource 'BOM rows' are specific and actionable.

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?

The description provides clear context on when to use the tool (to resolve BOM rows) and explains the resolution logic, but it does not explicitly contrast with alternatives like lcsc_search or state when not to use it. There is no mention of exclusions or conditional routing to other tools. The intended usage is implied but not directly contrasted.

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

load_projectA

Load an existing KiCad project (path to a .kicad_pro file or its containing directory). Validates the manifest, ensures libs/ and manufacturing/ subdirectories exist, and sets the project as the active session workspace. Returns a manifest of the project's current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYesPath to a .kicad_pro file OR the directory containing exactly one .kicad_pro file.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses validation of the manifest, subdirectory assurance, setting the active session workspace, and returning a manifest. Minor ambiguity remains around whether missing directories are created or merely checked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: purpose comes first, followed by behavioral details and return value. Every sentence earns its place.

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 single-parameter, low-complexity tool, the description covers input acceptance, validation behavior, workspace effects, and the return value without needing an output schema. It could add error-handling details, but nothing essential is missing.

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?

Schema coverage is 100%, and the schema already fully documents project_path including the .kicad_pro file OR directory alternative. The tool description merely paraphrases the schema, adding no new parameter-level meaning.

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?

States a specific verb and resource: 'Load an existing KiCad project' via a .kicad_pro file or directory. This clearly distinguishes it from siblings like create_project and detect_kicad.

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 phrase 'existing KiCad project' conveys when this tool applies rather than creating a new project. It does not explicitly name alternatives or exclusions, but the usage context is clear enough for an agent to select it over create_project.

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

package_for_jlcpcbA

Run all kicad-cli manufacturing exports on the active project's .kicad_pcb (gerbers, drill, position, BOM), rename gerbers to Protel extensions, drill to .XLN, and zip everything into a JLCPCB-ready manufacturing/jlcpcb--.zip. Requires that placement and routing are already done in KiCad — this is the terminal tool in the workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
pcb_pathNoOptional .kicad_pcb path. Defaults to the active project's .kicad_pcb.
output_zipNoOptional output zip path. Defaults to <project>/manufacturing/jlcpcb-<name>-<date>.zip.

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It fully describes the operations: running all manufacturing exports, renaming gerbers to Protel extensions and drill to .XLN, zipping everything, and the output path. It also discloses the external dependency on kicad-cli and the prerequisite state of the project, which is important behavioral context for an agent deciding to invoke it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense, information-rich sentences with no filler. The first sentence front-loads the exact actions and output format, and the second adds the critical prerequisite and workflow position. Every clause contributes useful information.

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?

Despite having no output schema, the description is complete for a terminal packaging tool: it specifies the input, all transformation steps, the output location and naming pattern, and the required project state. An agent has enough context to know when to call it and what it will produce.

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?

Schema description coverage is 100%, so the input schema already documents both optional parameters with defaults. The description reinforces the 'active project' default but adds no meaning beyond what the schema provides, matching the baseline of 3.

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 states a specific verb and resource: 'Run all kicad-cli manufacturing exports on the active project's .kicad_pcb' and lists exactly what is produced (gerbers, drill, position, BOM, renamed and zipped). It also distinguishes itself from siblings by calling itself 'the terminal tool in the workflow', so an agent can clearly tell it apart from earlier steps like pcb_generate or easyeda_handoff.

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 provides an explicit precondition ('Requires that placement and routing are already done in KiCad') and positions the tool as 'the terminal tool in the workflow'. It does not name specific sibling alternatives or state when-not-to-use it, but the workflow positioning and prerequisite give an agent clear guidance on when it is appropriate.

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

part_pin_mapA

Fetch the pin-name → pad-number map for an LCSC C-number from EasyEDA's component endpoint. Used internally by pcb_generate; exposed as a standalone tool so Claude can inspect a part's pinout before constructing a nets spec. Rate-limited (~12s between unique fetches); cached indefinitely in SQLite after first fetch.

ParametersJSON Schema
NameRequiredDescriptionDefault
lcscYesLCSC C-number, e.g. 'C82942' for ME6211C33M5G-N LDO.
force_refreshNoBypass cache and re-fetch from EasyEDA.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and delivers: it discloses rate limiting ('~12s between unique fetches') and indefinite SQLite caching after first fetch — the two operational traits most likely to surprise an agent. It does not cover failure modes (invalid C-number, network errors), but for a read-only fetch tool the disclosed traits are the important ones. No contradiction exists since annotations are absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero filler. The core verb+resource is front-loaded, the standalone-use context comes second, and the operational constraints (rate limit, caching) close it out. Every sentence earns its place and nothing needs to be cut.

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 two-parameter tool with no output schema and no annotations, the description covers purpose, usage timing, and both behavioral constraints (rate limit and caching). Since no output schema exists, the description arguably should hint at the return shape, and 'pin-name → pad-number map' effectively does. Minor omissions like error behavior on invalid C-numbers are the only gap.

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?

Schema description coverage is 100%, so both parameters (lcsc, force_refresh) are already well documented in the schema, setting a baseline of 3. The description adds modest value by explaining that caching is indefinite, which gives semantic weight to force_refresh's 'bypass cache' purpose. This is a small increment but not a substantial one — the schema already says enough for correct invocation.

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 first sentence names a specific verb, resource, and scope: 'Fetch the pin-name → pad-number map for an LCSC C-number from EasyEDA's component endpoint.' This is immediately distinguishable from siblings like fetch_part_library (full library) and lcsc_search (part lookup). The second sentence further clarifies its niche relative to pcb_generate (pinout inspection before nets spec construction), leaving no ambiguity about what this tool does.

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 gives clear context for standalone use: 'so Claude can inspect a part's pinout before constructing a nets spec.' This explains the appropriate moment to invoke the tool. It does not, however, explicitly name sibling alternatives or state when NOT to use it as opposed to lcsc_search or fetch_part_library; the differentiation is implied rather than spelled out.

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

pcb_generateA

Generate a fully-wired .kicad_pcb from a declarative spec using KiCad's pcbnew Python API. Each component in the spec needs an LCSC C-number — the plugin auto-fetches pin maps from EasyEDA so your nets can reference pin NAMES (like 'GPIO10' or 'VCC') instead of numbers. First run may pause ~12 seconds per unique IC for EasyEDA's rate limit; results are cached in SQLite so subsequent runs are instant. The tool then auto-places footprints in three bands (connectors on top, ICs in middle, passives below), wires every net pad-to-pad, and draws a board outline. Result: a .kicad_pcb ready to open in KiCad or EasyEDA for routing. REQUIRES KiCad 8+ installed (pcbnew is KiCad-side Python).

ParametersJSON Schema
NameRequiredDescriptionDefault
specYesPCB spec with board/components/nets. See plugin docs for the full schema.
lib_dirNoDirectory holding KiCad's stock .pretty footprint libraries. Normally omit it — the plugin finds KiCad's libraries on Linux, macOS, Windows and Flatpak, and honours KJLC_FOOTPRINT_DIR / KICAD*_FOOTPRINT_DIR.
output_pathNoOptional output .kicad_pcb path. Defaults to the active project's .kicad_pcb.
force_refreshNoBypass cached pin maps and refetch from EasyEDA. Slow (rate-limited to one request per 12s); use only when a cached map is known to be wrong.
auto_fetch_pinmapsNoFetch pin-name to pad-number maps from EasyEDA for components that have an 'lcsc' field and no explicit 'pinmap'. Set false to work offline — nets must then reference bare pad numbers.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and handles it well. It discloses network fetching from EasyEDA, 12-second rate-limit pauses, SQLite caching, auto-placement behavior, wire generation, board outline drawing, and output as a file. It does not mention overwrite behavior or failure modes, but the main side effects are transparent.

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?

Six information-dense sentences with the core purpose front-loaded and supporting details about latency, caching, placement, and requirements following. Every sentence earns its place, though a few details are partially redundant with the input schema descriptions.

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 complex tool with 5 parameters, a nested spec, and no output schema, the description is quite complete: it explains the output, external dependencies, performance characteristics, and system prerequisites. It defers the full spec schema to plugin docs and does not specify whether an existing output file is overwritten, but an agent has enough context to call this tool correctly.

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 the baseline is 3, but the description adds real semantic value beyond the schema. It explains that components need an LCSC C-number, that nets can reference pin names rather than pin numbers, and that pin maps are cached and can be bypassed. This meaningfully enriches the spec parameter and the fetch-related flags.

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?

States a specific action ('Generate a fully-wired .kicad_pcb') from a declarative spec and names the mechanism (pcbnew API). It clearly names the output artifact and distinguishes itself from schematic-oriented siblings by describing PCB-specific behaviors such as auto-placement, pad-to-pad wiring, and board outline drawing.

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: use this when you have a declarative spec with LCSC C-numbers and need a ready-to-route PCB file. It also states the hard prerequisite of KiCad 8+ being installed. It does not explicitly name alternatives or say 'use sch_generate for schematics instead,' so it stops short of a 5.

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

sch_generateA

Generate a .kicad_sch from a declarative netlist spec. The spec lists components (with LCSC C-numbers and footprints) and named nets connecting their pins. The generated schematic passes basic ERC and is ready to open in KiCad for human review and PCB layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTitle block name. Defaults to the active project's name.
sch_pathNoOptional override for the output path. Defaults to the active project's .kicad_sch.
netlist_specYesComponents + nets. See plugin docs for the schema.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context by stating the generated schematic passes basic ERC and is ready for human review and PCB layout, but it does not disclose side effects such as overwriting an existing .kicad_sch or what the tool returns after generation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core action front-loaded. Every clause contributes: file type, input format, component identifiers, net representation, ERC quality, and intended downstream use.

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

Completeness3/5

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

The description covers purpose and input quality well, but since there is no output schema and no annotations, the agent is left without information about return values and overwrite behavior. It is adequate for a simple generation tool but has clear gaps around invocation side effects.

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 100%, so the baseline is 3. The description adds value by explaining what the netlist_spec must contain—components with LCSC C-numbers and footprints, and named nets connecting pins—whereas the schema only says 'Components + nets. See plugin docs for 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?

States a specific verb and resource: generate a .kicad_sch from a declarative netlist spec. It also specifies the input content (components with LCSC C-numbers and footprints, named nets), which distinguishes it from downstream siblings like pcb_generate and sch_run_erc.

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?

The description implies this tool is used when a netlist spec exists and the goal is a KiCad schematic for review and PCB layout. However, it never explicitly says when to prefer sch_generate over alternatives like pcb_generate or sch_run_erc, nor does it state any exclusions or prerequisites.

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

sch_run_ercA

Run KiCad's Electrical Rules Check (ERC) on a schematic via kicad-cli. Returns counts of errors and warnings plus a path to the full report. Errors > 0 means the schematic has structural problems that should be fixed before layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
sch_pathNoOptional schematic path. Defaults to the active project's .kicad_sch.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral transparency burden. It discloses return values (error/warning counts and a report path) and the meaning of errors > 0, but does not mention side effects such as whether a report file is written to disk, any prerequisites like an opened project, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two focused sentences with no filler. It front-loads the primary action and then supplies high-value information about outputs and interpretation.

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 simple tool with one optional parameter and no output schema, the description adequately covers purpose, return values, and how to interpret errors. It could be more complete by noting prerequisites or side effects, but the essential information for invoking and understanding the result is present.

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?

The single parameter sch_path is fully described in the schema, including its optionality and default behavior. The description adds no additional parameter guidance beyond what the schema already provides, so the baseline score of 3 is appropriate.

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 uses a specific verb and resource: "Run KiCad's Electrical Rules Check (ERC) on a schematic via kicad-cli." It clearly states what the tool does and distinguishes it from siblings like sch_generate and pcb_generate by naming a specific check phase and reporting behavior.

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?

The description implies when the tool is useful (before layout, when structural problems need fixing) but does not explicitly state when to use this tool versus alternatives or when not to use it. There is clear context but no exclusions or alternative routing.

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

session_confirm_bomA

Record that the user has reviewed and approved the BOM. Call this immediately after they confirm at the BOM checkpoint, before pcb_generate. Without it the approval lives only in the conversation: if Claude Code restarts, session_resume reports the BOM as merely 'sourced' and the user is asked to approve the same BOM again. Spending money on a board is the one decision in this workflow worth making durable.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional note about what the user approved or asked to change, carried into the resume summary.
project_pathNoDefaults to the active project.

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses that this is a state-changing action ('Record') that persists approval durably, and it explicitly describes the behavioral difference from session_resume. It even explains the risk of skipping it (money spent on a board). This is transparent about the tool's effect and importance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that front-loads the core purpose, then explains the workflow context and the stakes. Every sentence earns its place: the timing, the alternative tool, and the consequence of omission. No fluff, no repetition.

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 simple tool with two optional parameters and no output schema, the description is complete. It tells the agent when to call it, why it matters, and what happens if it is skipped. The agent has everything needed to decide correctly without requiring additional lookups.

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?

Schema description coverage is 100%, and both parameters (notes and project_path) are already documented in the input schema. The description itself does not add new parameter semantics; it only indirectly references the notes via 'carried into the resume summary', but that detail is already in the schema. Per the rubric, with full coverage the baseline is 3, and the description adds no extra meaning beyond 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 precise verb and resource: 'Record that the user has reviewed and approved the BOM.' It then anchors the action in the workflow ('immediately after they confirm at the BOM checkpoint, before pcb_generate') and distinguishes it from the sibling session_resume by explaining the consequence of skipping it. An agent can tell exactly what this tool does and when it applies.

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

Usage Guidelines5/5

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

The description gives explicit timing ('immediately after they confirm at the BOM checkpoint, before pcb_generate') and the negative consequence of not calling it (session_resume will ask the user to approve again). It effectively states when to use it and what happens otherwise, leaving no ambiguity about its role in the workflow.

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

session_resumeA

Inspect the .kicad_jlcpcb_session.json in a project directory to see where a prior workflow left off. Returns the current stage (created / parts_sourced / bom_confirmed / pcb_generated / handoff_rendered), which checkpoints are complete, and a recommended next step. Use at the start of /pcb-new or /pcb-from-bom on an existing project to offer the user a resume-or-restart choice.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathNoProject directory or .kicad_pro path. Defaults to the active project when set.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral transparency. It describes the inspection and return values, implying read-only behavior, but doesn't explicitly state that it modifies nothing or what happens if the session file is missing. It does mention 'existing project' as a precondition, but more could be disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no waste. The core functionality is front-loaded, and the usage guidance is concise. Every sentence earns its place.

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?

The tool is simple with one optional parameter and no output schema. The description covers what it does, what it returns, and when to use it. It lacks explicit error handling or edge-case behavior (e.g., missing session file), but for this complexity, it's reasonably complete.

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?

The schema covers the single parameter with 100% coverage, describing project_path and its default behavior. The description adds no additional parameter semantics beyond that, so it meets the baseline for high schema coverage.

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 clearly states the verb 'Inspect' and the resource '.kicad_jlcpcb_session.json', and specifies what is returned (current stage, checkpoints, recommended next step). It differentiates from siblings by mentioning its use for offering a resume-or-restart choice, making its purpose distinct.

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?

Provides explicit context: 'Use at the start of /pcb-new or /pcb-from-bom on an existing project.' This tells the agent when to call it. It doesn't explicitly name alternatives or exclusions, but the context implies it's for resuming existing workflows, which is clear enough.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv0.16.0
    • First observedcreate_project
    • First observeddetect_kicad
    • First observedeasyeda_handoff
    • First observedfetch_part_library
    • First observedlcsc_resolve_bom
    • First observedlcsc_search
    • First observedload_project
    • First observedpackage_for_jlcpcb
    • First observedpart_pin_map
    • First observedpcb_generate
    • First observedsch_generate
    • First observedsch_run_erc
    • First observedsession_confirm_bom
    • First observedsession_resume

TDQS

A4.1/5.0

Scored across 14 tools

Disambiguation5/5

Each tool has a single, clearly defined role in the workflow—environment detection, project lifecycle, part sourcing, schematic/PCB generation, testing, packaging, and session persistence. Even the LCSC/EasyEDA-related tools are cleanly separated by their inputs and outputs, so there is no practical ambiguity between them.

Naming Consistency4/5

All names are snake_case and mostly follow a prefix/verb_noun pattern, but a few deviate from verb-first naming ('part_pin_map', 'easyeda_handoff') and prefixes mix abbreviations like lcsc, sch, and pcb. This is a minor consistency issue rather than a confusing naming scheme.

Tool Count5/5

The 14 tools map directly to the stages of a single end-to-end KiCad-to-JLCPCB workflow, from environment detection through manufacturing handoff. Every tool has a distinct responsibility, and none feel redundant or out of scope.

Completeness4/5

The workflow is comprehensively covered: project setup, part sourcing, schematic generation/ERC, BOM approval, PCB generation, packaging, and handoff, plus session persistence for resuming. Minor gaps exist around post-generation PCB verification (no explicit DRC/DFM check) and editing existing designs, but these can be worked around in KiCad or EasyEDA.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language control of KiCad PCB design software through Claude Desktop, automating project creation, design rule checks, component management, export, and cost estimation.
    5 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants like Claude to interact with KiCAD for PCB design automation, providing comprehensive tool schemas and real-time project state access.
    39 npm
    2
    MIT