npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

jlcpcb-mcp

v0.3.3

Published

MCP server for JLCPCB/LCSC — search the component catalog (local SQLite from yaqwsx/jlcparts) and fetch live stock, pricing tiers, and datasheets from the JLCPCB API

Downloads

0

Readme

jlcpcb-mcp

CI

An MCP server for JLCPCB / LCSC components. Search the parts catalog and pull live stock, pricing tiers, datasheets, specifications, and images — straight into Claude, Cursor, or any MCP client.

It uses a hybrid data model:

| Data | Source | Freshness | |---|---|---| | Component catalog (descriptions, packages, attributes, categories) | Local SQLite, built from yaqwsx/jlcparts | Snapshot from your last refresh | | JLCPCB assembly stock (the figure that matters for PCBA) | Catalog snapshot (or the official Parts API, when authorized) | Snapshot / real-time | | LCSC retail stock | Live LCSC API (wmsc.lcsc.com) | Real-time, per query | | Pricing tiers | Live LCSC API (wmsc.lcsc.com) | Real-time, per query | | Datasheet URL | Live LCSC API (wmsc.lcsc.com) | Real-time, per query |

Two stock pools, don't confuse them. wmsc.lcsc.com reports LCSC retail stock, which is a different inventory from JLCPCB assembly stock. A part can read 0 on LCSC retail while having millions available for JLC assembly (common for Basic parts). Tools expose both as lcsc_retail_stock and jlc_assembly_stock; treat assembly stock as authoritative for board production. The official Parts API (getComponentDetailByCode) gives real-time assembly stock once your API access is approved.

The catalog is downloaded and built into a local SQLite database on first use (a one-time download of ~50 MB that expands to a larger on-disk database). Stock, pricing, and datasheet links are always fetched live, so they're current regardless of catalog age. No API key or account is required.

Tools

Catalog + live data (no credentials needed)

| Tool | Description | |---|---| | jlcpcb_search_components | Search the catalog by keyword + filters (category, package, basic-only, min stock) and parametric values (resistance, capacitance, voltage rating, power, output voltage/current, input voltage). Results are enriched with live stock/pricing and ranked Basic-first, then by stock, then by price. | | jlcpcb_get_component_details | Full details for one part: catalog metadata + live stock, full pricing tiers, specifications, datasheet, and images. | | jlcpcb_get_component_stock | Live, real-time stock quantity for a part (falls back to the catalog snapshot). | | jlcpcb_get_component_pricing | Live quantity-break pricing tiers (USD) for a part. | | jlcpcb_get_datasheet_url | Datasheet PDF URL for a part (live, with catalog fallback). | | jlcpcb_list_categories | List catalog categories/subcategories with component counts. | | jlcpcb_database_status | Report the local catalog DB location, size, component count, and last build time. | | jlcpcb_refresh_database | Rebuild the local catalog from the latest yaqwsx/jlcparts snapshot. |

Official JLCPCB Open API (requires credentials)

These call the authenticated JLCPCB Open API (open.jlcpcb.com, HMAC-SHA256 signed). They return a "not configured" message until you set the credentials below. Apply for access at https://api.jlcpcb.com (approval is based on your order history).

| Tool | Description | |---|---| | jlcpcb_official_get_component_detail | Authoritative details (specs/stock/price/attributes) for one or more LCSC codes. | | jlcpcb_official_component_library | Browse the full assembly component library, paginated. | | jlcpcb_official_private_library | List your account's private/consigned component library. | | jlcpcb_official_component_feed | Cursor-paginated bulk feed of the whole catalog (lastKey). |

PCB / SMT-stencil ordering (requires credentials)

| Tool | Description | |---|---| | jlcpcb_pcb_upload_gerber | Upload a Gerber archive; returns a fileKey. | | jlcpcb_pcb_upload_blind_via_hole_img | Upload a blind/buried-via stackup image. | | jlcpcb_pcb_impedance_template_list | List impedance template settings for a stackup. | | jlcpcb_pcb_stencil_price_config | Get the SMT stencil (steel) price configuration. | | jlcpcb_pcb_calculate_price | Quote price + lead time for a PCB / stencil order (no order placed). | | jlcpcb_pcb_get_order_detail | Order details by batch number. | | jlcpcb_pcb_get_audit_info | Engineering audit (review) info for an uploaded design. | | jlcpcb_pcb_get_wip_process | Work-in-progress production status for an order. | | jlcpcb_pcb_create_order ⚠️ | Place a real, paid PCB order. Gated by JLCPCB_ENABLE_ORDERS. |

3D printing (TDP) (requires credentials)

| Tool | Description | |---|---| | jlcpcb_tdp_upload_model | Upload a 3D model (STL/STEP); returns a fileAccessId. | | jlcpcb_tdp_file_analysis_result | Analysis result (dimensions/printability) for an uploaded model. | | jlcpcb_tdp_calculate_price | Quote price for a 3D-printing job (no order placed). | | jlcpcb_tdp_order_list | List your 3D-printing orders (paginated/filterable). | | jlcpcb_tdp_order_detail | 3D-printing order details by batch number. | | jlcpcb_tdp_order_process | Production progress for a 3D-printing order. | | jlcpcb_tdp_create_order ⚠️ | Place a real, paid 3D-printing order. Gated by JLCPCB_ENABLE_ORDERS. |

Order safety: the two *_create_order tools place real, paid orders and are disabled by default. They only work when JLCPCB_ENABLE_ORDERS=true and credentials are set. Uploads and price quotes are free and need only credentials.

Installation

The server runs over stdio and is launched by your MCP client.

Claude Desktop / generic MCP config

{
  "mcpServers": {
    "jlcpcb": {
      "command": "npx",
      "args": ["-y", "jlcpcb-mcp"]
    }
  }
}

Claude Code

claude mcp add jlcpcb -- npx -y jlcpcb-mcp

Install globally

npm install -g jlcpcb-mcp
jlcpcb-mcp   # runs the stdio server

First run builds the local catalog database (one-time, a few minutes). Subsequent queries are instant. Use the jlcpcb_refresh_database tool to update the catalog later.

Configuration

All configuration is optional — the live API needs no credentials.

| Env var | Purpose | |---|---| | JLCPCB_DATABASE_PATH | Override where the catalog SQLite file is stored. | | JLCPCB_DEV_MODE | Store the database in ./data within the project (for development). | | JLCPCB_APP_ID / JLCPCB_ACCESS_KEY / JLCPCB_SECRET_KEY | Official Open API credentials — enable the jlcpcb_official_* tools. | | JLCPCB_ENDPOINT | Override the official API base (default https://open.jlcpcb.com). | | JLCPCB_ENABLE_ORDERS | Set to true/1 to allow the *_create_order tools to place real paid orders (off by default). |

Default database locations:

  • Windows: %LOCALAPPDATA%\jlcpcb-mcp\components.sqlite
  • macOS: ~/Library/Application Support/jlcpcb-mcp/components.sqlite
  • Linux: ~/.local/share/jlcpcb-mcp/components.sqlite

Development

npm install
npm run build      # tsc -> dist/
npm test           # vitest (mocks network + DB; no large download)
npm run test:watch
npm run dev        # ts-node src/index.ts

The test suite mocks the live API and the catalog download, so it runs fast and offline.

Architecture

src/
  index.ts          # registers all tools on the MCP server (stdio)
  tool.ts           # shared ToolDef type
  live-client.ts    # wmsc.lcsc.com live product API client
  official-client.ts# open.jlcpcb.com authenticated API (HMAC-SHA256 signing)
  database.ts       # DatabaseManager: build/verify/query the catalog (better-sqlite3)
  paths.ts          # platform data-dir resolution
  value-parser.ts   # resistance/capacitance/voltage/current/power parsers
  tools/
    search.ts       # jlcpcb_search_components
    details.ts      # get_component_details / _stock / _pricing / _datasheet
    catalog.ts      # jlcpcb_list_categories
    maintenance.ts  # jlcpcb_database_status / jlcpcb_refresh_database
    official.ts     # jlcpcb_official_* (authenticated Parts API)
    pcb.ts          # jlcpcb_pcb_* (PCB/SMT-stencil quote, upload, order)
    tdp.ts          # jlcpcb_tdp_* (3D-printing quote, upload, order)

Releasing

CI runs the build + tests on every push and PR to main (Node 20 & 22). Publishing is triggered by creating a GitHub Release, which publishes to both registries:

  • npm as the unscoped package jlcpcb-mcp
  • GitHub Packages as @eyalm321/jlcpcb-mcp

One-time repo setup

  1. Push this repo to https://github.com/Eyalm321/jlcpcb-mcp.
  2. Add an NPM_TOKEN repository secret (an npm automation token). GITHUB_TOKEN is provided automatically for GitHub Packages.
  3. To release: bump the version in package.json, commit, then create a GitHub Release (tag e.g. v0.1.0). The publish workflow builds, tests, and publishes to both registries.

Credits

License

MIT © Eyalm321