Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Source Parts

PYPI · PARTS-MCP · 2 COMPONENTS · SCANNED SEP 21

Electronic component sourcing, BOM management, and PCB design workflows.

−1 this week 64 Trust /100
Trust breakdown (7 categories)

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
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
Install

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

# add to Claude Code
claude mcp add sourceparts-parts-mcp -- uvx parts-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "sourceparts-parts-mcp": {
      "command": "uvx",
      "args": [
        "parts-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "sourceparts-parts-mcp": {
      "command": "uvx",
      "args": [
        "parts-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add sourceparts-parts-mcp -- uvx parts-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sourceparts-parts-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "parts-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add sourceparts-parts-mcp --command uvx --arg parts-mcp
# ~/.hermes/config.yaml
mcp_servers:
  sourceparts-parts-mcp:
    command: "uvx"
    args: ["parts-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "sourceparts-parts-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "parts-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add sourceparts-parts-mcp -t stdio -c uvx -a parts-mcp
// mcp.json
{
  "mcpServers": {
    "sourceparts-parts-mcp": {
      "command": "uvx",
      "args": [
        "parts-mcp"
      ]
    }
  }
}
Changelog

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
Diagnostics

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 →

MCP tools · 127 exposed · ~16,028 tokens

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 →

Tool Tokens
add_doc_safelist ~112

Add a MIME type to the document upload safelist. Once added, files whose Magika-detected type matches this MIME type will be accepted for upload. Requires admin role.

NameTypeReqDescription
descriptionOptional human-readable note about this entry.
labelstringyesMagika content label, e.g. "pdf". Run `parts doc scan` against a sample file to find the correct label.
mime_typestringyesMIME type to allow, e.g. "application/pdf".

Structured output declared, but exposes no named fields.

No examples provided.

admin_list_users ~31

List all users. Owner-only.

NameTypeReqDescription
roleOptional filter by role (public, admin, owner)

Structured output declared, but exposes no named fields.

No examples provided.

admin_set_user_role ~53

Set a user's role level. Owner-only.

NameTypeReqDescription
rolestringyesNew role: public, admin, or owner
user_idstringyesTarget user's Auth0 sub or Source Parts user ID

Structured output declared, but exposes no named fields.

No examples provided.

analyze_kicad_project ~40

Analyze a KiCad project to extract detailed information.

NameTypeReqDescription
project_pathstringyesPath to KiCad project file (.kicad_pro)

Structured output declared, but exposes no named fields.

No examples provided.

assembly_aoi_inspect ~81

Station 4: Automated optical inspection. Uploads board photos and optional golden reference image. Server compares placement quality and flags defects. IMPORTANT: Review the defect report and manually verify flagged items.

NameTypeReqDescription
board_photosarrayyesList of paths to board photos (JPEG/PNG)
reference_imageOptional path to golden reference image

Structured output declared, but exposes no named fields.

No examples provided.

assembly_feeder_setup ~104

Station 2: Generate optimal feeder slot assignment. Uploads BOM and position CSV. Server groups components and assigns feeder slots to minimize changeover time. IMPORTANT: Review the feeder map before loading the machine.

NameTypeReqDescription
bom_pathstringyesPath to BOM CSV file
machinestringMachine type (e.g. "neoden", "juki", "yamaha")
position_pathstringyesPath to position/placement CSV file

Structured output declared, but exposes no named fields.

No examples provided.

assembly_functional_test ~101

Station 5: Validate functional test results against pass/fail criteria. Uploads test results CSV and criteria JSON. Server validates each unit against specs and calculates yield. IMPORTANT: Review yield and outliers before lot disposition.

NameTypeReqDescription
criteriaPass/fail criteria dict, e.g. {"Vout": {"min": 3.2, "max": 3.4}}
results_pathstringyesPath to test results CSV file

Structured output declared, but exposes no named fields.

No examples provided.

assembly_readiness_check ~104

Station 1: Pre-assembly readiness checklist. Uploads BOM, gerber ZIP, and position CSV to the API. Server checks: all parts parseable? stencil layer present? positions match BOM? IMPORTANT: Review the checklist before proceeding to feeder setup.

NameTypeReqDescription
bom_pathstringyesPath to BOM CSV file
gerber_pathstringyesPath to gerber ZIP file
position_pathstringyesPath to position/placement CSV file

Structured output declared, but exposes no named fields.

No examples provided.

assembly_reflow_profile ~83

Station 3: Analyze BOM thermal specs and recommend reflow profile. Uploads BOM CSV. Server analyzes MSL levels, peak reflow temps, and soak times across all components. IMPORTANT: Review thermal constraints and MSL warnings before reflowing.

NameTypeReqDescription
bom_pathstringyesPath to BOM CSV file (with optional MSL, Peak_Temp columns)

Structured output declared, but exposes no named fields.

No examples provided.

cad_convert_step ~104

Convert a CAD file between formats (STEP ↔ STL / OBJ / glTF / AMF / DXF). Hits POST /v1/cad/step/convert. Result written to a local temp file.

NameTypeReqDescription
file_pathstringyesLocal path to .step/.stp/.brep/.stl file (<=100 MB).
target_formatstringyesOne of step | stl | obj | amf | dxf | gltf.

Structured output declared, but exposes no named fields.

No examples provided.

cad_inspect_step ~80

Inspect a STEP / BREP / STL file and return its geometry summary. Hits POST /v1/cad/step/inspect (synchronous, sub-second for typical product files).

NameTypeReqDescription
file_pathstringyesLocal path to a .step / .stp / .brep / .stl file (<=100 MB).

Structured output declared, but exposes no named fields.

No examples provided.

cad_modify_step ~729

Apply a chain of parametric operations to a STEP/BREP file. Hits POST /v1/cad/step/pipeline. The result is written to a local temp file and the path is returned — chain calls by passing the previous output_path back in. Operation schemas. These are exact, and not guessable — translate takes "offset" not "vector", chamfer takes "length" not "distance", and rotate takes an axis as two points rather than a direction vector. The API rejects an op with a missing or misspelled field. {"kind": "translate", "offset": [x, y, z]} {"kind": "rotate", "axis_start": [x,y,z], "axis_end": [x,y,z], "angle_deg": 90} {"kind": "drill", "radius": R, "depth": D, "at": [x, y, z]} {"kind": "boss", "outer_radius": R, "height": H, "at": [x, y, z], "inner_radius": r} # inner_radius optional {"kind": "fillet", "radius": R} # all edges {"kind": "chamfer", "length": L} # all edges {"kind": "cut", "shape": <primitive>} {"kind": "union", "shape": <primitive>} {"kind": "intersect", "shape": <primitive>} {"kind": "mirror_y", "plane_y": Y} {"kind": "linear_pattern", "feature": <primitive>, "direction": [x,y,z], "spacing": S, "count": N} <primitive> is cylinder, box or sphere, each taking an optional "at": {"primitive": "cylinder", "radius": R, "height": H, "at": [x,y,z]} Ops apply in order, each to the result of the previous one. Coordinates are in the file's own frame — check it with cad_inspect_step first, since an op placed outside the solid succeeds and changes nothing. Example — drill four corner holes: cad_modify_step( file_path="/tmp/plate.step", operations=[ {"kind": "drill", "radius": 1.35, "depth": 10, "at": [57.59, 43.90, 0]}, {"kind": "drill", "radius": 1.35, "depth": 10, "at": [124.59, 43.90, 0]}, {"kind": "drill", "radius": 1.35, "depth": 10, "at": [57.59, 140.90, 0]}, {"kind": "drill", "radius": 1.35, "depth": 10,…

NameTypeReqDescription
file_pathstringyesLocal path to the input file (<=100 MB).
operationsarrayyesNon-empty list of operation dicts (each with a "kind" field plus op-specific params). Max 256 ops per call.
output_formatstringOne of step | stl | obj | amf | dxf | gltf. Defaults to "step".

Structured output declared, but exposes no named fields.

No examples provided.

calculate_bom_cost ~54

Calculate total cost for a bill of materials.

NameTypeReqDescription
bomarrayyesList of parts with quantities
preferred_suppliersOptional supplier preferences
quantityintegerNumber of boards/assemblies

Structured output declared, but exposes no named fields.

No examples provided.

check_availability ~38

Check availability for multiple parts.

NameTypeReqDescription
part_numbersarrayyesList of part numbers
quantitiesOptional quantities needed for each part

Structured output declared, but exposes no named fields.

No examples provided.

check_bom_status ~131

Check BOM processing status and report unknown/unmatched parts. When processing is complete, automatically fetches the full BOM and separates parts into matched and unmatched lists. Unknown parts are highlighted so you can see which components need attention. Note: the upload_bom tool that produces these job IDs needs filesystem access and is only registered in local mode. In hosted mode submit the BOM to POST /v1/bom directly to obtain a job_id.

NameTypeReqDescription
job_idstringyesJob ID returned from upload_bom (local mode) or POST /v1/bom

Structured output declared, but exposes no named fields.

No examples provided.

check_dfm_status ~35

Check the status of a DFM analysis job.

NameTypeReqDescription
job_idstringyesJob ID returned from submit_dfm

Structured output declared, but exposes no named fields.

No examples provided.

check_identification_status ~49

Check the status of a PCB/component identification job.

NameTypeReqDescription
job_idstringyesJob ID returned from identify_pcb (which accepts a file_path locally or image_base64 when hosted)

Structured output declared, but exposes no named fields.

No examples provided.

check_manufacturing_status ~44

Check the status of any manufacturing job (fab, DFM, AOI, QC).

NameTypeReqDescription
job_idstringyesJob ID returned from a manufacturing submission

Structured output declared, but exposes no named fields.

No examples provided.

check_render_status ~53

Check the status of a Blender render job. Returns the CDN URL when the render is complete, or the error message if it failed.

NameTypeReqDescription
job_idstringyesThe render job UUID from trigger_part_render

Structured output declared, but exposes no named fields.

No examples provided.

compare_prices ~186

Get Source Parts catalog pricing for a part at a quantity. Single-source: prices come from the Source Parts catalog only. Per-supplier comparison (DigiKey, Mouser, …) is NOT supported — a `suppliers` list is acknowledged with a warning, never silently honored. `best_price` is therefore the catalog price at the best applicable quantity break, not a cross-supplier minimum. Refuses to price fuzzy matches: if the catalog's closest hit is not an exact (normalized) match for `part_number`, the response is success=False naming the closest candidate instead of pricing a different part.

NameTypeReqDescription
part_numberstringyesExact part number (MPN) or Source Parts SKU
quantityintegerQuantity needed
suppliersNot supported — present for compatibility; a warning is returned when passed

Structured output declared, but exposes no named fields.

No examples provided.

convert_allegro ~180

Convert a Cadence Allegro PCB board file to KiCad format. Imports a Cadence Allegro .brd binary file (versions 16-23) and converts it to a KiCad .kicad_pcb file. Uses KiCad 10's built-in Allegro importer — no Cadence software required. Board files only. Schematics are not supported. The .brd extension is also used by Eagle; KiCad auto-detects the format via magic bytes. Output is a ZIP archive containing the .kicad_pcb file and any extracted footprint libraries.

NameTypeReqDescription
file_pathstringyesPath to Allegro .brd file or zip archive
output_pathWhere to save the output ZIP (default: <stem>_kicad.zip next to input)

Structured output declared, but exposes no named fields.

No examples provided.

convert_geda ~109

Convert a gEDA PCB board file to KiCad format. Imports a gEDA .pcb board file using KiCad's pcbnew bindings. Board files only — schematic import is not available programmatically. Output is a ZIP archive containing the .kicad_pcb file.

NameTypeReqDescription
file_pathstringyesPath to gEDA .pcb file or zip archive
output_pathWhere to save the output ZIP (default: <stem>_kicad.zip next to input)

Structured output declared, but exposes no named fields.

No examples provided.

convert_kicad_version ~179

Convert a KiCad file to an older version. Downconverts .kicad_pcb, .kicad_sch, or project ZIP archives from KiCad 10 to version 7, 8, or 9 for fab shop compatibility. Rounded rectangles (gr_roundrect / fp_roundrect) introduced in KiCad 10 are converted to right-angle rectangles. Hatched copper fills are removed. The file version header is updated to match the target version.

NameTypeReqDescription
file_pathstringyesPath to .kicad_pcb, .kicad_sch, or .zip project archive
output_pathWhere to save the result (default: same dir, _v<N> suffix)
target_versionstringyesTarget version: "7", "8", or "9"

Structured output declared, but exposes no named fields.

No examples provided.

convert_pads ~111

Convert a PADS ASCII layout file to KiCad format. Imports a PADS ASCII .asc layout file using kicad-cli pcb import --format pads. Board files only — schematics are not supported. Output is a ZIP archive containing the .kicad_pcb file.

NameTypeReqDescription
file_pathstringyesPath to PADS .asc file or zip archive
output_pathWhere to save the output ZIP (default: <stem>_kicad.zip next to input)

Structured output declared, but exposes no named fields.

No examples provided.

convert_protel ~189

Convert a Protel99SE project file to KiCad format. Converts Protel99SE schematic and PCB files to KiCad 7 format. Accepts individual files (.sch, .pcb, .lib) or a zip archive containing multiple Protel files. The output ZIP includes the converted KiCad files and a conversion_report.txt describing any warnings or unsupported features (e.g. ASCII schematic format, unsupported .pcblib files). .ddb archives require mdbtools on the server. If mdbtools is not installed, the API returns a 503 error rather than silently producing no output.

NameTypeReqDescription
file_pathstringyesPath to Protel .sch, .pcb, .lib, .ddb, or .zip file
output_pathWhere to save the output ZIP (default: <stem>_kicad.zip next to input)

Structured output declared, but exposes no named fields.

No examples provided.

design_impedance_calculate ~123

Calculate controlled impedance for a PCB trace. Computes characteristic impedance using standard formulas for microstrip, stripline, or differential pair configurations.

NameTypeReqDescription
copper_weight_oznumberCopper weight in oz (default 1.0)
stackupobjectyesDict with dielectric_height_mm and dielectric_constant (Er)
trace_spacingnumberTrace spacing in mm (required for differential)
trace_typestringType: microstrip, stripline, or differential
trace_widthnumberyesTrace width in mm

Structured output declared, but exposes no named fields.

No examples provided.

design_schematic_review ~100

Review a KiCad schematic for common design issues. Uploads a .kicad_sch file and checks for: unconnected pins, missing decoupling capacitors (ICs without bypass caps within proximity), power domain analysis (voltage rails, current budget), and net naming conventions. IMPORTANT: Review all findings before proceeding with layout.

NameTypeReqDescription
project_pathstringyesPath to the .kicad_sch schematic file

Structured output declared, but exposes no named fields.

No examples provided.

design_thermal_analysis ~96

Estimate thermal dissipation from BOM and identify hot spots. Uploads a BOM file and estimates power dissipation per IC from typical values, identifies components exceeding thermal limits, and recommends thermal vias or heatsinking. IMPORTANT: Review thermal risks and recommendations before layout.

NameTypeReqDescription
ambient_temp_cnumberAmbient temperature in Celsius (default 25)
bom_pathstringyesPath to BOM file (.csv or .json)

Structured output declared, but exposes no named fields.

No examples provided.

dfm_add_findings ~180

Add review findings to a DFM request (admin-only). Each finding should include category, severity, description, recommendation, and affected_area. The API validates all fields and stores them in the dfm_review_findings table. IMPORTANT: Review all findings before generating the customer report.

NameTypeReqDescription
findingsarrayyesList of finding dicts, each with: - category: e.g. design_issue, manufacturability, material - severity: info, low, medium, high, or critical - description: What the issue is - recommendation: How to…
request_idstringyesDFM review request ID (e.g. DFM-A1B2C3D4)

Structured output declared, but exposes no named fields.

No examples provided.

dfm_check_status ~69

Check the current status of a DFM review request. Polls the API for the latest status, progress percentage, findings count, and estimated completion date.

NameTypeReqDescription
request_idstringyesDFM review request ID (e.g. DFM-A1B2C3D4)

Structured output declared, but exposes no named fields.

No examples provided.

dfm_deliver_report ~108

Re-send or deliver the DFM report to a specific email (admin-only). Sends the previously generated PDF report to the specified email, or re-sends to the original customer if no email override is given.

NameTypeReqDescription
emailstringOptional override recipient email address
messagestringOptional custom note to include in the email
request_idstringyesDFM review request ID (e.g. DFM-A1B2C3D4)

Structured output declared, but exposes no named fields.

No examples provided.

dfm_estimate ~114

Analyze design file complexity and get DFM review pricing. Uploads a design file (Gerber ZIP, .kicad_pcb, or CAD file) to the Source Parts API, which analyzes layer count, component density, HDI features, and blind/buried vias to produce a complexity score and pricing estimate.

NameTypeReqDescription
design_pathstringyesPath to design file (Gerber .zip or .kicad_pcb)
tierstringOptional tier selection (basic or comprehensive)

Structured output declared, but exposes no named fields.

No examples provided.

dfm_generate_report ~88

Generate a PDF report and email it to the customer (admin-only). Triggers the existing PDF generation service, uploads the report to storage, and sends it via Resend to the customer on file. IMPORTANT: Ensure all findings have been added before generating.

NameTypeReqDescription
request_idstringyesDFM review request ID (e.g. DFM-A1B2C3D4)

Structured output declared, but exposes no named fields.

No examples provided.

dfm_submit ~135

Submit a DFM review request with design files and customer info. Uploads the design file, creates a review request in the database, and triggers a Stripe payment intent. Returns a payment URL if payment is required.

NameTypeReqDescription
customer_emailstringyesCustomer's email address
customer_namestringyesCustomer's full name
design_pathstringyesPath to design file (Gerber .zip or .kicad_pcb)
notesstringOptional notes or requirements
promo_codestringOptional promotional code
tierstringyesReview tier (basic or comprehensive)

Structured output declared, but exposes no named fields.

No examples provided.

doc_wip_history ~84

Show past WiP report deliveries for a project or client. Exactly one of project or client must be provided.

NameTypeReqDescription
api_keyOptional Bearer token for the landing-page API
clientFilter by client email or name
limitintegerMax rows (default 50, max 200)
projectFilter by project name

Structured output declared, but exposes no named fields.

No examples provided.

doc_wip_new ~105

Scaffold a new WiP engineering report from the standard template. Writes a markdown file at out_path (or Reports/<slug>.md by default). Refuses to overwrite an existing file.

NameTypeReqDescription
out_pathOutput path (default: Reports/<slug>.md)
projectstringyesShort project slug (e.g. "capstone-rev-b")
slugOverride the auto-generated slug (default: WiP-<today>-<project>)

Structured output declared, but exposes no named fields.

No examples provided.

doc_wip_preview ~39

Audit a WiP report for IP-leak / formatting issues.

NameTypeReqDescription
report_pathstringyesPath to the .md file to audit

Structured output declared, but exposes no named fields.

No examples provided.

doc_wip_send ~154

Send a WiP report — server renders PDF and emails it. Runs the audit in strict mode first; aborts if any errors.

NameTypeReqDescription
api_keyOptional Bearer token for the landing-page API
bccOptional BCC recipients
ccOptional CC recipients
client_emailstringyesPrimary client email (for DB row)
client_namestringyesRecipient display name
project_namestringyesProject name for the email + DB row
report_pathstringyesPath to the .md file
subjectEmail subject (default: derived from filename)
toarrayyesList of recipient email addresses (≥1)

Structured output declared, but exposes no named fields.

No examples provided.

ecn_create ~283

Create a new Engineering Change Notice (ECN). The API clones the repo, creates the ECN file in ECO/, commits, and optionally pushes to a branch or creates a PR. For local projects, use: `parts project ecn create --id ECN-021 ...`

NameTypeReqDescription
affectedstringAffected components
authorstringAuthor name (defaults to 'Unknown')
bodystringECN body content (markdown). If empty, a template is used.
branchTarget branch for the commit (default: main)
categorystringOptional category (e.g. Electrical, Mechanical, Thermal)
create_prbooleanIf True, create a pull request with the change
dispositionstringyesOne of: REQUIRED, RECOMMENDED, OPTIONAL
ecn_idstringyesECN identifier (e.g. 'ECN-021')
ecn_typestringyesOne of: Design Constraint, Assembly Note, BOM Change, Schematic Change, Process Change
project_idstringyesSource Parts project ID or git repo URL
severitystringyesOne of: CRITICAL, HIGH, MEDIUM, LOW
sourcestringSource reference
titlestringyesECN title describing the issue

Structured output declared, but exposes no named fields.

No examples provided.

ecn_get ~85

Get the full content of a specific ECN by ID. Returns both structured metadata and the full markdown body. For local projects, use: `parts project ecn get <ECN-ID>`

NameTypeReqDescription
ecn_idstringyesECN identifier (e.g. 'ECN-006')
project_idstringyesSource Parts project ID or git repo URL

Structured output declared, but exposes no named fields.

No examples provided.

ecn_list ~138

List all Engineering Change Notices (ECNs) in a project. The API clones the project repo and reads ECO/ECN-*.md files. For local projects, use the `parts` CLI: `parts project ecn list`

NameTypeReqDescription
ecn_typeFilter by type (Design Constraint, Assembly Note, BOM Change, Schematic Change, Process Change)
project_idstringyesSource Parts project ID or git repo URL
severityFilter by severity (CRITICAL, HIGH, MEDIUM, LOW)
statusFilter by status (OPEN, IN REVIEW, APPROVED, IMPLEMENTED, CLOSED)

Structured output declared, but exposes no named fields.

No examples provided.

ecn_update ~229

Update metadata or body of an existing ECN. The API clones the repo, modifies the ECN file, commits, and optionally creates a PR. Only the fields you provide will be changed. For local projects, use: `parts project ecn update ECN-006 --status CLOSED`

NameTypeReqDescription
affectedNew affected components
bodyNew body content (replaces entire body)
branchTarget branch for the commit
categoryNew category
create_prbooleanIf True, create a PR with the change
dispositionNew disposition (REQUIRED, RECOMMENDED, OPTIONAL)
ecn_idstringyesECN identifier (e.g. 'ECN-006')
project_idstringyesSource Parts project ID or git repo URL
severityNew severity (CRITICAL, HIGH, MEDIUM, LOW)
sourceNew source reference
statusNew status (OPEN, IN REVIEW, APPROVED, IMPLEMENTED, CLOSED)
titleNew title

Structured output declared, but exposes no named fields.

No examples provided.

ecn_validate ~80

Validate all ECN files for correct frontmatter schema. The API clones the repo and checks all ECO/ECN-*.md files for required fields, valid enum values, and filename/ID consistency. For local projects, use: `parts project ecn validate`

NameTypeReqDescription
project_idstringyesSource Parts project ID or git repo URL

Structured output declared, but exposes no named fields.

No examples provided.

eco_approve ~159

Approve an ECO and optionally batch-approve its ECNs. Sets the ECO status to AUTHORIZED. If approved_ecn_ids is provided, those ECNs are also moved to APPROVED status. If omitted, all ECNs under the ECO are approved.

NameTypeReqDescription
approved_ecn_idsSpecific ECN IDs to approve (default: all ECNs in this ECO)
branchTarget branch for the commit
create_prbooleanIf True, create a PR with the changes
eco_idstringyesECO identifier (e.g. 'ECO-001')
notestringOptional approval note or comment
project_idstringyesSource Parts project ID or git repo URL

Structured output declared, but exposes no named fields.

No examples provided.

eco_build_status ~99

Check build readiness — are all ECOs/ECNs resolved? Returns a summary of every ECO and its ECNs, with counts of how many are blocking the build. The build is ready only when every ECN across all ECOs has reached CLOSED or IMPLEMENTED status. This powers the locked/unlocked state of the Build button on source.parts/build.

NameTypeReqDescription
project_idstringyesSource Parts project ID or git repo URL

Structured output declared, but exposes no named fields.

No examples provided.

eco_create ~195

Create a new Engineering Change Order (ECO) that bundles ECNs. The API clones the repo, creates the ECO file in ECO/, commits, and optionally creates a PR.

NameTypeReqDescription
authorstringAuthor name
bodystringECO body content (markdown)
branchTarget branch for the commit
create_prbooleanIf True, create a pull request with the change
ecn_idsList of ECN IDs to bundle (e.g. ['ECN-041', 'ECN-042'])
eco_idstringyesECO identifier (e.g. 'ECO-003')
project_idstringyesSource Parts project ID or git repo URL
revisionstringyesRevision identifier (e.g. 'EVT1 → EVT2', 'DVT updates')
titlestringyesECO title describing the change scope

Structured output declared, but exposes no named fields.

No examples provided.

eco_feedback ~107

Station 6: Generate ECN suggestions based on failure patterns. Uses failure analysis data to suggest engineering change notices (e.g., paste aperture changes, AVL updates, design modifications). IMPORTANT: Review ECN suggestions before creating formal ECNs.

NameTypeReqDescription
failure_analysis_idstringReference to a prior failure analysis
lot_correlationOptional list of lot data [{lot, failure_rate}]
top_failuresOptional list of failure summaries [{failure_mode, count, percentage}]

Structured output declared, but exposes no named fields.

No examples provided.

eco_get ~79

Get full details of a specific ECO including all its ECNs. Returns the ECO metadata, full markdown body, and the complete list of bundled ECNs with their current statuses.

NameTypeReqDescription
eco_idstringyesECO identifier (e.g. 'ECO-001')
project_idstringyesSource Parts project ID or git repo URL

Structured output declared, but exposes no named fields.

No examples provided.

eco_list ~85

List all Engineering Change Orders (ECOs) in a project. Returns each ECO with its bundled ECN IDs, status, and a summary of how many ECNs are resolved vs blocking.

NameTypeReqDescription
project_idstringyesSource Parts project ID or git repo URL
statusFilter by ECO status (e.g. AUTHORIZED, PENDING CLIENT AUTHORIZATION)

Structured output declared, but exposes no named fields.

No examples provided.

eco_update ~176

Update an existing ECO's metadata or status. Only the fields you provide will be changed. Use this to authorize an ECO, update its ECN list, or change its status.

NameTypeReqDescription
bodyNew body content (replaces entire body)
branchTarget branch for the commit
create_prbooleanIf True, create a PR with the change
ecn_idsUpdated list of bundled ECN IDs
eco_idstringyesECO identifier (e.g. 'ECO-001')
project_idstringyesSource Parts project ID or git repo URL
revisionNew revision string
statusNew status (PENDING CLIENT AUTHORIZATION, AUTHORIZED, IN PROGRESS, COMPLETED, REJECTED)
titleNew title

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

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.