jlcpcb-skill-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@jlcpcb-skill-mcp Pick parts for this circuit for a 50-board run."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
jlcpcb-skill-mcp
English | ํ๊ตญ์ด | ๐ Docs site
An MCP server + Claude skill that picks JLCPCB/LCSC parts for your KiCad circuit with assembly cost in mind.
๐ Docs & install guide (Claude Code / Codex / other MCP clients): https://hulryung.github.io/jlcpcb-skill-mcp/
Not just search โ it automates part selection:
Basic > Preferred > Extended tier priority โ Extended parts carry a $3 loading fee per unique part (Basic is free; Preferred Extended is waived on Economic PCBA)
Stock risk checks โ verifies stock covers 5โ10ร your production need
Quantity-tiered pricing โ costs are computed at the price break your order quantity actually hits
KiCad integration โ parses
.kicad_schschematics / BOM CSVs directly and matches lines to LCSC part numbersPackage consolidation hints โ flags the same value scattered across 0603/0805 to save reel changes
Data comes from the public jlcsearch API by tscircuit.
Demo
One command takes the example ESP32-C3 board from schematic to a costed, tier-aware BOM (live data):

And the same thing inside a real Claude Code session โ one natural-language request ("Search for parts and pick the right ones for this board, for a 20-board production run.") drives the skill + MCP tools end to end:

(Also available as MP4: script demo ยท session demo. Re-render with vhs docs/demo.tape / vhs docs/demo-claude.tape.)
Related MCP server: jlcpcb-mcp
Quick start
npm install
npm run buildThis repository ships a .mcp.json, so opening this directory in Claude Code registers the server automatically.
The part-selection skill (.claude/skills/jlcpcb-parts/) loads alongside it โ ask "pick parts for this circuit" and the skill drives the tools in order, applying the tier/stock/price doctrine.
Using it in other projects / globally
Easiest path โ install the plugin (skill + MCP in one step, no clone or build):
/plugin marketplace add hulryung/jlcpcb-skill-mcp
/plugin install jlcpcb-parts@jlcpcb-toolsIf you installed the plugin, skip the manual registration in 1) and 2) below โ they only matter when developing against a local checkout.
1) Register the MCP server at user scope โ applies to every project:
claude mcp add --scope user jlcpcb-parts -- node /path/to/jlcpcb-skill-mcp/dist/index.js
claude mcp list # confirm "โ Connected"Remove with claude mcp remove jlcpcb-parts -s user. (Inside this repo the project-scope .mcp.json overlaps with it and prints a duplicate warning; it is the same server, so this is harmless.)
2) Install the skill globally (personal scope) โ a symlink, so repo updates propagate automatically:
ln -sfn /path/to/jlcpcb-skill-mcp/.claude/skills/jlcpcb-parts ~/.claude/skills/jlcpcb-parts3) Workflow alongside KiCad โ KiCad itself is not an MCP client, so the integration is "a terminal next to KiCad":
cd ~/dev/my-board # the project with your .kicad_sch
claude
> Pick parts for this circuit, for a 50-board run.The skill triggers automatically and runs analyze_kicad โ suggest_bom_parts โ resolves review lines โ estimates cost; ask it to fix LCSC fields/footprints and it edits the schematic for you. After schematic edits, press F8 in KiCad (Update PCB from Schematic) to propagate changes to the board. For hierarchical designs, pass the root sheet โ sub-sheets are followed automatically.
4) Claude Desktop / other MCP clients โ it is a plain stdio server, so it plugs in anywhere. For Claude Desktop, add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"jlcpcb-parts": {
"command": "node",
"args": ["/path/to/jlcpcb-skill-mcp/dist/index.js"]
}
}
}Fully quit and restart the Desktop app to apply. (Skills are Claude Code-only; Desktop gets the tools.)
Updating: git pull && npm install && npm run build โ registrations point at dist/index.js, so no re-registration is needed.
Distributing to a team: GitHub, npm, or a remote server
Three ways to share without local paths.
A) Claude Code plugin (recommended โ ships skill + MCP together)
This repo is structured as a plugin and its own marketplace (.claude-plugin/plugin.json + marketplace.json, with a dependency-inclusive single-file bundle dist-plugin/index.mjs committed). Teammates need no clone and no build:
/plugin marketplace add hulryung/jlcpcb-skill-mcp
/plugin install jlcpcb-parts@jlcpcb-toolsSkill and MCP server install together, with update/removal via the /plugin menu. After changing server code, run npm run bundle and commit the refreshed bundle. Direct single-plugin installs without a marketplace are not supported, hence the included marketplace.json.
B) Publish to npm (MCP only)
npm publish # then users run:
claude mcp add jlcpcb-parts -- npx -y jlcpcb-parts-mcpnpx caches the package, so it does not reinstall every session. The skill must be distributed separately (option A covers that), so this fits MCP-only consumers. Note npx github:owner/repo-style direct GitHub execution is not supported.
C) Hosted catalog API on Cloudflare D1 (zero download)
A Cloudflare Worker serves the full in-stock JLCPCB catalog (~693k parts) from D1, so teammates get catalog search without the local DB download โ they just point the local MCP server at the URL. A live instance runs at https://jlcpcb-parts-api.dkkang7484.workers.dev:
claude mcp add --scope user jlcpcb-parts \
-e JLCPCB_API_URL=https://jlcpcb-parts-api.dkkang7484.workers.dev \
-- node /path/to/jlcpcb-skill-mcp/dist/index.jsThe KiCad file tools still run locally (a remote server can't read your .kicad_sch); only the parts data comes from D1. get_part proxies live jlcsearch for fresh stock + preferred tier. Deploy your own with npm run build:d1-db + the runbook in worker/README.md โ it fits the D1 free plan (~330 MB < 500 MB).
Local parts database (optional)
By default the server queries the live jlcsearch API. You can instead run against a local copy of the full JLCPCB catalog โ no rate limits, no dependency on a third-party mirror, and complete results (the live mirror caps some queries at 100 rows).
npm run db:update # downloads ~830 MB, expands to ~4.9 GB at ~/.cache/jlcpcb-parts/Requires the unzip CLI and Node โฅ 22 (built-in node:sqlite). The server auto-detects the DB on start and switches to hybrid mode: search runs offline over the full catalog, while get_part still hits the live API for fresh stock and the preferred-tier flag before you commit to a part. The download is a snapshot (from bouni/kicad-jlcpcb-tools, rebuilt daily) so stock figures are approximate until that final live check โ always re-verify before ordering.
Refreshes when older than 7 days (
npm run db:update -- --forceto force).JLCPCB_PARTS_DB=/path/to/parts-fts5.dboverrides the location.The catalog DB distinguishes only Basic vs Extended (not Preferred); preferred-extended detection still comes from the live API on
get_part. Basic detection matches the live data (verified 13/13 on real boards).
MCP tools (7)
Tool | Purpose |
| Free-text search (package / tier / min-stock filters) |
| Parametric R/C search โ understands |
| Detail lookup by LCSC number (price breaks, attributes) |
| Same-spec substitutes, ranked by tier/stock/price |
|
|
| Whole-BOM matching + ranking + cost (the core tool) |
| Component cost + loading fees for a chosen part list |
| Fetch a part's symbol + footprint + 3D model into a KiCad project's libraries, registered and ready to place (via kicad-lcsc-manager + python3) |
Example run (real output)
The bundled example board examples/esp32c3-sensor (ESP32-C3 + AMS1117 + USB-C + 15 passives), for a 20-board run:
npm run demoRefs | Qty | Value | Pkg | LCSC | Tier | Stock | Unit | Status |
J1 | 1 | USB-C | โ | C165948 | extended | 336,394 | $0.16 | preassigned |
U2 | 1 | AMS1117-3.3 | SOT-223 | C6186 | basic | 1,490,681 | $0.15 | preassigned |
U1 | 1 | ESP32-C3 | QFN-32 | C2838500 | extended | 8,750 | $1.55 | needs_review |
R1 R2 | 2 | 10k | 0603 | C25804 | basic | 37,165,617 | $0.0008 | matched |
R3 R4 | 2 | 5.1k | 0603 | C23186 | basic | 7,571,904 | $0.0009 | matched |
C1 C2 | 2 | 100nF | 0603 | C14663 | basic | 81,299,425 | $0.0022 | matched |
โฆ |
Components $39.05 + Loading fees $9.00 (3 extended parts ร $3) = $48.05 ($2.40/board)
needs review: U1 (IC matched via text โ verify footprint), SW1 (switch matched via text)Passives all land on basic-tier parts with millions in stock; low-confidence matches (IC text search, package prefix match) are flagged needs_review instead of being silently accepted.
Selection rules (encoded in the engine + skill)
Hard filters: out-of-stock dropped; resistance ยฑ0.5% / capacitance ยฑ5% value match; package match (exact for passives, prefix-tolerant for ICs with a review flag); tolerance at least as tight as requested
Scoring: tier (basic +100 / preferred +60 / extended +0) โ stock adequacy (+25 plus depth bonus) โ price (+15) โ tolerance (+3)
Cost: the loading fee counts once per unique extended part (no double-charging a part reused across lines)
Limitations & caveats
jlcsearch is an unofficial mirror of JLCPCB data. Stock and prices are snapshots โ re-verify with
get_partright before ordering.Text matching for ICs/connectors is a convenience โ always verify the MPN and datasheet (
needs_reviewis that signal).Supports KiCad 6โ9
.kicad_schfiles and common BOM CSV exports.
Development
npm test # full test suite (vitest)
npm run demo # live end-to-end demo
node scripts/smoke-mcp.mjs # stdio smoke test of the built serverLayout: src/kicad (parsers) ยท src/jlc (API client) ยท src/engine (ranking/cost) ยท src/tools (MCP tools) โ module contracts in CONTRACTS.md, live API findings in docs/jlcsearch-api-notes.md.
Credits
Data: tscircuit/jlcsearch, upstream data pipeline yaqwsx/jlcparts
Unofficial project, not affiliated with JLCPCB/LCSC.
MIT License
Available Tools
8 toolsanalyze_kicadAnalyze KiCad schematic / BOMA
Parse a KiCad schematic (.kicad_sch, KiCad 6-9) or a KiCad BOM CSV export (.csv) and return grouped BOM lines: references, quantity per board, value, JLC-style package derived from the footprint, component class, any pre-assigned LCSC part numbers, and DNP flags. Hierarchical sheets are followed automatically: sheet files referenced by the schematic are resolved relative to it, parsed recursively (each file once), and merged into the BOM; missing sheet files are skipped with a warning. Power symbols and #-references are excluded. Run this first to understand a design, then pass the same path to suggest_bom_parts for part suggestions.
Inputs: path (required).
estimate_assembly_costEstimate JLCPCB assembly parts costA
Estimate the parts side of a JLCPCB assembly order for a chosen set of LCSC parts: component cost using quantity price breaks (at qty = board_qty ร qty_per_board) plus one-time loading fees โ $3 per unique extended-tier part; basic and preferred (Preferred Extended) parts carry no fee. Does not include PCB fabrication or per-joint assembly charges. Use after finalizing part picks from suggest_bom_parts / find_alternatives.
Inputs: parts (required), board_qty (required).
find_alternativesFind alternative partsA
Given an LCSC part number, find ranked drop-in alternatives with matching specs and package โ useful when a part is out of stock, extended-tier (carries the $3 loading fee), or expensive. The original part is excluded from results. Ranking prefers basic/preferred tier (no loading fee), deep stock relative to need, and lower price; each alternative carries reasons and warnings.
Inputs: lcsc (required), limit.
get_partGet JLCPCB part detailA
Look up a single part by LCSC number (e.g. "C25804") and return full detail: assembly tier (basic = no loading fee, preferred = $3 fee waived, extended = one-time $3 loading fee per unique part), live stock, quantity price breaks, parsed attributes (resistance, tolerance, voltage...), and product URL. Use to verify a candidate part before committing it to a BOM.
Inputs: lcsc (required).
import_part_to_kicadImport a part into a KiCad libraryA
Fetch an LCSC part's KiCad symbol, footprint, and 3D model (STEP + WRL) and add them to a KiCad project's libraries, registering them in the project's sym/fp-lib-table so the part is immediately usable. Reuses the kicad-lcsc-manager engine (github.com/hulryung/kicad-lcsc-manager) โ install it or set KICAD_LCSC_MANAGER if missing. Requires python3. Run after picking parts with suggest_bom_parts / find_alternatives to make them usable in the schematic.
Inputs: lcsc (required), project_dir (required), include, overwrite, +1 more.
search_partsSearch JLCPCB partsA
Free-text search of the JLCPCB/LCSC parts catalog. Use for ICs, connectors, LEDs, diodes, or any part by keyword, value+package text, or manufacturer part number (e.g. "AMS1117-3.3", "10k 0603", "USB-C 16pin"). For resistors/capacitors by exact value prefer search_passives. Tier semantics: basic = pre-loaded at JLCPCB, no loading fee; preferred = Preferred Extended, $3 loading fee waived (Economic PCBA); extended = one-time $3 loading fee per unique part per order.
Inputs: query (required), tier, limit, package, +1 more.
search_passivesParametric resistor/capacitor searchA
Parametric JLCPCB search for chip resistors or capacitors by value. Parses the value string ("10k", "4k7", "0.1R", "100nF", "4u7", "10p") into ohms/farads and searches by exact spec, optionally filtered by package (0402/0603/0805...). Prefer this over search_parts for R/C BOM lines โ it avoids fuzzy text matches. Results are ordered by the client; prefer basic-tier (no loading fee) parts with deep stock.
Inputs: kind (required), value (required), limit, package.
suggest_bom_partsSuggest JLCPCB parts for a BOMA
Suggest concrete JLCPCB parts for a whole BOM with assembly-cost awareness. Input EITHER 'path' (a .kicad_sch schematic or KiCad BOM .csv) OR 'bom_lines' (inline rows) โ exactly one. Each line gets ranked candidates with reasons/warnings and a status: matched, needs_review (verify manually โ e.g. IC matched only by fuzzy text), no_match, preassigned (schematic already carries an LCSC number), or skipped_dnp. Also returns a cost breakdown: component cost at price breaks plus one-time $3 loading fee per unique extended-tier part (basic and preferred parts are fee-free). Ranking prefers basic tier, deep stock vs. needed qty (board_qty ร qty ร stock_multiple), and lower price.
Inputs: path, board_qty, bom_lines, max_candidates, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: searching (general vs. passives), part lookup, alternatives, BOM suggestion, schematic parsing, KiCad import, and cost estimation. The only slight overlap in cost reporting between suggest_bom_parts and estimate_assembly_cost is clarified by their different roles.
All tool names follow a consistent verb_noun pattern in lowercase snake_case (e.g., search_parts, get_part, find_alternatives, estimate_assembly_cost). The naming is highly regular and predictable.
8 tools is well-scoped for a JLCPCB/PCBA workflow, covering search, lookup, alternatives, BOM handling, KiCad integration, and cost estimation without redundancy or bloat.
The tool set provides end-to-end coverage: analyze a schematic/BOM, suggest parts, search and verify, find alternatives, import to KiCad, and estimate assembly cost. No critical operations are missing for the intended use case.
Maintenance
Related MCP Connectors
Find MCP servers for ESP32, Arduino, 3D printers, Home Assistant, cameras and other hardware.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for generating rough-draft project plans from natural-language prompts.
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP servers for KiCad schematic, PCB, symbol, footprint, and project automation, enabling AI-assisted electronic design via tools for read/write, analysis, and exports.109349 PyPI16GPL 3.0
- AlicenseAqualityCmaintenanceMCP server for JLCPCB/LCSC component search, live stock and pricing, datasheets, and PCB/3D printing ordering via authenticated API.282MIT
- AlicenseBqualityBmaintenanceAn MCP server that enables AI assistants to analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code for KiCad projects.39184MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents end-to-end control of KiCad 9+ for rule checks, manufacturing exports, production-readiness certification, and live PCB editor control.MIT