Skip to main content
Glama
bpamiri
by bpamiri
CONTRIBUTING.md6.23 kB
# Contributing to mssql-mcp Thank you for your interest in contributing to mssql-mcp! This document provides guidelines and information for contributors. ## How to Contribute ### Reporting Bugs Before creating bug reports, please check existing issues to avoid duplicates. When creating a bug report, include: - A clear, descriptive title - Steps to reproduce the issue - Expected behavior vs actual behavior - Your environment (Python version, OS, SQL Server version) - Any relevant logs or error messages ### Suggesting Enhancements Enhancement suggestions are welcome! Please include: - A clear description of the proposed feature - The motivation and use case - Any implementation ideas you might have ### Pull Requests 1. **Fork the repository** and create your branch from `main` 2. **Install development dependencies**: ```bash pip install -e ".[dev]" ``` 3. **Make your changes** following our coding standards 4. **Add tests** for any new functionality 5. **Run the test suite** to ensure nothing is broken: ```bash pytest ``` 6. **Run linting and type checks**: ```bash ruff check . ruff format --check . mypy src/ ``` 7. **Update documentation** if needed 8. **Submit your pull request** ## Development Setup ### Prerequisites - Python 3.10+ - A Microsoft SQL Server instance for integration testing (optional) ### Setting Up Your Development Environment ```bash # Clone your fork git clone https://github.com/YOUR_USERNAME/mssql-mcp.git cd mssql-mcp # Create a virtual environment python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate # Install in development mode with dev dependencies pip install -e ".[dev]" ``` ### Running Tests ```bash # Run all tests pytest # Run with coverage pytest --cov=mssql_mcp --cov-report=html # Run specific test file pytest tests/test_connection.py # Run integration tests (requires database connection) pytest tests/integration/ --run-integration ``` ## Coding Standards ### Style Guide - Follow [PEP 8](https://pep8.org/) style guidelines - Use [ruff](https://github.com/astral-sh/ruff) for linting and formatting - Maximum line length: 100 characters - Use type hints for all function signatures ### Code Quality - Write docstrings for public modules, classes, and functions (Google style) - Keep functions focused and single-purpose - Prefer explicit over implicit - Handle errors gracefully with meaningful messages ### Commit Messages - Use clear, descriptive commit messages - Start with a verb in present tense (e.g., "Add", "Fix", "Update") - Reference related issues when applicable Example: ``` Add connection pooling support - Implement ConnectionPool class with configurable size - Add pool_size configuration option - Update documentation with pooling examples Fixes #42 ``` ## Project Structure ``` mssql-mcp/ ├── src/mssql_mcp/ # Main package source │ ├── __init__.py # Package init with version │ ├── app.py # FastMCP instance │ ├── server.py # MCP server entry point │ ├── connection.py # Database connection manager │ ├── config.py # Pydantic settings configuration │ ├── tools/ # MCP tool implementations │ │ ├── query.py # Query execution tools │ │ ├── tables.py # Schema discovery tools │ │ ├── crud.py # CRUD operations │ │ ├── databases.py # Database management │ │ ├── stored_procs.py # Stored procedure tools │ │ └── export.py # Data export tools │ ├── resources/ # MCP resources │ │ └── syntax_help.py # T-SQL syntax reference │ └── utils/ # Utility functions │ ├── safety.py # SQL validation │ └── audit.py # Audit logging ├── tests/ # Test suite │ ├── conftest.py # Pytest fixtures │ └── test_*.py # Unit tests └── pyproject.toml # Project configuration ``` ## Adding New Tools MCP tools are defined using the `@mcp.tool()` decorator. To add a new tool: 1. **Choose the appropriate module** in `src/mssql_mcp/tools/` 2. **Define the tool function** with the decorator: ```python from ..app import mcp from ..server import get_connection_manager @mcp.tool() def my_new_tool(param1: str, param2: int = 10) -> dict[str, Any]: """Short description of what the tool does. Longer description with more details about the tool's behavior. Args: param1: Description of parameter 1 param2: Description of parameter 2 (default: 10) Returns: Dictionary containing the result fields. """ manager = get_connection_manager() try: # Tool implementation result = ... return {"status": "success", "data": result} except Exception as e: return {"error": str(e)} ``` 3. **Follow these conventions:** - Return dictionaries (JSON-serializable) - Include `status` or `error` in responses - Use type hints for all parameters - Write comprehensive docstrings (shown to AI assistants) - Handle errors gracefully 4. **Add tests** in `tests/test_tools/` 5. **Update documentation** if needed ## Testing Guidelines - Write unit tests for all new functionality - Use pytest fixtures for common setup - Mock external dependencies (database connections) - Aim for meaningful test coverage, not just high percentages ### Test Naming Convention ```python def test_connect_with_valid_credentials_succeeds(): """Test that connection succeeds with valid credentials.""" ... def test_connect_with_invalid_host_raises_connection_error(): """Test that connection fails gracefully with invalid host.""" ... ``` ## Documentation - Update README.md for user-facing changes - Add docstrings following Google style - Include code examples where helpful ## Questions? Feel free to open an issue for any questions about contributing. We're happy to help! ## License By contributing to mssql-mcp, you agree that your contributions will be licensed under the Apache License 2.0.

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/bpamiri/mssql-mcp'

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