- connection_schematic.py: generate_netlist() now accepts schematic_path param,
threaded through to get_net_connections() so PinLocator is actually invoked
(previously only 1 connection per component was returned due to fallback break)
- kicad_interface.py: pass schematic_path to generate_netlist()
- pin_locator.py: add _schematic_cache to avoid loading Schematic() once per pin
(was causing timeout: O(nets x components x pins) Schematic() calls)
- server.ts: remove fragile PYTHONPATH?.includes('KiCad') condition,
always prefer KiCAD bundled Python on Windows when executable exists
- CHANGELOG.md: document fixes under v2.2.0-alpha
396 lines
14 KiB
Markdown
396 lines
14 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to the KiCAD MCP Server project are documented here.
|
||
|
||
## [2.2.0-alpha] - 2026-02-27
|
||
|
||
### New MCP Tools (TypeScript layer – previously Python-only)
|
||
|
||
**Routing tools:**
|
||
- `delete_trace` - Delete traces by UUID, position or net name
|
||
- `query_traces` - Query/filter traces on the board
|
||
- `get_nets_list` - List all nets with net code and class
|
||
- `modify_trace` - Modify trace width or layer
|
||
- `create_netclass` - Create or update a net class
|
||
- `route_differential_pair` - Route a differential pair between two points
|
||
- `refill_zones` - Refill all copper zones ⚠️ SWIG segfault risk, prefer IPC/UI
|
||
|
||
**Component tools:**
|
||
- `get_component_pads` - Get all pad data for a component
|
||
- `get_component_list` - List all components on the board
|
||
- `get_pad_position` - Get absolute position of a specific pad
|
||
- `place_component_array` - Place components in a grid array
|
||
- `align_components` - Align components along an axis
|
||
- `duplicate_component` - Duplicate a component with offset
|
||
|
||
### Bug Fixes
|
||
|
||
- `routing.py`: Fix SwigPyObject UUID comparison (`str()` → `m_Uuid.AsString()`)
|
||
- `routing.py`: Fix SWIG iterator invalidation after `board.Remove()` by snapshotting `list(board.Tracks())`
|
||
- `routing.py`: Add `board.SetModified()` + `track = None` after `Remove()` to prevent dangling SWIG pointer crashes
|
||
- `routing.py`: Per-track `try/except` in `query_traces()` to skip invalid objects after bulk delete
|
||
- `routing.py`: Add missing return statement (mypy)
|
||
- `library.py`: Fix `search_footprints` parameter mapping (`search_term` → `pattern`)
|
||
- `library.py`: Fix field access (`fp.name` → `fp.full_name`)
|
||
- `library.py`: Accept both `pattern` and `search_term` parameter names
|
||
- `library.py`: Fix loop variable shadowing `Path` object (mypy)
|
||
- `design_rules.py`: Add type annotation for `violation_counts` (mypy)
|
||
|
||
### Pending fixes (not yet committed)
|
||
|
||
- `connection_schematic.py` / `kicad_interface.py`: Fix `generate_netlist` missing
|
||
`schematic_path` parameter – without it `get_net_connections` always fell back to
|
||
proximity matching which only returns one connection per component (first wire hit,
|
||
then `break`). PinLocator was never invoked. Fix: added `schematic_path: Optional[Path]`
|
||
to `generate_netlist` signature and threaded it through to `get_net_connections`,
|
||
and updated `_handle_generate_netlist` in `kicad_interface.py` to pass `schematic_path`.
|
||
- `server.ts`: Fix KiCAD bundled Python (3.11.5) not being selected on Windows – the
|
||
detection condition `process.env.PYTHONPATH?.includes("KiCad")` was fragile and failed
|
||
in some environments, causing System Python 3.12 to be used instead. Since `pcbnew.pyd`
|
||
is compiled for KiCAD's Python 3.11.5, this resulted in `No module named 'pcbnew'`.
|
||
Fix: removed the condition, KiCAD bundled Python is now always preferred on Windows
|
||
when it exists at `C:\Program Files\KiCad\9.0\bin\python.exe`.
|
||
Also added `KICAD_PYTHON` to `claude_desktop_config.json` as explicit override.
|
||
- `pin_locator.py`: Fix `generate_netlist` timeout – `get_pin_location` and
|
||
`get_all_symbol_pins` called `Schematic(schematic_path)` on every single pin lookup,
|
||
causing O(nets × components × pins) schematic file loads (e.g. 400+ loads for a
|
||
medium schematic). Fix: added `_schematic_cache` dict to `PinLocator.__init__`,
|
||
schematic is now loaded once per path and reused.
|
||
|
||
---
|
||
|
||
## [2.1.0-alpha] - 2026-01-10
|
||
|
||
### Phase 1: Intelligent Schematic Wiring System - Core Infrastructure
|
||
|
||
**Major Features:**
|
||
- Automatic pin location discovery with rotation support
|
||
- Smart wire routing (direct, orthogonal horizontal/vertical)
|
||
- Net label management (local, global, hierarchical)
|
||
- S-expression-based wire creation
|
||
- Professional right-angle routing
|
||
|
||
**New Components:**
|
||
- `python/commands/wire_manager.py` - S-expression wire creation engine
|
||
- `python/commands/pin_locator.py` - Intelligent pin discovery with rotation
|
||
- Updated `python/commands/connection_schematic.py` - High-level connection API
|
||
- `docs/SCHEMATIC_WIRING_PLAN.md` - Implementation roadmap
|
||
|
||
**MCP Tools Enhanced:**
|
||
- `add_schematic_wire` - Create wires with stroke customization
|
||
- `add_schematic_connection` - Auto-connect pins with routing options (NEW)
|
||
- `add_schematic_net_label` - Add labels with type and orientation control (NEW)
|
||
- `connect_to_net` - Connect pins to named nets (ENHANCED)
|
||
|
||
**Technical Implementation:**
|
||
- Rotation transformation matrix for pin coordinates
|
||
- S-expression injection for guaranteed format compliance
|
||
- Pin definition caching for performance
|
||
- Orthogonal path generation for professional schematics
|
||
|
||
**Testing:**
|
||
- End-to-end integration test: 100% passing
|
||
- MCP handler integration test: 100% passing
|
||
- Pin discovery with rotation: Verified working
|
||
- KiCad-skip verification: All wires/labels correctly formed
|
||
|
||
---
|
||
|
||
### Phase 2: Power Nets & Wire Connectivity - COMPLETE
|
||
|
||
**Major Features:**
|
||
- Power symbol support (VCC, GND, +3V3, +5V, etc.) via dynamic loading
|
||
- Wire graph analysis for net connectivity tracking
|
||
- Geometric wire tracing with tolerance-based point matching
|
||
- Accurate netlist generation with component/pin connections
|
||
- Critical template mapping bug fixes
|
||
|
||
**Updates:**
|
||
- `connect_to_net()` - Migrated to WireManager + PinLocator
|
||
- `get_net_connections()` - Complete rewrite with geometric wire tracing
|
||
- `generate_netlist()` - Now uses wire graph analysis for connectivity
|
||
- `get_or_create_template()` - Fixed special character handling, auto-reload after dynamic loading
|
||
- `add_component()` - Fixed template lookup with symbol iteration
|
||
|
||
**Bug Fixes:**
|
||
- CRITICAL: Template mapping after dynamic symbol loading
|
||
- Special character handling in symbol names (+ prefix in +3V3, +5V)
|
||
- Schematic reload synchronization after S-expression injection
|
||
- Multi-format template reference detection
|
||
|
||
**Wire Graph Analysis Algorithm:**
|
||
1. Find all labels matching target net name
|
||
2. Trace wires connected to label positions (point coincidence)
|
||
3. Collect all wire endpoints and polyline segments
|
||
4. Match component pins at wire connection points using PinLocator
|
||
5. Return accurate component/pin connection pairs
|
||
|
||
**Technical Implementation:**
|
||
- Tolerance-based point matching (0.5mm for grid alignment)
|
||
- Multi-segment wire (polyline) support
|
||
- Rotation-aware pin location matching via PinLocator
|
||
- Fallback proximity detection (10mm threshold)
|
||
- Template existence checking via symbol iteration (handles special characters)
|
||
|
||
**Testing:**
|
||
- Power symbols: 4/4 loaded (VCC, GND, +3V3, +5V)
|
||
- Components: 4/4 placed
|
||
- Connections: 8/8 created successfully
|
||
- Net connectivity: 100% accurate (VCC: 2, GND: 4, +3V3: 1, +5V: 1)
|
||
- Netlist generation: 4 nets with accurate connections
|
||
- Comprehensive integration test: 100% PASSING
|
||
|
||
**Commits:**
|
||
- `c67f400` - Updated connect_to_net to use WireManager
|
||
- `b77f008` - Fixed template mapping bug (critical)
|
||
- `a5a542b` - Implemented wire graph analysis
|
||
|
||
**Addresses:**
|
||
- Issue #26 - Schematic workflow wiring functionality (Phase 2)
|
||
|
||
---
|
||
|
||
### Phase 2: JLCPCB Integration Complete
|
||
|
||
**Major Features:**
|
||
- ✅ Complete JLCPCB parts integration via JLCSearch public API
|
||
- ✅ Access to ~100k JLCPCB parts catalog
|
||
- ✅ Real-time stock and pricing data
|
||
- ✅ Parametric component search
|
||
- ✅ Cost optimization (Basic vs Extended library)
|
||
- ✅ KiCad footprint mapping
|
||
- ✅ Alternative part suggestions
|
||
|
||
**New Components:**
|
||
- `python/commands/jlcsearch.py` - JLCSearch API client (no auth required)
|
||
- `python/commands/jlcpcb_parts.py` - Enhanced with `import_jlcsearch_parts()`
|
||
- `docs/JLCPCB_INTEGRATION.md` - Comprehensive integration guide
|
||
|
||
**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 full-text search (FTS5)
|
||
- Package-to-footprint mapping for standard SMD packages
|
||
- Price comparison and cost optimization algorithms
|
||
- HMAC-SHA256 authentication support (for official JLCPCB API)
|
||
|
||
**Testing:**
|
||
- All integration tests passing
|
||
- Database operations validated
|
||
- Live API connectivity confirmed
|
||
- End-to-end MCP tool testing complete
|
||
|
||
**Documentation:**
|
||
- Complete API reference with examples
|
||
- Package mapping tables (0402, 0603, 0805, SOT-23, etc.)
|
||
- Best practices guide
|
||
- Troubleshooting section
|
||
|
||
---
|
||
|
||
## [2.1.0-alpha] - 2025-11-30
|
||
|
||
### Phase 1: Schematic Workflow Fix
|
||
|
||
**Critical Bug Fix:**
|
||
- ✅ Fixed completely broken schematic workflow (Issue #26)
|
||
- Created template-based symbol cloning approach
|
||
- All schematic tests now passing
|
||
|
||
**Root Cause:**
|
||
- kicad-skip library limitation: cannot create symbols from scratch, only clone existing ones
|
||
|
||
**Solution:**
|
||
- Template schematic with cloneable R, C, LED symbols
|
||
- Updated `create_project` to create both PCB and schematic
|
||
- Rewrote `add_schematic_component` to use `clone()` API
|
||
- Proper UUID generation and position setting
|
||
|
||
**Files Modified:**
|
||
- `python/commands/project.py` - Now creates schematic files
|
||
- `python/commands/schematic.py` - Uses template approach
|
||
- `python/commands/component_schematic.py` - Complete rewrite
|
||
|
||
**Files Created:**
|
||
- `python/templates/template_with_symbols.kicad_sch`
|
||
- `python/templates/empty.kicad_sch`
|
||
- `docs/SCHEMATIC_WORKFLOW_FIX.md`
|
||
|
||
**Testing:**
|
||
- Created comprehensive test suite
|
||
- All 7 tests passing
|
||
- KiCad CLI validation successful
|
||
|
||
---
|
||
|
||
## [2.0.0-alpha] - 2025-11-05
|
||
|
||
### Router Pattern & Tool Organization
|
||
|
||
**Major Architecture Change:**
|
||
- Implemented tool router pattern (70% context reduction)
|
||
- 12 direct tools, 47 routed tools in 7 categories
|
||
- Smart tool discovery system
|
||
|
||
**New Router Tools:**
|
||
- `list_tool_categories` - Browse available categories
|
||
- `get_category_tools` - View tools in category
|
||
- `search_tools` - Find tools by keyword
|
||
- `execute_tool` - Run any routed tool
|
||
|
||
**Benefits:**
|
||
- Dramatically reduced AI context usage
|
||
- Maintained full functionality (64 tools)
|
||
- Improved tool discoverability
|
||
- Better organization for users
|
||
|
||
---
|
||
|
||
## [2.0.0-alpha] - 2025-11-01
|
||
|
||
### IPC Backend Integration
|
||
|
||
**Experimental Feature:**
|
||
- KiCad 9.0 IPC API integration for real-time UI sync
|
||
- Changes appear immediately in KiCad (no manual reload)
|
||
- Hybrid backend: IPC + SWIG fallback
|
||
- 20+ commands with IPC support
|
||
|
||
**Implementation:**
|
||
- Routing operations (interactive push-and-shove)
|
||
- Component placement and modification
|
||
- Zone operations and fills
|
||
- DRC and verification
|
||
|
||
**Status:**
|
||
- Under active development
|
||
- Enable via KiCad: Preferences > Plugins > Enable IPC API Server
|
||
- Automatic fallback to SWIG when IPC unavailable
|
||
|
||
---
|
||
|
||
## [2.0.0-alpha] - 2025-10-26
|
||
|
||
### Initial JLCPCB Integration (Local Libraries)
|
||
|
||
**Features:**
|
||
- Local JLCPCB symbol library search
|
||
- Integration with KiCad Plugin and Content Manager
|
||
- Search by LCSC part number, manufacturer, description
|
||
|
||
**Credit:**
|
||
- Contributed by [@l3wi](https://github.com/l3wi)
|
||
|
||
**Components:**
|
||
- `python/commands/symbol_library.py`
|
||
- Basic library search functionality
|
||
|
||
---
|
||
|
||
## [1.0.0] - 2025-10-01
|
||
|
||
### Initial Release
|
||
|
||
**Core Features:**
|
||
- 64 fully-documented MCP tools
|
||
- JSON Schema validation for all tools
|
||
- 8 dynamic resources for project state
|
||
- Cross-platform support (Linux, Windows, macOS)
|
||
- Comprehensive error handling
|
||
- Detailed logging
|
||
|
||
**Tool Categories:**
|
||
- Project Management (4 tools)
|
||
- Board Operations (9 tools)
|
||
- Component Management (8 tools)
|
||
- Routing (6 tools)
|
||
- Export & Manufacturing (5 tools)
|
||
- Design Rule Checking (4 tools)
|
||
- Schematic Operations (6 tools)
|
||
- Symbol Library (3 tools)
|
||
- JLCPCB Integration (5 tools)
|
||
|
||
**Platform Support:**
|
||
- Linux (KiCad 7.x, 8.x, 9.x)
|
||
- Windows (KiCad 9.x)
|
||
- macOS (KiCad 9.x)
|
||
|
||
**Documentation:**
|
||
- Complete README with setup instructions
|
||
- Platform-specific guides
|
||
- Tool reference documentation
|
||
- Contributing guidelines
|
||
|
||
---
|
||
|
||
## Version Numbering
|
||
|
||
- **2.1.0-alpha**: Current development version with JLCPCB integration
|
||
- **2.0.0-alpha**: Router pattern and IPC backend
|
||
- **1.0.0**: Initial stable release
|
||
|
||
## Breaking Changes
|
||
|
||
### 2.1.0-alpha
|
||
- None (additive changes only)
|
||
|
||
### 2.0.0-alpha
|
||
- Tool execution now requires router for 47 tools
|
||
- Direct tool access limited to 12 high-frequency tools
|
||
- Schema validation stricter (catches errors earlier)
|
||
|
||
## Deprecations
|
||
|
||
### 2.1.0-alpha
|
||
- `docs/JLCPCB_USAGE_GUIDE.md` - Superseded by `docs/JLCPCB_INTEGRATION.md`
|
||
- `docs/JLCPCB_INTEGRATION_PLAN.md` - Implementation complete
|
||
|
||
## Migration Guide
|
||
|
||
### Upgrading to 2.1.0-alpha from 2.0.0-alpha
|
||
|
||
**New Dependencies:**
|
||
- No new system dependencies
|
||
- Python packages: `requests` (already in requirements.txt)
|
||
|
||
**Database Setup:**
|
||
1. Run `download_jlcpcb_database` tool (one-time, ~5-10 minutes)
|
||
2. Database created at `data/jlcpcb_parts.db`
|
||
3. Subsequent searches use local database (instant)
|
||
|
||
**API Changes:**
|
||
- All existing tools remain compatible
|
||
- 5 new JLCPCB tools available
|
||
- No breaking changes to existing functionality
|
||
|
||
### Upgrading to 2.0.0-alpha from 1.0.0
|
||
|
||
**Router Pattern:**
|
||
- Some tools now accessed via `execute_tool` instead of direct calls
|
||
- Use `list_tool_categories` to discover available tools
|
||
- Search with `search_tools` to find specific functionality
|
||
|
||
**IPC Backend (Optional):**
|
||
- Enable in KiCad: Preferences > Plugins > Enable IPC API Server
|
||
- Set `KICAD_BACKEND=ipc` environment variable
|
||
- Falls back to SWIG if unavailable
|
||
|
||
---
|
||
|
||
## Credits
|
||
|
||
- **JLCSearch API**: [@tscircuit](https://github.com/tscircuit/jlcsearch)
|
||
- **JLCParts Database**: [@yaqwsx](https://github.com/yaqwsx/jlcparts)
|
||
- **Local JLCPCB Search**: [@l3wi](https://github.com/l3wi)
|
||
- **KiCad**: KiCad Development Team
|
||
- **MCP Protocol**: Anthropic
|
||
|
||
## License
|
||
|
||
See LICENSE file for details.
|