@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
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@hybridlabor-api/bdb-hardware-pcb",
3
+ "version": "0.1.0",
4
+ "description": "BDB Hardware & PCB — KiCad + OpenSCAD MCP servers and AI-era skills for schematic capture, PCB layout/routing, DFM sign-off, and parametric 3D enclosure design",
5
+ "main": "installer.js",
6
+ "bin": {
7
+ "bdb-hardware-pcb": "installer.js"
8
+ },
9
+ "scripts": {
10
+ "test": "./scripts/test_mcp_connection.sh --all"
11
+ },
12
+ "files": [
13
+ "skills",
14
+ "mcp_servers",
15
+ "scripts",
16
+ "config",
17
+ "docs",
18
+ "installer.js",
19
+ "README.md"
20
+ ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/hybridlabor-api/bdb-hardware-pcb.git"
24
+ },
25
+ "keywords": [
26
+ "bdb",
27
+ "kicad",
28
+ "openscad",
29
+ "pcb",
30
+ "mcp",
31
+ "hardware",
32
+ "electrical-engineering",
33
+ "mcp-server"
34
+ ],
35
+ "author": "hybridlabor-api",
36
+ "license": "Apache-2.0",
37
+ "private": false,
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "engines": {
42
+ "node": ">=18"
43
+ }
44
+ }
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env bash
2
+ # ==============================================================================
3
+ # AOS Hardware MCP Server Installation & Setup Script
4
+ # ==============================================================================
5
+ # Sets up virtual environments and dependencies for KiCad and OpenSCAD MCP
6
+ # servers, verifies host prerequisites, configures executable permissions,
7
+ # exports lazy tool schemas, and validates connections.
8
+ # ==============================================================================
9
+
10
+ set -euo pipefail
11
+
12
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
13
+ REPO_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
14
+
15
+ echo "================================================================================"
16
+ echo "🛠️ AOS Hardware MCP Server Setup & Installer"
17
+ echo "================================================================================"
18
+
19
+ # 1. Ensure scripts are executable
20
+ chmod +x "${SCRIPT_DIR}/"*.sh 2>/dev/null || true
21
+
22
+ # 2. Check for uv or python3
23
+ UV_BIN=""
24
+ if command -v uv >/dev/null 2>&1; then
25
+ UV_BIN="uv"
26
+ elif [[ -x "${HOME}/.local/bin/uv" ]]; then
27
+ UV_BIN="${HOME}/.local/bin/uv"
28
+ fi
29
+
30
+ if [[ -z "${UV_BIN}" ]]; then
31
+ echo "⚠️ 'uv' not found. Checking python3..."
32
+ if ! command -v python3 >/dev/null 2>&1; then
33
+ echo "❌ Error: python3 is required." >&2
34
+ exit 1
35
+ fi
36
+ fi
37
+
38
+ # 3. Synchronize KiCad MCP Server dependencies
39
+ echo ""
40
+ echo "[1/4] Installing KiCad MCP Server dependencies..."
41
+ KICAD_DIR="${REPO_DIR}/mcp_servers/kicad-mcp-server"
42
+ if [[ -n "${UV_BIN}" ]]; then
43
+ (cd "${KICAD_DIR}" && "${UV_BIN}" sync)
44
+ else
45
+ (cd "${KICAD_DIR}" && python3 -m venv .venv && .venv/bin/pip install -e .)
46
+ fi
47
+ echo " ✓ KiCad MCP Server ready."
48
+
49
+ # 4. Synchronize OpenSCAD MCP Server dependencies
50
+ echo ""
51
+ echo "[2/4] Installing OpenSCAD MCP Server dependencies..."
52
+ OPENSCAD_DIR="${REPO_DIR}/mcp_servers/openscad-mcp-server"
53
+ if [[ -n "${UV_BIN}" ]]; then
54
+ (cd "${OPENSCAD_DIR}" && "${UV_BIN}" sync)
55
+ else
56
+ (cd "${OPENSCAD_DIR}" && python3 -m venv .venv && .venv/bin/pip install -e .)
57
+ fi
58
+ echo " ✓ OpenSCAD MCP Server ready."
59
+
60
+ # 5. Check host CAD prerequisites
61
+ echo ""
62
+ echo "[3/4] Checking host CAD prerequisites..."
63
+ if command -v kicad-cli >/dev/null 2>&1 || [[ -x "/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli" ]]; then
64
+ echo " ✓ KiCad CLI detected on host."
65
+ else
66
+ echo " ℹ️ KiCad is not yet installed on host."
67
+ echo " To install on macOS, run: brew install --cask kicad"
68
+ fi
69
+
70
+ if command -v openscad >/dev/null 2>&1 || [[ -x "/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD" ]]; then
71
+ echo " ✓ OpenSCAD binary detected on host."
72
+ else
73
+ echo " ℹ️ OpenSCAD is not yet installed on host (fallback shim active)."
74
+ echo " To install on macOS, run: brew install --cask openscad@snapshot"
75
+ fi
76
+
77
+ # 6. Export Antigravity lazy schemas and run verification
78
+ echo ""
79
+ echo "[4/4] Generating Antigravity lazy tool schemas & running verification..."
80
+ ANTIGRAVITY_DIR="${HOME}/.gemini/antigravity-cli/mcp"
81
+ python3 "${SCRIPT_DIR}/test_mcp_connection.py" --export-antigravity "${ANTIGRAVITY_DIR}"
82
+
83
+ echo ""
84
+ echo "================================================================================"
85
+ echo "✅ AOS Hardware MCP Installation & Verification Complete!"
86
+ echo "================================================================================"
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env bash
2
+ # ==============================================================================
3
+ # AOS OpenSCAD Wrapper & Fallback Shim
4
+ # ==============================================================================
5
+ # Detects host OpenSCAD installation. If found, delegates all calls to the real
6
+ # binary. If not found, provides an automated fallback shim for version checks
7
+ # and clear instructions for rendering operations.
8
+ # ==============================================================================
9
+
10
+ set -euo pipefail
11
+
12
+ REAL_OPENSCAD=""
13
+
14
+ # 1. Check OPENSCAD_PATH environment variable if set
15
+ if [[ -n "${OPENSCAD_PATH:-}" && -x "${OPENSCAD_PATH}" ]]; then
16
+ REAL_OPENSCAD="${OPENSCAD_PATH}"
17
+ fi
18
+
19
+ # 2. Check standard macOS application locations
20
+ if [[ -z "${REAL_OPENSCAD}" ]]; then
21
+ for candidate in \
22
+ "/Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD" \
23
+ "/Applications/OpenSCAD-2021.01.app/Contents/MacOS/OpenSCAD" \
24
+ "/opt/homebrew/bin/openscad" \
25
+ "/usr/local/bin/openscad"; do
26
+ if [[ -x "${candidate}" ]]; then
27
+ REAL_OPENSCAD="${candidate}"
28
+ break
29
+ fi
30
+ done
31
+ fi
32
+
33
+ # 3. Check PATH (avoiding recursing on this wrapper script)
34
+ if [[ -z "${REAL_OPENSCAD}" ]]; then
35
+ SELF_PATH="$(cd "$(dirname "$0")" && pwd)/$(basename "$0")"
36
+ while IFS= read -r p; do
37
+ if [[ -x "$p" && "$p" != "$SELF_PATH" ]]; then
38
+ REAL_OPENSCAD="$p"
39
+ break
40
+ fi
41
+ done < <(which -a openscad 2>/dev/null || true)
42
+ fi
43
+
44
+ # If real OpenSCAD was found, forward directly to it
45
+ if [[ -n "${REAL_OPENSCAD}" ]]; then
46
+ exec "${REAL_OPENSCAD}" "$@"
47
+ fi
48
+
49
+ # Fallback handling when OpenSCAD is not yet installed on host
50
+ if [[ "$*" == *"--version"* ]]; then
51
+ echo "OpenSCAD Version 2026.09.06 (AOS Managed Shim; Host OpenSCAD not detected - run 'brew install --cask openscad@snapshot')"
52
+ exit 0
53
+ fi
54
+
55
+ # If geometry generation / rendering is requested without OpenSCAD installed:
56
+ echo "================================================================================" >&2
57
+ echo "[AOS OpenSCAD Wrapper] Error: OpenSCAD binary not detected on host." >&2
58
+ echo "To enable 3D STL/PNG/CSG rendering, install OpenSCAD on macOS via:" >&2
59
+ echo " brew install --cask openscad@snapshot" >&2
60
+ echo "Or specify OPENSCAD_EXECUTABLE to a custom binary location." >&2
61
+ echo "================================================================================" >&2
62
+ exit 1
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ # ==============================================================================
3
+ # AOS KiCad MCP Server Runner
4
+ # ==============================================================================
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8
+ REPO_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
9
+ SERVER_DIR="${REPO_DIR}/mcp_servers/kicad-mcp-server"
10
+
11
+ # Export default KiCad CLI path if not set
12
+ export KICAD_CLI_PATH="${KICAD_CLI_PATH:-/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli}"
13
+ export PYTHONPATH="${SERVER_DIR}/src:${PYTHONPATH:-}"
14
+
15
+ # Locate virtual environment or uv
16
+ VENV_BIN="${SERVER_DIR}/.venv/bin/kicad-mcp-server"
17
+ if [[ -x "${VENV_BIN}" ]]; then
18
+ CMD=("${VENV_BIN}")
19
+ elif command -v uv >/dev/null 2>&1; then
20
+ CMD=("uv" "run" "--project" "${SERVER_DIR}" "kicad-mcp-server")
21
+ else
22
+ CMD=("python3" "-m" "kicad_mcp_server")
23
+ fi
24
+
25
+ exec "${CMD[@]}" "$@"
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+ # ==============================================================================
3
+ # AOS OpenSCAD MCP Server Runner
4
+ # ==============================================================================
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8
+ REPO_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
9
+ SERVER_DIR="${REPO_DIR}/mcp_servers/openscad-mcp-server"
10
+
11
+ # Ensure wrapper script is executable
12
+ chmod +x "${SCRIPT_DIR}/openscad_wrapper.sh" 2>/dev/null || true
13
+
14
+ # Set OpenSCAD executable environment variable if not already explicitly set
15
+ export OPENSCAD_EXECUTABLE="${OPENSCAD_EXECUTABLE:-${SCRIPT_DIR}/openscad_wrapper.sh}"
16
+ export PYTHONPATH="${SERVER_DIR}/src:${PYTHONPATH:-}"
17
+
18
+ # Locate virtual environment or uv
19
+ VENV_BIN="${SERVER_DIR}/.venv/bin/openscad-mcp"
20
+ if [[ -x "${VENV_BIN}" ]]; then
21
+ CMD=("${VENV_BIN}")
22
+ elif command -v uv >/dev/null 2>&1; then
23
+ CMD=("uv" "run" "--project" "${SERVER_DIR}" "openscad-mcp")
24
+ else
25
+ CMD=("python3" "-m" "openscad_mcp.server")
26
+ fi
27
+
28
+ # Default to stdio transport if not specified
29
+ HAS_TRANSPORT=0
30
+ for arg in "$@"; do
31
+ if [[ "$arg" == "--transport" ]]; then
32
+ HAS_TRANSPORT=1
33
+ break
34
+ fi
35
+ done
36
+
37
+ if [[ $HAS_TRANSPORT -eq 0 ]]; then
38
+ exec "${CMD[@]}" --transport stdio "$@"
39
+ else
40
+ exec "${CMD[@]}" "$@"
41
+ fi