Files
kicad-mcp-server/CHANGELOG.md
Tom 2945b52eae feat: Add missing routing/component tools and fix SWIG/UUID bugs
New MCP tools added (TypeScript layer):
- Routing: delete_trace, query_traces, get_nets_list, modify_trace,
  create_netclass, route_differential_pair, refill_zones (with SWIG warning)
- Component: get_component_pads, get_component_list, get_pad_position,
  place_component_array, align_components, duplicate_component

Bug fixes:
- routing.py: Fix SwigPyObject UUID comparison (str() -> m_Uuid.AsString())
- routing.py: Fix SWIG iterator invalidation after board.Remove()
  by converting board.Tracks() to list() before iteration
- routing.py: Add board.SetModified() and clear Python refs after Remove()
  to prevent dangling SWIG pointers crashing subsequent calls
- routing.py: Wrap each track access in try/except in query_traces()
  to gracefully skip invalid track objects after bulk delete
- routing.py: Add missing return statement (mypy fix)
- library.py: Fix search_footprints param mapping search_term->pattern
- library.py: Fix fp.name -> fp.full_name field access
- library.py: Accept both 'pattern' and 'search_term' parameter names
- library.py: Add library filter support in search_footprints
- library.py: Fix loop variable shadowing Path object (mypy fix)
- design_rules.py: Add type annotation for violation_counts (mypy fix)

Contribution guidelines followed (CONTRIBUTING.md):
- black python/ applied (3 touched files pass without changes)
- mypy python/ passes with 0 errors on all changed files
- npx prettier --write applied to changed TypeScript files
- npm run build passes (tsc --noEmit: 0 errors)
- Commit messages follow feat:/fix: convention

Note on diff size: The large insertion/deletion count in the changed files
is due to black and prettier reformatting previously unformatted code
(missing trailing commas, quote style, line length). The actual logic
changes are limited to the 6 files listed above.

Note: refill_zones has known SWIG segfault risk (see KNOWN_ISSUES.md).
Prefer IPC backend (KiCAD open) or zone fill via KiCAD UI.
2026-02-27 18:15:46 +01:00

12 KiB
Raw Blame History

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_termpattern)
  • library.py: Fix field access (fp.namefp.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)

[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:

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
  • JLCParts Database: @yaqwsx
  • Local JLCPCB Search: @l3wi
  • KiCad: KiCad Development Team
  • MCP Protocol: Anthropic

License

See LICENSE file for details.