Files
kicad-mcp-server/docs/SCHEMATIC_WORKFLOW_FIX.md
KiCAD MCP Bot 994965e041 feat: Complete Phase 1 & 2 - Schematic workflow fix and JLCPCB integration
Phase 1: Schematic Workflow Fix (Issue #26)
- Fixed broken schematic workflow using template-based symbol cloning
- Updated create_project to generate both PCB and schematic files
- Rewrote add_schematic_component to use kicad-skip clone() API
- Added template schematics with cloneable R, C, LED symbols
- All schematic tests now passing

Phase 2: JLCPCB Integration Complete
- Integrated JLCSearch public API (no authentication required)
- Access to ~100k JLCPCB parts with real-time stock and pricing
- Implemented parametric search for resistors, capacitors, components
- Added package-to-footprint mapping for KiCad integration
- Cost optimization with Basic vs Extended library classification
- Alternative part suggestions with price comparison

New Components:
- python/commands/jlcsearch.py - JLCSearch API client
- python/templates/ - Template schematics for symbol cloning
- docs/JLCPCB_INTEGRATION.md - Comprehensive API documentation
- docs/SCHEMATIC_WORKFLOW_FIX.md - Phase 1 technical details
- CHANGELOG.md - Consolidated unified changelog
- PHASE_2_COMPLETE.md - Phase 2 implementation summary

MCP Tools Available:
- download_jlcpcb_database - Download full parts catalog
- search_jlcpcb_parts - Parametric search with filters
- get_jlcpcb_part - Part details + footprint suggestions
- get_jlcpcb_database_stats - Database statistics
- suggest_jlcpcb_alternatives - Find similar/cheaper parts

Technical Improvements:
- SQLite database with FTS5 full-text search
- HMAC-SHA256 authentication support (official JLCPCB API)
- Improved .gitignore to exclude credentials and databases
- Template-based schematic creation workflow

Testing:
- All integration tests passing
- Database operations validated
- Live API connectivity confirmed
- Schematic workflow end-to-end verified

Credits:
- JLCSearch API: @tscircuit
- Local JLCPCB search: @l3wi

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-10 09:04:56 -05:00

4.4 KiB

Schematic Workflow Fix - Issue #26

Problem Summary

The schematic workflow was completely broken due to incorrect usage of the kicad-skip library:

  1. create_project only created PCB files, no schematic
  2. create_schematic created orphaned schematic files not linked to projects
  3. add_schematic_component called non-existent schematic.add_symbol() method
  4. Project files didn't reference schematics in their structure

Root Cause

The kicad-skip library does not support creating symbols from scratch. The only way to add symbols is by cloning existing symbol instances.

From kicad-skip documentation:

"symbols: these don't have a new()" because they require complex mappings to library elements, pins, and properties.

Solution

1. Template-Based Approach

Created a template schematic (python/templates/template_with_symbols.kicad_sch) with:

  • Complete lib_symbols section defining R, C, LED symbols
  • Three template symbol instances placed off-screen at (-100, -110, -120)
  • Template symbols marked as dnp yes, in_bom no, on_board no so they don't interfere

2. Updated Files

python/commands/project.py:

  • Now creates both .kicad_pcb AND .kicad_sch files
  • Project file includes schematic reference in sheets array
  • Copies template schematic with cloneable symbols

python/commands/schematic.py:

  • Uses template file instead of creating from scratch
  • Proper minimal schematic structure when template unavailable

python/commands/component_schematic.py:

  • Completely rewritten to use clone() API
  • Maps component types to template symbols
  • Proper UUID generation for each cloned symbol
  • Correct position setting: symbol.at.value = [x, y, rotation]

3. Correct Workflow

from commands.project import ProjectCommands
from commands.schematic import SchematicManager
from commands.component_schematic import ComponentManager

# Step 1: Create project (creates both PCB and schematic)
project_cmd = ProjectCommands()
result = project_cmd.create_project({
    "name": "MyProject",
    "path": "/path/to/project"
})

# Step 2: Load the schematic
sch = SchematicManager.load_schematic(result['project']['schematicPath'])

# Step 3: Add components by cloning templates
component_def = {
    "type": "R",           # Maps to _TEMPLATE_R
    "reference": "R1",     # Component reference
    "value": "10k",        # Component value
    "footprint": "Resistor_SMD:R_0603_1608Metric",
    "x": 50.8,            # Position in mm
    "y": 50.8,            # Position in mm
    "rotation": 0         # Rotation in degrees
}
symbol = ComponentManager.add_component(sch, component_def)

# Step 4: Save the schematic
SchematicManager.save_schematic(sch, result['project']['schematicPath'])

Supported Component Types

Currently supported template symbols:

  • R - Resistor (maps to _TEMPLATE_R)
  • C - Capacitor (maps to _TEMPLATE_C)
  • D or LED - LED (maps to _TEMPLATE_D)

To add more component types, update:

  1. python/templates/template_with_symbols.kicad_sch - Add lib_symbol definition and template instance
  2. python/commands/component_schematic.py - Add mapping in TEMPLATE_MAP

Testing

Comprehensive test created at /tmp/test_schematic_workflow.py:

  • Creates project with schematic
  • Loads schematic
  • Adds R, C, LED components
  • Saves schematic
  • Validates with kicad-cli sch export pdf

All tests passing ✓

Files Modified

  • python/commands/project.py - Added schematic creation
  • python/commands/schematic.py - Fixed template usage
  • python/commands/component_schematic.py - Rewritten to use clone() API
  • python/templates/empty.kicad_sch - Minimal template (created)
  • python/templates/template_with_symbols.kicad_sch - Template with cloneable symbols (created)

Limitations

  1. Can only add components that have templates defined
  2. Template symbols remain in schematic (but marked as DNP/not in BOM)
  3. Complex symbols (multi-unit, hierarchical) may need custom templates

Future Improvements

  1. Add more component templates (transistors, connectors, ICs)
  2. Dynamic template generation from KiCad symbol libraries
  3. Auto-hide template symbols in schematic
  4. Support for custom user templates

References