# Contributing to reclaim-mcp-server Thank you for your interest in contributing! We welcome contributions of all kinds: bug reports, feature requests, documentation improvements, and code changes. ## Code of Conduct Please be respectful and constructive in all interactions. We aim to maintain a welcoming environment for everyone. ## How to Contribute ### Reporting Bugs Found a bug? Please [open an issue](https://gitlab.com/universalamateur1/reclaim-mcp-server/-/issues/new?issuable_template=Bug) using our bug template. Include: - Steps to reproduce - Expected vs actual behavior - Your environment (Python version, OS) ### Suggesting Features Have an idea? [Open a feature request](https://gitlab.com/universalamateur1/reclaim-mcp-server/-/issues/new?issuable_template=Feature) with: - Clear description of the feature - Use case / motivation - Any implementation ideas ## Development Setup ### Prerequisites - Python 3.12+ - Poetry 2.x ### Installation ```bash # Clone the repository git clone git@gitlab.com:universalamateur1/reclaim-mcp-server.git cd reclaim-mcp-server # Install dependencies poetry install # Set up environment variables export RECLAIM_API_KEY="your_api_key_here" ``` ## Code Style This project uses automated formatting and linting: - **Black**: Code formatting (120 line length) - **isort**: Import sorting (Black profile) - **flake8**: Linting - **mypy**: Type checking (strict mode) ### Running Checks Locally ```bash # Format code poetry run black src tests poetry run isort src tests # Check formatting poetry run black --check src tests poetry run isort --check-only src tests # Lint poetry run flake8 src tests # Type check poetry run mypy src ``` ## Testing Tests use pytest with pytest-asyncio for async support. ```bash # Run all tests poetry run pytest # Run with coverage poetry run pytest --cov=src/reclaim_mcp --cov-report=term # Run specific test file poetry run pytest tests/test_client.py -v ``` ### Writing Tests - Place tests in the `tests/` directory - Use descriptive test names: `test_create_task_with_valid_data` - Mock external API calls using `monkeypatch` - Test both success and error paths ## Merge Request Process 1. Create a feature branch from `main` 2. Make your changes 3. Ensure all checks pass locally 4. Create a merge request using the default template 5. Address review feedback 6. Squash and merge when approved ## Commit Messages Use conventional commit format: - `feat:` New features - `fix:` Bug fixes - `docs:` Documentation changes - `test:` Test additions or changes - `refactor:` Code refactoring - `chore:` Maintenance tasks Example: `feat: add task priority support` ## Release Process See [RELEASING.md](RELEASING.md) for detailed release instructions. ### Quick Overview Releases are managed through GitLab CI/CD with multi-registry publishing: | Registry | Purpose | Auth | |----------|---------|------| | PyPI | Public Python package | OIDC Trusted Publishing | | TestPyPI | Pre-release validation | OIDC Trusted Publishing | | GitLab Package Registry | Internal/enterprise | `$CI_JOB_TOKEN` | | GitLab Container Registry | Docker images | `$CI_REGISTRY_*` | | DockerHub | Public Docker images | Access token | All publish jobs are now **fully automated** on tag push (v0.9.0+). Protected tags ensure only maintainers can trigger releases.