@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.
- package/README.md +116 -0
- package/config/mcp/antigravity.json +22 -0
- package/config/mcp/claude.json +22 -0
- package/config/mcp/codex.toml +25 -0
- package/docs/adr/ADR-001-KICAD-OPENSCAD-MCP-STRATEGY.md +334 -0
- package/docs/review_documentation.md +121 -0
- package/installer.js +358 -0
- package/mcp_servers/kicad-mcp-server/.env.example +22 -0
- package/mcp_servers/kicad-mcp-server/.github/workflows/ci.yml +36 -0
- package/mcp_servers/kicad-mcp-server/CLAUDE.md +487 -0
- package/mcp_servers/kicad-mcp-server/README.md +316 -0
- package/mcp_servers/kicad-mcp-server/docs/DEVICE_TREE.md +416 -0
- package/mcp_servers/kicad-mcp-server/docs/INSTALLATION.md +332 -0
- package/mcp_servers/kicad-mcp-server/docs/PIN_ANALYSIS.md +332 -0
- package/mcp_servers/kicad-mcp-server/docs/README.md +240 -0
- package/mcp_servers/kicad-mcp-server/docs/TESTING.md +613 -0
- package/mcp_servers/kicad-mcp-server/docs/VALIDATION.md +268 -0
- package/mcp_servers/kicad-mcp-server/pyproject.toml +96 -0
- package/mcp_servers/kicad-mcp-server/requirements-dev.txt +16 -0
- package/mcp_servers/kicad-mcp-server/requirements-test.txt +24 -0
- package/mcp_servers/kicad-mcp-server/requirements.txt +13 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__init__.py +3 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__main__.py +17 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/config.py +46 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/types.py +87 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/netlist_parser.py +234 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser.py +375 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser_kicad.py +327 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/schematic_parser.py +902 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/server.py +71 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/arduino/connectivity_test.cpp.j2 +189 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/atmega.dts.j2 +77 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/esp32.dts.j2 +77 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/nrf52.dts.j2 +77 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/stm32f4.dts.j2 +89 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/esp_idf/test_suite.c.j2 +340 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/pytest/test_connectivity.py.j2 +147 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/st_hal/hal_test.c.j2 +313 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_gpio_test.py.j2 +99 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_i2c_test.py.j2 +117 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_pinmux_test.py.j2 +43 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_spi_test.py.j2 +94 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_gpio_test.c.j2 +113 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_i2c_test.c.j2 +101 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_spi_test.c.j2 +94 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/unittest/test_schematic.py.j2 +172 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/__init__.py +36 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/device_tree.py +1187 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/hierarchical_analysis.py +211 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/netlist.py +320 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/parts_registry.py +142 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb.py +955 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb_layout.py +308 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pin_analysis.py +765 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/project.py +196 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic.py +319 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_editor.py +674 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_search.py +158 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/validation.py +866 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/visualization.py +225 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/file_handlers.py +65 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_cli.py +103 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_version.py +103 -0
- package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/parts_registry.py +197 -0
- package/mcp_servers/kicad-mcp-server/tests/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/tests/examples/ESP32S3_TEST.md +219 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/README.md +65 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/example_pcb.kicad_pcb +177 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/example_schematic.kicad_sch +145 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/child.kicad_sch +24 -0
- package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/root.kicad_sch +38 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/__init__.py +1 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_hierarchical_labels.py +195 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_kicad_cli.py +116 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_netlist_cache_path.py +29 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic.py +189 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic_hierarchy.py +69 -0
- package/mcp_servers/kicad-mcp-server/tests/test_tools/test_visualization.py +136 -0
- package/mcp_servers/kicad-mcp-server/uv.lock +2873 -0
- package/mcp_servers/openscad-mcp-server/.dockerignore +9 -0
- package/mcp_servers/openscad-mcp-server/.github/workflows/test.yml +40 -0
- package/mcp_servers/openscad-mcp-server/Dockerfile +29 -0
- package/mcp_servers/openscad-mcp-server/LICENSE +21 -0
- package/mcp_servers/openscad-mcp-server/README.md +154 -0
- package/mcp_servers/openscad-mcp-server/docs/audit.md +56 -0
- package/mcp_servers/openscad-mcp-server/docs/docker.md +66 -0
- package/mcp_servers/openscad-mcp-server/docs/issue-followup.md +19 -0
- package/mcp_servers/openscad-mcp-server/docs/jetson.md +17 -0
- package/mcp_servers/openscad-mcp-server/glama.json +4 -0
- package/mcp_servers/openscad-mcp-server/legacy/README.md +15 -0
- package/mcp_servers/openscad-mcp-server/legacy/README.original.md +294 -0
- package/mcp_servers/openscad-mcp-server/legacy/implementation_plan.md +100 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/download_sam2_checkpoint.py +115 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/src/ai/sam_segmentation.py +209 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/src/models/threestudio_generator.py +231 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/src/workflow/image_to_model_pipeline.py +260 -0
- package/mcp_servers/openscad-mcp-server/legacy/old/test_sam2_segmentation.py +96 -0
- package/mcp_servers/openscad-mcp-server/legacy/requirements.txt +57 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/README.md +39 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/ai-driven-code-generation.md +122 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/export-formats.md +76 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/ai/ai_service.py.md +51 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/main.py.md +63 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/models/code_generator.py.md +63 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/nlp/parameter_extractor.py.md +63 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/ai/natural-language-processing.md +78 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/nlp/parameter-extraction.md +173 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/export-formats.md +91 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/openscad-basics.md +66 -0
- package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/primitive-testing.md +79 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/ai/ai_service.py +257 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/ai/gemini_api.py +161 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/ai/venice_api.py +203 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/config.py +121 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/main.py +1456 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/main.py.new +404 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/main_remote.py +401 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/code_generator.py +321 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/cuda_mvs.py +209 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/models/scad_templates/basic_shapes.scad +144 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/nlp/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/nlp/parameter_extractor.py +388 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/wrapper.py +418 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/__init__.py +1 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/printer_discovery.py +471 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/connection_manager.py +537 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_client.py +435 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_server.py +787 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/remote/error_handling.py +415 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/testing/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/testing/primitive_tester.py +203 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/testing/test_primitives.py +98 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/__init__.py +1 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/cad_exporter.py +241 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/format_validator.py +206 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_exporter.py +140 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_repair.py +91 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_validator.py +123 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/__init__.py +0 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/headless_renderer.py +52 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/renderer.py +177 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/visualization/web_interface.py +639 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/workflow/image_approval.py +148 -0
- package/mcp_servers/openscad-mcp-server/legacy/src/workflow/multi_view_to_model_pipeline.py +338 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_complete_workflow.py +374 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_cuda_mvs.py +191 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_gemini_api.py +168 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_image_approval.py +192 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_image_approval_workflow.py +251 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_image_to_model_pipeline.py +145 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_model_selection.py +41 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_multi_view_pipeline.py +290 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_primitives.sh +13 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_rabbit_direct.py +71 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_remote_cuda_mvs.py +283 -0
- package/mcp_servers/openscad-mcp-server/legacy/test_venice_example.py +69 -0
- package/mcp_servers/openscad-mcp-server/pyproject.toml +33 -0
- package/mcp_servers/openscad-mcp-server/requirements.txt +2 -0
- package/mcp_servers/openscad-mcp-server/scad/simple_cube.scad +2 -0
- package/mcp_servers/openscad-mcp-server/scripts/test_docker.py +220 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__init__.py +3 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__main__.py +3 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/engine.py +94 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/geometry.py +242 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/server.py +245 -0
- package/mcp_servers/openscad-mcp-server/src/openscad_mcp/service.py +190 -0
- package/mcp_servers/openscad-mcp-server/tests/conftest.py +17 -0
- package/mcp_servers/openscad-mcp-server/tests/test_engine.py +37 -0
- package/mcp_servers/openscad-mcp-server/tests/test_geometry.py +106 -0
- package/mcp_servers/openscad-mcp-server/tests/test_integration.py +172 -0
- package/mcp_servers/openscad-mcp-server/tests/test_transports.py +314 -0
- package/mcp_servers/openscad-mcp-server/uv.lock +1123 -0
- package/package.json +44 -0
- package/scripts/install_mcps.sh +86 -0
- package/scripts/openscad_wrapper.sh +62 -0
- package/scripts/run_kicad_mcp.sh +25 -0
- package/scripts/run_openscad_mcp.sh +41 -0
- package/scripts/test_mcp_connection.py +626 -0
- package/scripts/test_mcp_connection.sh +168 -0
- package/skills/code-first-hardware-design/SKILL.md +260 -0
- package/skills/pcb-constraint-definition/SKILL.md +236 -0
- package/skills/pcb-layout-routing-automation/SKILL.md +153 -0
- package/skills/pcb-validation-dfm-signoff/SKILL.md +194 -0
- 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
|