New tools - datasheet: - get_datasheet_url: construct LCSC datasheet PDF URL + product page URL without any API key (URL schema: https://www.lcsc.com/datasheet/<C#>.pdf) - enrich_datasheets: scan .kicad_sch, write LCSC datasheet URL into every symbol that has an LCSC property but an empty Datasheet field; supports dry_run=true for preview; text-based implementation (no skip writes) Implementation: python/commands/datasheet_manager.py New tool - schematic: - delete_schematic_component: remove a placed symbol from a .kicad_sch file by reference designator (e.g. R1, U3) Bug fix - delete_schematic_component (two separate root causes): 1. No MCP tool named delete_schematic_component was registered at all. Any delete-symbol request fell through to the PCB-only delete_component tool which searches pcbnew.BOARD and always returned 'Component not found' for schematic symbols. 2. component_schematic.py::remove_component() still used skip for writes. PR #40 rewrote DynamicSymbolLoader (add path) to avoid skip-induced schematic corruption, but the delete path was not touched by that PR. Fix: _handle_delete_schematic_component in kicad_interface.py uses direct text manipulation with parenthesis-depth tracking (same technique as PR #40), bypassing component_schematic.py entirely. Error message explicitly guides users: 'use delete_component for PCB footprints'. Files changed: - python/commands/datasheet_manager.py (new) - src/tools/datasheet.ts (new) - python/kicad_interface.py: 3 new handlers + dispatch entries - src/tools/schematic.ts: delete_schematic_component tool - src/server.ts: registerDatasheetTools import + call - src/tools/index.ts: export registerDatasheetTools - CHANGELOG.md: document all above
16 KiB
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 namequery_traces- Query/filter traces on the boardget_nets_list- List all nets with net code and classmodify_trace- Modify trace width or layercreate_netclass- Create or update a net classroute_differential_pair- Route a differential pair between two pointsrefill_zones- Refill all copper zones ⚠️ SWIG segfault risk, prefer IPC/UI
Component tools:
get_component_pads- Get all pad data for a componentget_component_list- List all components on the boardget_pad_position- Get absolute position of a specific padplace_component_array- Place components in a grid arrayalign_components- Align components along an axisduplicate_component- Duplicate a component with offset
Bug Fixes
routing.py: Fix SwigPyObject UUID comparison (str()→m_Uuid.AsString())routing.py: Fix SWIG iterator invalidation afterboard.Remove()by snapshottinglist(board.Tracks())routing.py: Addboard.SetModified()+track = NoneafterRemove()to prevent dangling SWIG pointer crashesrouting.py: Per-tracktry/exceptinquery_traces()to skip invalid objects after bulk deleterouting.py: Add missing return statement (mypy)library.py: Fixsearch_footprintsparameter mapping (search_term→pattern)library.py: Fix field access (fp.name→fp.full_name)library.py: Accept bothpatternandsearch_termparameter nameslibrary.py: Fix loop variable shadowingPathobject (mypy)design_rules.py: Add type annotation forviolation_counts(mypy)
Pending additions (not yet committed)
Datasheet tools:
get_datasheet_url- Return LCSC datasheet PDF URL and product page URL for a given LCSC number (e.g.C179739→https://www.lcsc.com/datasheet/C179739.pdf). No API key required – URL is constructed directly from the LCSC number.enrich_datasheets- Scan a.kicad_schfile and write LCSC datasheet URLs into every symbol that has anLCSCproperty but an emptyDatasheetfield. After enrichment the URL appears natively in KiCAD's symbol properties, footprint browser and any other tool that reads the standard KiCADDatasheetfield. Supportsdry_run=truefor preview without writing. Implementation:python/commands/datasheet_manager.py(text-based, noskipwrites)
Schematic tools:
delete_schematic_component- Remove a placed symbol from a.kicad_schfile by reference designator (e.g.R1,U3).
Bug Fixes (pending)
-
schematic.ts/kicad_interface.py: Fix missingdelete_schematic_componentMCP tool.Root cause (two separate issues):
- No MCP tool named
delete_schematic_componentexisted. Claude had no way to call it, so any "delete schematic component" request fell through to the PCB-onlydelete_componenttool, which searchespcbnew.BOARDand always returned "Component not found" for schematic symbols. component_schematic.py::remove_component()still usedskipfor writes. PR #40 rewroteDynamicSymbolLoader(add path) to avoidskip-induced schematic corruption, butremove_component(delete path) was not touched by that PR.
Fix:
- Added
delete_schematic_componentto the TypeScript tool layer (schematic.ts) with clear docstring distinguishing it from the PCBdelete_component. - Implemented
_handle_delete_schematic_componentinkicad_interface.pyusing direct text manipulation (parenthesis-depth tracking, same approach as PR #40). Does not callcomponent_schematic.py::remove_component()at all. - Error message explicitly guides the user when the wrong tool is used: "note: this tool removes schematic symbols, use delete_component for PCB footprints"
- No MCP tool named
Pending fixes (not yet committed)
connection_schematic.py/kicad_interface.py: Fixgenerate_netlistmissingschematic_pathparameter – without itget_net_connectionsalways fell back to proximity matching which only returns one connection per component (first wire hit, thenbreak). PinLocator was never invoked. Fix: addedschematic_path: Optional[Path]togenerate_netlistsignature and threaded it through toget_net_connections, and updated_handle_generate_netlistinkicad_interface.pyto passschematic_path.server.ts: Fix KiCAD bundled Python (3.11.5) not being selected on Windows – the detection conditionprocess.env.PYTHONPATH?.includes("KiCad")was fragile and failed in some environments, causing System Python 3.12 to be used instead. Sincepcbnew.pydis compiled for KiCAD's Python 3.11.5, this resulted inNo module named 'pcbnew'. Fix: removed the condition, KiCAD bundled Python is now always preferred on Windows when it exists atC:\Program Files\KiCad\9.0\bin\python.exe. Also addedKICAD_PYTHONtoclaude_desktop_config.jsonas explicit override.pin_locator.py: Fixgenerate_netlisttimeout –get_pin_locationandget_all_symbol_pinscalledSchematic(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_cachedict toPinLocator.__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 enginepython/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 customizationadd_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 + PinLocatorget_net_connections()- Complete rewrite with geometric wire tracinggenerate_netlist()- Now uses wire graph analysis for connectivityget_or_create_template()- Fixed special character handling, auto-reload after dynamic loadingadd_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:
- Find all labels matching target net name
- Trace wires connected to label positions (point coincidence)
- Collect all wire endpoints and polyline segments
- Match component pins at wire connection points using PinLocator
- 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 WireManagerb77f008- 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 withimport_jlcsearch_parts()docs/JLCPCB_INTEGRATION.md- Comprehensive integration guide
MCP Tools Available:
download_jlcpcb_database- Download full parts catalogsearch_jlcpcb_parts- Parametric search with filtersget_jlcpcb_part- Part details + footprint suggestionsget_jlcpcb_database_stats- Database statisticssuggest_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_projectto create both PCB and schematic - Rewrote
add_schematic_componentto useclone()API - Proper UUID generation and position setting
Files Modified:
python/commands/project.py- Now creates schematic filespython/commands/schematic.py- Uses template approachpython/commands/component_schematic.py- Complete rewrite
Files Created:
python/templates/template_with_symbols.kicad_schpython/templates/empty.kicad_schdocs/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 categoriesget_category_tools- View tools in categorysearch_tools- Find tools by keywordexecute_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
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 bydocs/JLCPCB_INTEGRATION.mddocs/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:
- Run
download_jlcpcb_databasetool (one-time, ~5-10 minutes) - Database created at
data/jlcpcb_parts.db - 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_toolinstead of direct calls - Use
list_tool_categoriesto discover available tools - Search with
search_toolsto find specific functionality
IPC Backend (Optional):
- Enable in KiCad: Preferences > Plugins > Enable IPC API Server
- Set
KICAD_BACKEND=ipcenvironment variable - Falls back to SWIG if unavailable
Credits
- JLCSearch API: @tscircuit
- JLCParts Database: @yaqwsx
- Local JLCPCB Search: @l3wi
- KiCad: KiCad Development Team
- MCP Protocol: Anthropic
License
See LICENSE file for details.