Skip to main content
Glama

AWS Model Context Protocol Server

by alexei-led
DEVELOPMENT.md6.78 kB
# Development Guide This guide covers setting up the development environment, running tests, and contributing to AWS MCP Server. ## Requirements - Python 3.13+ - AWS CLI installed and configured - Docker (optional, for containerized testing) ## Development Setup ### Using pip ```bash # Clone repository git clone https://github.com/alexei-led/aws-mcp-server.git cd aws-mcp-server # Create virtual environment python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate # Install runtime dependencies pip install -e . # Install development dependencies pip install -e ".[dev]" ``` ### Using uv (Recommended) [uv](https://github.com/astral-sh/uv) provides faster dependency management: ```bash # Install uv pip install uv # Install runtime dependencies make uv-install # Install development dependencies make uv-dev-install ``` ## Running the Server ```bash # Standard mode (stdio transport) python -m aws_mcp_server # SSE transport mode AWS_MCP_TRANSPORT=sse python -m aws_mcp_server # With sandbox disabled (for development) AWS_MCP_SANDBOX=disabled python -m aws_mcp_server # Using MCP CLI mcp run src/aws_mcp_server/server.py ``` ## Makefile Commands The project includes a Makefile with targets for common tasks: ### Test Commands ```bash make test # Run unit tests (excludes integration) make test-unit # Run unit tests only make test-integration # Run integration tests (requires AWS credentials) make test-all # Run all tests including integration ``` ### Coverage ```bash make test-coverage # Coverage report (excludes integration) make test-coverage-all # Coverage report (includes integration) ``` ### Linting and Formatting ```bash make lint # Run linters (ruff check, format --check) make lint-fix # Run linters and auto-fix issues make format # Format code with ruff ``` ### Full List Run `make help` to see all available commands. ## Testing ### Unit Tests ```bash # Run all unit tests pytest # Run specific test file pytest tests/path/to/test_file.py # Run specific test function pytest tests/path/to/test_file.py::test_function_name -v # Run with coverage python -m pytest --cov=src/aws_mcp_server tests/ ``` ### Integration Tests Integration tests verify functionality with actual AWS resources: 1. **Set up AWS resources:** ```bash # Create an S3 bucket for testing aws s3 mb s3://your-test-bucket-name # Set environment variable export AWS_TEST_BUCKET=your-test-bucket-name ``` 2. **Run integration tests:** ```bash # All tests including integration make test-all # Only integration tests make test-integration # Or using pytest directly pytest --run-integration -m integration ``` ## Code Style ### Formatting - Use `ruff format` (Black-compatible) - Run `make format` before committing ### Linting - Use `ruff check` for linting - Run `make lint` to check, `make lint-fix` to auto-fix ### Type Hints Use native Python type hints: ```python # Good def process_items(items: list[str]) -> dict[str, int]: ... # Avoid (old style) from typing import List, Dict def process_items(items: List[str]) -> Dict[str, int]: ... ``` ### Docstrings Use Google-style docstrings: ```python def execute_command(command: str, timeout: int = 300) -> str: """Execute an AWS CLI command. Args: command: The AWS CLI command to execute. timeout: Maximum execution time in seconds. Returns: The command output as a string. Raises: CommandExecutionError: If the command fails to execute. TimeoutError: If the command exceeds the timeout. """ ``` ## Project Structure ``` aws-mcp-server/ ├── src/aws_mcp_server/ # Main source code │ ├── __init__.py │ ├── __main__.py # Entry point │ ├── server.py # MCP server implementation │ ├── cli_executor.py # AWS CLI execution with error handling │ ├── sandbox.py # OS-level sandbox execution │ ├── tools.py # Pipe command utilities │ ├── config.py # Configuration settings │ ├── resources.py # MCP resources (profiles, regions) │ └── prompts.py # Prompt templates ├── tests/ # Test files │ ├── unit/ # Unit tests │ └── integration/ # Integration tests ├── deploy/docker/ # Docker deployment files └── docs/ # Documentation ``` ## Versioning The project uses [setuptools_scm](https://github.com/pypa/setuptools_scm) for automatic version management based on Git tags. ### Version Format - **Release versions**: Git tag (e.g., `1.2.3`) - **Development versions**: `<tag>.post<commits>+g<hash>.d<date>` (e.g., `1.2.3.post10+gb697684.d20250406`) ### Creating a Release ```bash # Create and push a tag git tag -a 1.2.3 -m "Release version 1.2.3" git push origin 1.2.3 ``` The CI/CD pipeline automatically builds and publishes Docker images with version tags. For more details, see [VERSION.md](VERSION.md). ## Dependency Management ### Adding Dependencies 1. Add to `pyproject.toml` under `dependencies` or `[project.optional-dependencies]` 2. Regenerate lock file: `uv pip compile --system pyproject.toml -o uv.lock` 3. Install: `uv pip sync --system uv.lock` ### Lock File The `uv.lock` file ensures reproducible builds. Always update it when changing dependencies. ## Docker Development The Docker image uses a pre-built Python wheel for faster builds and consistent versioning. ### Building the Image ```bash # Step 1: Build the Python wheel (required) uv build # Step 2: Build Docker image docker build -f deploy/docker/Dockerfile -t aws-mcp-server . ``` The wheel in `dist/` contains the correct version from `setuptools_scm`. This approach: - Reuses the same versioned package across CI, PyPI, and Docker - Speeds up Docker builds (no Python build inside container) - Ensures version consistency between `pip install aws-mcp` and Docker image ### Running in Docker ```bash # Using docker-compose docker compose -f deploy/docker/docker-compose.yml up -d # Using docker run docker run -i --rm \ -v ~/.aws:/home/appuser/.aws:ro \ aws-mcp-server ``` ## Troubleshooting ### Common Issues **Import errors**: Ensure you installed in development mode (`pip install -e .`) **AWS credential errors**: Verify `~/.aws/credentials` or environment variables are set **Test failures**: Check AWS_TEST_BUCKET is set for integration tests **Sandbox errors**: Verify kernel support (Linux 5.13+ for Landlock) or install Bubblewrap ### Debug Mode Enable debug logging: ```bash export LOG_LEVEL=DEBUG python -m aws_mcp_server ```

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/alexei-led/aws-mcp-server'

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