jlcpcb-skill-mcp
Click on "Install 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-mcpPick 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
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceMCP servers for KiCad schematic, PCB, symbol, footprint, and project automation, enabling AI-assisted electronic design via tools for read/write, analysis, and exports.1005MIT
- AlicenseAqualityAmaintenanceMCP server for JLCPCB/LCSC component search, live stock and pricing, datasheets, and PCB/3D printing ordering via authenticated API.281MIT
- AlicenseBqualityAmaintenanceAn MCP server that enables AI assistants to analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code for KiCad projects.3972MIT
- Alicense-qualityAmaintenanceKiCad MCP Pro is an MCP server for KiCad EDA workflows. It lets AI agents automate schematic and PCB tasks, ERC/DRC validation, DFM review, and manufacturing export.48MIT
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
A MCP server built for developers enabling Git based project management with project and personalβ¦
MCP server for Appcircle mobile CI/CD platform.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hulryung/jlcpcb-skill-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server