Skip to main content
Glama
standards.md10.9 kB
# Development Standards This reference document specifies the development standards, conventions, and requirements for AutoDocs MCP Server. All contributors must follow these standards to maintain code quality and consistency. ## Git Branching Strategy ### GitFlow with Release Branches The project uses **GitFlow with Release Branches** for flexible development and bundled releases: #### Branch Hierarchy - **`main`** - Production-ready code, source of truth, tagged releases only - **`develop`** - Integration branch for ongoing development work - **`feature/*`** - Individual features/changes, branched from `develop` - **`release/v0.x.x`** - Release preparation, branched from `develop` #### Daily Development Workflow 1. **Work on develop**: Most development happens directly on `develop` branch 2. **Feature branches (optional)**: For larger changes, create `feature/description` from `develop` 3. **Merge features**: `feature/*` → `develop` (via PR or direct merge) 4. **Rapid iteration**: Small changes can be committed directly to `develop` #### Release Workflow 1. **Prepare release**: `git checkout -b release/v0.x.x` from `develop` 2. **Version bump**: Update version in `pyproject.toml` on release branch 3. **Final tweaks**: Bug fixes, documentation updates in release branch 4. **Deploy**: Push `release/v0.x.x` → triggers CI/CD → PyPI deployment 5. **Complete release**: - Merge `release/v0.x.x` → `main` - Tag release on `main`: `git tag v0.x.x` - Merge `release/v0.x.x` → `develop` (to sync any release fixes) ## Commit Message Standards **REQUIRED**: All commits MUST follow [Conventional Commits](https://www.conventionalcommits.org/) specification: ``` <type>[optional scope]: <description> [optional body] [optional footer(s)] ``` ### Commit Types - **feat**: New feature (triggers MINOR version bump) - **fix**: Bug fix (triggers PATCH version bump) - **docs**: Documentation changes - **style**: Code style changes (formatting, etc.) - **refactor**: Code refactoring without feature/bug changes - **test**: Adding or updating tests - **chore**: Build process, dependency updates, etc. - **ci**: CI/CD pipeline changes ### Breaking Changes - Add `!` after type: `feat!: redesign API interface` (triggers MAJOR version bump) - Or include `BREAKING CHANGE:` in footer ### Examples ```bash # ✅ GOOD - Conventional commits feat: add query filtering for documentation search fix: resolve cache corruption on concurrent access docs: update installation instructions for Claude Code chore: bump dependencies to latest versions # ❌ BAD - Non-conventional commits Add new feature Fixed bug Updated docs ``` ## Semantic Versioning **REQUIRED**: This project strictly follows [Semantic Versioning 2.0.0](https://semver.org/): - **MAJOR** (`1.0.0`): Breaking changes, incompatible API changes - **MINOR** (`0.1.0`): New features, backward-compatible functionality - **PATCH** (`0.0.1`): Bug fixes, backward-compatible fixes ### Version Bumping Rules - `feat:` commits → MINOR version bump - `fix:` commits → PATCH version bump - `feat!:` or `BREAKING CHANGE:` → MAJOR version bump - Other commit types → No automatic version bump ## Code Quality Standards ### Type Safety - **MyPy Required**: All code must pass strict MyPy type checking - **Type Annotations**: All function parameters and return types must be annotated - **Pydantic Models**: Use Pydantic v2 for all data structures and validation ### Code Style - **Ruff Linting**: All code must pass Ruff linting without warnings - **Automatic Formatting**: Use Ruff format for consistent code formatting - **Import Organization**: Follow Ruff's import sorting rules ### Documentation - **Docstrings**: All public functions and classes must have comprehensive docstrings - **Inline Comments**: Complex logic should include explanatory comments - **Type Hints**: Prefer type hints over docstring type documentation ## Testing Standards ### Coverage Requirements - **Minimum Coverage**: 80% overall test coverage required - **Critical Path Coverage**: 100% coverage for error handling and security validation - **Integration Tests**: All MCP tools must have integration test coverage ### Testing Patterns - **pytest-mock Required**: Use `pytest-mock` exclusively, never `unittest.mock` - **Async Testing**: Use `@pytest.mark.asyncio` for all async test functions - **Mock Services**: Use provided `mock_services` fixture for MCP tool tests - **Clear Assertions**: Use descriptive assertions with clear failure messages ### Test Organization ``` tests/ ├── unit/ # Unit tests for individual modules ├── integration/ # Integration tests for MCP tools and end-to-end flows └── conftest.py # Shared fixtures and test configuration ``` ## Dependency Management ### Philosophy **Principle**: Lean heavily on widely-accepted third-party packages. Do NOT reinvent the wheel. ### Dependency Guidelines 1. **Favor Established Ecosystems**: Prefer packages from well-known ecosystems (pytest plugins, FastAPI ecosystem) 2. **Quality Indicators**: Look for packages with: - Active maintenance (recent commits/releases) - Good documentation and community adoption - Comprehensive test coverage - Clear versioning/changelog ### When to Add Dependencies - **Testing Improvements**: Always acceptable - **Developer Experience**: Tools that speed up development - **Standard Patterns**: Libraries that implement well-established patterns - **Security**: Libraries that improve security posture - **Performance**: Well-maintained libraries that solve performance issues ## Pre-commit Requirements ### Automated Checks All commits automatically run: - **Ruff**: Linting and formatting - **MyPy**: Type checking - **File Hygiene**: File permissions, line endings, YAML validation ### Critical Rule **STRICTLY FORBIDDEN**: Never use `git commit --no-verify` or `git commit -n` to bypass pre-commit hooks. **Required Process**: 1. Run `pre-commit run --all-files` to identify issues 2. Fix each identified issue properly in the code 3. Commit normally with all hooks passing 4. If you accidentally bypassed hooks, amend the commit with fixes immediately ## Technical Debt Management ### Documentation Requirement **MANDATORY**: All technical debt MUST be documented in `planning/technical_debt.md` ### When to Log Technical Debt - During development when making compromises due to time constraints - During refactoring when identifying improvement opportunities - During code review when spotting inconsistencies or anti-patterns - During bug fixes when finding root causes that indicate deeper issues ### Required Documentation Fields - **Description**: Clear explanation of the debt - **Impact**: How it affects the codebase or development - **Root Cause**: Why the debt exists (when relevant) - **Solution**: Specific steps to address the debt - **Effort**: Time estimate (Low: <1hr, Medium: 1-4hrs, High: >4hrs) - **Created**: Date when debt was identified ### Technical Debt Categories - **Code Quality**: Inconsistent patterns, deprecated usage, code smells - **Testing Infrastructure**: Missing tests, inconsistent mocking, test reliability - **Documentation**: Missing or outdated docs, unclear APIs - **Infrastructure**: Build issues, deployment problems, environment inconsistencies - **Performance**: Known bottlenecks, scalability concerns - **Security**: Vulnerabilities, insecure patterns, missing validations ## Code Organization Standards ### Module Structure ``` src/autodocs_mcp/ ├── main.py # FastMCP server entry point ├── config.py # Configuration management ├── models.py # Pydantic data models ├── exceptions.py # Custom exception hierarchy ├── security.py # Input validation and security ├── health.py # Health checks and monitoring ├── observability.py # Metrics and logging └── core/ # Core business logic ├── dependency_parser.py ├── version_resolver.py ├── doc_fetcher.py ├── cache_manager.py └── ... ``` ### Import Standards ```python # Standard library imports first import asyncio import json from pathlib import Path # Third-party imports second import httpx from pydantic import BaseModel # Local imports last from autodocs_mcp.config import Config from autodocs_mcp.core.cache_manager import CacheManager ``` ### Naming Conventions - **Files**: Snake case (`dependency_parser.py`) - **Classes**: PascalCase (`DependencyParser`) - **Functions/Variables**: Snake case (`parse_dependencies`) - **Constants**: UPPER_SNAKE_CASE (`MAX_CACHE_SIZE`) ## Error Handling Standards ### Exception Hierarchy - Use custom exceptions from `exceptions.py` - Include context information in all custom exceptions - Provide actionable error messages with recovery suggestions ### Logging Standards - Use structured logging with context preservation - Log at appropriate levels (DEBUG, INFO, WARNING, ERROR, CRITICAL) - Never log sensitive information (API keys, user data) - Include request context in all log messages ## Performance Standards ### Resource Management - Use async context managers for all resources - Implement proper connection pooling - Set appropriate timeouts for all external requests - Monitor memory usage and implement cleanup ### Caching Standards - Use version-based immutable cache keys - Implement cache corruption detection and recovery - Monitor cache hit rates and performance - Set appropriate cache size limits ## Security Standards ### Input Validation - Validate and sanitize all user inputs - Use Pydantic models for structured validation - Implement path traversal prevention - Validate all external URLs and endpoints ### Resource Protection - Implement rate limiting for external API calls - Set memory usage limits and monitoring - Use secure temporary file handling - Prevent information disclosure in error messages ## Configuration Standards ### Environment Variables - Use clear, descriptive environment variable names - Provide sensible defaults for all configuration - Validate all configuration at startup - Support multiple environments (dev, test, prod) ### Configuration Management ```python # Use Pydantic for configuration validation class Config(BaseModel): cache_dir: Path = Path.home() / ".cache" / "autodoc-mcp" max_cache_size: int = 1000 request_timeout: int = 30 @field_validator('cache_dir') @classmethod def validate_cache_dir(cls, v: Path) -> Path: v.mkdir(parents=True, exist_ok=True) return v ``` These standards ensure consistent, high-quality code that is maintainable, secure, and performant. All contributors must adhere to these standards, and pull requests that don't meet these requirements will be rejected.

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/bradleyfay/autodoc-mcp'

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