Skip to main content
Glama
CONTRIBUTING.md9.06 kB
# Contributing to KiCAD MCP Server Thank you for your interest in contributing to the KiCAD MCP Server! This guide will help you get started with development. ## Table of Contents - [Development Environment Setup](#development-environment-setup) - [Project Structure](#project-structure) - [Development Workflow](#development-workflow) - [Testing](#testing) - [Code Style](#code-style) - [Pull Request Process](#pull-request-process) - [Roadmap & Planning](#roadmap--planning) --- ## Development Environment Setup ### Prerequisites - **KiCAD 9.0 or higher** - [Download here](https://www.kicad.org/download/) - **Node.js v18+** - [Download here](https://nodejs.org/) - **Python 3.10+** - Should come with KiCAD, or install separately - **Git** - For version control ### Platform-Specific Setup #### Linux (Ubuntu/Debian) ```bash # Install KiCAD 9.0 from official PPA sudo add-apt-repository --yes ppa:kicad/kicad-9.0-releases sudo apt-get update sudo apt-get install -y kicad kicad-libraries # Install Node.js (if not already installed) curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs # Clone the repository git clone https://github.com/yourusername/kicad-mcp-server.git cd kicad-mcp-server # Install Node.js dependencies npm install # Install Python dependencies pip3 install -r requirements-dev.txt # Build TypeScript npm run build # Run tests npm test pytest ``` #### Windows ```powershell # Install KiCAD 9.0 from https://www.kicad.org/download/windows/ # Install Node.js from https://nodejs.org/ # Clone the repository git clone https://github.com/yourusername/kicad-mcp-server.git cd kicad-mcp-server # Install Node.js dependencies npm install # Install Python dependencies pip install -r requirements-dev.txt # Build TypeScript npm run build # Run tests npm test pytest ``` #### macOS ```bash # Install KiCAD 9.0 from https://www.kicad.org/download/macos/ # Install Node.js via Homebrew brew install node # Clone the repository git clone https://github.com/yourusername/kicad-mcp-server.git cd kicad-mcp-server # Install Node.js dependencies npm install # Install Python dependencies pip3 install -r requirements-dev.txt # Build TypeScript npm run build # Run tests npm test pytest ``` --- ## Project Structure ``` kicad-mcp-server/ ├── .github/ │ └── workflows/ # CI/CD pipelines ├── config/ # Configuration examples │ ├── linux-config.example.json │ ├── windows-config.example.json │ └── macos-config.example.json ├── docs/ # Documentation ├── python/ # Python interface layer │ ├── commands/ # KiCAD command handlers │ ├── integrations/ # External API integrations (JLCPCB, Digikey) │ ├── utils/ # Utility modules │ └── kicad_interface.py # Main Python entry point ├── src/ # TypeScript MCP server │ ├── tools/ # MCP tool implementations │ ├── resources/ # MCP resource implementations │ ├── prompts/ # MCP prompt implementations │ └── server.ts # Main server ├── tests/ # Test suite │ ├── unit/ │ ├── integration/ │ └── fixtures/ ├── dist/ # Compiled JavaScript (generated) ├── node_modules/ # Node dependencies (generated) ├── package.json # Node.js configuration ├── tsconfig.json # TypeScript configuration ├── pytest.ini # Pytest configuration ├── requirements.txt # Python production dependencies └── requirements-dev.txt # Python dev dependencies ``` --- ## Development Workflow ### 1. Create a Feature Branch ```bash git checkout -b feature/your-feature-name ``` ### 2. Make Changes - Edit TypeScript files in `src/` - Edit Python files in `python/` - Add tests for new features ### 3. Build & Test ```bash # Build TypeScript npm run build # Run TypeScript linter npm run lint # Run Python formatter black python/ # Run Python type checker mypy python/ # Run all tests npm test pytest # Run specific test file pytest tests/test_platform_helper.py -v # Run with coverage pytest --cov=python --cov-report=html ``` ### 4. Commit Changes ```bash git add . git commit -m "feat: Add your feature description" ``` **Commit Message Convention:** - `feat:` - New feature - `fix:` - Bug fix - `docs:` - Documentation changes - `test:` - Adding/updating tests - `refactor:` - Code refactoring - `chore:` - Maintenance tasks ### 5. Push and Create Pull Request ```bash git push origin feature/your-feature-name ``` Then create a Pull Request on GitHub. --- ## Testing ### Running Tests ```bash # All tests pytest # Unit tests only pytest -m unit # Integration tests (requires KiCAD installed) pytest -m integration # Platform-specific tests pytest -m linux # Linux tests only pytest -m windows # Windows tests only # With coverage report pytest --cov=python --cov-report=term-missing # Verbose output pytest -v # Stop on first failure pytest -x ``` ### Writing Tests Tests should be placed in `tests/` directory: ```python # tests/test_my_feature.py import pytest @pytest.mark.unit def test_my_feature(): """Test description""" # Arrange expected = "result" # Act result = my_function() # Assert assert result == expected @pytest.mark.integration @pytest.mark.linux def test_linux_integration(): """Integration test for Linux""" # This test will only run on Linux in CI pass ``` --- ## Code Style ### Python We use **Black** for code formatting and **MyPy** for type checking. ```bash # Format all Python files black python/ # Check types mypy python/ # Run linter pylint python/ ``` **Python Style Guidelines:** - Use type hints for all function signatures - Use pathlib.Path for file paths (not os.path) - Use descriptive variable names - Add docstrings to all public functions/classes - Follow PEP 8 **Example:** ```python from pathlib import Path from typing import List, Optional def find_kicad_libraries(search_path: Path) -> List[Path]: """ Find all KiCAD symbol libraries in the given path. Args: search_path: Directory to search for .kicad_sym files Returns: List of paths to found library files Raises: ValueError: If search_path doesn't exist """ if not search_path.exists(): raise ValueError(f"Search path does not exist: {search_path}") return list(search_path.glob("**/*.kicad_sym")) ``` ### TypeScript We use **ESLint** and **Prettier** for TypeScript. ```bash # Format TypeScript files npx prettier --write "src/**/*.ts" # Run linter npx eslint src/ ``` **TypeScript Style Guidelines:** - Use interfaces for data structures - Use async/await for asynchronous code - Use descriptive variable names - Add JSDoc comments to exported functions --- ## Pull Request Process 1. **Update Documentation** - If you change functionality, update docs 2. **Add Tests** - All new features should have tests 3. **Run CI Locally** - Ensure all tests pass before pushing 4. **Create PR** - Use a clear, descriptive title 5. **Request Review** - Tag relevant maintainers 6. **Address Feedback** - Make requested changes 7. **Merge** - Maintainer will merge when approved ### PR Checklist - [ ] Code follows style guidelines - [ ] All tests pass locally - [ ] New tests added for new features - [ ] Documentation updated - [ ] Commit messages follow convention - [ ] No merge conflicts - [ ] CI/CD pipeline passes --- ## Roadmap & Planning We track work using GitHub Projects and Issues: - **GitHub Projects** - High-level roadmap and sprints - **GitHub Issues** - Specific bugs and features - **GitHub Discussions** - Design discussions and proposals ### Current Priorities (Week 1-4) 1. ✅ Linux compatibility fixes 2. ✅ Platform-agnostic path handling 3. ✅ CI/CD pipeline setup 4. 🔄 Migrate to KiCAD IPC API 5. ⏳ Add JLCPCB integration 6. ⏳ Add Digikey integration See [docs/REBUILD_PLAN.md](docs/REBUILD_PLAN.md) for the complete 12-week roadmap. --- ## Getting Help - **GitHub Discussions** - Ask questions, propose ideas - **GitHub Issues** - Report bugs, request features - **Discord** - Real-time chat (link TBD) --- ## License By contributing, you agree that your contributions will be licensed under the MIT License. --- ## Thank You! 🎉 Your contributions make this project better for everyone. We appreciate your time and effort!

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