Source Parts
PYPI · PARTS-MCP · 2 COMPONENTS · SCANNED SEP 21
Electronic component sourcing, BOM management, and PCB design workflows.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security32
- Malware scan not yet available for this package.Unverified
- CVE check failed: a known advisory affects this package; its severity couldn't be graded. See how to fix → View diagnostics → Fail
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 8 of 64 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 35 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability83
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 16082 tokens (~122/item across 131 items; 127 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
- Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 98% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_doc_safelist" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 128 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the Source Parts MCP server?
Source Parts runs locally as a PyPI package, launched with uvx parts-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · parts-mcp
claude mcp add sourceparts-parts-mcp -- uvx parts-mcp
{
"mcpServers": {
"sourceparts-parts-mcp": {
"command": "uvx",
"args": [
"parts-mcp"
]
}
}
} {
"servers": {
"sourceparts-parts-mcp": {
"command": "uvx",
"args": [
"parts-mcp"
]
}
}
} codex mcp add sourceparts-parts-mcp -- uvx parts-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sourceparts-parts-mcp": {
"type": "local",
"command": [
"uvx",
"parts-mcp"
],
"enabled": true
}
}
} openclaw mcp add sourceparts-parts-mcp --command uvx --arg parts-mcp
mcp_servers:
sourceparts-parts-mcp:
command: "uvx"
args: ["parts-mcp"] {
"McpServers": {
"sourceparts-parts-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"parts-mcp"
]
}
}
} assistant mcp add sourceparts-parts-mcp -t stdio -c uvx -a parts-mcp
{
"mcpServers": {
"sourceparts-parts-mcp": {
"command": "uvx",
"args": [
"parts-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 16 Sept 26 +12
- Malware scan: unverified → pass ▲ security
- Stability: pass → 0.80 functional
- 14 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- Stability: 0.97 → pass security
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +13
- Malware scan: unverified → pass ▲ security
- Stability: pass → 0.90 functional
- 10 Sept 26 +1
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed pypi/parts-mcp@0.5.3
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Vulnerabilities 2 findings
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-w8v5-vhqr-4h9v | CVE-2025-69872 | medium | no | |
| PYSEC-2026-2447 | CVE-2025-69872 | none | no |
Background: What a vulnerability scan can and cannot prove →
Dependencies 64 packages
| Packages resolved | 64 |
|---|---|
| Stale | 7 |
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
sales_order_convert Sales Order Convert ~89
Station 3: Validate stock/lead times and convert quote to order. Checks inventory for all line items in the quote and flags any shortages or long lead times. If all clear, creates the order. IMPORTANT: Review items at risk before confirming the order.
| Name | Type | Req | Description |
|---|---|---|---|
| quote_id | string | yes | Quote identifier to convert (e.g. QUO-A1B2C3D4) |
Structured output declared, but exposes no named fields.
No examples provided.
sales_quote_build Sales Quote Build ~118
Station 1: Price a BOM and generate a quote breakdown. Uploads the BOM file to the API, which prices all components using the internal DB, adds fab + assembly + margin, and returns a full quote breakdown for operator review. IMPORTANT: Review the quote before sending to the customer or proceeding to negotiation.
| Name | Type | Req | Description |
|---|---|---|---|
| bom_path | string | yes | Path to BOM file (.csv or .json) |
| customer_name | string | yes | Customer name or identifier |
| quantity | integer | yes | Build quantity (number of units) |
Structured output declared, but exposes no named fields.
No examples provided.
sales_quote_negotiate Sales Quote Negotiate ~117
Station 2: Revise quantities or pricing on an existing quote. Recalculates the quote at new terms and shows the margin delta compared to the original quote. IMPORTANT: Review margin impact before accepting revised terms.
| Name | Type | Req | Description |
|---|---|---|---|
| quote_id | string | yes | Existing quote identifier (e.g. QUO-A1B2C3D4) |
| revised_margin_pct | – | – | New margin percentage as decimal (optional, e.g. 0.20 for 20%) |
| revised_quantity | – | – | New build quantity (optional) |
Structured output declared, but exposes no named fields.
No examples provided.
scan_doc Scan Doc ~84
Scan a local file with Magika to detect its true content type. Uses the Source Parts document scanning API (backed by Google Magika) to identify what a file actually is, regardless of its extension. Useful for checking whether a file would be accepted by the safelist before uploading it.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the local file to scan. |
Structured output declared, but exposes no named fields.
No examples provided.
sch_check_structure Sch Check Structure ~76
Validate structural integrity of a .kicad_sch file. Uploads to /v1/sch/check. Use this before and after edits to confirm the file is intact (paren balance, no premature close, no malformed placed-symbol blocks).
| Name | Type | Req | Description |
|---|---|---|---|
| schematic_path | string | yes | Path to .kicad_sch to validate |
Structured output declared, but exposes no named fields.
No examples provided.
sch_erc_categorize Sch Erc Categorize ~69
Parse a kicad-cli ERC JSON report, group violations by type. Pure-local (no API call). Entry point for an agent deciding what to fix and in what order.
| Name | Type | Req | Description |
|---|---|---|---|
| erc_report_path | string | yes | Path to the kicad-cli ERC JSON report |
Structured output declared, but exposes no named fields.
No examples provided.
sch_export_bom Sch Export Bom ~251
Extract the bill of materials from a KiCad schematic. Uploads to /v1/eda/sch/export/bom, which runs `kicad-cli sch export bom` server-side, and returns the components both parsed and raw. Prefer this over reading a .kicad_sch yourself — the file's lib_symbols block holds symbol definitions that are easily miscounted as placed parts. Supply exactly one of schematic_path or schematic_content.
| Name | Type | Req | Description |
|---|---|---|---|
| exclude_dnp | boolean | – | Drop components marked Do-Not-Populate |
| fields | – | – | Comma-separated fields to emit, e.g. "Reference,Value,Footprint" |
| format_preset | string | – | "CSV" or "TSV" |
| group_by | – | – | Comma-separated fields to group identical parts by, e.g. "Value" |
| output_path | – | – | Write the raw export here as well (local mode only) |
| schematic_content | – | – | Schematic file text, for hosted mode |
| schematic_path | – | – | Path to a .kicad_sch (local mode only) |
| sort_desc | boolean | – | Sort descending instead of ascending |
| sort_field | – | – | Field to sort on |
Structured output declared, but exposes no named fields.
No examples provided.
sch_export_graphic Sch Export Graphic ~272
Plot a KiCad schematic to PDF, DXF, HPGL or PostScript. Runs `kicad-cli sch export <format>` server-side. For a bill of materials use sch_export_bom instead — it returns parsed components rather than an opaque file. hpgl and ps are plotted one file per page, so those come back as a ZIP archive whatever output_path is named. is_archive says which you got. Supply exactly one of schematic_path or schematic_content. In hosted mode the file is returned base64 in content_base64, since there is no filesystem to write to.
| Name | Type | Req | Description |
|---|---|---|---|
| black_and_white | boolean | – | Monochrome output (pdf, dxf, ps) |
| format | string | yes | "pdf", "dxf", "hpgl" or "ps" |
| output_path | – | – | Where to write the result (local mode only). Defaults to the schematic's own directory when a path was given. |
| pages | – | – | Comma-separated page numbers; all pages when omitted |
| pen_size | – | – | Pen width in mm (hpgl only, server default 0.5) |
| schematic_content | – | – | Schematic file text, for hosted mode |
| schematic_path | – | – | Path to a .kicad_sch (local mode only) |
Structured output declared, but exposes no named fields.
No examples provided.
sch_libsync Sch Libsync ~125
Consolidate lib_symbols from sub-sheets into root .kicad_sch. Uploads root + sub-sheets to /v1/sch/libsync. Resolves the lib_symbol_issues class of ERC violations. On name collision, the root's version is kept and the conflict is reported.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | – | – | Output path (default: overwrite root_path) |
| root_path | string | yes | Path to root .kicad_sch |
| sub_sheet_paths | array | yes | List of sub-sheet .kicad_sch paths (≥1) |
Structured output declared, but exposes no named fields.
No examples provided.
sch_pin_position Sch Pin Position ~134
Compute the absolute schematic coordinate of a component pin. Pure math — no file I/O, no API call. Encodes the sym_pos + rotate_CW(angle, negate_Y(pin_lib_pos)) formula that's easy to get wrong by hand.
| Name | Type | Req | Description |
|---|---|---|---|
| pin_lib_x | number | yes | Pin X in library symbol definition (mm) |
| pin_lib_y | number | yes | Pin Y in library symbol definition (mm) |
| sym_angle | number | yes | Symbol rotation angle in degrees (CW) |
| sym_x | number | yes | Symbol placement X (mm) |
| sym_y | number | yes | Symbol placement Y (mm) |
Structured output declared, but exposes no named fields.
No examples provided.
sch_remove_wires Sch Remove Wires ~131
Remove (wire ...) blocks by UUID from a .kicad_sch. Uploads to /v1/sch/clean with an explicit UUID list. The server verifies paren balance after removal and refuses to return a broken file (returns HTTP 422 instead). On success, writes the modified file back to schematic_path (unless dry_run).
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | If true, don't write the modified file |
| schematic_path | string | yes | Path to .kicad_sch to modify |
| uuids | array | yes | List of wire UUIDs to remove |
Structured output declared, but exposes no named fields.
No examples provided.
search_by_marking Search By Marking ~231
Resolve an IC/SMD top-marking code to candidate parts. The code printed on a package (e.g. "F407VG" on an STM32, "UADD" on a SOT-23) goes in; ranked candidate parts come out. Markings are not unique across vendors, so treat the answer as candidates to confirm against package and pinout, not a definitive ID. Each candidate carries a "match" lane: catalog — a part whose stored marking equals the code identified — a prior identify.parts photo recognition that read this code (returns its mpn_candidates) mpn — a part whose MPN starts or ends with the code (many markings are MPN fragments; vendor-assigned codes will not hit this lane) Use search_parts for MPNs and keywords; use this when all you have is the code on the chip.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The marking as printed on the package |
| limit | integer | – | Maximum candidates per match lane (max 25) |
Structured output declared, but exposes no named fields.
No examples provided.
search_by_parameters Search By Parameters ~89
Search parts by specific parameters within a category. BOTH arguments are required — calling with only `parameters` fails with missing_argument: category.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | Part category (required — e.g. "resistor", "capacitor", "mosfet") |
| limit | integer | – | Maximum results |
| parameters | object | yes | Parametric search criteria as {name: value} |
Structured output declared, but exposes no named fields.
No examples provided.
search_parts Search Parts ~92
Search for electronic parts across suppliers.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | Optional category filter (e.g., "resistor", "capacitor") |
| filters | – | – | Optional parametric filters (e.g., {"resistance": "10k", "tolerance": "1%"}) |
| limit | integer | – | Maximum number of results to return |
| query | string | yes | Search query (part number, description, or keywords) |
Structured output declared, but exposes no named fields.
No examples provided.
set_preferences Set Preferences ~94
Set user preferences, optionally for a specific device. Merges the provided key-value pairs into existing preferences. To delete a key, set its value to null.
| Name | Type | Req | Description |
|---|---|---|---|
| device_id | – | – | Optional device identifier. If provided, preferences are stored as device-specific overrides. |
| preferences | object | yes | Key-value pairs to set. Keys use dot notation (e.g. "ecn.default_author", "fab.default_scale"). |
Structured output declared, but exposes no named fields.
No examples provided.
submit_dfm Submit Dfm ~85
Queue a DFM (Design for Manufacturability) analysis for a project.
| Name | Type | Req | Description |
|---|---|---|---|
| bom_id | – | – | Optional BOM ID to include in analysis |
| notes | – | – | Optional notes for the analysis |
| priority | string | – | Priority level ("low", "normal", "high") |
| project_id | string | yes | Project ID to analyze |
| revision | – | – | Optional revision identifier |
Structured output declared, but exposes no named fields.
No examples provided.
suggest_reroute Suggest Reroute ~129
Suggest routing paths for disconnected nets after rip-up. Runs an A* pathfinder on the server and returns suggested track segments as KiCad S-expressions for operator review.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to .kicad_pcb file |
| grid_step | number | – | Routing grid resolution in mm (default 0.25) |
| layer | string | – | Copper layer to route on (default "F.Cu") |
| nets | array | yes | List of net names to route |
| width | number | – | Track width in mm (default 0.25) |
Structured output declared, but exposes no named fields.
No examples provided.
supply_chain_avl_qualify Supply Chain Avl Qualify ~108
Station 2: Check components against AVL rules and score counterfeit risk. Uploads the BOM file to the API, which checks each component against the Approved Vendor List (AVL): authorized distributors, source control requirements (e.g. SI1304BDL), and counterfeit risk scoring based on component age, popularity, and price anomalies. IMPORTANT: Review flagged components before proceeding with procurement.
| Name | Type | Req | Description |
|---|---|---|---|
| bom_path | string | yes | Path to BOM file (.csv or .json) |
Structured output declared, but exposes no named fields.
No examples provided.
supply_chain_obsolescence_check Supply Chain Obsolescence Check ~96
Station 3: Check lifecycle status for each part and suggest alternatives. Uploads the BOM file to the API, which checks each component's lifecycle status (active, NRND, obsolete, EOL, unknown) and suggests drop-in alternatives for at-risk parts. IMPORTANT: Review at-risk components and alternatives before design freeze.
| Name | Type | Req | Description |
|---|---|---|---|
| bom_path | string | yes | Path to BOM file (.csv or .json) |
Structured output declared, but exposes no named fields.
No examples provided.
supply_chain_procurement_approve Supply Chain Procurement Approve ~135
Station 1: Group BOM by vendor, check MOQs, calculate price breaks, estimate lead times. Uploads the BOM file to the API, which groups components by vendor, validates minimum order quantities, applies price-break discounts, and estimates lead times for each purchase order. IMPORTANT: Review the purchase orders before placing with vendors.
| Name | Type | Req | Description |
|---|---|---|---|
| bom_path | string | yes | Path to BOM file (.csv or .json) |
| quantity | integer | yes | Build quantity (number of units) |
| target_date | string | yes | Target delivery date (ISO 8601, e.g. 2026-04-15) |
Structured output declared, but exposes no named fields.
No examples provided.
test_coverage_analysis Test Coverage Analysis ~106
Station 1: Analyze test point coverage and probe accessibility. Uploads test points CSV and PCB file. Server checks probe spacing (min 1.27mm), keep-out violations, and ICT fixture clearance. IMPORTANT: Review blocked points before committing to fixture design.
| Name | Type | Req | Description |
|---|---|---|---|
| pcb_path | string | yes | Path to .kicad_pcb file |
| test_points_path | string | yes | Path to test points CSV (columns: ref, net_name, x, y, side) |
Structured output declared, but exposes no named fields.
No examples provided.
test_provision_devices Test Provision Devices ~95
Station 2: Generate per-device provisioning packages. Creates unique keys, certificates, and serial numbers for each device. Returns provisioning packages for flashing during production test. IMPORTANT: Verify firmware URL and device list before provisioning.
| Name | Type | Req | Description |
|---|---|---|---|
| cert_template | string | – | Certificate template ("production" or "development") |
| device_ids | array | yes | List of device identifiers to provision |
| firmware_url | string | yes | URL to firmware binary |
Structured output declared, but exposes no named fields.
No examples provided.
test_reliability_predict Test Reliability Predict ~140
Station 3: Calculate MTBF using MIL-HDBK-217F simplified method. Uploads BOM file and calculates per-component failure rates, total MTBF, and identifies weakest components. IMPORTANT: Review weakest links and consider derating or alternatives.
| Name | Type | Req | Description |
|---|---|---|---|
| ambient_temp | number | – | Ambient operating temperature in Celsius (default 25) |
| bom_path | string | yes | Path to BOM file (.csv or .json) |
| duty_cycle | number | – | Operating duty cycle 0.0-1.0 (default 1.0) |
| environment | string | – | Operating environment (ground_benign, ground_fixed, airborne, etc.) |
Structured output declared, but exposes no named fields.
No examples provided.
trigger_part_render Trigger Part Render ~124
Queue a Blender render job for an electronic component. Every image is generated from parametric .blend templates — no supplier assets. Pass either sku or part_id. The system will match the part to the correct Blender template based on category, package, and MPN suffix.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | If false (default), skip if a render already exists |
| part_id | – | – | Internal part ID (required if no sku) |
| sku | – | – | Source Parts SKU (required if no part_id) |
| template_override | – | – | Force a specific .blend template file |
Structured output declared, but exposes no named fields.
No examples provided.
upload_bom Upload Bom ~88
Upload a BOM file for processing and part matching. Reads the file from the local filesystem, uploads it to the API for processing. Use check_bom_status with the returned job_id to track progress and see which parts are unknown. Supported formats: CSV, XLSX, XLS, JSON, XML.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the BOM file on the local filesystem |
Structured output declared, but exposes no named fields.
No examples provided.
upload_gerbers_for_quote Upload Gerbers For Quote ~175
Upload a gerber zip file to get a fabrication quote. Reads the gerber zip from disk and submits it for fabrication quotation. Use check_manufacturing_status with the returned job_id to track progress.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Solder mask color (green, red, blue, black, white, yellow) |
| file_path | string | yes | Path to the gerber zip file |
| layers | integer | – | Number of PCB layers (default 2) |
| priority | string | – | Priority level (low, normal, high) |
| quantity | integer | – | Number of boards (default 5) |
| surface_finish | string | – | Surface finish (HASL, ENIG, OSP, etc.) |
| thickness | number | – | Board thickness in mm (default 1.6) |
Structured output declared, but exposes no named fields.
No examples provided.
user_profile User Profile ~57
Get the current user's profile, role, and preferences. Returns the authenticated user's profile including their role level (public, admin, owner), global preferences, and per-device overrides. Returns: User profile with role, preferences, and device list
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
What is the Source Parts MCP server?
Source Parts is an MCP server listed in the public MCP registry as io.github.SourceParts/parts-mcp. Electronic component sourcing, BOM management, and PCB design workflows. This page covers its PyPI package (parts-mcp).
Is the Source Parts MCP server safe to use?
Source Parts scores 64 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Source Parts MCP server expose?
Source Parts exposes 127 tools: search_parts, search_by_parameters, search_by_marking, get_part_details, compare_prices, and 122 more. Their descriptions and schemas cost roughly 16,028 tokens of context every time the server is loaded.
Is the Source Parts MCP server still maintained?
Source Parts is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Source Parts MCP server under?
Source Parts declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.