@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,332 @@
1
+ # Installation Guide for KiCad MCP Server
2
+
3
+ ## Prerequisites
4
+
5
+ ### System Requirements
6
+ - **Python**: 3.10 or higher
7
+ - **KiCad**: 9.0 or higher (for file compatibility)
8
+ - **Operating System**: Windows, macOS, or Linux
9
+
10
+ ### KiCad Installation
11
+
12
+ **Linux:**
13
+ ```bash
14
+ sudo apt install kicad # Ubuntu/Debian
15
+ sudo dnf install kicad # Fedora
16
+ ```
17
+
18
+ **macOS:**
19
+ ```bash
20
+ brew install kicad
21
+ ```
22
+
23
+ **Windows:**
24
+ Download from [KiCad website](https://www.kicad.org/download/)
25
+
26
+ ## Installation Methods
27
+
28
+ ### Method 1: Install from PyPI (Recommended)
29
+
30
+ ```bash
31
+ # Install core package
32
+ pip install kicad-mcp-server
33
+
34
+ # Or install with development dependencies
35
+ pip install kicad-mcp-server[dev]
36
+ ```
37
+
38
+ ### Method 2: Install from Source
39
+
40
+ ```bash
41
+ # Clone repository
42
+ git clone https://github.com/yourusername/kicad-mcp-server.git
43
+ cd kicad-mcp-server
44
+
45
+ # Install in development mode
46
+ pip install -e .
47
+
48
+ # Or with development dependencies
49
+ pip install -e ".[dev]"
50
+ ```
51
+
52
+ ### Method 3: Install with requirements.txt
53
+
54
+ ```bash
55
+ # Install core dependencies
56
+ pip install -r requirements.txt
57
+
58
+ # Install development dependencies
59
+ pip install -r requirements-dev.txt
60
+
61
+ # Install testing dependencies (optional, for hardware testing)
62
+ pip install -r requirements-test.txt
63
+ ```
64
+
65
+ ## Dependency Details
66
+
67
+ ### Core Dependencies (requirements.txt)
68
+
69
+ - **mcp[cli]>=1.2.0** - Model Context Protocol framework
70
+ - **fastmcp>=0.1.0** - Fast MCP server implementation
71
+ - **kicad-skip>=0.2.5** - KiCad file parsing library
72
+ - **pydantic>=2.0.0** - Data validation and parsing
73
+ - **python-dotenv>=1.0.0** - Environment variable management
74
+ - **jinja2>=3.1.0** - Template engine for code generation
75
+
76
+ ### Development Dependencies (requirements-dev.txt)
77
+
78
+ - **pytest>=7.0.0** - Testing framework
79
+ - **pytest-asyncio>=0.21.0** - Async test support
80
+ - **pytest-cov>=4.0.0** - Code coverage reporting
81
+ - **black>=23.0.0** - Code formatter
82
+ - **ruff>=0.1.0** - Fast Python linter
83
+ - **mypy>=1.0.0** - Static type checker
84
+
85
+ ### Testing Dependencies (requirements-test.txt)
86
+
87
+ These are optional dependencies for running hardware tests with actual hardware interaction:
88
+
89
+ - **RPi.GPIO>=0.7.0** - Raspberry Pi GPIO (ARM only)
90
+ - **smbus2>=0.4.0** - I2C communication
91
+ - **spidev>=3.5** - SPI communication (ARM only)
92
+ - **pyserial>=3.5** - Serial communication
93
+ - **mock>=4.0.0** - Mocking framework
94
+
95
+ ## KiCad Integration
96
+
97
+ ### Verify KiCad Installation
98
+
99
+ ```bash
100
+ # Check KiCad version
101
+ kicad-cli --version
102
+
103
+ # Or check pcbnew Python module
104
+ python -c "import pcbnew; print(pcbnew.GetBuildVersion())"
105
+ ```
106
+
107
+ ### Path Configuration
108
+
109
+ If KiCad is not in your system PATH, you may need to add it:
110
+
111
+ **Linux/macOS:**
112
+ ```bash
113
+ # Add to ~/.bashrc or ~/.zshrc
114
+ export PATH=$PATH:/path/to/kicad/bin
115
+ export PYTHONPATH=$PYTHONPATH:/path/to/kicad/lib/python3.10/site-packages
116
+ ```
117
+
118
+ **Windows:**
119
+ ```cmd
120
+ REM Add to System Environment Variables
121
+ set PATH=%PATH%;C:\Program Files\KiCad\bin
122
+ set PYTHONPATH=%PYTHONPATH%;C:\Program Files\KiCad\lib\python3.10\site-packages
123
+ ```
124
+
125
+ ## Claude Desktop Configuration
126
+
127
+ ### Linux/macOS
128
+
129
+ Add to `~/.config/Claude/claude_desktop_config.json`:
130
+
131
+ ```json
132
+ {
133
+ "mcpServers": {
134
+ "kicad": {
135
+ "type": "stdio",
136
+ "command": "python",
137
+ "args": ["-m", "kicad_mcp_server"],
138
+ "cwd": "/path/to/kicad-mcp-server",
139
+ "env": {
140
+ "PYTHONPATH": "/path/to/kicad-mcp-server/src"
141
+ }
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ ### Windows
148
+
149
+ Add to `%APPDATA%\Claude\claude_desktop_config.json`:
150
+
151
+ ```json
152
+ {
153
+ "mcpServers": {
154
+ "kicad": {
155
+ "type": "stdio",
156
+ "command": "python",
157
+ "args": ["-m", "kicad_mcp_server"],
158
+ "cwd": "C:\\path\\to\\kicad-mcp-server",
159
+ "env": {
160
+ "PYTHONPATH": "C:\\path\\to\\kicad-mcp-server\\src"
161
+ }
162
+ }
163
+ }
164
+ }
165
+ ```
166
+
167
+ ## Docker Installation
168
+
169
+ ### Using Dockerfile
170
+
171
+ ```dockerfile
172
+ FROM python:3.11-slim
173
+
174
+ # Install system dependencies
175
+ RUN apt-get update && apt-get install -y \
176
+ kicad \
177
+ && rm -rf /var/lib/apt/lists/*
178
+
179
+ # Set working directory
180
+ WORKDIR /app
181
+
182
+ # Copy project files
183
+ COPY . /app/
184
+
185
+ # Install Python dependencies
186
+ RUN pip install -r requirements.txt
187
+
188
+ # Run the server
189
+ CMD ["python", "-m", "kicad_mcp_server"]
190
+ ```
191
+
192
+ ### Build and Run
193
+
194
+ ```bash
195
+ # Build image
196
+ docker build -t kicad-mcp-server .
197
+
198
+ # Run container
199
+ docker run -v /path/to/projects:/projects kicad-mcp-server
200
+ ```
201
+
202
+ ## Virtual Environment (Recommended)
203
+
204
+ ```bash
205
+ # Create virtual environment
206
+ python -m venv venv
207
+
208
+ # Activate virtual environment
209
+ # Linux/macOS:
210
+ source venv/bin/activate
211
+ # Windows:
212
+ venv\Scripts\activate
213
+
214
+ # Install dependencies
215
+ pip install -r requirements.txt
216
+ ```
217
+
218
+ ## Verification
219
+
220
+ ### Test Installation
221
+
222
+ ```bash
223
+ # Test MCP server
224
+ python -m kicad_mcp_server
225
+
226
+ # Test KiCad integration
227
+ python -c "import pcbnew; print('KiCad integration: OK')"
228
+
229
+ # Run tests
230
+ pytest tests/ -v
231
+ ```
232
+
233
+ ### Check Available Tools
234
+
235
+ ```python
236
+ from kicad_mcp_server import server
237
+
238
+ # Get MCP server
239
+ mcp_server = server.create_server()
240
+
241
+ # List available tools
242
+ print("Available tools:")
243
+ for tool in mcp_server._tools.values():
244
+ print(f" - {tool.name}")
245
+ ```
246
+
247
+ ## Troubleshooting
248
+
249
+ ### Import Errors
250
+
251
+ **Problem:** `ImportError: No module named 'pcbnew'`
252
+
253
+ **Solution:**
254
+ ```bash
255
+ # Ensure KiCad is installed and in PATH
256
+ which kicad-cli
257
+
258
+ # Check Python path
259
+ python -c "import sys; print(sys.path)"
260
+
261
+ # Reinstall with proper path
262
+ export PYTHONPATH=$PYTHONPATH:/path/to/kicad/lib/python3.10/site-packages
263
+ ```
264
+
265
+ ### Permission Errors
266
+
267
+ **Problem:** `Permission denied` when accessing KiCad files
268
+
269
+ **Solution:**
270
+ ```bash
271
+ # Fix file permissions
272
+ chmod +x /path/to/kicad/bin/kicad-cli
273
+
274
+ # Or use sudo (not recommended for development)
275
+ sudo pip install -r requirements.txt
276
+ ```
277
+
278
+ ### Docker Issues
279
+
280
+ **Problem:** `kicad-cli not found` in Docker
281
+
282
+ **Solution:**
283
+ ```dockerfile
284
+ # Install KiCad in Dockerfile
285
+ RUN apt-get update && apt-get install -y kicad
286
+
287
+ # Or mount KiCad from host
288
+ docker run -v /usr/share/kicad:/usr/share/kicad kicad-mcp-server
289
+ ```
290
+
291
+ ## Updating Installation
292
+
293
+ ```bash
294
+ # Update to latest version
295
+ pip install --upgrade kicad-mcp-server
296
+
297
+ # Or from source
298
+ git pull origin main
299
+ pip install -e .
300
+ ```
301
+
302
+ ## Uninstallation
303
+
304
+ ```bash
305
+ # Uninstall package
306
+ pip uninstall kicad-mcp-server
307
+
308
+ # Clean up virtual environment
309
+ deactivate
310
+ rm -rf venv/
311
+ ```
312
+
313
+ ## Next Steps
314
+
315
+ After installation:
316
+
317
+ 1. **Configure Claude Desktop** - See Configuration section above
318
+ 2. **Test basic functionality** - Try analyzing a sample schematic
319
+ 3. **Read documentation** - Check `docs/` directory for detailed guides
320
+ 4. **Run examples** - See `examples/` directory for usage examples
321
+
322
+ ## Support
323
+
324
+ - **Documentation**: See `docs/` directory
325
+ - **Issues**: [GitHub Issues](https://github.com/yourusername/kicad-mcp-server/issues)
326
+ - **Discussions**: [GitHub Discussions](https://github.com/yourusername/kicad-mcp-server/discussions)
327
+
328
+ ---
329
+
330
+ **Last Updated**: 2025-01-09
331
+ **Python Version**: 3.10+
332
+ **KiCad Version**: 9.0+
@@ -0,0 +1,332 @@
1
+ # Pin Analysis Guide
2
+
3
+ Comprehensive guide for using KiCad MCP Server's pin analysis and configuration tools.
4
+
5
+ ## Overview
6
+
7
+ Pin analysis tools provide detailed information about pin functions, detect conflicts, and extract pin multiplexing configurations for embedded systems development.
8
+
9
+ ## Tools
10
+
11
+ ### `analyze_pin_functions(schematic_path: str, reference: str = "") -> str`
12
+
13
+ Analyze pin functions and detect peripheral assignments.
14
+
15
+ **What it does:**
16
+ - Identifies MCU components and their families
17
+ - Infers pin functions from net names (I2C, SPI, UART, GPIO)
18
+ - Provides MCU-specific pin mapping information
19
+ - Shows alternate functions for each pin
20
+
21
+ **Example:**
22
+ ```python
23
+ # Analyze all components in schematic
24
+ result = analyze_pin_functions("board.kicad_sch")
25
+
26
+ # Analyze specific MCU
27
+ result = analyze_pin_functions("board.kicad_sch", reference="U1")
28
+ print(result)
29
+ ```
30
+
31
+ **Output includes:**
32
+ - Component reference and value
33
+ - MCU family identification
34
+ - Pin names and numbers
35
+ - Net connections
36
+ - Inferred peripheral functions
37
+ - MCU-specific alternate functions
38
+ - Maximum current ratings
39
+ - 5V tolerance information
40
+
41
+ ### `detect_pin_conflicts(schematic_path: str) -> str`
42
+
43
+ Detect conflicting electrical connections in your design.
44
+
45
+ **What it detects:**
46
+ - Multiple outputs on same net
47
+ - Power-to-power connections
48
+ - Unconnected input pins
49
+ - Pin type mismatches
50
+
51
+ **Example:**
52
+ ```python
53
+ conflicts = detect_pin_conflicts("board.kicad_sch")
54
+ if "❌" in conflicts:
55
+ print("Pin conflicts found:")
56
+ print(conflicts)
57
+ else:
58
+ print("No pin conflicts detected")
59
+ ```
60
+
61
+ **Severity levels:**
62
+ - ❌ **Error**: Must fix before manufacturing (e.g., multiple outputs)
63
+ - ⚠️ **Warning**: Review but may be acceptable (e.g., unconnected inputs)
64
+
65
+ ### `extract_pinmux_config(schematic_path: str, component_type: str = "") -> str`
66
+
67
+ Extract pin multiplexing configuration for MCUs.
68
+
69
+ **What it provides:**
70
+ - Pin-to-peripheral mappings
71
+ - Alternate function assignments
72
+ - GPIO configuration details
73
+ - MCU-specific information
74
+
75
+ **Example:**
76
+ ```python
77
+ # Extract pinmux for all MCUs
78
+ pinmux = extract_pinmux_config("board.kicad_sch")
79
+
80
+ # Extract for specific MCU family
81
+ stm32_pinmux = extract_pinmux_config("board.kicad_sch", component_type="stm32")
82
+ print(stm32_pinmux)
83
+ ```
84
+
85
+ **Output includes:**
86
+ - Pin names and numbers
87
+ - Peripheral assignments (I2C, SPI, UART, etc.)
88
+ - Alternate function options
89
+ - Code generation suggestions
90
+ - MCU-specific configuration details
91
+
92
+ ## Supported MCU Families
93
+
94
+ ### STM32 (STM32F, STM32H, STM32L)
95
+ - Pin naming: PA0, PB12, etc.
96
+ - Alternate functions: GPIO, ADC, TIM, USART, SPI, I2C, CAN
97
+ - Max current: 25mA per pin
98
+ - 5V tolerance: No (most pins)
99
+
100
+ ### ESP32 (ESP32, ESP32-S2, ESP32-S3)
101
+ - Pin naming: IO0, GPIO2, etc.
102
+ - Alternate functions: GPIO, ADC, DAC, I2C, SPI, UART, TOUCH
103
+ - Max current: 40mA per pin
104
+ - 5V tolerance: No
105
+
106
+ ### nRF52 (nRF52832, nRF52840)
107
+ - Pin naming: P0.00, P0.01, etc.
108
+ - Alternate functions: GPIO, ADC, SPI, I2C, UART, PWM, QSPI
109
+ - Max current: 5mA per pin (typical)
110
+ - 5V tolerance: No
111
+
112
+ ### ATmega (ATmega328P, ATmega2560)
113
+ - Pin naming: PD0, PD1, etc. (port + number)
114
+ - Alternate functions: GPIO, UART, SPI, I2C, ADC
115
+ - Max current: 40mA per pin
116
+ - 5V tolerance: Yes
117
+
118
+ ### SAMD (ATSAMD21, ATSAMD51)
119
+ - Pin naming: PA00, PA12, etc.
120
+ - Alternate functions: GPIO, ADC, DAC, I2C, SPI, UART
121
+ - Max current: Varies by series
122
+ - 5V tolerance: No
123
+
124
+ ### RP2040
125
+ - Pin naming: GPIO0, GPIO1, etc.
126
+ - Alternate functions: GPIO, SPI, UART, I2C, PWM, ADC
127
+ - Max current: 16mA per pin
128
+ - 5V tolerance: No
129
+
130
+ ## Peripheral Function Detection
131
+
132
+ ### I2C Detection
133
+ Net names containing:
134
+ - `I2C`, `TWI`
135
+ - `SDA`, `SCL`
136
+ - `I2C_SDA`, `I2C_SCL`
137
+
138
+ ### SPI Detection
139
+ Net names containing:
140
+ - `SPI`
141
+ - `MISO`, `MOSI`, `SCK`, `CS`, `NSS`
142
+ - `SPI_MOSI`, `SPI_MISO`
143
+
144
+ ### UART Detection
145
+ Net names containing:
146
+ - `UART`, `USART`, `SERIAL`
147
+ - `TX`, `RX`, `CTS`, `RTS`
148
+ - `UART_TX`, `UART_RX`
149
+
150
+ ### GPIO Detection
151
+ Net names containing:
152
+ - `GPIO`, `IO`
153
+ - `PA0`, `PB12` (STM32 style)
154
+ - `P0.00` (nRF52 style)
155
+
156
+ ## Usage Patterns
157
+
158
+ ### Complete Pin Analysis Workflow
159
+
160
+ ```python
161
+ # 1. Analyze all pins in schematic
162
+ pin_analysis = analyze_pin_functions("board.kicad_sch")
163
+ print(pin_analysis)
164
+
165
+ # 2. Check for conflicts
166
+ conflicts = detect_pin_conflicts("board.kicad_sch")
167
+ if "❌" in conflicts:
168
+ print("WARNING: Pin conflicts detected!")
169
+ print(conflicts)
170
+
171
+ # 3. Extract pinmux configuration
172
+ pinmux = extract_pinmux_config("board.kicad_sch", "stm32")
173
+ print(pinmux)
174
+ ```
175
+
176
+ ### Device Tree Generation Preparation
177
+
178
+ ```python
179
+ # Before generating device tree, validate pin configuration
180
+ from kicad_mcp_server.tools.device_tree import validate_pin_configuration
181
+
182
+ validation = validate_pin_configuration("board.kicad_sch")
183
+ if "✅" in validation:
184
+ # Safe to generate device tree
185
+ generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
186
+ ```
187
+
188
+ ### Code Generation Workflow
189
+
190
+ ```python
191
+ # Analyze pins for code generation
192
+ pinmux = extract_pinmux_config("board.kicad_sch", "esp32")
193
+
194
+ # Use pinmux info for code generation
195
+ # (This can be integrated into your code generator)
196
+ for pin_config in pinmux:
197
+ if pin_config['peripheral'] == 'I2C':
198
+ # Generate I2C initialization code
199
+ pass
200
+ elif pin_config['peripheral'] == 'SPI':
201
+ # Generate SPI initialization code
202
+ pass
203
+ ```
204
+
205
+ ## Common Scenarios
206
+
207
+ ### Scenario 1: I2C Bus Analysis
208
+
209
+ ```python
210
+ # Analyze I2C pins
211
+ result = analyze_pin_functions("board.kicad_sch")
212
+
213
+ # Look for I2C functionality
214
+ # Output will show:
215
+ # - SDA and SCL pins
216
+ # - I2C bus number
217
+ # - Connected devices
218
+ # - Alternate functions
219
+
220
+ # Extract specific I2C configuration
221
+ i2c_devices = extract_i2c_devices("board.kicad_sch")
222
+ ```
223
+
224
+ ### Scenario 2: SPI Peripheral Setup
225
+
226
+ ```python
227
+ # Analyze SPI pins
228
+ result = analyze_pin_functions("board.kicad_sch", reference="U1")
229
+
230
+ # Look for SPI functionality
231
+ # Output will show:
232
+ # - MOSI, MISO, SCK pins
233
+ # - CS pins
234
+ # - SPI bus number
235
+ # - Maximum frequency
236
+
237
+ # Extract SPI configuration
238
+ spi_devices = extract_spi_devices("board.kicad_sch")
239
+ ```
240
+
241
+ ### Scenario 3: GPIO Configuration
242
+
243
+ ```python
244
+ # Get all GPIO pins
245
+ pinmux = extract_pinmux_config("board.kicad_sch", "stm32")
246
+
247
+ # Generate GPIO initialization code
248
+ for pin in pinmux['gpio_pins']:
249
+ print(f"GPIO: {pin['name']}")
250
+ print(f" Function: {pin.get('function', 'GPIO')}")
251
+ print(f" Max Current: {pin.get('max_current', 0)} mA")
252
+ print(f" 5V Tolerant: {pin.get('is_5v_tolerant', False)}")
253
+ ```
254
+
255
+ ## Conflict Resolution
256
+
257
+ ### Multiple Outputs on Same Net
258
+
259
+ ```python
260
+ # Detect conflicts
261
+ conflicts = detect_pin_conflicts("board.kicad_sch")
262
+
263
+ # If multiple outputs found:
264
+ # 1. Identify the conflicting pins
265
+ # 2. Remove one output or add isolation
266
+ # 3. Re-run conflict detection
267
+ ```
268
+
269
+ ### Unconnected Input Pins
270
+
271
+ ```python
272
+ # Find unconnected inputs
273
+ conflicts = detect_pin_conflicts("board.kicad_sch")
274
+
275
+ # For each unconnected input:
276
+ # - Add pull-up/pull-down resistor if needed
277
+ # - Connect to appropriate signal
278
+ # - Or explicitly mark as unused (if design intent)
279
+ ```
280
+
281
+ ## Best Practices
282
+
283
+ 1. **Name Your Nets**: Use descriptive net names (I2C_SDA, SPI_MOSI)
284
+ 2. **Run Pin Analysis Early**: Check pin functions during schematic design
285
+ 3. **Document Design Decisions**: Note why certain pins are configured
286
+ 4. **Check for Conflicts**: Run conflict detection before PCB layout
287
+ 5. **Verify Pinmux**: Ensure pinmux matches your firmware configuration
288
+
289
+ ## Troubleshooting
290
+
291
+ **Issue:** Pin functions not detected
292
+ - **Solution:** Use descriptive net names (I2C_SDA, not Net-123)
293
+ - **Solution:** Check component value matches supported patterns
294
+ - **Solution:** Verify component is recognized as MCU
295
+
296
+ **Issue:** MCU family not detected
297
+ - **Solution:** Check component value field (e.g., "STM32F407")
298
+ - **Solution:** Ensure component library is properly configured
299
+ - **Solution:** Try specifying component_type parameter
300
+
301
+ **Issue:** False positive conflicts
302
+ - **Solution:** Review actual circuit design
303
+ - **Solution:** Some warnings may be acceptable (document them)
304
+ - **Solution:** Use pin-specific analysis instead of global detection
305
+
306
+ ## Integration with Code Generation
307
+
308
+ ```python
309
+ # Complete workflow for embedded development
310
+ from kicad_mcp_server.tools import pin_analysis, device_tree, test_generation
311
+
312
+ # 1. Analyze pins
313
+ pin_info = pin_analysis.analyze_pin_functions("board.kicad_sch")
314
+ pinmux = pin_analysis.extract_pinmux_config("board.kicad_sch", "stm32")
315
+
316
+ # 2. Check for conflicts
317
+ conflicts = pin_analysis.detect_pin_conflicts("board.kicad_sch")
318
+ assert "✅" in conflicts, "Fix pin conflicts first"
319
+
320
+ # 3. Generate device tree
321
+ device_tree.generate_device_tree("board.kicad_sch", "stm32f4", "board.dts")
322
+
323
+ # 4. Generate tests
324
+ test_generation.generate_pinmux_test("board.kicad_sch")
325
+ ```
326
+
327
+ ## Resources
328
+
329
+ - [STM32 Pin Multiplexing](https://www.st.com/resource/en/datasheet/)
330
+ - [ESP32 Pin Reference](https://docs.espressif.com/projects/esp-idf/en/latest/)
331
+ - [nRF52 Reference Manual](https://infocenter.nordicsemi.com/)
332
+ - [Device Tree Specification](https://www.devicetree.org/)