kicad-sch-api 0.4.1__py3-none-any.whl → 0.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. kicad_sch_api/__init__.py +67 -2
  2. kicad_sch_api/cli/kicad_to_python.py +169 -0
  3. kicad_sch_api/collections/__init__.py +23 -8
  4. kicad_sch_api/collections/base.py +369 -59
  5. kicad_sch_api/collections/components.py +1376 -187
  6. kicad_sch_api/collections/junctions.py +129 -289
  7. kicad_sch_api/collections/labels.py +391 -287
  8. kicad_sch_api/collections/wires.py +202 -316
  9. kicad_sch_api/core/__init__.py +37 -2
  10. kicad_sch_api/core/component_bounds.py +34 -12
  11. kicad_sch_api/core/components.py +146 -7
  12. kicad_sch_api/core/config.py +25 -12
  13. kicad_sch_api/core/connectivity.py +692 -0
  14. kicad_sch_api/core/exceptions.py +175 -0
  15. kicad_sch_api/core/factories/element_factory.py +3 -1
  16. kicad_sch_api/core/formatter.py +24 -7
  17. kicad_sch_api/core/geometry.py +94 -5
  18. kicad_sch_api/core/managers/__init__.py +4 -0
  19. kicad_sch_api/core/managers/base.py +76 -0
  20. kicad_sch_api/core/managers/file_io.py +3 -1
  21. kicad_sch_api/core/managers/format_sync.py +3 -2
  22. kicad_sch_api/core/managers/graphics.py +3 -2
  23. kicad_sch_api/core/managers/hierarchy.py +661 -0
  24. kicad_sch_api/core/managers/metadata.py +4 -2
  25. kicad_sch_api/core/managers/sheet.py +52 -14
  26. kicad_sch_api/core/managers/text_elements.py +3 -2
  27. kicad_sch_api/core/managers/validation.py +3 -2
  28. kicad_sch_api/core/managers/wire.py +112 -54
  29. kicad_sch_api/core/parsing_utils.py +63 -0
  30. kicad_sch_api/core/pin_utils.py +103 -9
  31. kicad_sch_api/core/schematic.py +343 -29
  32. kicad_sch_api/core/types.py +79 -7
  33. kicad_sch_api/exporters/__init__.py +10 -0
  34. kicad_sch_api/exporters/python_generator.py +610 -0
  35. kicad_sch_api/exporters/templates/default.py.jinja2 +65 -0
  36. kicad_sch_api/geometry/__init__.py +15 -3
  37. kicad_sch_api/geometry/routing.py +211 -0
  38. kicad_sch_api/parsers/elements/label_parser.py +30 -8
  39. kicad_sch_api/parsers/elements/symbol_parser.py +255 -83
  40. kicad_sch_api/utils/logging.py +555 -0
  41. kicad_sch_api/utils/logging_decorators.py +587 -0
  42. kicad_sch_api/utils/validation.py +16 -22
  43. kicad_sch_api/wrappers/__init__.py +14 -0
  44. kicad_sch_api/wrappers/base.py +89 -0
  45. kicad_sch_api/wrappers/wire.py +198 -0
  46. kicad_sch_api-0.5.1.dist-info/METADATA +540 -0
  47. kicad_sch_api-0.5.1.dist-info/RECORD +114 -0
  48. kicad_sch_api-0.5.1.dist-info/entry_points.txt +4 -0
  49. {kicad_sch_api-0.4.1.dist-info → kicad_sch_api-0.5.1.dist-info}/top_level.txt +1 -0
  50. mcp_server/__init__.py +34 -0
  51. mcp_server/example_logging_integration.py +506 -0
  52. mcp_server/models.py +252 -0
  53. mcp_server/server.py +357 -0
  54. mcp_server/tools/__init__.py +32 -0
  55. mcp_server/tools/component_tools.py +516 -0
  56. mcp_server/tools/connectivity_tools.py +532 -0
  57. mcp_server/tools/consolidated_tools.py +1216 -0
  58. mcp_server/tools/pin_discovery.py +333 -0
  59. mcp_server/utils/__init__.py +38 -0
  60. mcp_server/utils/logging.py +127 -0
  61. mcp_server/utils.py +36 -0
  62. kicad_sch_api-0.4.1.dist-info/METADATA +0 -491
  63. kicad_sch_api-0.4.1.dist-info/RECORD +0 -87
  64. kicad_sch_api-0.4.1.dist-info/entry_points.txt +0 -2
  65. {kicad_sch_api-0.4.1.dist-info → kicad_sch_api-0.5.1.dist-info}/WHEEL +0 -0
  66. {kicad_sch_api-0.4.1.dist-info → kicad_sch_api-0.5.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,540 @@
1
+ Metadata-Version: 2.4
2
+ Name: kicad-sch-api
3
+ Version: 0.5.1
4
+ Summary: Professional KiCAD schematic manipulation library with exact format preservation
5
+ Author-email: Circuit-Synth <shane@circuit-synth.com>
6
+ Maintainer-email: Circuit-Synth <shane@circuit-synth.com>
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/circuit-synth/kicad-sch-api
9
+ Project-URL: Documentation, https://kicad-sch-api.readthedocs.io/
10
+ Project-URL: Repository, https://github.com/circuit-synth/kicad-sch-api.git
11
+ Project-URL: Bug Reports, https://github.com/circuit-synth/kicad-sch-api/issues
12
+ Project-URL: Changelog, https://github.com/circuit-synth/kicad-sch-api/blob/main/CHANGELOG.md
13
+ Keywords: kicad,schematic,eda,electronics,circuit-design,ai,automation,pcb
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Operating System :: OS Independent
25
+ Requires-Python: >=3.10
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: sexpdata>=0.0.3
29
+ Requires-Dist: typing-extensions>=4.0.0; python_version < "3.11"
30
+ Requires-Dist: pydantic>=2.0.0
31
+ Requires-Dist: mcp>=1.10.0
32
+ Requires-Dist: fastmcp>=0.2.0
33
+ Requires-Dist: jinja2>=3.0.0
34
+ Provides-Extra: dev
35
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
36
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
37
+ Requires-Dist: pytest-xdist>=3.0.0; extra == "dev"
38
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
39
+ Requires-Dist: black>=22.0.0; extra == "dev"
40
+ Requires-Dist: isort>=5.0.0; extra == "dev"
41
+ Requires-Dist: flake8>=4.0.0; extra == "dev"
42
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
43
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
44
+ Provides-Extra: docs
45
+ Requires-Dist: sphinx>=5.0.0; extra == "docs"
46
+ Requires-Dist: sphinx-rtd-theme>=1.0.0; extra == "docs"
47
+ Requires-Dist: myst-parser>=0.18.0; extra == "docs"
48
+ Dynamic: license-file
49
+
50
+ # KiCAD Schematic API
51
+
52
+ [![Documentation Status](https://readthedocs.org/projects/kicad-sch-api/badge/?version=latest)](https://kicad-sch-api.readthedocs.io/en/latest/?badge=latest)
53
+ [![PyPI version](https://badge.fury.io/py/kicad-sch-api.svg)](https://badge.fury.io/py/kicad-sch-api)
54
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
55
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
56
+
57
+ **Professional Python library for KiCAD schematic file manipulation with exact format preservation**
58
+
59
+ ## Overview
60
+
61
+ Create and manipulate KiCAD schematic files programmatically with guaranteed exact format preservation. This library serves as the foundation for EDA automation tools and AI agents that need reliable, professional-grade schematic manipulation capabilities.
62
+
63
+ ## 🎯 Core Features
64
+
65
+ - **📋 Exact Format Preservation**: Byte-perfect KiCAD output that matches native formatting
66
+ - **🏗️ Professional Component Management**: Object-oriented collections with search and validation
67
+ - **⚡ High Performance**: Optimized for large schematics with intelligent caching
68
+ - **🔍 Real KiCAD Library Integration**: Access to actual KiCAD symbol libraries and validation
69
+ - **🔌 Connectivity Analysis**: Trace electrical connections through wires, labels, and hierarchy
70
+ - **📐 Component Bounding Boxes**: Precise component boundary calculation and visualization
71
+ - **🛣️ Manhattan Routing**: Intelligent wire routing with obstacle avoidance
72
+ - **🗂️ Hierarchical Design**: Complete support for multi-sheet schematic projects
73
+ - **🤖 AI Agent Ready**: MCP server for seamless integration with AI development tools
74
+
75
+ ## 🚀 Quick Start
76
+
77
+ ### Installation
78
+
79
+ ```bash
80
+ # Install from PyPI
81
+ pip install kicad-sch-api
82
+
83
+ # Or install from source
84
+ git clone https://github.com/circuit-synth/kicad-sch-api.git
85
+ cd kicad-sch-api
86
+ uv pip install -e .
87
+ ```
88
+
89
+ ### Basic Usage
90
+
91
+ ```python
92
+ import kicad_sch_api as ksa
93
+
94
+ # Create a new schematic
95
+ sch = ksa.create_schematic("My Circuit")
96
+
97
+ # Add components with proper validation
98
+ resistor = sch.components.add(
99
+ lib_id="Device:R",
100
+ reference="R1",
101
+ value="10k",
102
+ position=(100.0, 100.0),
103
+ footprint="Resistor_SMD:R_0603_1608Metric"
104
+ )
105
+
106
+ # Add wires for connectivity
107
+ sch.wires.add(start=(100, 110), end=(150, 110))
108
+
109
+ # Pin-to-pin wiring
110
+ wire_uuid = sch.add_wire_between_pins("R1", "2", "C1", "1")
111
+
112
+ # Add labels for nets
113
+ sch.add_label("VCC", position=(125, 110))
114
+
115
+ # Save with exact format preservation
116
+ sch.save("my_circuit.kicad_sch")
117
+ ```
118
+
119
+ ## ⚠️ Critical: KiCAD Coordinate System
120
+
121
+ **Understanding this is CRITICAL for working with this library.**
122
+
123
+ ### The Two Coordinate Systems
124
+
125
+ KiCAD uses **two different Y-axis conventions**:
126
+
127
+ 1. **Symbol Space** (library definitions): Normal Y-axis (+Y is UP, like math)
128
+ 2. **Schematic Space** (placed components): Inverted Y-axis (+Y is DOWN, like graphics)
129
+
130
+ ### The Transformation
131
+
132
+ When placing a symbol on a schematic, **Y coordinates are negated**:
133
+
134
+ ```python
135
+ # Symbol library (normal Y, +Y up):
136
+ Pin 1: (0, +3.81) # 3.81mm UPWARD in symbol
137
+ Pin 2: (0, -3.81) # 3.81mm DOWNWARD in symbol
138
+
139
+ # Component placed at (100, 100) in schematic (inverted Y, +Y down):
140
+ # Y is NEGATED during transformation:
141
+ Pin 1: (100, 100 + (-3.81)) = (100, 96.52) # LOWER Y = visually HIGHER
142
+ Pin 2: (100, 100 + (+3.81)) = (100, 103.81) # HIGHER Y = visually LOWER
143
+ ```
144
+
145
+ ### Visual Interpretation
146
+
147
+ In schematic space (inverted Y-axis):
148
+ - **Lower Y values** = visually HIGHER on screen (top)
149
+ - **Higher Y values** = visually LOWER on screen (bottom)
150
+ - **X-axis is normal** (increases to the right)
151
+
152
+ ### Grid Alignment
153
+
154
+ **ALL positions MUST be grid-aligned:**
155
+ - Default grid: **1.27mm (50 mil)**
156
+ - Component positions, wire endpoints, pin positions, labels must all align to grid
157
+ - Common values: 0.00, 1.27, 2.54, 3.81, 5.08, 6.35, 7.62, 8.89, 10.16...
158
+
159
+ ```python
160
+ # Good - on grid
161
+ sch.components.add('Device:R', 'R1', '10k', position=(100.33, 101.60))
162
+
163
+ # Bad - off grid (will cause connectivity issues)
164
+ sch.components.add('Device:R', 'R2', '10k', position=(100.5, 101.3))
165
+ ```
166
+
167
+ This coordinate system is critical for:
168
+ - Pin position calculations
169
+ - Wire routing and connectivity
170
+ - Component placement
171
+ - Hierarchical connections
172
+ - Electrical connectivity detection
173
+
174
+ ## 🔧 Core Features
175
+
176
+ ### Component Management
177
+
178
+ ```python
179
+ # Add and manage components
180
+ resistor = sch.components.add("Device:R", "R1", "10k", (100, 100))
181
+
182
+ # Search and filter
183
+ resistors = sch.components.find(lib_id_pattern='Device:R*')
184
+
185
+ # Bulk updates
186
+ sch.components.bulk_update(
187
+ criteria={'lib_id': 'Device:R'},
188
+ updates={'properties': {'Tolerance': '1%'}}
189
+ )
190
+
191
+ # Remove components
192
+ sch.components.remove("R1")
193
+ ```
194
+
195
+ **📖 See [API Reference](docs/API_REFERENCE.md) for complete component API**
196
+
197
+ ### Connectivity Analysis
198
+
199
+ ```python
200
+ # Check if pins are electrically connected
201
+ if sch.are_pins_connected("R1", "2", "R2", "1"):
202
+ print("Connected!")
203
+
204
+ # Get net information
205
+ net = sch.get_net_for_pin("R1", "2")
206
+ print(f"Net: {net.name}, Pins: {len(net.pins)}")
207
+
208
+ # Get all connected pins
209
+ connected = sch.get_connected_pins("R1", "2")
210
+ ```
211
+
212
+ Connectivity analysis includes:
213
+ - Direct wire connections
214
+ - Connections through junctions
215
+ - Local and global labels
216
+ - Hierarchical labels (cross-sheet)
217
+ - Power symbols (VCC, GND)
218
+ - Sheet pins (parent/child)
219
+
220
+ **📖 See [API Reference](docs/API_REFERENCE.md#connectivity-analysis) for complete connectivity API**
221
+
222
+ ### Hierarchy Management
223
+
224
+ ```python
225
+ # Build hierarchy tree
226
+ tree = sch.hierarchy.build_hierarchy_tree(sch, schematic_path)
227
+
228
+ # Find reused sheets
229
+ reused = sch.hierarchy.find_reused_sheets()
230
+ for filename, instances in reused.items():
231
+ print(f"{filename} used {len(instances)} times")
232
+
233
+ # Validate sheet connections
234
+ connections = sch.hierarchy.validate_sheet_pins()
235
+ errors = sch.hierarchy.get_validation_errors()
236
+
237
+ # Trace signals through hierarchy
238
+ paths = sch.hierarchy.trace_signal_path("VCC")
239
+
240
+ # Flatten design
241
+ flattened = sch.hierarchy.flatten_hierarchy(prefix_references=True)
242
+
243
+ # Visualize hierarchy
244
+ print(sch.hierarchy.visualize_hierarchy(include_stats=True))
245
+ ```
246
+
247
+ **📖 See [Hierarchy Features Guide](docs/HIERARCHY_FEATURES.md) for complete hierarchy documentation**
248
+
249
+ ### Wire Routing & Pin Connections
250
+
251
+ ```python
252
+ # Direct pin-to-pin wiring
253
+ sch.add_wire_between_pins("R1", "2", "R2", "1")
254
+
255
+ # Manhattan routing with obstacle avoidance
256
+ wires = sch.auto_route_pins(
257
+ "R1", "2", "R2", "1",
258
+ routing_mode="manhattan",
259
+ avoid_components=True
260
+ )
261
+
262
+ # Get pin positions
263
+ pos = sch.get_component_pin_position("R1", "1")
264
+ ```
265
+
266
+ **📖 See [Recipes](docs/RECIPES.md) for routing patterns and examples**
267
+
268
+ ### Component Bounding Boxes
269
+
270
+ ```python
271
+ from kicad_sch_api.core.component_bounds import get_component_bounding_box
272
+
273
+ # Get bounding box
274
+ bbox = get_component_bounding_box(resistor, include_properties=False)
275
+ print(f"Size: {bbox.width:.2f}×{bbox.height:.2f}mm")
276
+
277
+ # Visualize with rectangles
278
+ sch.draw_bounding_box(bbox, stroke_color="blue")
279
+ sch.draw_component_bounding_boxes(include_properties=True)
280
+ ```
281
+
282
+ **📖 See [API Reference](docs/API_REFERENCE.md#bounding-boxes) for bounding box details**
283
+
284
+ ### Configuration & Customization
285
+
286
+ ```python
287
+ import kicad_sch_api as ksa
288
+
289
+ # Customize property positioning
290
+ ksa.config.properties.reference_y = -2.0
291
+ ksa.config.properties.value_y = 2.0
292
+
293
+ # Tolerances
294
+ ksa.config.tolerance.position_tolerance = 0.05
295
+
296
+ # Grid settings
297
+ ksa.config.grid.component_spacing = 5.0
298
+ ```
299
+
300
+ **📖 See [API Reference](docs/API_REFERENCE.md#configuration) for all configuration options**
301
+
302
+ ## 📚 Advanced Features
303
+
304
+ For comprehensive documentation on all features:
305
+
306
+ - **[API Reference](docs/API_REFERENCE.md)** - Complete API documentation with examples
307
+ - **[Hierarchy Features](docs/HIERARCHY_FEATURES.md)** - Multi-sheet design guide
308
+ - **[Recipes](docs/RECIPES.md)** - Common patterns and examples
309
+ - **[Getting Started](docs/GETTING_STARTED.md)** - Detailed tutorial
310
+ - **[Architecture](docs/ARCHITECTURE.md)** - Library design and internals
311
+
312
+ ## 🤖 AI Agent Integration (MCP Server)
313
+
314
+ **Complete MCP (Model Context Protocol) server** for AI-powered circuit design:
315
+
316
+ ```bash
317
+ # Start the MCP server
318
+ uv run kicad-sch-mcp
319
+
320
+ # Or install and run directly
321
+ pip install kicad-sch-api
322
+ kicad-sch-mcp
323
+ ```
324
+
325
+ ### Complete MCP Tool Suite (15 Tools)
326
+
327
+ **Component Management (5 tools):**
328
+ - `add_component` - Add components with auto-reference/position
329
+ - `list_components` - List all components with metadata
330
+ - `update_component` - Update properties (value, position, rotation, footprint)
331
+ - `remove_component` - Remove components
332
+ - `filter_components` - Advanced filtering by lib_id, value, footprint
333
+
334
+ **Connectivity (3 tools):**
335
+ - `add_wire` - Create wire connections between points
336
+ - `add_label` - Add net labels for logical connections
337
+ - `add_junction` - Add wire junctions for T-connections
338
+
339
+ **Pin Discovery (3 tools):**
340
+ - `get_component_pins` - Complete pin information with positions
341
+ - `find_pins_by_name` - Semantic lookup with wildcards (*, CLK*, *IN*)
342
+ - `find_pins_by_type` - Filter by electrical type (passive, input, output, power_in)
343
+
344
+ **Schematic Management (4 tools):**
345
+ - `create_schematic` - Create new KiCAD schematics
346
+ - `load_schematic` - Load existing .kicad_sch files
347
+ - `save_schematic` - Save schematics to disk
348
+ - `get_schematic_info` - Query schematic metadata
349
+
350
+ ### What You Can Build
351
+
352
+ With the MCP server, AI agents can now:
353
+ - **Design complete circuits**: Add components, create connections, label nets
354
+ - **Manage schematics**: Create, load, save, and modify circuit files
355
+ - **Analyze circuits**: List components, filter by criteria, discover pin information
356
+ - **Build any circuit**: Voltage dividers, filters, LED circuits, power supplies, and more!
357
+
358
+ ### Example: Building Complete Circuits via MCP
359
+
360
+ #### Voltage Divider (Verified Working ✅)
361
+
362
+ **Natural Language Request**:
363
+ ```
364
+ "Create a voltage divider with R1=10k and R2=20k, fully wired with VCC and GND labels"
365
+ ```
366
+
367
+ **The AI agent executes**:
368
+ 1. `create_schematic(name="Voltage Divider")` - Create new schematic
369
+ 2. `add_component(lib_id="Device:R", reference="R1", value="10k", position=(127.0, 76.2))` - Add R1
370
+ 3. `add_component(lib_id="Device:R", reference="R2", value="20k", position=(127.0, 95.25))` - Add R2
371
+ 4. `get_component_pins("R1")` - Get R1 pin positions
372
+ 5. `get_component_pins("R2")` - Get R2 pin positions
373
+ 6. `add_wire(start=(127.0, 72.39), end=(127.0, 66.04))` - VCC to R1
374
+ 7. `add_wire(start=(127.0, 80.01), end=(127.0, 91.44))` - R1 to R2
375
+ 8. `add_wire(start=(127.0, 99.06), end=(127.0, 105.41))` - R2 to GND
376
+ 9. `add_label(text="VCC", position=(129.54, 66.04))` - Add VCC label
377
+ 10. `add_label(text="VOUT", position=(129.54, 85.725))` - Add output label
378
+ 11. `add_label(text="GND", position=(129.54, 105.41))` - Add GND label
379
+ 12. `add_junction(position=(127.0, 85.725))` - Add junction at tap point
380
+ 13. `save_schematic(file_path="voltage_divider.kicad_sch")` - Save to disk
381
+
382
+ **Result**: ✅ Fully functional KiCAD schematic verified to open perfectly in KiCAD!
383
+
384
+ #### LED Circuit with Current Limiting
385
+
386
+ **Natural Language Request**:
387
+ ```
388
+ "Create an LED circuit with 220Ω current limiting resistor"
389
+ ```
390
+
391
+ **The AI agent will**:
392
+ - Add LED and 220Ω resistor components
393
+ - Wire VCC → resistor → LED → GND
394
+ - Add appropriate net labels
395
+ - Save the complete circuit
396
+
397
+ **Result**: Ready-to-use LED driver circuit schematic!
398
+
399
+ #### RC Low-Pass Filter
400
+
401
+ **Natural Language Request**:
402
+ ```
403
+ "Create an RC low-pass filter with R=10k, C=100nF"
404
+ ```
405
+
406
+ **The AI agent will**:
407
+ - Add resistor (10k) and capacitor (100nF)
408
+ - Wire input → R → C → output
409
+ - Add GND connection to capacitor
410
+ - Label INPUT, OUTPUT, and GND nets
411
+ - Add junction at output tap
412
+ - Save filter schematic
413
+
414
+ **Result**: Complete filter circuit with proper connectivity!
415
+
416
+ ### Claude Desktop Integration
417
+
418
+ Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):
419
+
420
+ ```json
421
+ {
422
+ "mcpServers": {
423
+ "kicad-sch-api": {
424
+ "command": "uv",
425
+ "args": ["run", "kicad-sch-mcp"],
426
+ "env": {}
427
+ }
428
+ }
429
+ }
430
+ ```
431
+
432
+ AI agents can now create, modify, and analyze KiCAD schematics programmatically!
433
+
434
+ **📖 Complete Documentation**:
435
+ - **[MCP Setup Guide](MCP_SETUP_GUIDE.md)** - Installation, configuration, and troubleshooting
436
+ - **[MCP Examples](docs/MCP_EXAMPLES.md)** - Comprehensive usage examples and patterns
437
+ - **[API Reference](docs/API_REFERENCE.md)** - Complete API documentation
438
+
439
+ ## 🏗️ Architecture
440
+
441
+ ### Design Principles
442
+
443
+ - **Building Block First**: Designed to be the foundation for other tools
444
+ - **Exact Format Preservation**: Guaranteed byte-perfect KiCAD output
445
+ - **Professional Quality**: Comprehensive error handling and validation
446
+ - **AI Agent Ready**: Integrated MCP server for seamless AI development workflow
447
+ - **Performance Optimized**: Fast operations on large schematics
448
+
449
+ **📖 See [Architecture Guide](docs/ARCHITECTURE.md) for detailed design documentation**
450
+
451
+ ## 🧪 Testing & Quality
452
+
453
+ ```bash
454
+ # Run all tests (29 tests covering all functionality)
455
+ uv run pytest tests/ -v
456
+
457
+ # Format preservation tests (critical - exact KiCAD output matching)
458
+ uv run pytest tests/reference_tests/ -v
459
+
460
+ # Code quality checks
461
+ uv run black kicad_sch_api/ tests/
462
+ uv run mypy kicad_sch_api/
463
+ ```
464
+
465
+ ### Test Categories
466
+
467
+ - **Format Preservation**: Byte-for-byte compatibility with KiCAD native files
468
+ - **Component Management**: Creation, modification, and removal
469
+ - **Connectivity**: Wire tracing, net analysis, hierarchical connections
470
+ - **Hierarchy**: Multi-sheet designs, sheet reuse, signal tracing
471
+ - **Integration**: Real KiCAD library compatibility
472
+
473
+ ## 🆚 Why This Library?
474
+
475
+ ### vs. Direct KiCAD File Editing
476
+ - **Professional API**: High-level operations vs low-level S-expression manipulation
477
+ - **Guaranteed Format**: Byte-perfect output vs manual formatting
478
+ - **Validation**: Real KiCAD library integration and component validation
479
+
480
+ ### vs. Other Python KiCAD Libraries
481
+ - **Format Preservation**: Exact KiCAD compatibility vs approximate output
482
+ - **Modern Design**: Object-oriented collections vs legacy patterns
483
+ - **AI Integration**: Integrated MCP server for AI agents vs no agent support
484
+
485
+ **📖 See [Why Use This Library](docs/WHY_USE_THIS_LIBRARY.md) for detailed comparison**
486
+
487
+ ## ⚠️ Known Limitations
488
+
489
+ ### Connectivity Analysis
490
+ - **Global Labels**: Explicit global label connections not yet fully implemented (power symbols like VCC/GND work correctly)
491
+
492
+ ### ERC (Electrical Rule Check)
493
+ - **Partial Implementation**: ERC validators have incomplete features
494
+ - Net tracing, pin type checking, and power net detection are in development
495
+ - Core functionality works, advanced validation features coming soon
496
+
497
+ ### Performance
498
+ - Large schematics (>1000 components) may experience slower connectivity analysis
499
+ - Symbol cache helps, but first analysis can take time
500
+ - Optimization ongoing
501
+
502
+ **Report issues**: https://github.com/circuit-synth/kicad-sch-api/issues
503
+
504
+ ## 📖 Documentation
505
+
506
+ Full documentation is available in the **[docs/](docs/)** directory:
507
+
508
+ - **[Getting Started Guide](docs/GETTING_STARTED.md)** - Complete beginner's tutorial
509
+ - **[API Reference](docs/API_REFERENCE.md)** - Complete API documentation
510
+ - **[Hierarchy Features](docs/HIERARCHY_FEATURES.md)** - Multi-sheet design guide
511
+ - **[Recipes & Patterns](docs/RECIPES.md)** - Practical examples
512
+ - **[Why Use This Library](docs/WHY_USE_THIS_LIBRARY.md)** - Value proposition
513
+ - **[Architecture](docs/ARCHITECTURE.md)** - Internal design details
514
+ - **[Examples](examples/)** - Code examples and tutorials
515
+
516
+ ## 🤝 Contributing
517
+
518
+ We welcome contributions! Key areas:
519
+
520
+ - KiCAD library integration and component validation
521
+ - Performance optimizations for large schematics
522
+ - MCP server tools and AI agent capabilities
523
+ - Test coverage and format preservation validation
524
+
525
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
526
+
527
+ ## 📄 License
528
+
529
+ MIT License - see [LICENSE](LICENSE) for details.
530
+
531
+ ## 🔗 Related Projects
532
+
533
+ - **[circuit-synth](https://github.com/circuit-synth/circuit-synth)** - High-level circuit design automation
534
+ - **[Claude Code](https://claude.ai/code)** - AI development environment with MCP support
535
+ - **[KiCAD](https://kicad.org/)** - Open source electronics design automation
536
+ - **[Model Context Protocol](https://modelcontextprotocol.io/)** - Standard for AI agent tool integration
537
+
538
+ ---
539
+
540
+ *Made with ❤️ for the open hardware community*
@@ -0,0 +1,114 @@
1
+ kicad_sch_api/__init__.py,sha256=SOAspr5nzpqorBy8NyN29yVoS_lucWFlBg1WeiHJ35s,4869
2
+ kicad_sch_api/cli.py,sha256=ZzmwzfHEvPgGfCiQBU4G2LBAyRtMNiBRoY21pivJSYc,7621
3
+ kicad_sch_api/py.typed,sha256=e4ldqxwpY7pNDG1olbvj4HSKr8sZ9vxgA_2ek8xXn-Q,70
4
+ kicad_sch_api/cli/__init__.py,sha256=mflSYoGLMJw2EFEByw9GD79pgj_Hebi6htJy7cKV5qM,952
5
+ kicad_sch_api/cli/base.py,sha256=9Qpx8xKGmMovbUVaMEXYj-KjtlPKv57dNwnBcu_hnpE,9793
6
+ kicad_sch_api/cli/bom.py,sha256=So3p5VFzjgkwnWP7OY80KG5iyFZgNTfWuJh1-tqbue0,5299
7
+ kicad_sch_api/cli/erc.py,sha256=0qrJMsGL82cZxjTuMA5aIaxyaKeOqqPJrTzvRuItXl8,7181
8
+ kicad_sch_api/cli/export_docs.py,sha256=gsFsHwcuL5EYgHW3l8udwjBw4dm1N4fnpvFoXqfVS38,8778
9
+ kicad_sch_api/cli/kicad_to_python.py,sha256=Ikr_WpuJqNp-CY4bWh-IeMJ0d66IjKouTbNBBh-CoHw,4453
10
+ kicad_sch_api/cli/netlist.py,sha256=iveRNY2LeC6A_naykmCDuJKleom2OFpwxhDfHxtbxmA,2686
11
+ kicad_sch_api/cli/types.py,sha256=pybFjAFbKGiY8svAt52Sq_F--fz8f836vbyvO710G10,1131
12
+ kicad_sch_api/collections/__init__.py,sha256=RYNZSd2mGEetr-wva-VeoPhCQtCuHW5kRamcR2b-d8w,871
13
+ kicad_sch_api/collections/base.py,sha256=5tmKgUwIr2Z0Fb7W74xzIeqD6gDb3SOa6XGfe3bLg3I,18113
14
+ kicad_sch_api/collections/components.py,sha256=6ueqvxG6JIrATEEqtnkhBuCYPTWnwixU49cF5pMOJHs,55543
15
+ kicad_sch_api/collections/junctions.py,sha256=bBni2T-QG-xGL7ybv3t2CUPj8c3lJaDSxLfXVUZ0KJc,6297
16
+ kicad_sch_api/collections/labels.py,sha256=OXCOsVfKm7H_AxuI-iPab4MDkXNwSzpWsOJ-Wr1HFpA,15057
17
+ kicad_sch_api/collections/wires.py,sha256=bdFewhVU3vpGvuNlaFBH4IU9uzUZ7skzUXk1ZOFxHlI,9254
18
+ kicad_sch_api/core/__init__.py,sha256=LYyNN-WMlxF671S9FtcuoL6psE8sh52O7mXUd_hE5Ck,1311
19
+ kicad_sch_api/core/component_bounds.py,sha256=Xhcg4b4NiiUcs7_NpoQaKpGvRFiLV9pAvRxUki8bqmM,18417
20
+ kicad_sch_api/core/components.py,sha256=cCQa6i3Bhm7C9q1rGdRMi-PJl8X-ShXts5Z_XLskmd4,31277
21
+ kicad_sch_api/core/config.py,sha256=o9-owndDFbP3Bte_XOePTgGNOnruD28RNJF_fy40QaQ,6971
22
+ kicad_sch_api/core/connectivity.py,sha256=bkFJ3i3FnLM8uNlHp-RzZBXptYmQf-61kf5WGGQMGvg,26473
23
+ kicad_sch_api/core/exceptions.py,sha256=ceV6nKbxk4BjQAS-recAI7yNyiqyvtdnJoDePPuU2ek,4694
24
+ kicad_sch_api/core/formatter.py,sha256=yt0lZl2Jd6kXYThvwH03QgtIao59Z09RcpoZ1tpwj0g,22926
25
+ kicad_sch_api/core/geometry.py,sha256=F7_-lP29S6MKe4OvZ57lPdCb_jVGw4D4KJ9v5JvXvIs,6692
26
+ kicad_sch_api/core/ic_manager.py,sha256=Kg0HIOMU-TGXiIkrnwcHFQ1Kfv_3rW2U1cwBKJsKopc,7219
27
+ kicad_sch_api/core/junctions.py,sha256=HdEdaqF5zzFIWuRhJ2HJnVqPah4KJGNmeNv2KzgmFZQ,4757
28
+ kicad_sch_api/core/labels.py,sha256=roiwUrF-YWBOUMD-s2_eyL7x2efOhOde6WWoxI1b5JM,10358
29
+ kicad_sch_api/core/nets.py,sha256=N1n6U7G7eXKRrc-osV48ReA6mOOLwn4TCwcNp2ISkNQ,9773
30
+ kicad_sch_api/core/no_connects.py,sha256=6HCXzdVO124AdUUsQbCv9Y0f7KWmObkQ4OZLimYgET8,8548
31
+ kicad_sch_api/core/parser.py,sha256=uvFVdSVzv5-RZmD_OKnqm51DIatFfsKF7NzLcWx4gfg,28761
32
+ kicad_sch_api/core/parsing_utils.py,sha256=tqQpuiNePNRx6Izsp9pnCBtlgiEYfMPkVFjkE5Uuofg,1776
33
+ kicad_sch_api/core/pin_utils.py,sha256=25XzHQF_4EQfp0PRYPBuL-KQY3mXChZIJGNXiSNc4jQ,9160
34
+ kicad_sch_api/core/schematic.py,sha256=rCMMPcNOj_7CJsJ5fO4MfA4J70X5A8tvz8tmFFrUk3E,68644
35
+ kicad_sch_api/core/texts.py,sha256=kBwUxwftqncl-yauiJjdnLXauV6EWq2oLhKw2bAxD_c,9990
36
+ kicad_sch_api/core/types.py,sha256=n-RG0bitSQRaEuKjKV6ivnttk9NcvnHVff-lOSzgdaw,18541
37
+ kicad_sch_api/core/wires.py,sha256=lLqcpRodErD4fD4_VMB1HgC9ViPnYPGcT8b-N9S0q-g,7139
38
+ kicad_sch_api/core/collections/__init__.py,sha256=i75_p9v330S2hxi4LrAGLmcVjrF8O0nTlGjCCjNbkq0,118
39
+ kicad_sch_api/core/collections/base.py,sha256=H-g1SC7hKD5QvbXPKVQotCK2e5pn04-y1ipkBQGcy3I,7076
40
+ kicad_sch_api/core/factories/__init__.py,sha256=qFx_rAgcTgWRZ572hvzzKNAze-jE0BOLqLrSFzj7T6M,130
41
+ kicad_sch_api/core/factories/element_factory.py,sha256=N-V2t3DHXfPuMsQ7jXDxymZKpkYgQGd-0N0h0Ifftig,8179
42
+ kicad_sch_api/core/managers/__init__.py,sha256=fT3n-skzgnHujN0hjvSi0Xog3nHGrlPLC10vto59E6E,844
43
+ kicad_sch_api/core/managers/base.py,sha256=xLKP3Y_sImUA9EdsH0xwjT3dst6tIoh4vFk1ZzDpg18,2275
44
+ kicad_sch_api/core/managers/file_io.py,sha256=4Ne9uRuEbGdBcKojkROxhVvbB4dPM_Luh-5JhZqkTPk,7740
45
+ kicad_sch_api/core/managers/format_sync.py,sha256=SEOU9Ppv-0V5-4kA1MR1Haz04TYuMu-OmUpmfc6uWcY,17011
46
+ kicad_sch_api/core/managers/graphics.py,sha256=TKffEW9IKXztSfDLassRGHiV8qBr8MYe3Hf6zhLI7Ww,18418
47
+ kicad_sch_api/core/managers/hierarchy.py,sha256=PKojscSDH63zC2lj3R221QnYZxrDbSasI6q0mQcSYiA,23868
48
+ kicad_sch_api/core/managers/metadata.py,sha256=pqIINUbaJACEmVfUruTUekN8mFra0uHbWz7_VPdBRy0,8053
49
+ kicad_sch_api/core/managers/sheet.py,sha256=yrYAERpmG4xPM2HqHW5P4v8EQEN8KONPziqqnYkopt4,16581
50
+ kicad_sch_api/core/managers/text_elements.py,sha256=vqBsj6zkE7139xLUk2vDinMm2Jq42cqOh2ZzU_B6_ns,17367
51
+ kicad_sch_api/core/managers/validation.py,sha256=n4bj6h6yTOuWrTQH8PIhzH1l84brxKPVzd1fJitDZWU,15805
52
+ kicad_sch_api/core/managers/wire.py,sha256=CAS_9yWcZPltXi2xUq4a1wK3rPkHj7srmW5PvmaKl2U,13680
53
+ kicad_sch_api/discovery/__init__.py,sha256=qSuCsnC-hVtaLYE8fwd-Gea6JKwEVGPQ-hSNDNJYsIU,329
54
+ kicad_sch_api/discovery/search_index.py,sha256=KgQT8ipT9OU6ktUwhDZ37Mao0Cba0fJOsxUk9m8ZKbY,15856
55
+ kicad_sch_api/exporters/__init__.py,sha256=7UK2f6S7ECBMzlpDIQoz6e5f3OIYkEyqcWCdae7j44s,247
56
+ kicad_sch_api/exporters/python_generator.py,sha256=g7ZlmYm9CbpOH7MYKZG-14WVZCZxWPmJoXRbJngqt-E,19609
57
+ kicad_sch_api/exporters/templates/default.py.jinja2,sha256=NAaoqwjl1FbABOENvTdQViaob4Bh6wmw0F9kUSs80Dk,1584
58
+ kicad_sch_api/geometry/__init__.py,sha256=Kh7gTueAqb1xzONGtA_IV6SxQ0wKPd4ud7D1iWZei5w,974
59
+ kicad_sch_api/geometry/font_metrics.py,sha256=3f5_9ifxtDUigLDiafglO2pCgPE7JFDKqa-0uhLPkoQ,839
60
+ kicad_sch_api/geometry/routing.py,sha256=FkgfHKzsH7sLL1whnSTkmjbfv-9t7N6SMyZu_77ZOMQ,6866
61
+ kicad_sch_api/geometry/symbol_bbox.py,sha256=3zd9-M9ehue5_-Gpdm_Yht4W49CbE0YRsAhAzfqJGEg,24161
62
+ kicad_sch_api/interfaces/__init__.py,sha256=ukuLgCT16e0sPLmrGb4HB_3DhGU1YriDEkeRgEBsQIA,435
63
+ kicad_sch_api/interfaces/parser.py,sha256=J-b0czz1q_O81HlvIp3dHx53cm8UGSgQTd4xe5tBszk,2008
64
+ kicad_sch_api/interfaces/repository.py,sha256=wFnWUCut6wPV9yDDE9k6zkhhijRnflbLteeXYtcU-gM,1763
65
+ kicad_sch_api/interfaces/resolver.py,sha256=2_3et6VVnyZZ8VI5i-Q4C-4bBXKTAgYAEFxAFuOWEGw,2936
66
+ kicad_sch_api/library/__init__.py,sha256=NG9UTdcpn25Bl9tPsYs9ED7bvpaVPVdtLMbnxkQkOnU,250
67
+ kicad_sch_api/library/cache.py,sha256=7na88grl465WHwUOGuOzYrrWwjsMBXhXVtxhnaJ9GBY,33208
68
+ kicad_sch_api/parsers/__init__.py,sha256=4TFc2duJMy6iRuk2dYbW4b7s-9H525iAsGU674_2a-E,357
69
+ kicad_sch_api/parsers/base.py,sha256=vsKGxZkdzTNqrdbRPx11D4b3ebDm3LW65v2Xf4Q06_c,4569
70
+ kicad_sch_api/parsers/registry.py,sha256=LoPvWIiGYysvTRtFfd8kWCXE0i535hoKYpdKs49Ygjs,5098
71
+ kicad_sch_api/parsers/utils.py,sha256=54n1gWQJMoQItB2FcQVHovwsqMq_h9aZvZBhSaOmc-I,2330
72
+ kicad_sch_api/parsers/elements/__init__.py,sha256=Av9oXw5uLsEkRsyWzLWsOgZ0UOrgkAhE4NDfdUUViV8,699
73
+ kicad_sch_api/parsers/elements/graphics_parser.py,sha256=1dnt8OF9lsx6zrlJk7_s4ceZJ4U3-u-hHKqlZFBMT7U,23375
74
+ kicad_sch_api/parsers/elements/label_parser.py,sha256=Qvv3EB9kcCf3ZmLtcTElm8OHjaZIQ92vS2OBBC4mmFc,8347
75
+ kicad_sch_api/parsers/elements/library_parser.py,sha256=qHQMI3PatLgHtUWvWhQxbKC-NXJqgOVW33hVkMQ9sEU,6321
76
+ kicad_sch_api/parsers/elements/metadata_parser.py,sha256=IFpgk5eLqp1kcjhpZB-jPThBCVyvdgsLo4YRydlvYD4,1897
77
+ kicad_sch_api/parsers/elements/sheet_parser.py,sha256=xZld-yzW7r1FKABaK89K7U-Zenqz2cHUqtMnADhxCeQ,14246
78
+ kicad_sch_api/parsers/elements/symbol_parser.py,sha256=pFxX9t1q9CSbSDmv0yDws0-1Q7gRHRHW40FZ_2Q_nII,20426
79
+ kicad_sch_api/parsers/elements/text_parser.py,sha256=n5G_3czchmPCEdvTVoQsATTW1PQW7KcSjzglqzPlOKQ,9820
80
+ kicad_sch_api/parsers/elements/wire_parser.py,sha256=geWI3jMXM7lZF26k7n7c6RQ55x4gsO4j8Ou0fk0O2j8,8271
81
+ kicad_sch_api/symbols/__init__.py,sha256=NfakJ5-8AQxq5vi8nZVuaUtDpWHfwHm5AD4rC-p9BZI,501
82
+ kicad_sch_api/symbols/cache.py,sha256=pKFjmuyId-9gGPAue-1Rzy4MRsecoC4TMn0hn2n0Yqk,16204
83
+ kicad_sch_api/symbols/resolver.py,sha256=w0jqepp9RwWqlwQHX28FpTn1aSz8iOf7kcJUOBMHwqE,12074
84
+ kicad_sch_api/symbols/validators.py,sha256=5Ryt4rLHxDF3ALViaNLRrI3pYvOreVT51gpvhECTZms,17216
85
+ kicad_sch_api/utils/__init__.py,sha256=1V_yGgI7jro6MUc4Pviux_WIeJ1wmiYFID186SZwWLQ,277
86
+ kicad_sch_api/utils/logging.py,sha256=OwWtIWSWSOxrzoVeYMdfxNS0TFyicW2D8Du_djUZDpg,17296
87
+ kicad_sch_api/utils/logging_decorators.py,sha256=d6LNU3pXYbTkA8iYeuZcx3p3MIZ065MiqHHdHi__Dys,18454
88
+ kicad_sch_api/utils/validation.py,sha256=xszXVD9a1x5TuAq-X8h1djVBOTuFs7AnHzGcnTSikUI,15300
89
+ kicad_sch_api/validation/__init__.py,sha256=YZ2KDTpBN9BloD7I__gsw6IiW-g5tZPux0kgyXb3TjU,524
90
+ kicad_sch_api/validation/erc.py,sha256=6WMHyMakKpn1-jXkfO9ltayLRA0OaU1N7GQm-pbZTLg,5160
91
+ kicad_sch_api/validation/erc_models.py,sha256=wFYMH-cbcdRX1j9LPn28IGUYBLioPDr4lP0m2QuhAnI,6628
92
+ kicad_sch_api/validation/pin_matrix.py,sha256=AdBCvEmOByXACOUoskYxYMcwKvIasxrtJOqWM-WgVi0,7456
93
+ kicad_sch_api/validation/validators.py,sha256=3txkQpR3qAUzp0-m-FnDYf3-_GGj6iaGZj4kSYu-Fe4,13166
94
+ kicad_sch_api/wrappers/__init__.py,sha256=Leu_fgWwyeKMfqKv5K4nYbzaIQD5T8-u6HXTMq7Ccr8,271
95
+ kicad_sch_api/wrappers/base.py,sha256=VZlfyRBrhGXtgg7RbZYpIRKRYRBR8j4uiaXfcP8TgKM,2386
96
+ kicad_sch_api/wrappers/wire.py,sha256=cK3zkQJdujRQ_jKYU1Jxai7alhrVwzeHzgcnl4KTvi8,5102
97
+ kicad_sch_api-0.5.1.dist-info/licenses/LICENSE,sha256=Em65Nvte1G9MHc0rHqtYuGkCPcshD588itTa358J6gs,1070
98
+ mcp_server/__init__.py,sha256=bhlFWzeRrZXxdVpJWxxMI96lMOSDjq7P_lB4lXqKRCQ,726
99
+ mcp_server/example_logging_integration.py,sha256=T09gA8ITwBw_THzXqtIHFdQAbaWxu9rA57iPQLLNGFM,14858
100
+ mcp_server/models.py,sha256=OudTh7R5wQkhtKN8F_bRoxB1QBA9ZRXzCSLb1iwY7-g,7812
101
+ mcp_server/server.py,sha256=_TBH-rLf4z-pUuftVk5XDPuJlZ9Dovhf4FIDhKoUjkA,10371
102
+ mcp_server/utils.py,sha256=Mz8ojV6RFDnHrSQpuLf4_a_EJPuInZBiNbY6akLZpB8,759
103
+ mcp_server/tools/__init__.py,sha256=IF_rFfl-JeMuwwjifmXjrvs5cPXrQn93ZB_EULBNKYc,663
104
+ mcp_server/tools/component_tools.py,sha256=V_piw6Ee07YalzNiCeUB4Xg2nJ__Zy83NQAmzNSqPs0,17125
105
+ mcp_server/tools/connectivity_tools.py,sha256=HQL8MnuyPZJE1SSjfYN3dJdyiIN777Vosrw_c9FK08E,17848
106
+ mcp_server/tools/consolidated_tools.py,sha256=-7MeJo8uphaCz2qZHbaSCbBUrlEeUi2vrdGNCqOVEKo,41611
107
+ mcp_server/tools/pin_discovery.py,sha256=5DpoiFNn9zga7hCRElj8CJ5ZgFj-oVFRtp3ZRL2-y6Y,11156
108
+ mcp_server/utils/__init__.py,sha256=ou6hK2ESB1k_fubctiYxnUAUeDI_GMrJVU3pFpruqwo,720
109
+ mcp_server/utils/logging.py,sha256=xDsFAugHalBfGfSAYPb17ha10ra-J1NULS0rRZ6P-Ck,3234
110
+ kicad_sch_api-0.5.1.dist-info/METADATA,sha256=9KjIsYQrryaOT22vzUm8Rn-r9z69t-DTR69Hg3jd-D8,18640
111
+ kicad_sch_api-0.5.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
112
+ kicad_sch_api-0.5.1.dist-info/entry_points.txt,sha256=V7TLCFrxbfEnmo2JC3JR03gFVb75vVqlSAqpIu5dr3E,164
113
+ kicad_sch_api-0.5.1.dist-info/top_level.txt,sha256=aWKnWfbod2w5fIgHJPa7pfMDfyeezuZI0R9TsH25jaw,25
114
+ kicad_sch_api-0.5.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ kicad-sch-api = kicad_sch_api.cli:main
3
+ kicad-sch-mcp = mcp_server.server:main
4
+ ksa-kicad-to-python = kicad_sch_api.cli.kicad_to_python:entry_point
@@ -1 +1,2 @@
1
1
  kicad_sch_api
2
+ mcp_server