Skip to main content
Glama
IMPORT_FIXES.md5.31 kB
# FreeCAD Addon Import Fixes ## Summary This document describes the fixes applied to resolve import issues in the FreeCAD AI addon that were causing errors when FreeCAD loaded the addon. ## Original Issues The FreeCAD addon was experiencing several import errors: 1. `No module named 'tools.base'` - Missing base classes for advanced tools 2. `attempted relative import beyond top-level package` - Relative imports failing when FreeCAD loads the addon 3. `cannot import name 'AssemblyToolProvider'` - Import failures in advanced tools 4. Missing core modules and incorrect import paths ## Fixes Applied ### 1. Created Missing Base Module **File**: `freecad-ai/tools/base.py` - Copied the base classes (`ToolProvider`, `ToolResult`, `ToolSchema`) from the main project - These classes are required by all advanced tools but were missing from the addon directory ### 2. Fixed Relative Import Issues **Files affected**: - `freecad-ai/events/document_events.py` - `freecad-ai/events/command_events.py` - `freecad-ai/events/error_events.py` - `freecad-ai/api/tools.py` - `freecad-ai/api/resources.py` - `freecad-ai/api/events.py` **Solution**: Added fallback import logic that tries relative imports first, then falls back to absolute imports with proper path manipulation: ```python try: from .base import EventProvider except ImportError: # Fallback for when module is loaded by FreeCAD import sys import os addon_dir = os.path.dirname(os.path.dirname(__file__)) if addon_dir not in sys.path: sys.path.insert(0, addon_dir) from events.base import EventProvider ``` ### 3. Created Missing Core Module **Files created**: - `freecad-ai/core/__init__.py` - `freecad-ai/core/server.py` - Created a minimal `MCPServer` class to resolve import issues in API modules - Provides basic functionality needed by the addon without requiring the full MCP server infrastructure ### 4. Fixed Advanced Tools Import Mapping **File**: `freecad-ai/tools/advanced/__init__.py` - Improved error handling to import each tool individually - Added proper error reporting for missing tools - Made the module more resilient to individual tool import failures ### 5. Fixed Event Handler Class Name Mapping **File**: `freecad-ai/events/__init__.py` - Fixed mapping between expected class names and actual class names: - `CommandEventHandler` → `CommandExecutionEventProvider` - `ErrorEventHandler` → `ErrorEventProvider` - `DocumentEventHandler` → `DocumentEventProvider` ### 6. Added Graceful Dependency Handling **Files affected**: - `freecad-ai/api/tools.py` - `freecad-ai/api/resources.py` - `freecad-ai/api/events.py` - `freecad-ai/tools/__init__.py` **Solution**: Added optional dependency handling for FastAPI and FreeCAD: ```python try: from fastapi import APIRouter, HTTPException FASTAPI_AVAILABLE = True except ImportError: FASTAPI_AVAILABLE = False APIRouter = None HTTPException = Exception def create_tool_router(server: MCPServer): if not FASTAPI_AVAILABLE: logger.warning("FastAPI not available, tool router disabled") return None # ... rest of function ``` ### 7. Fixed Method Signatures and Return Types **File**: `freecad-ai/tools/advanced/smithery.py` - Updated `SmitheryToolProvider` to properly implement the `ToolProvider` interface - Added missing `tool_schema` property - Fixed return types to use `ToolResult` instead of raw dictionaries - Updated all method signatures to match the base class ### 8. Updated Path References **File**: `freecad-ai/clients/cursor_mcp_bridge.py` - Fixed paths to locate the main MCP server script correctly - Added fallback paths for different deployment scenarios ### 9. Fixed API Function Import Names (FINAL FIX) **Files**: - `freecad-ai/api/__init__.py` - `freecad-ai/freecad_ai_workbench.py` **Issue**: The API module was trying to import non-existent function names: - `ToolsAPI` (should be `create_tool_router`) - `ResourcesAPI` (should be `create_resource_router`) - `EventsAPI` (should be `create_event_router`) **Solution**: Updated import mappings in both files to use the correct function names that actually exist in the respective modules. ## Testing A comprehensive test script was created (`test_imports.py`) to verify all import fixes: ```bash python test_imports.py ``` **Results**: - ✅ All core modules import successfully - ✅ Event handlers load correctly - ✅ API modules handle missing dependencies gracefully - ✅ Advanced tools import properly (when FreeCAD is available) - ✅ Client modules load with appropriate warnings for missing dependencies ## Deployment The fixes ensure that: 1. **FreeCAD Addon Loading**: The addon loads correctly when FreeCAD starts up 2. **Graceful Degradation**: Missing dependencies (like FastAPI) don't break the entire addon 3. **Development Workflow**: The symlink-based development workflow continues to work 4. **Error Reporting**: Clear error messages help diagnose any remaining issues ## Commands to Verify Fixes 1. **Sync the addon**: `python scripts/sync_addon.py` 2. **Test imports**: `python test_imports.py` 3. **Start FreeCAD**: The addon should now load without import errors The import errors that were previously shown in the FreeCAD console should now be resolved.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jango-blockchained/mcp-freecad'

If you have feedback or need assistance with the MCP directory API, please join our Discord server