Migrate 3D modeling tools to standalone MCP server navi-3d
Phase 0 — Fix MCP error propagation:
- McpClient.call_tool now returns (output, is_error) tuple
- McpTool.execute sets success=False when MCP reports isError=True
- Fixes silent failures where MCP errors looked like success

Phase 1 — Create mcp-server-navi-3d:
- New standalone MCP server in mcp-servers/navi-3d/
- Tools: compile_scad, render_stl, lint_scad
- Session-scoped path resolution via SESSION_FILES_DIR env
- Anti-escape validation for security
- Includes tests/unit/test_scad_analyze.py

Phase 2 — Remove from Navi core:
- Deleted navi/tools/{model_3d,render_3d,scad_lint}.py
- Removed from registry.py builtins and navi/tools/__init__.py
- Updated pyproject.toml testpaths to exclude mcp-servers/

Phase 3 — Wire into Navi config:
- Added navi-3d block to mcp_servers.json (SSE on :8002)
- Updated modeler_3d profile: mcp_servers + updated system_prompt
- All old tool names replaced with mcp_navi-3d_* equivalents

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 9013024 commit 584e8bfb4bc75bd3e7e195dbede691c487aeeba5
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored on 13 May
Showing 22 changed files
View
mcp-servers/navi-3d/app/__init__.py 0 → 100644
View
mcp-servers/navi-3d/app/config.py 0 → 100644
View
mcp-servers/navi-3d/app/mcp_server.py 0 → 100644
View
mcp-servers/navi-3d/app/model_compile.py 0 → 100644
View
mcp-servers/navi-3d/app/render_preview.py 0 → 100644
View
mcp-servers/navi-3d/app/scad_analyze.py 0 → 100644
View
mcp-servers/navi-3d/pyproject.toml 0 → 100644
View
mcp-servers/navi-3d/tests/unit/test_scad_analyze.py 0 → 100644
View
mcp_servers.json
View
navi/core/registry.py
View
navi/mcp/client.py
View
navi/mcp/manager.py
View
navi/mcp/tools.py
View
navi/profiles/modeler_3d/config.json
View
navi/profiles/modeler_3d/system_prompt.txt
View
navi/tools/__init__.py
View
navi/tools/model_3d.py 100644 → 0
View
navi/tools/render_3d.py 100644 → 0
View
navi/tools/scad_lint.py 100644 → 0
View
pyproject.toml
View
tests/unit/test_mcp.py
View
tests/unit/tools/test_scad_lint.py 100644 → 0