Skip to main content
Glama
PCB Parts MCP Server

PCB Parts MCP Server

by Averyy

PCB Parts MCP Server

MCP server that gives Claude, Cursor and other AI assistants electronic component data from JLCPCB, Mouser and DigiKey: parametric search over 630K+ in-stock JLCPCB parts, live stock and pricing on all three, KiCad footprints, reference boards, sensor picks and design rules. No API key required.

Website: pcbparts.dev · Endpoint: https://pcbparts.dev/mcp

Features

  • Parametric search: ask in plain words ("10k 0603 1%", "logic-level MOSFET Vgs(th) < 2V") and the query becomes spec, package and part-type filters

  • Three distributors: search JLCPCB's catalog, and check live price and stock on JLCPCB, Mouser and DigiKey

  • Alternatives: replacements checked against compatibility rules for 120+ part types, with no-assembly-fee parts first

  • Part details: lookup by LCSC code or manufacturer part number, with price tiers, datasheet PDFs, pinouts and EasyEDA footprints

  • KiCad files: symbols and footprints from SamacSys

  • Reference boards: ~300 open-source boards and Espressif DevKits, showing how real designs wire an IC (decoupling, crystals, pull-ups)

  • Sensors: 1,600+ sensor ICs and modules by what they measure, their bus and the platforms with drivers

  • Design rules: 41 reference files on power, protection, interfaces, MCUs, layout and EMC

Related MCP server: SheetsData MCP

Quick start

Claude Code

claude mcp add -s user --transport http pcbparts https://pcbparts.dev/mcp

To skip the approval prompt on every call, add this to ~/.claude/settings.json:

{
  "permissions": {
    "allow": ["mcp__pcbparts__*"]
  }
}

Claude Desktop and Cursor

Claude Desktop: Settings → Connectors → "Add custom connector", or edit ~/Library/Application Support/Claude/claude_desktop_config.json. Cursor: edit ~/.cursor/mcp.json. Both take:

{
  "mcpServers": {
    "pcbparts": {
      "type": "http",
      "url": "https://pcbparts.dev/mcp"
    }
  }
}

VS Code

Add to .vscode/mcp.json:

{
  "servers": {
    "pcbparts": {
      "type": "http",
      "url": "https://pcbparts.dev/mcp"
    }
  }
}

Copilot for Xcode

Add to the Extensions config:

{
  "mcpServers": {
    "pcbparts": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://pcbparts.dev/mcp"]
    }
  }
}

Tools

Tool

What it does

jlc_search

Main search: plain-words queries, spec filters and sorting by a spec over the daily catalog snapshot

jlc_stock_check

Live JLCPCB stock, including out-of-stock and low-stock parts

jlc_get_part

Full details for an LCSC code or manufacturer part number

jlc_get_pinout

Pin numbers and names from the EasyEDA symbol; footprint=true adds the footprint's pads

jlc_find_alternatives

Replacements checked against compatibility rules, with unverified candidates listed apart

jlc_search_help

Categories, subcategories and the specs each one can filter on

mouser_get_part

Mouser price, stock and datasheet, up to 10 parts per call

digikey_get_part

DigiKey price, stock and datasheet for one part

cse_search

SamacSys search for ECAD models and datasheets

cse_get_kicad

KiCad symbol and footprint download

board_search

Find reference boards by IC, tag, org or text; consensus shows how boards use an IC

board_get

A board's BOM, design rules and dimensions; focus gives one part's pin-by-pin neighborhood

sensor_recommend

Sensors by measurement, protocol or platform

get_design_rules

Design rules and checklists by topic

A typical session goes get_design_rules or board_search → jlc_search → jlc_get_part → jlc_find_alternatives → cse_get_kicad.

Example queries

"Find logic-level MOSFETs with Vgs(th) < 2V and Id >= 5A"
"100nF 25V capacitors in 0402 or 0603"
"Find alternatives for C82899 in the basic library"
"Look up TPS63020 stock and pricing on Mouser"
"Get the KiCad footprint for ESP32-S3-WROOM-1"
"What sensor should I use to measure CO2 on ESPHome?"
"How is the RP2040 typically used? What decoupling and crystal do real boards use?"
"What are the design rules for USB-C?"

Good to know

  • jlc_search covers parts with at least 10 in stock, from a snapshot taken daily (data_as_of in each reply). jlc_get_part(lcsc=...) and jlc_stock_check are live, and jlc_stock_check also reaches the rest of JLCPCB's 7M+ part catalog.

  • For Economic assembly, basic and preferred parts avoid the extended-type loading fee. Alternatives savings use a rounded legacy $3 estimate per extended type, not a current quote; Standard assembly fees differ. jlc_search ranks basic and preferred parts first, and library_type="no_fee" keeps only those.

  • Spec figures are JLCPCB's listings, and alternatives are checked against the catalog. Check the datasheet and pinout before you order.

  • On pcbparts.dev, all users share one Mouser key and one DigiKey app: 1,000 requests a day each. Self-host with your own keys to get your own limits.

docs/search-guide.md covers how queries are read, spec filter syntax, package matching, sorting and the alternatives rules.

Self-hosting

git clone https://github.com/Averyy/pcbparts-mcp
cd pcbparts-mcp
uv venv && uv pip install -e .
uv run python -m pcbparts_mcp.server  # http://localhost:8080/mcp

Or with Docker (needs BuildKit, the default since Docker 23). docker-compose.yml joins an external network named web, so create it first:

docker network create web
docker compose up -d                                    # GHCR image
docker compose -f docker-compose.local.yml up --build   # built from source

docker-compose.yml publishes the server on 127.0.0.1:8080 for a reverse proxy on the same host. Change the mapping to "8080:8080" to reach it from other machines.

The server builds data/components.db on first run. After upgrading, it logs a warning if the database is too old for the new version; rebuild it with uv run python scripts/build_database.py.

Mouser keys are free from Mouser's API hub, and DigiKey client credentials from DigiKey's developer portal. cse_get_kicad downloads need a SamacSys ComponentSearchEngine account; cse_search works without one.

Variable

Default

Description

MOUSER_API_KEY

—

Enables mouser_get_part

DIGIKEY_CLIENT_ID, DIGIKEY_CLIENT_SECRET

—

Enable digikey_get_part

CSEARCH_USER, CSEARCH_PASS

—

SamacSys login for cse_get_kicad

HTTP_PORT

8080

Server port

RATE_LIMIT_REQUESTS

100

Requests per minute per IP

MCP_ALLOWED_HOSTS

pcbparts.dev

Comma-separated Host headers to accept (DNS-rebinding protection; localhost always works)

DISTRIBUTOR_DAILY_LIMIT

1000

Daily request quota for each of Mouser and DigiKey

DISTRIBUTOR_QUOTA_PATH

/app/cache/distributor_quota.json in Docker

Keeps the day's Mouser/DigiKey counts and pauses across restarts

USAGE_STATS_PATH

/app/cache/usage_stats.json in Docker

Keeps the /mcp/stats counts across restarts

EASYEDA_STORE_PATH

/app/cache/easyeda.db in Docker

Keeps EasyEDA footprint answers across restarts

CSE_STORE_PATH

/app/cache/cse.db in Docker

Keeps SamacSys searches and KiCad files across restarts

The four paths are unset outside Docker, which keeps that data in memory only. The compose files mount a named volume at /app/cache.

API

  • Endpoint: https://pcbparts.dev/mcp, Streamable HTTP (stateless), no auth

  • Rate limit: 100 requests a minute per IP

  • Health: https://pcbparts.dev/health (version, cache sizes, each distributor's requests today)

  • Usage stats: https://pcbparts.dev/mcp/stats, anonymous daily counts of calls per tool and per hour, apps and Mouser/DigiKey lookups. No IPs, queries or part numbers are kept.

More

  • llms.txt: this service described for LLMs, with the defaults and limits they need

  • CHANGELOG.md: every release, also published as GitHub releases from 0.8.21. Minor releases in 0.x can change replies, and each lists what to check under Breaking.

  • CONTRIBUTING.md: development setup, tests and project conventions. Issues and PRs welcome.

  • License: MIT

Available Tools

14 tools
board_getGet Reference BoardA
Read-onlyIdempotent

A reference board from board_search. With focus=IC it returns that IC's pin-by-pin neighborhood (decoupling, pull-ups, connected parts) and, when 2+ boards use the IC, how the others wire it. Reply: focus_match_type says exact, partial or ref matching; consensus compares wiring across consensus.board_count boards; passives_omitted counts hidden plain passives. Components and a focused IC carry the design files' own part numbers where listed (mpn, manufacturer, lcsc, mouser, digikey): look them up with jlc_get_part or mouser_get_part. An unknown slug's error adds did_you_mean (boards sharing most of its words).

Inputs: slug (required), focus, include_bom, include_nets. Returns: object

cse_get_kicadGet KiCad Symbol & FootprintA
Read-onlyIdempotent

Download a part's KiCad symbol (.kicad_sym) and footprint (.kicad_mod) as text from SamacSys ComponentSearchEngine; works for any manufacturer. Slow (a search of about 15 s, then a download; files are kept): only when you need the KiCad files. For EasyEDA footprints use jlc_get_part.

Inputs: query, part_id. Returns: object

digikey_get_partDigiKey Part LookupA
Read-onlyIdempotent

DigiKey price, stock and datasheet for one part. Use only when the user wants DigiKey data; find parts with jlc_search first. Shared daily limit, one part per call: don't check whole BOMs. Don't retry a quota error. Reply: part_number, price, price_breaks and min_qty are one packaging's (the DigiKey PN given, else the smallest order, usually cut tape; packaging names it); other_packaging lists the rest (reel, Digi-Reel) with their PN, min_qty and price. lifecycle is DigiKey's product status.

Inputs: product_number (required). Returns: object

get_design_rulesPCB Design RulesA
Read-onlyIdempotent

Curated PCB design rules for power, protection, interfaces, MCUs, layout and EMC. An empty topic lists every rule file. note says the files were found by their text, not their name or keywords.

Inputs: topic. Returns: object

jlc_find_alternativesFind Alternative PartsA
Read-onlyIdempotent

Find catalog-checked alternatives, ranked no-fee first (same-package passives/crystals first within each tier). Reply: summary.found counts verified alternatives; unverified_alternatives need manual comparison for missing required matches or incomparable rating conditions (inductor Isat, DCR, thermal current; multi-diode loading); specs_unparseable lists specs not verified; unchecked_requirements includes pinout/circuit checks still needed; has_easyeda_footprint=null means unknown. Reviewed spec_evidence cites manufacturer values/conditions; spec_discrepancies preserves catalog conflicts. no_datasheet and no_datasheet_note refer only to JLCPCB availability. RF parts (splitters, baluns, couplers, amplifiers, filters, transceivers) have no rules, so they come back as similar_parts from every maker, ordered by how much of the original's frequency range each covers (frequency_coverage: full, partial with share, or unknown); parts that don't overlap it are left out and counted in summary.frequency_check. Other part types without rules (modules, load switches, addressable LEDs) list parts in the original's package and part family first, with likely_drop_in (pinout unchecked), then other makers' parts in the same package. library_type="no_fee" with no basic/preferred match names the best extended ones in summary.extended_examples. Listed parts carry has_easyeda_footprint where it's already known (no extra request), and pcba_type ("economic" or "standard_only"). Lifecycle (NRND) isn't checked: mouser_get_part or digikey_get_part has it. Stock comes from the live search or the daily catalog snapshot. Each part's data_source identifies that observation. Savings use a rounded $3 Economic loading-fee estimate (is_estimate and assembly_service_assumption), not a current quote; Standard service differs.

Inputs: lcsc (required), limit, min_stock, library_type, +4 more. Returns: object

jlc_get_partGet Part DetailsA
Read-onlyIdempotent

Full details for one JLCPCB part (all price tiers, datasheet, specs, EasyEDA footprint availability), or the JLCPCB parts matching a manufacturer part number.

Reply: stock and prices are live, held up to an hour; prices lists quantity tiers; datasheet is LCSC's datasheet page (a viewer, null when LCSC has none) and datasheet_pdf the datasheet itself: a short link on this server that redirects to the PDF and stays valid (LCSC's own link when the PDF is LCSC's); maker_datasheet is the manufacturer's own datasheet link where JLCPCB lists one (most TI parts), and datasheet_note says when there is no PDF, or that datasheet_pdf is LCSC's copy when JLCPCB has none (specs come from LCSC too when JLCPCB lists none); specs_note says when LCSC lists no specs, or what the listing leaves out for the part type (Isat's definition, MLCC DC-bias loss, an RF cable's end styles, a MOSFET's RDS(on)/Vgs(th) mixing typical and maximum figures, multi-diode loading conditions); spec_evidence cites reviewed manufacturer values and conditions, document identity, printed page and source URL; spec_discrepancies flags catalog/document conflicts without replacing catalog specs. no_datasheet/no_datasheet_note refer only to JLCPCB availability; lcsc_url is the LCSC product page; pcba_type is "economic" or "standard_only" (JLCPCB's PCBA Type: one standard_only part moves the whole order to Standard assembly). No lifecycle status (NRND, obsolete): JLCPCB doesn't list it; mouser_get_part and digikey_get_part return lifecycle (Mouser's is null where it states none). jlc_get_pinout(lcsc, footprint=true) gives the footprint's pads. has_easyeda_footprint=null means unknown, false means absent; MPN lookups return results and total. Non-exact replies add match (separators, packing, alias, alternative, lcsc or related), matched_mpn where applicable, and a note naming the part types for related full-text results (and parts another manufacturer numbered after the original). An LCSC code given as mpn finds that part (match=lcsc); BOM placeholders such as N/A or DNP find nothing. MPN lookups search the daily catalog snapshot (stock >= 10), most stock first. Rows carry data_source (kind/provider/observed_at); cached live observations retain their timestamp. MPN misses describe snapshot scope, availability outside it is unknown, and next_call offers an explicit jlc_stock_check with min_stock=0 without executing it.

Inputs: mpn, lcsc. Returns: object

jlc_get_pinoutGet Component PinoutA
Read-onlyIdempotent

Pin numbers and names from a part's EasyEDA symbol, exactly as EasyEDA has them (e.g., VCC, GND, PA0); with footprint=true also the EasyEDA footprint's pads. A pin's number is as the symbol shows it and matches the footprint pad ("1", "A2"); electrical (input, output, bidirectional, power) appears only where the symbol's creator set it, so its absence says nothing. unverified ("Symbol not verified by LCSC") appears when LCSC hasn't verified the symbol; note means every pin's name is its number, so the symbol doesn't say what the pins do, or that a polarized two-pin part's numbers may not match its datasheet's (connect it by pin name). footprint_error says why a requested footprint is missing.

Inputs: lcsc, uuid, footprint. Returns: object

jlc_search_helpSearch Help & BrowseA
Read-onlyIdempotent

List categories, a category's subcategories, or a subcategory's filterable attributes (with type and example values) for jlc_search spec_filters. No args lists all categories.

Inputs: category, subcategory. Returns: object

jlc_stock_checkStock Check (Live API)A
Read-onlyIdempotent

Live JLCPCB stock and price search. Use jlc_search first (faster, parametric filters); use this only to confirm stock before ordering, find parts with stock under 10 or out of stock, or page through large result sets. JLCPCB matches whole part numbers and their starts, not text inside them: when no result contains a part-number fragment ("2812"), hint names in-stock parts that do (WS2812B). Use jlc_get_part(lcsc=...) for full details.

Inputs: page, limit, query, package, +10 more. Returns: object

mouser_get_partMouser Part LookupA
Read-onlyIdempotent

Mouser price, stock and datasheet for specific parts. Use only when the user wants Mouser data; find parts with jlc_search first. Shared daily limit: batch up to 10 parts per call (one request). Don't retry a quota error. Reply: lifecycle is Mouser's status where it states one (Not Recommended for New Designs, End of Life, Obsolete, Discontinued), else null: Mouser states none for most parts, including some the maker marks NRND (AP2553W6-7). digikey_get_part's lifecycle is DigiKey's product status (it listed AP2553W6-7 as NRND); the maker's site decides. not_found lists the given numbers no result matches (Mouser skips them without saying). A number can match another maker's part (Mouser's SRV05-4 is onsemi's): check manufacturer.

Inputs: part_number (required). Returns: object

sensor_recommendSensor RecommendA
Read-onlyIdempotent

Recommend sensor ICs and modules for what you want to measure, with protocol and platform support. Filter choices come from the catalog; unknown values list valid choices. Accepts 1-wire/one-wire and heart rate/blood oxygen aliases. Not for buying parts: use jlc_search. Results are sorted by how many platforms have drivers for the sensor. CCS811 exposes estimated eco2 and VOC output; humidity/temperature are compensation inputs, with cited operating/stress voltage evidence. Generic MCU/platform IDs such as RP2040 are excluded.

Inputs: type, limit, query, measure, +2 more. Returns: object

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 14 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, and the descriptions actively disambiguate the tricky pairs: jlc_search vs jlc_stock_check (daily snapshot vs live), board_search vs board_get, and jlc_get_part vs jlc_find_alternatives. The main residual overlap is jlc_get_part vs jlc_get_pinout (pinout is arguably a detail of the part), but the cross-references make the boundary workable.

    Naming Consistency4/5

    Strong prefix conventions: jlc_* for JLCPCB operations, cse_* for ComponentSearchEngine, board_* for reference boards, and source_get_part for DigiKey/Mouser. Only get_design_rules and sensor_recommend deviate from a source-prefixed pattern, which is a minor inconsistency rather than a confusion.

    Tool Count5/5

    14 tools sit comfortably in the well-scoped 3-15 range, and each covers a distinct capability (search, detail, alternatives, stock, pinout, ECAD files, distributor pricing, board references, sensors, design rules). Nothing feels padded or missing at the count level.

    Completeness4/5

    The surface covers the full parts workflow: discovery, parametrics/help, detail, cross-distributor pricing, alternatives, ECAD models, pinout, and reference-design context. The only gap is BOM-level/batch operations (Mouser batches up to 10 but there is no dedicated multi-part BOM tool), which agents can work around with repeated calls.

    Maintenance

    ActivityActive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language search and exploration of KiCad component symbol libraries with fast full-text search across 20,000+ components including metadata like datasheets, footprints, and descriptions.
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Provides AI agents with instant, structured access to electronic component datasheets, pinouts, and electrical specifications without requiring PDF uploads. It enables seamless part searching, design validation, and side-by-side component comparisons across major hardware providers.
      14
      95 npm
      12
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to search JLCPCB's 450K+ electronic component catalog with real-time stock levels and pricing, supporting keyword search, filtering, and detailed component information.
      4
      44 PyPI
      9
      -
    • A
      license
      A
      quality
      C
      maintenance
      Enables AI assistants to search millions of electronic components and ICs, retrieve specifications, compare alternates, and submit turnkey BOM procurement requests.
      4
      MIT