Skip to main content
Glama
LINUX_COMPATIBILITY_AUDIT.md8.7 kB
# Linux Compatibility Audit Report **Date:** 2025-10-25 **Target Platform:** Ubuntu 24.04 LTS (primary), Fedora, Arch (secondary) **Current Status:** Windows-optimized, partial Linux support --- ## Executive Summary The KiCAD MCP Server was originally developed for Windows and has several compatibility issues preventing smooth operation on Linux. This audit identifies all platform-specific issues and provides remediation priorities. **Overall Status:** 🟡 **PARTIAL COMPATIBILITY** - ✅ TypeScript server: Good cross-platform support - 🟡 Python interface: Mixed (some hardcoded paths) - ❌ Configuration: Windows-specific examples - ❌ Documentation: Windows-only instructions --- ## Critical Issues (P0 - Must Fix) ### 1. Hardcoded Windows Paths in Config Examples **File:** `config/claude-desktop-config.json` ```json "cwd": "c:/repo/KiCAD-MCP", "PYTHONPATH": "C:/Program Files/KiCad/9.0/lib/python3/dist-packages" ``` **Impact:** Config file won't work on Linux without manual editing **Fix:** Create platform-specific config templates **Priority:** P0 --- ### 2. Library Search Paths (Mixed Approach) **File:** `python/commands/library_schematic.py:16` ```python search_paths = [ "C:/Program Files/KiCad/*/share/kicad/symbols/*.kicad_sym", # Windows "/usr/share/kicad/symbols/*.kicad_sym", # Linux "/Applications/KiCad/KiCad.app/Contents/SharedSupport/symbols/*.kicad_sym", # macOS ] ``` **Impact:** Works but inefficient (checks all platforms) **Fix:** Auto-detect platform and use appropriate paths **Priority:** P0 --- ### 3. Python Path Detection **File:** `python/kicad_interface.py:38-45` ```python kicad_paths = [ os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages'), os.path.dirname(sys.executable) ] ``` **Impact:** Paths use Windows convention ('Lib' is 'lib' on Linux) **Fix:** Platform-specific path detection **Priority:** P0 --- ## High Priority Issues (P1) ### 4. Documentation is Windows-Only **Files:** `README.md`, installation instructions **Issues:** - Installation paths reference `C:\Program Files` - VSCode settings path is Windows format - No Linux-specific troubleshooting **Fix:** Add Linux installation section **Priority:** P1 --- ### 5. Missing Python Dependencies Documentation **File:** None (no requirements.txt) **Impact:** Users don't know what Python packages to install **Fix:** Create `requirements.txt` and `requirements-dev.txt` **Priority:** P1 --- ### 6. Path Handling Uses os.path Instead of pathlib **Files:** All Python files (11 files) **Impact:** Code is less readable and more error-prone **Fix:** Migrate to `pathlib.Path` throughout **Priority:** P1 --- ## Medium Priority Issues (P2) ### 7. No Linux-Specific Testing **Impact:** Can't verify Linux compatibility **Fix:** Add GitHub Actions with Ubuntu runner **Priority:** P2 --- ### 8. Log File Paths May Differ **File:** `src/logger.ts:13` ```typescript const DEFAULT_LOG_DIR = join(os.homedir(), '.kicad-mcp', 'logs'); ``` **Impact:** `.kicad-mcp` is okay for Linux, but best practice is `~/.config/kicad-mcp` **Fix:** Use XDG Base Directory spec on Linux **Priority:** P2 --- ### 9. No Bash/Shell Scripts for Linux **Impact:** Manual setup is harder on Linux **Fix:** Create `install.sh` and `run.sh` scripts **Priority:** P2 --- ## Low Priority Issues (P3) ### 10. TypeScript Build Uses Windows Conventions **File:** `package.json` **Impact:** Works but could be more Linux-friendly **Fix:** Add platform-specific build scripts **Priority:** P3 --- ## Positive Findings ✅ ### What's Already Good: 1. **TypeScript Path Handling** - Uses `path.join()` and `os.homedir()` correctly 2. **Node.js Dependencies** - All cross-platform 3. **JSON Communication** - Platform-agnostic 4. **Python Base** - Python 3 works identically on all platforms --- ## Recommended Fixes - Priority Order ### **Week 1 - Critical Fixes (P0)** 1. **Create Platform-Specific Config Templates** ```bash config/ ├── linux-config.example.json ├── windows-config.example.json └── macos-config.example.json ``` 2. **Fix Python Path Detection** ```python # Detect platform and set appropriate paths import platform import sys from pathlib import Path if platform.system() == "Windows": kicad_paths = [Path(sys.executable).parent / "Lib" / "site-packages"] else: # Linux/Mac kicad_paths = [Path(sys.executable).parent / "lib" / "python3.X" / "site-packages"] ``` 3. **Update Library Search Path Logic** ```python def get_kicad_library_paths(): """Auto-detect KiCAD library paths based on platform""" system = platform.system() if system == "Windows": return ["C:/Program Files/KiCad/*/share/kicad/symbols/*.kicad_sym"] elif system == "Linux": return ["/usr/share/kicad/symbols/*.kicad_sym"] elif system == "Darwin": # macOS return ["/Applications/KiCad/KiCad.app/Contents/SharedSupport/symbols/*.kicad_sym"] ``` ### **Week 1 - High Priority (P1)** 4. **Create requirements.txt** ```txt # requirements.txt kicad-skip>=0.1.0 Pillow>=9.0.0 cairosvg>=2.7.0 colorlog>=6.7.0 ``` 5. **Add Linux Installation Documentation** - Ubuntu/Debian instructions - Fedora/RHEL instructions - Arch Linux instructions 6. **Migrate to pathlib** - Convert all `os.path` calls to `Path` - More Pythonic and readable --- ## Testing Checklist ### Ubuntu 24.04 LTS Testing - [ ] Install KiCAD 9.0 from official PPA - [ ] Install Node.js 18+ from NodeSource - [ ] Clone repository - [ ] Run `npm install` - [ ] Run `npm run build` - [ ] Configure MCP settings (Cline) - [ ] Test: Create project - [ ] Test: Place components - [ ] Test: Export Gerbers ### Fedora Testing - [ ] Install KiCAD from Fedora repos - [ ] Test same workflow ### Arch Testing - [ ] Install KiCAD from AUR - [ ] Test same workflow --- ## Platform Detection Helper Create `python/utils/platform_helper.py`: ```python """Platform detection and path utilities""" import platform import sys from pathlib import Path from typing import List class PlatformHelper: @staticmethod def is_windows() -> bool: return platform.system() == "Windows" @staticmethod def is_linux() -> bool: return platform.system() == "Linux" @staticmethod def is_macos() -> bool: return platform.system() == "Darwin" @staticmethod def get_kicad_python_path() -> Path: """Get KiCAD Python dist-packages path""" if PlatformHelper.is_windows(): return Path("C:/Program Files/KiCad/9.0/lib/python3/dist-packages") elif PlatformHelper.is_linux(): # Common Linux paths candidates = [ Path("/usr/lib/kicad/lib/python3/dist-packages"), Path("/usr/share/kicad/scripting/plugins"), ] for path in candidates: if path.exists(): return path elif PlatformHelper.is_macos(): return Path("/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.X/lib/python3.X/site-packages") raise RuntimeError(f"Could not find KiCAD Python path for {platform.system()}") @staticmethod def get_config_dir() -> Path: """Get appropriate config directory""" if PlatformHelper.is_windows(): return Path.home() / ".kicad-mcp" elif PlatformHelper.is_linux(): # Use XDG Base Directory specification xdg_config = os.environ.get("XDG_CONFIG_HOME") if xdg_config: return Path(xdg_config) / "kicad-mcp" return Path.home() / ".config" / "kicad-mcp" elif PlatformHelper.is_macos(): return Path.home() / "Library" / "Application Support" / "kicad-mcp" ``` --- ## Success Criteria ✅ Server starts on Ubuntu 24.04 LTS without errors ✅ Can create and manipulate KiCAD projects ✅ CI/CD pipeline tests on Linux ✅ Documentation includes Linux setup ✅ All tests pass on Linux --- ## Next Steps 1. Implement P0 fixes (this week) 2. Set up GitHub Actions CI/CD 3. Test on Ubuntu 24.04 LTS 4. Document Linux-specific issues 5. Create installation scripts --- **Audited by:** Claude Code **Review Status:** ✅ Complete

Latest Blog Posts

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/mixelpixx/KiCAD-MCP-Server'

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