From kicad-happy
Searches Newark, Farnell, and element14 for electronic components by MPN or distributor part number, checks pricing/stock, downloads datasheets, syncs for KiCad projects or batch MPN lists.
npx claudepluginhub aklofas/kicad-happy --plugin kicad-happyThis skill uses the workspace's default tool permissions.
| Skill | Purpose |
Searches DigiKey API for electronic components by keyword or MPN, checks pricing/stock, downloads/analyzes datasheets, syncs local directories from KiCad schematics or batch MPN lists for prototyping.
Searches registries and web for electronic components and reusable subcircuits to add to Zener PCB projects. Use during board, module, or subsystem design with pcb search and pcb new component.
Searches indexed embedded systems documentation for registers, memory maps, and peripheral details using search_docs tool.
Share bugs, ideas, or general feedback.
| Skill | Purpose |
|---|---|
kicad | Schematic analysis — extracts MPNs for part lookup |
bom | BOM management — orchestrates sourcing across distributors |
spice | Uses element14 parametric data for behavioral SPICE models |
One API covers three regional storefronts — same catalog, same datasheets, only pricing/stock vary by region:
| Storefront | Region | Store ID |
|---|---|---|
| Newark | North America | www.newark.com |
| Farnell | UK / Europe | uk.farnell.com |
| element14 | Asia-Pacific | au.element14.com |
For BOM management and export workflows, see bom.
responseGroup=medium includes datasheets[].urlELEMENT14_API_KEY before running the scripts:
export ELEMENT14_API_KEY=your_api_key_here
If credentials are stored in a central secrets file (e.g., ~/.config/secrets.env), load them first:
export $(grep -v '^#' ~/.config/secrets.env | grep -v '^$' | xargs)
Base URL: https://api.element14.com/catalog/products
All requests use GET with query parameters. Authentication is via callInfo.apiKey.
The term parameter supports three search types:
| Mode | Format | Example |
|---|---|---|
| Keyword | any:<keywords> | term=any:100nF 0402 X7R |
| MPN | manuPartNum:<mpn> | term=manuPartNum:GRM155R71C104KA88D |
| Distributor PN | id:<sku> | term=id:94AK6874 |
GET https://api.element14.com/catalog/products
?term=manuPartNum:GRM155R71C104KA88D
&storeInfo.id=www.newark.com
&resultsSettings.offset=0
&resultsSettings.numberOfResults=10
&resultsSettings.responseGroup=medium
&callInfo.responseDataFormat=JSON
&callInfo.apiKey=YOUR_KEY
| Group | Fields |
|---|---|
small | SKU, displayName, brandName, MPN, attributes |
medium | + datasheets[], prices[], stock |
large | + images, related products, country of origin |
prices | Tiered pricing only |
inventory | Stock levels by warehouse/region |
With responseGroup=medium, the response looks like:
{
"manufacturerPartNumberSearchReturn": {
"numberOfResults": 5,
"products": [
{
"sku": "94AK6874",
"displayName": "Murata GRM155R71C104KA88D",
"translatedManufacturerPartNumber": "GRM155R71C104KA88D",
"brandName": "Murata Electronics",
"datasheets": [
{
"type": "TechnicalDataSheet",
"description": "Datasheet",
"url": "https://www.farnell.com/datasheets/74273.pdf"
}
],
"prices": [
{
"from": 1,
"to": 9,
"cost": 0.156
}
],
"stock": {
"level": 45000,
"leastLeadTime": 0,
"status": 4,
"statusMessage": "In Stock"
},
"attributes": [
{"attributeLabel": "Capacitance", "attributeUnit": "", "attributeValue": "100nF"},
{"attributeLabel": "Voltage Rating", "attributeUnit": "V", "attributeValue": "16"}
],
"rohsStatusCode": "YES"
}
]
}
}
Key fields:
sku — Newark/Farnell/element14 part numbertranslatedManufacturerPartNumber — MPNbrandName — manufacturerdatasheets[].url — direct PDF URL (farnell.com CDN, no bot protection)datasheets[].type — usually TechnicalDataSheetprices[] — tiered pricing with from, to, coststock.level — quantity in stockstock.statusMessage — human-readable availabilityattributes[] — parametric specs (label, unit, value)rohsStatusCode — RoHS compliance (YES/NO)Common store IDs for the storeInfo.id parameter:
| Store ID | Region |
|---|---|
www.newark.com | US (default) |
uk.farnell.com | UK |
www.farnell.com | EU |
au.element14.com | Australia |
sg.element14.com | Singapore |
in.element14.com | India |
No documented rate limits beyond the courtesy usage allowance. Be respectful — use 0.5s delays between calls.
Add to query parameters:
resultsSettings.refinements.filter=rohsCompliant — RoHS parts onlyresultsSettings.refinements.filter=inStock — in-stock onlyresultsSettings.offset — starting index (0-based)resultsSettings.numberOfResults — max 50 per pageelement14's farnell.com CDN serves datasheet PDFs directly — no bot protection, no special headers needed. Datasheet URLs come from the API response (datasheets[].url).
Use sync_datasheets_element14.py to maintain a datasheets/ directory alongside a KiCad project. Same workflow and manifest.json format as the DigiKey, Mouser, and LCSC skills.
# Sync datasheets for a KiCad project
python3 <skill-path>/scripts/sync_datasheets_element14.py <file.kicad_sch>
# Preview what would be downloaded
python3 <skill-path>/scripts/sync_datasheets_element14.py <file.kicad_sch> --dry-run
# Retry previously failed downloads
python3 <skill-path>/scripts/sync_datasheets_element14.py <file.kicad_sch> --force
# Use a specific store (default: www.newark.com)
python3 <skill-path>/scripts/sync_datasheets_element14.py <file.kicad_sch> --store uk.farnell.com
# Custom output directory
python3 <skill-path>/scripts/sync_datasheets_element14.py <file.kicad_sch> -o ./my-datasheets
# Parallel downloads (3 workers)
python3 <skill-path>/scripts/sync_datasheets_element14.py <file.kicad_sch> --parallel 3
# Batch mode — sync from a plain MPN list (no KiCad project required)
python3 <skill-path>/scripts/sync_datasheets_element14.py --mpn-list mpns.txt --output ./datasheets
MPN-list batch mode (KH-312) — when you have a list of MPNs but no
KiCad project to point at. One MPN per line; blank lines and #
comments (full-line and inline) are skipped; generic values are filtered
via is_real_mpn() and de-duplicated. Output defaults to ./datasheets/
in the current working directory when --output is omitted. Note:
ELEMENT14_API_KEY is still required even in dry-run mode; see the
v1.4 follow-up in the issue tracker if dry-run credential-independence
matters for your workflow.
The script:
manuPartNum:) for exact match — falls back to keyword searchmanifest.json manifest — same format as DigiKey/Mouser/LCSC skills--delay)Use fetch_datasheet_element14.py for one-off downloads.
# Search by MPN
python3 <skill-path>/scripts/fetch_datasheet_element14.py --search "GRM155R71C104KA88D" -o datasheet.pdf
# Search by Newark/Farnell part number
python3 <skill-path>/scripts/fetch_datasheet_element14.py --search "94AK6874" -o datasheet.pdf
# Direct URL download
python3 <skill-path>/scripts/fetch_datasheet_element14.py "https://www.farnell.com/datasheets/74273.pdf" -o datasheet.pdf
# JSON output
python3 <skill-path>/scripts/fetch_datasheet_element14.py --search "GRM155R71C104KA88D" --json
The script:
requests → urllib → playwright fallback chainpip install requests (recommended; urllib fallback works fine for element14)pip install playwright && playwright install chromium (optional; rarely needed)If the API is unavailable, search by fetching product pages directly:
https://www.newark.com/search?st=<query>
https://uk.farnell.com/search?st=<query>
responseGroup=medium — includes datasheets and pricing without the overhead of largemanuPartNum: prefix for exact MPN matches; any: for keyword searchtranslatedManufacturerPartNumber (MPN) across DigiKey/Mouser/LCSC