--- name: electronics-sourcing description: "Guide for AI agents to source electronic components using parts-mcp — tool sequencing, decision patterns, and multi-step workflows" metadata: revision: 1 updated-on: "2026-03-15" source: maintainer tags: "electronics,sourcing,bom,components,pcb,manufacturing,workflow" --- # Electronics Sourcing Skill This skill teaches you how to source electronic components effectively using parts-mcp tools. It covers tool sequencing, decision patterns, and how to handle common scenarios. ## When to Use Which Search Tool **`search_parts`** — Use when you have a part number, description, or general keywords. This is your default starting point. ``` "Find me a 100nF capacitor" → search_parts(query="100nF capacitor") "Look up STM32F411" → search_parts(query="STM32F411") ``` **`search_by_parameters`** — Use when you need to match specific electrical parameters within a category. More precise than keyword search. ``` "I need a 50V 100nF X7R 0402 cap" → search_by_parameters( parameters={"capacitance": "100nF", "voltage": "50V", "dielectric": "X7R", "package": "0402"}, category="capacitor" ) ``` **Decision rule**: If the user gives you 3+ specific parameters, use `search_by_parameters`. For part numbers or general queries, use `search_parts`. ## The Search → Price → Availability → Alternative Pattern This is the core sourcing workflow. Follow this sequence: ``` 1. SEARCH → Find the part 2. DETAILS → Get full specifications (if needed for validation) 3. PRICE → Compare across suppliers 4. AVAILABILITY → Check stock levels 5. ALTERNATIVE → Find replacements (only if price is too high or stock is insufficient) ``` Do not skip steps 3 and 4. A part that exists in the database may be out of stock or prohibitively expensive. When the user asks to "source" or "find" a part, they expect pricing and availability — not just search results. Always follow through to at least step 4. ## BOM Processing Pattern BOM processing is asynchronous. Always follow this exact sequence: ``` 1. upload_bom(file_path=path) → Get job_id 2. check_bom_status(job_id=job_id) → Poll until status is "complete" 3. Review matched_parts and unknown_parts 4. For unmatched: search_parts() to resolve manually 5. calculate_bom_cost() with all resolved parts ``` **Polling**: Call `check_bom_status` and check the `status` field. If `"in_progress"`, wait and poll again. Do not assume instant completion. **Handling unmatched parts**: When `unknown_parts` is not empty, try `search_parts` with the `value` and `footprint` fields as the query. If still unmatched, report them to the user — do not silently skip them. ## Datasheet Reading Strategy Datasheets can be hundreds of pages. Always use this two-step approach: ``` 1. list_datasheet_sections(sku="PART-NUMBER") → See the table of contents → Identify which sections contain what you need 2. read_datasheet(sku="PART-NUMBER", query="relevant keywords") → Read only matching chunks → Saves significant context window ``` **Never** call `read_datasheet` without a `query` parameter unless the datasheet is short (< 20 pages). An unfiltered read of a 200-page datasheet will consume excessive context. **Keyword tips**: Use specific technical terms. "maximum input voltage absolute ratings" is better than "voltage". Multiple keywords narrow the results. ## Manufacturing Pipeline Manufacturing operations (DFM, fab quoting, assembly) are all asynchronous: ``` submit_dfm() → check_dfm_status() # DFM analysis quote_fabrication() → check_manufacturing_status() # Fab quote quote_assembly() → polls internally # Combined fab + assembly ``` **DFM first**: Always run DFM analysis before requesting a fabrication quote. DFM may reveal issues that affect manufacturability or cost. **Assembly quotes** combine fabrication and BOM costing in one call. Use `quote_assembly` when the user wants a complete per-unit cost including both PCB fabrication and component assembly. ## Handling Partial Failures Real-world sourcing often has partial results. Handle gracefully: **Some parts not found in BOM**: - Report the unmatched count clearly - Attempt `search_parts` for each unmatched part - If still unmatched, list them for the user with their reference designators and values - Calculate cost for matched parts, noting the incomplete total **Some parts unavailable**: - Report which parts are out of stock - Automatically call `find_alternatives` for each unavailable part - Present alternatives with their specifications and pricing - Let the user decide on substitutions **Price comparison with missing suppliers**: - Report how many suppliers were checked - Note if key suppliers (the user's preferred ones) returned no results - Present available pricing data without waiting for all suppliers ## KiCad Project Workflow When working with KiCad projects: ``` 1. find_kicad_projects() → Discover available projects 2. analyze_kicad_project(project_path=...) → Understand project structure 3. extract_bom_from_kicad(project_path=...) → Get component list 4. match_components_to_parts(components=...) → Match to real parts 5. Follow the BOM processing pattern above for unmatched components ``` **KiCad CLI requirement**: BOM extraction may invoke `kicad-cli` if no existing BOM file is found in the project. Ensure KiCad 8+ is installed. **Local mode only**: All KiCad tools require local mode (stdio transport). They are not available in hosted/HTTP mode. ## Cost Optimization Tips When helping users optimize costs: 1. **Check quantity breaks**: Call `compare_prices` with different quantities (1, 10, 100, 1000) to show price break curves 2. **Suggest alternatives**: If a part is expensive, call `find_alternatives` and compare pricing 3. **Preferred suppliers**: Use `preferred_suppliers` in `calculate_bom_cost` to bias toward the user's existing supplier relationships 4. **Consolidation**: When multiple parts come from the same supplier, note the potential for consolidated shipping ## Response Patterns **When a user asks to "source a part"**: → `search_parts` → `get_part_details` → `compare_prices` → `check_availability` Present: part details, best price, stock status, and any concerns. **When a user provides a BOM file**: → `upload_bom` → poll `check_bom_status` → report matched/unmatched → `calculate_bom_cost` Present: match rate, unmatched items, total cost, per-line breakdown. **When a user asks "is this in stock?"**: → `check_availability` with quantities Present: stock levels, number of suppliers with stock, whether quantity is meetable. **When a user asks about a datasheet**: → `list_datasheet_sections` → `read_datasheet` with targeted query Present: the specific information requested, citing page numbers. **When a user asks for a manufacturing quote**: → `submit_dfm` (if not already done) → `quote_fabrication` or `quote_assembly` Present: DFM issues (if any), estimated cost, lead time.