# JLCPCB Integration Guide

> **Note:** This document provides usage examples and workflow guidance. For complete API reference and setup instructions, see [JLCPCB_INTEGRATION.md](JLCPCB_INTEGRATION.md).

The KiCAD MCP Server provides **three complementary approaches** for working with JLCPCB parts:

1. **JLCSearch Public API** - No authentication required, 2.5M+ parts with pricing (Recommended)
2. **Local Symbol Libraries** - Search JLCPCB libraries installed via KiCad PCM _(contributed by [@l3wi](https://github.com/l3wi) in [PR #25](https://github.com/mixelpixx/KiCAD-MCP-Server/pull/25))_
3. **Official JLCPCB API** - Requires enterprise account (Advanced)

All approaches can be used together to give you maximum flexibility.

## Credits

- **Local Symbol Library Search**: Implementation by [@l3wi](https://github.com/l3wi) - [PR #25](https://github.com/mixelpixx/KiCAD-MCP-Server/pull/25)
- **JLCPCB API Integration**: Built on top of the local library foundation

---

## Approach 1: JLCSearch Public API (Recommended)

### What It Does

- Access to 2.5M+ JLCPCB parts with pricing and stock data
- **No authentication required** - works immediately
- **No JLCPCB account needed**
- Real-time pricing with quantity breaks
- Basic vs Extended library type identification
- Local SQLite database for fast offline searching
- Note: Download takes 40-60 minutes due to API pagination (100 parts per request)

### Setup

No setup required! Just download the database:

```
download_jlcpcb_database({ force: false })
```

This downloads ~2.5M parts from JLCSearch API and creates a local SQLite database (`data/jlcpcb_parts.db`).

**Expected Output:**

```
Downloading JLCPCB parts database...
Downloaded 100 parts...
Downloaded 200 parts...
... (continues for 40-60 minutes)
Downloaded 2,500,000 parts...

Total parts: 2,500,000+
Database size: 3-5 GB (full catalog)
```

### Usage Examples

See "Approach 2" usage examples below - the API is the same.

---

## Approach 2: Local Symbol Libraries (Good for Offline Use)

### What It Does

- Searches symbol libraries you've installed via KiCad's Plugin and Content Manager (PCM)
- Works with community JLCPCB libraries like `JLCPCB-KiCad-Library`
- No API credentials needed
- Works offline
- Symbols already have LCSC IDs and footprints configured

### Setup

1. **Install JLCPCB Libraries via KiCad PCM:**
   - Open KiCad → Tools → Plugin and Content Manager
   - Search for "JLCPCB" or "JLC"
   - Install libraries like:
     - `JLCPCB-KiCad-Library` (community maintained)
     - `EDA_MCP` (contains common JLCPCB parts)
     - Any other JLCPCB-compatible libraries

2. **Verify Installation:**
   The libraries should appear in KiCad's symbol library table.

### Usage Examples

#### Search for Components

```
search_symbols({
  query: "ESP32",
  library: "JLCPCB"  // Filter to JLCPCB libraries only
})
```

Returns:

```
Found 12 symbols matching "ESP32":

PCM_JLCPCB-MCUs:ESP32-C3 | LCSC: C2934196 | ESP32-C3 RISC-V WiFi/BLE SoC
PCM_JLCPCB-MCUs:ESP32-S2 | LCSC: C701342 | ESP32-S2 WiFi SoC
...
```

#### Search by LCSC ID

```
search_symbols({
  query: "C2934196"  // Direct LCSC ID search
})
```

#### Get Symbol Details

```
get_symbol_info({
  symbol: "PCM_JLCPCB-MCUs:ESP32-C3"
})
```

Returns:

```
Symbol: PCM_JLCPCB-MCUs:ESP32-C3
Description: ESP32-C3 RISC-V WiFi/BLE SoC
LCSC: C2934196
Manufacturer: Espressif
MPN: ESP32-C3-WROOM-02
Footprint: Package_DFN_QFN:QFN-32-1EP_5x5mm_P0.5mm
Class: Extended
```

### Advantages

- ✅ No API credentials required
- ✅ Works offline after library installation
- ✅ Symbols pre-configured with correct footprints
- ✅ Community-maintained and curated
- ✅ Instant availability

### Limitations

- ❌ Only parts in installed libraries (typically 1k-10k parts)
- ❌ No real-time pricing or stock information
- ❌ Requires manual library updates via PCM

---

## Approach 3: Official JLCPCB API (Advanced - Enterprise Accounts Only)

### What It Does

- Downloads from the **official JLCPCB API** (requires enterprise account)
- Provides **real-time pricing and stock information**
- Automatic **Basic vs Extended** library type identification (Basic = free assembly)
- Smart suggestions for cheaper/in-stock alternatives
- Package-to-footprint mapping for KiCad

### Setup

#### 1. Get JLCPCB API Credentials

Visit [JLCPCB](https://jlcpcb.com/) and get your API credentials:

1. Log in to your JLCPCB account
2. Go to: **Account → API Management**
3. Click "Create API Key"
4. Save your `appKey` and `appSecret`

#### 2. Configure Environment Variables

Add to your shell profile (`~/.bashrc`, `~/.zshrc`, or `~/.profile`):

```bash
export JLCPCB_API_KEY="your_app_key_here"
export JLCPCB_API_SECRET="your_app_secret_here"
```

Or create a `.env` file in the project root:

```
JLCPCB_API_KEY=your_app_key_here
JLCPCB_API_SECRET=your_app_secret_here
```

#### 3. Download the Parts Database

**One-time setup** (takes 5-10 minutes):

```
download_jlcpcb_database({ force: false })
```

This downloads ~100k parts from JLCPCB and creates a local SQLite database (`data/jlcpcb_parts.db`).

**Output:**

```
✓ Successfully downloaded JLCPCB parts database

Total parts: 108,523
Basic parts: 2,856 (free assembly)
Extended parts: 105,667 ($3 setup fee each)
Database size: 42.3 MB
Database path: /home/user/KiCAD-MCP-Server/data/jlcpcb_parts.db
```

### Usage Examples

#### Search for Parts with Specifications

```
search_jlcpcb_parts({
  query: "10k resistor",
  package: "0603",
  library_type: "Basic"  // Only free-assembly parts
})
```

**Returns:**

```
Found 15 JLCPCB parts:

C25804: RC0603FR-0710KL - 10kΩ ±1% 0.1W [Basic] - $0.002/ea (15000 in stock)
C58972: 0603WAF1002T5E - 10kΩ ±1% 0.1W [Basic] - $0.001/ea (50000 in stock)
C25744: RC0603FR-0710KP - 10kΩ ±1% 0.1W [Basic] - $0.002/ea (12000 in stock)
...

💡 Basic parts have free assembly. Extended parts charge $3 setup fee per unique part.
```

#### Get Part Details with Pricing

```
get_jlcpcb_part({
  lcsc_number: "C58972"
})
```

**Returns:**

```
LCSC: C58972
MFR Part: 0603WAF1002T5E
Manufacturer: UNI-ROYAL
Category: Resistors / Chip Resistor - Surface Mount
Package: 0603
Description: 10kΩ ±1% 0.1W Thick Film Resistors
Library Type: Basic (Free assembly!)
Stock: 50000

Price Breaks:
  1+: $0.0010/ea
  10+: $0.0009/ea
  100+: $0.0008/ea
  1000+: $0.0007/ea

Suggested KiCAD Footprints:
  - Resistor_SMD:R_0603_1608Metric
  - Capacitor_SMD:C_0603_1608Metric
  - LED_SMD:LED_0603_1608Metric
```

#### Find Cheaper Alternatives

```
suggest_jlcpcb_alternatives({
  lcsc_number: "C25804",
  limit: 5
})
```

**Returns:**

```
Alternative parts for C25804:

1. C58972: 0603WAF1002T5E [Basic] - $0.001/ea (50% cheaper)
   10kΩ ±1% 0.1W Thick Film Resistors
   Stock: 50000

2. C22790: 0603WAF1002T - [Basic] - $0.0011/ea (45% cheaper)
   10kΩ ±1% 0.1W Thick Film Resistors
   Stock: 35000
...
```

#### Search by Category and Package

```
search_jlcpcb_parts({
  category: "Microcontrollers",
  package: "QFN-32",
  manufacturer: "STM",
  in_stock: true,
  limit: 10
})
```

#### Get Database Statistics

```
get_jlcpcb_database_stats({})
```

**Returns:**

```
JLCPCB Database Statistics:

Total parts: 108,523
Basic parts: 2,856 (free assembly)
Extended parts: 105,667 ($3 setup fee each)
In stock: 95,432
Database path: /home/user/KiCAD-MCP-Server/data/jlcpcb_parts.db
```

### Advantages

- ✅ Complete JLCPCB catalog (100k+ parts)
- ✅ Real-time pricing and stock data
- ✅ Automatic Basic/Extended identification
- ✅ Cost optimization suggestions
- ✅ Works offline after initial download
- ✅ Fast parametric search

### Limitations

- ❌ Requires API credentials
- ❌ Initial download takes 5-10 minutes
- ❌ Database needs periodic updates for latest parts
- ❌ Footprint mapping may need manual verification

---

## Best Practices: Using Both Approaches Together

### Workflow 1: Design with Known Components

**Use Local Libraries:**

```
1. search_symbols({ query: "STM32F103", library: "JLCPCB" })
2. Select component from installed library
3. Component already has correct symbol + footprint + LCSC ID
```

**Why:** Faster, symbols are pre-configured and tested.

### Workflow 2: Find Optimal Part for Cost

**Use JLCPCB API:**

```
1. search_jlcpcb_parts({
     query: "10k resistor",
     package: "0603",
     library_type: "Basic"
   })
2. Select cheapest Basic part
3. Use suggested footprint from API
```

**Why:** Ensures lowest cost and maximum stock availability.

### Workflow 3: Explore Unknown Parts

**Start with API, verify with Libraries:**

```
1. search_jlcpcb_parts({ query: "ESP32", limit: 20 })
2. Find interesting part (e.g., C2934196)
3. search_symbols({ query: "C2934196" })
4. If found in library → use library symbol
5. If not found → use API footprint suggestion
```

**Why:** Combines discovery power of API with quality of curated libraries.

---

## Cost Optimization Tips

### 1. Prefer Basic Parts

```
search_jlcpcb_parts({
  query: "resistor 10k",
  library_type: "Basic"  // Free assembly!
})
```

**Why:** Basic parts have **$0 assembly fee**. Extended parts charge **$3 per unique part**.

### 2. Use Alternatives Tool

```
suggest_jlcpcb_alternatives({ lcsc_number: "C12345" })
```

**Why:** Find cheaper, more available, or Basic alternatives automatically.

### 3. Check Stock Levels

Always filter `in_stock: true` to avoid ordering parts that are out of stock:

```
search_jlcpcb_parts({
  query: "capacitor",
  in_stock: true  // Only show available parts
})
```

### 4. Calculate BOM Cost

For each part in your design:

1. Use `get_jlcpcb_part()` to get price breaks
2. Sum up total cost based on order quantity
3. Check library_type count (each unique Extended part = $3 fee)

---

## Updating the Database

The JLCPCB parts database should be updated periodically to get latest parts and pricing.

### Manual Update

```
download_jlcpcb_database({ force: true })
```

This re-downloads the entire catalog and replaces the existing database.

### Automatic Updates (Future)

Future versions will support incremental updates that only fetch new/changed parts.

---

## Troubleshooting

### "JLCPCB API credentials not configured"

**Solution:** Set environment variables:

```bash
export JLCPCB_API_KEY="your_key"
export JLCPCB_API_SECRET="your_secret"
```

### "Database not found or empty"

**Solution:** Run:

```
download_jlcpcb_database({ force: false })
```

### "No symbols found" (Local Libraries)

**Solution:**

1. Install JLCPCB libraries via KiCad PCM
2. Verify library is enabled in KiCad symbol library table
3. Restart KiCad MCP server

### "Authentication failed"

**Solution:**

1. Verify your API credentials are correct
2. Check JLCPCB account has API access enabled
3. Try regenerating API key/secret in JLCPCB dashboard

---

## API vs Libraries: Quick Reference

| Feature               | Local Libraries    | JLCPCB API                 |
| --------------------- | ------------------ | -------------------------- |
| **Parts Count**       | 1k-10k (installed) | 100k+ (complete catalog)   |
| **Setup**             | Install via PCM    | API credentials + download |
| **Offline Use**       | ✅ Yes             | ✅ Yes (after download)    |
| **Pricing**           | ❌ No              | ✅ Real-time               |
| **Stock Info**        | ❌ No              | ✅ Real-time               |
| **Footprints**        | ✅ Pre-configured  | ⚠️ Auto-suggested          |
| **Updates**           | Manual via PCM     | Re-download database       |
| **Speed**             | ⚡ Instant         | ⚡ Fast (local DB)         |
| **Cost Optimization** | ❌ Manual          | ✅ Automatic               |

---

## Example Workflows

### Complete Design Flow

```
# 1. Find main MCU from local library (curated)
search_symbols({ query: "ESP32", library: "JLCPCB" })
→ Use: PCM_JLCPCB-MCUs:ESP32-C3

# 2. Find passives optimized for cost (API)
search_jlcpcb_parts({
  query: "capacitor 10uF",
  package: "0805",
  library_type: "Basic"
})
→ Use: C15850 ($0.004, Basic, 80k stock)

# 3. Verify connector in library
search_symbols({ query: "USB-C" })
→ Use library symbol if available

# 4. Export BOM with LCSC numbers
# All components now have LCSC IDs for JLCPCB assembly!
```

---

## Resources

- [JLCPCB API Documentation](https://jlcpcb.com/help/article/JLCPCB-API)
- [JLCPCB Parts Library](https://jlcpcb.com/parts)
- [KiCad Plugin and Content Manager](https://www.kicad.org/help/pcm/)
- [JLCPCB-KiCad-Library (GitHub)](https://github.com/pejot/JLC2KiCad_lib)

---

## Summary

**Use Local Libraries when:**

- Starting a new design with common components
- You want pre-configured, tested symbols
- Working offline
- Components are in installed libraries

**Use JLCPCB API when:**

- Optimizing cost (find cheapest Basic parts)
- Checking real-time stock availability
- Exploring parts outside installed libraries
- Need complete catalog access

**Best approach:** Use both! Start with local libraries for known components, then use API for cost optimization and finding alternatives.
