@hybridlabor-api/bdb-hardware-pcb 0.1.0

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 (192) hide show
  1. package/README.md +116 -0
  2. package/config/mcp/antigravity.json +22 -0
  3. package/config/mcp/claude.json +22 -0
  4. package/config/mcp/codex.toml +25 -0
  5. package/docs/adr/ADR-001-KICAD-OPENSCAD-MCP-STRATEGY.md +334 -0
  6. package/docs/review_documentation.md +121 -0
  7. package/installer.js +358 -0
  8. package/mcp_servers/kicad-mcp-server/.env.example +22 -0
  9. package/mcp_servers/kicad-mcp-server/.github/workflows/ci.yml +36 -0
  10. package/mcp_servers/kicad-mcp-server/CLAUDE.md +487 -0
  11. package/mcp_servers/kicad-mcp-server/README.md +316 -0
  12. package/mcp_servers/kicad-mcp-server/docs/DEVICE_TREE.md +416 -0
  13. package/mcp_servers/kicad-mcp-server/docs/INSTALLATION.md +332 -0
  14. package/mcp_servers/kicad-mcp-server/docs/PIN_ANALYSIS.md +332 -0
  15. package/mcp_servers/kicad-mcp-server/docs/README.md +240 -0
  16. package/mcp_servers/kicad-mcp-server/docs/TESTING.md +613 -0
  17. package/mcp_servers/kicad-mcp-server/docs/VALIDATION.md +268 -0
  18. package/mcp_servers/kicad-mcp-server/pyproject.toml +96 -0
  19. package/mcp_servers/kicad-mcp-server/requirements-dev.txt +16 -0
  20. package/mcp_servers/kicad-mcp-server/requirements-test.txt +24 -0
  21. package/mcp_servers/kicad-mcp-server/requirements.txt +13 -0
  22. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__init__.py +3 -0
  23. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__main__.py +17 -0
  24. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/config.py +46 -0
  25. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/__init__.py +1 -0
  26. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/types.py +87 -0
  27. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/__init__.py +1 -0
  28. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/netlist_parser.py +234 -0
  29. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser.py +375 -0
  30. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser_kicad.py +327 -0
  31. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/schematic_parser.py +902 -0
  32. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/server.py +71 -0
  33. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/__init__.py +1 -0
  34. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/arduino/connectivity_test.cpp.j2 +189 -0
  35. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/atmega.dts.j2 +77 -0
  36. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/esp32.dts.j2 +77 -0
  37. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/nrf52.dts.j2 +77 -0
  38. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/stm32f4.dts.j2 +89 -0
  39. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/esp_idf/test_suite.c.j2 +340 -0
  40. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/pytest/test_connectivity.py.j2 +147 -0
  41. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/st_hal/hal_test.c.j2 +313 -0
  42. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_gpio_test.py.j2 +99 -0
  43. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_i2c_test.py.j2 +117 -0
  44. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_pinmux_test.py.j2 +43 -0
  45. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_spi_test.py.j2 +94 -0
  46. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_gpio_test.c.j2 +113 -0
  47. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_i2c_test.c.j2 +101 -0
  48. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_spi_test.c.j2 +94 -0
  49. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/unittest/test_schematic.py.j2 +172 -0
  50. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/__init__.py +36 -0
  51. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/device_tree.py +1187 -0
  52. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/hierarchical_analysis.py +211 -0
  53. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/netlist.py +320 -0
  54. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/parts_registry.py +142 -0
  55. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb.py +955 -0
  56. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb_layout.py +308 -0
  57. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pin_analysis.py +765 -0
  58. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/project.py +196 -0
  59. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic.py +319 -0
  60. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_editor.py +674 -0
  61. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_search.py +158 -0
  62. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/validation.py +866 -0
  63. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/visualization.py +225 -0
  64. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/__init__.py +1 -0
  65. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/file_handlers.py +65 -0
  66. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_cli.py +103 -0
  67. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_version.py +103 -0
  68. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/parts_registry.py +197 -0
  69. package/mcp_servers/kicad-mcp-server/tests/__init__.py +1 -0
  70. package/mcp_servers/kicad-mcp-server/tests/examples/ESP32S3_TEST.md +219 -0
  71. package/mcp_servers/kicad-mcp-server/tests/fixtures/README.md +65 -0
  72. package/mcp_servers/kicad-mcp-server/tests/fixtures/__init__.py +1 -0
  73. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_pcb.kicad_pcb +177 -0
  74. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_schematic.kicad_sch +145 -0
  75. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/child.kicad_sch +24 -0
  76. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/root.kicad_sch +38 -0
  77. package/mcp_servers/kicad-mcp-server/tests/test_tools/__init__.py +1 -0
  78. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_hierarchical_labels.py +195 -0
  79. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_kicad_cli.py +116 -0
  80. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_netlist_cache_path.py +29 -0
  81. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic.py +189 -0
  82. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic_hierarchy.py +69 -0
  83. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_visualization.py +136 -0
  84. package/mcp_servers/kicad-mcp-server/uv.lock +2873 -0
  85. package/mcp_servers/openscad-mcp-server/.dockerignore +9 -0
  86. package/mcp_servers/openscad-mcp-server/.github/workflows/test.yml +40 -0
  87. package/mcp_servers/openscad-mcp-server/Dockerfile +29 -0
  88. package/mcp_servers/openscad-mcp-server/LICENSE +21 -0
  89. package/mcp_servers/openscad-mcp-server/README.md +154 -0
  90. package/mcp_servers/openscad-mcp-server/docs/audit.md +56 -0
  91. package/mcp_servers/openscad-mcp-server/docs/docker.md +66 -0
  92. package/mcp_servers/openscad-mcp-server/docs/issue-followup.md +19 -0
  93. package/mcp_servers/openscad-mcp-server/docs/jetson.md +17 -0
  94. package/mcp_servers/openscad-mcp-server/glama.json +4 -0
  95. package/mcp_servers/openscad-mcp-server/legacy/README.md +15 -0
  96. package/mcp_servers/openscad-mcp-server/legacy/README.original.md +294 -0
  97. package/mcp_servers/openscad-mcp-server/legacy/implementation_plan.md +100 -0
  98. package/mcp_servers/openscad-mcp-server/legacy/old/download_sam2_checkpoint.py +115 -0
  99. package/mcp_servers/openscad-mcp-server/legacy/old/src/ai/sam_segmentation.py +209 -0
  100. package/mcp_servers/openscad-mcp-server/legacy/old/src/models/threestudio_generator.py +231 -0
  101. package/mcp_servers/openscad-mcp-server/legacy/old/src/workflow/image_to_model_pipeline.py +260 -0
  102. package/mcp_servers/openscad-mcp-server/legacy/old/test_sam2_segmentation.py +96 -0
  103. package/mcp_servers/openscad-mcp-server/legacy/requirements.txt +57 -0
  104. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/README.md +39 -0
  105. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/ai-driven-code-generation.md +122 -0
  106. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/export-formats.md +76 -0
  107. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/ai/ai_service.py.md +51 -0
  108. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/main.py.md +63 -0
  109. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/models/code_generator.py.md +63 -0
  110. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/nlp/parameter_extractor.py.md +63 -0
  111. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/ai/natural-language-processing.md +78 -0
  112. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/nlp/parameter-extraction.md +173 -0
  113. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/export-formats.md +91 -0
  114. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/openscad-basics.md +66 -0
  115. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/primitive-testing.md +79 -0
  116. package/mcp_servers/openscad-mcp-server/legacy/src/__init__.py +0 -0
  117. package/mcp_servers/openscad-mcp-server/legacy/src/ai/ai_service.py +257 -0
  118. package/mcp_servers/openscad-mcp-server/legacy/src/ai/gemini_api.py +161 -0
  119. package/mcp_servers/openscad-mcp-server/legacy/src/ai/venice_api.py +203 -0
  120. package/mcp_servers/openscad-mcp-server/legacy/src/config.py +121 -0
  121. package/mcp_servers/openscad-mcp-server/legacy/src/main.py +1456 -0
  122. package/mcp_servers/openscad-mcp-server/legacy/src/main.py.new +404 -0
  123. package/mcp_servers/openscad-mcp-server/legacy/src/main_remote.py +401 -0
  124. package/mcp_servers/openscad-mcp-server/legacy/src/models/__init__.py +0 -0
  125. package/mcp_servers/openscad-mcp-server/legacy/src/models/code_generator.py +321 -0
  126. package/mcp_servers/openscad-mcp-server/legacy/src/models/cuda_mvs.py +209 -0
  127. package/mcp_servers/openscad-mcp-server/legacy/src/models/scad_templates/basic_shapes.scad +144 -0
  128. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/__init__.py +0 -0
  129. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/parameter_extractor.py +388 -0
  130. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/__init__.py +0 -0
  131. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/wrapper.py +418 -0
  132. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/__init__.py +1 -0
  133. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/printer_discovery.py +471 -0
  134. package/mcp_servers/openscad-mcp-server/legacy/src/remote/connection_manager.py +537 -0
  135. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_client.py +435 -0
  136. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_server.py +787 -0
  137. package/mcp_servers/openscad-mcp-server/legacy/src/remote/error_handling.py +415 -0
  138. package/mcp_servers/openscad-mcp-server/legacy/src/testing/__init__.py +0 -0
  139. package/mcp_servers/openscad-mcp-server/legacy/src/testing/primitive_tester.py +203 -0
  140. package/mcp_servers/openscad-mcp-server/legacy/src/testing/test_primitives.py +98 -0
  141. package/mcp_servers/openscad-mcp-server/legacy/src/utils/__init__.py +1 -0
  142. package/mcp_servers/openscad-mcp-server/legacy/src/utils/cad_exporter.py +241 -0
  143. package/mcp_servers/openscad-mcp-server/legacy/src/utils/format_validator.py +206 -0
  144. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_exporter.py +140 -0
  145. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_repair.py +91 -0
  146. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_validator.py +123 -0
  147. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/__init__.py +0 -0
  148. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/headless_renderer.py +52 -0
  149. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/renderer.py +177 -0
  150. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/web_interface.py +639 -0
  151. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/image_approval.py +148 -0
  152. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/multi_view_to_model_pipeline.py +338 -0
  153. package/mcp_servers/openscad-mcp-server/legacy/test_complete_workflow.py +374 -0
  154. package/mcp_servers/openscad-mcp-server/legacy/test_cuda_mvs.py +191 -0
  155. package/mcp_servers/openscad-mcp-server/legacy/test_gemini_api.py +168 -0
  156. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval.py +192 -0
  157. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval_workflow.py +251 -0
  158. package/mcp_servers/openscad-mcp-server/legacy/test_image_to_model_pipeline.py +145 -0
  159. package/mcp_servers/openscad-mcp-server/legacy/test_model_selection.py +41 -0
  160. package/mcp_servers/openscad-mcp-server/legacy/test_multi_view_pipeline.py +290 -0
  161. package/mcp_servers/openscad-mcp-server/legacy/test_primitives.sh +13 -0
  162. package/mcp_servers/openscad-mcp-server/legacy/test_rabbit_direct.py +71 -0
  163. package/mcp_servers/openscad-mcp-server/legacy/test_remote_cuda_mvs.py +283 -0
  164. package/mcp_servers/openscad-mcp-server/legacy/test_venice_example.py +69 -0
  165. package/mcp_servers/openscad-mcp-server/pyproject.toml +33 -0
  166. package/mcp_servers/openscad-mcp-server/requirements.txt +2 -0
  167. package/mcp_servers/openscad-mcp-server/scad/simple_cube.scad +2 -0
  168. package/mcp_servers/openscad-mcp-server/scripts/test_docker.py +220 -0
  169. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__init__.py +3 -0
  170. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__main__.py +3 -0
  171. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/engine.py +94 -0
  172. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/geometry.py +242 -0
  173. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/server.py +245 -0
  174. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/service.py +190 -0
  175. package/mcp_servers/openscad-mcp-server/tests/conftest.py +17 -0
  176. package/mcp_servers/openscad-mcp-server/tests/test_engine.py +37 -0
  177. package/mcp_servers/openscad-mcp-server/tests/test_geometry.py +106 -0
  178. package/mcp_servers/openscad-mcp-server/tests/test_integration.py +172 -0
  179. package/mcp_servers/openscad-mcp-server/tests/test_transports.py +314 -0
  180. package/mcp_servers/openscad-mcp-server/uv.lock +1123 -0
  181. package/package.json +44 -0
  182. package/scripts/install_mcps.sh +86 -0
  183. package/scripts/openscad_wrapper.sh +62 -0
  184. package/scripts/run_kicad_mcp.sh +25 -0
  185. package/scripts/run_openscad_mcp.sh +41 -0
  186. package/scripts/test_mcp_connection.py +626 -0
  187. package/scripts/test_mcp_connection.sh +168 -0
  188. package/skills/code-first-hardware-design/SKILL.md +260 -0
  189. package/skills/pcb-constraint-definition/SKILL.md +236 -0
  190. package/skills/pcb-layout-routing-automation/SKILL.md +153 -0
  191. package/skills/pcb-validation-dfm-signoff/SKILL.md +194 -0
  192. package/skills/schematic-datasheet-analysis/SKILL.md +202 -0
@@ -0,0 +1,316 @@
1
+ # KiCad MCP Server
2
+
3
+ A Model Context Protocol (MCP) server for KiCad 9.0+ that lets AI assistants analyze schematics, inspect PCBs, trace connections, validate designs, and generate embedded code.
4
+
5
+ ## Features
6
+
7
+ - **Schematic Analysis** - Components, nets, symbols, hierarchical sheets
8
+ - **PCB Analysis** - Footprints, tracks, routing quality, signal/power integrity via pcbnew API
9
+ - **Netlist Tracing** - 100% accurate pin-level connection tracking
10
+ - **Design Validation** - ERC/DRC via kicad-cli (headless, CI friendly)
11
+ - **Pin Analysis** - Pin function detection, conflict analysis, pinmux config
12
+ - **Code Generation** - Device tree (.dts) and hardware test code generation
13
+ - **Project Management** - Create KiCad projects from templates
14
+ - **Parts Registry** - Search 21,000+ verified parts on an open, no-login registry ([PartReel](https://partreel.com) by default, `PARTS_REGISTRY_URL` to change) and download footprints/symbols/3D into the project; downloads are host-allowlisted, extension-checked and size-capped
15
+
16
+ ## Requirements
17
+
18
+ - KiCad 8.0+ (9.0 or 10.0 recommended)
19
+ - `kicad-cli` in PATH (included with KiCad)
20
+
21
+ ## Installation
22
+
23
+ ### Recommended: Install into KiCad Python (Full PCB Analysis)
24
+
25
+ KiCad ships with its own Python that includes the `pcbnew` module. Installing into this Python gives you full PCB analysis capabilities (precise track lengths, via statistics, signal integrity, power integrity).
26
+
27
+ **Step 1**: Find your KiCad Python path:
28
+
29
+ | Platform | Path |
30
+ |----------|------|
31
+ | Windows | `C:\Program Files\KiCad\<version>\bin\python.exe` |
32
+ | macOS | `/Applications/KiCad/KiCad.app/Contents/Frameworks/python3` |
33
+ | Linux | `/usr/bin/python3` (if kicad python bindings installed) |
34
+
35
+ **Step 2**: Install the package into KiCad Python:
36
+
37
+ ```bash
38
+ # Windows example (KiCad 10.0)
39
+ "C:\Program Files\KiCad\10.0\bin\python.exe" -m pip install fastmcp
40
+ "C:\Program Files\KiCad\10.0\bin\python.exe" -m pip install -e .
41
+
42
+ # macOS example
43
+ /Applications/KiCad/KiCad.app/Contents/Frameworks/python3 -m pip install fastmcp
44
+ /Applications/KiCad/KiCad.app/Contents/Frameworks/python3 -m pip install -e .
45
+ ```
46
+
47
+ **Step 3**: Configure MCP to use KiCad Python (see Configuration section below).
48
+
49
+ ### Fallback: Install into System Python (Limited PCB Analysis)
50
+
51
+ If you skip KiCad Python setup, the server still works but falls back to text-based PCB parsing. You get basic data (track counts, net names, widths) but lose precise lengths, design rules, and signal integrity analysis.
52
+
53
+ ```bash
54
+ pip install -e .
55
+ ```
56
+
57
+ ## Configuration
58
+
59
+ ### Claude Desktop
60
+
61
+ Edit your config file:
62
+ - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
63
+ - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
64
+ - **Linux**: `~/.config/Claude/claude_desktop_config.json`
65
+
66
+ **With KiCad Python (recommended):**
67
+
68
+ ```json
69
+ {
70
+ "mcpServers": {
71
+ "kicad": {
72
+ "type": "stdio",
73
+ "command": "C:\\Program Files\\KiCad\\10.0\\bin\\python.exe",
74
+ "args": ["-m", "kicad_mcp_server"],
75
+ "cwd": "C:\\Users\\YourName\\Desktop\\kicad-mcp-server"
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ **With system Python (fallback):**
82
+
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "kicad": {
87
+ "type": "stdio",
88
+ "command": "python",
89
+ "args": ["-m", "kicad_mcp_server"],
90
+ "cwd": "C:\\Users\\YourName\\Desktop\\kicad-mcp-server"
91
+ }
92
+ }
93
+ }
94
+ ```
95
+
96
+ ### Claude Code CLI
97
+
98
+ ```bash
99
+ # With KiCad Python (recommended)
100
+ claude mcp add kicad -s user -- "C:\Program Files\KiCad\10.0\bin\python.exe" -m kicad_mcp_server
101
+
102
+ # With system Python (fallback)
103
+ claude mcp add kicad -s user -- python -m kicad_mcp_server
104
+ ```
105
+
106
+ ### Cursor / Windsurf / Other MCP Clients
107
+
108
+ Use the same config structure with your client's MCP settings. Point `command` to KiCad Python for full analysis, or `python` for fallback mode.
109
+
110
+ ### Verify Installation
111
+
112
+ After restarting your AI client, ask it:
113
+
114
+ > "What tools are available for KiCad?"
115
+
116
+ You should see a list of KiCad MCP tools. To verify pcbnew is working:
117
+
118
+ > "Get PCB statistics for MyBoard.kicad_pcb"
119
+
120
+ If the response shows **Design Rules** section with clearance/width values, pcbnew is active. If it shows **board dimensions as approximation**, you're in text-only mode.
121
+
122
+ Common issues:
123
+ 1. KiCad is installed and `kicad-cli` is accessible
124
+ 2. The `cwd` path in your config points to the correct directory
125
+ 3. Python can import the package (`python -c "import kicad_mcp_server"`)
126
+
127
+ ## Usage
128
+
129
+ Once configured, you can interact with your KiCad projects through natural language in your AI assistant. Below are common workflows.
130
+
131
+ ### 1. Analyze a Schematic
132
+
133
+ Point the AI to your `.kicad_sch` file and ask questions:
134
+
135
+ > "List all components in C:\Projects\MyBoard\MyBoard.kicad_sch"
136
+
137
+ > "Show me all the power nets in MyBoard.kicad_sch"
138
+
139
+ > "Find all resistors with value 10k"
140
+
141
+ The AI will call tools like `list_schematic_components`, `list_schematic_nets`, `search_symbols` behind the scenes.
142
+
143
+ ### 2. Trace Connections (Netlist-based)
144
+
145
+ First export a netlist, then trace connections with pin-level accuracy:
146
+
147
+ > "Generate a netlist from MyBoard.kicad_sch"
148
+
149
+ > "Trace all connections from U1"
150
+
151
+ > "What pins are connected to the I2C_SDA net?"
152
+
153
+ This uses `generate_netlist` and `trace_netlist_connection` for 100% accurate results.
154
+
155
+ ### 3. Validate Your Design
156
+
157
+ Run electrical and design rule checks:
158
+
159
+ > "Run ERC on MyBoard.kicad_sch and show me any errors"
160
+
161
+ > "Run DRC on MyBoard.kicad_pcb"
162
+
163
+ > "Are there any unconnected pins?"
164
+
165
+ Uses `run_erc`, `run_drc`, and `detect_pin_conflicts`.
166
+
167
+ ### 4. Analyze PCB
168
+
169
+ > "Get statistics for MyBoard.kicad_pcb"
170
+
171
+ > "List all footprints on the top layer"
172
+
173
+ > "Find all tracks on the VDD_nRF net"
174
+
175
+ > "Analyze PCB routing quality"
176
+
177
+ > "Check signal integrity - are USB differential pairs length-matched?"
178
+
179
+ > "Analyze power integrity - how's the GND coverage?"
180
+
181
+ ### 5. Create a New Project
182
+
183
+ > "Create a new KiCad project called LED_Blinker in C:\Projects"
184
+
185
+ > "Add a 1k resistor called R1 to the schematic"
186
+
187
+ > "Add an LED called D1"
188
+
189
+ > "Add a wire from R1 pin 2 to D1 pin 1"
190
+
191
+ ### 6. Pin Analysis and Code Generation
192
+
193
+ > "Analyze pin functions for U1 in MyBoard.kicad_sch"
194
+
195
+ > "Detect any pin conflicts in the design"
196
+
197
+ > "Generate a device tree file for the STM32 on this board"
198
+
199
+ > "Generate pytest hardware tests for all I2C devices"
200
+
201
+ ## Available Tools Reference
202
+
203
+ ### Schematic Analysis
204
+
205
+ | Tool | Description |
206
+ |------|-------------|
207
+ | `list_schematic_components` | List components with filtering by type, value, or DNP status |
208
+ | `list_schematic_nets` | List all nets, optionally filter power nets |
209
+ | `get_schematic_info` | Project metadata and statistics |
210
+ | `search_symbols` | Search components by pattern (regex) |
211
+ | `get_symbol_details` | Detailed info for a specific component |
212
+
213
+ ### PCB Analysis
214
+
215
+ | Tool | Description |
216
+ |------|-------------|
217
+ | `list_pcb_footprints` | List footprints with optional layer filter |
218
+ | `get_pcb_statistics` | Board dimensions, layer count, design rules |
219
+ | `find_tracks_by_net` | Track segments, lengths, widths, vias for a specific net |
220
+ | `analyze_pcb_nets` | Routing analysis: width/via distribution, net length ranking |
221
+ | `analyze_pcb_signal_integrity` | Diff pair matching, RF traces, longest signal nets |
222
+ | `analyze_pcb_power_integrity` | Power zones, GND coverage, power routing analysis |
223
+
224
+ ### Netlist Analysis
225
+
226
+ | Tool | Description |
227
+ |------|-------------|
228
+ | `generate_netlist` | Export netlist from schematic via kicad-cli |
229
+ | `trace_netlist_connection` | Trace all connections from a component/pin |
230
+ | `get_netlist_nets` | List all nets with pin connections |
231
+ | `get_netlist_components` | List components with their net connections |
232
+
233
+ ### Validation
234
+
235
+ | Tool | Description |
236
+ |------|-------------|
237
+ | `run_erc` | Electrical Rules Check on schematic |
238
+ | `run_drc` | Design Rules Check on PCB |
239
+ | `detect_pin_conflicts` | Find conflicting pin connections |
240
+
241
+ ### Editing
242
+
243
+ | Tool | Description |
244
+ |------|-------------|
245
+ | `create_kicad_project` | Create project from KiCad template |
246
+ | `add_component_from_library` | Add component with symbol from library |
247
+ | `add_wire` | Add wire connection |
248
+ | `add_label` | Add local label |
249
+ | `setup_pcb_layout` | Initialize PCB with dimensions |
250
+ | `export_gerber` | Export Gerber files |
251
+
252
+ ## Editing Limitations
253
+
254
+ Schematic editing is **experimental**. KiCad has no Python API for schematic editing, so tools use manual S-expression manipulation. When adding components via `add_component_from_library`, the tool automatically reads the symbol definition from KiCad's library files and inserts it into the schematic — this ensures proper rendering.
255
+
256
+ Known limitations:
257
+ - Wire connections may not form perfect electrical connections
258
+ - Visual alignment is basic
259
+ - KiCad must be closed and reopened to see file changes (no hot-reload)
260
+
261
+ **Recommendation**: Use KiCad GUI for design work. Use this MCP server for analysis, validation, and code generation.
262
+
263
+ ## Troubleshooting
264
+
265
+ ### "KiCad template not found"
266
+
267
+ Make sure KiCad is installed at the standard path:
268
+ - **Windows**: `C:\Program Files\KiCad\<version>\`
269
+ - **macOS**: `/Applications/KiCad/`
270
+ - **Linux**: `/usr/share/kicad/`
271
+
272
+ ### "kicad-cli not found"
273
+
274
+ Add KiCad's bin directory to your PATH:
275
+ ```bash
276
+ # Windows example
277
+ set PATH=%PATH%;C:\Program Files\KiCad\10.0\bin
278
+
279
+ # Linux/macOS example
280
+ export PATH="/usr/bin:$PATH"
281
+ ```
282
+
283
+ ### "pcbnew module not found" / PCB analysis is limited
284
+
285
+ pcbnew is only available in KiCad's bundled Python. Two options:
286
+
287
+ **Option A (recommended)**: Configure MCP to use KiCad Python — see [Installation](#recommended-install-into-kicad-python-full-pcb-analysis).
288
+
289
+ **Option B**: Accept text-only mode. You'll still get basic PCB data (footprints, track counts, net names) but without precise lengths or design rules.
290
+
291
+ ### Python 3.14 install fails
292
+
293
+ Make sure you have `pip >= 26.0`:
294
+ ```bash
295
+ pip install --upgrade pip
296
+ pip install -e .
297
+ ```
298
+
299
+ ## Resources
300
+
301
+ - [KiCad Documentation](https://docs.kicad.org/)
302
+ - [KiCad File Format Spec](https://dev-docs.kicad.org/en/file-formats/)
303
+ - [Model Context Protocol](https://modelcontextprotocol.io/)
304
+ - [kicad-cli Documentation](https://docs.kicad.org/en/cli/)
305
+
306
+ ## Acknowledgments
307
+
308
+ Thanks to all contributors and community feedback:
309
+ - [@raffaeler](https://github.com/raffaeler) for KiCad 10 compatibility testing and feedback (#9)
310
+ - [@shivam5594](https://github.com/shivam5594) for Python 3.14 install issue report (#11)
311
+ - [@derekc00](https://github.com/derekc00) for lint fixes (#10)
312
+ - [@befedo](https://github.com/befedo) for SchematicComponent dataclass access bug report and patch (#13)
313
+
314
+ ## License
315
+
316
+ MIT