MCP server that evaluates AWS account resiliency and DR gaps
Project description
aws-resiliency-mcp
MCP server that evaluates AWS account resiliency posture and identifies disaster recovery gaps across 12 service categories.
Features
- 17 MCP Tools — granular per-category assessments plus discovery, cross-region, multi-AZ, and full-scan tools
- 12 Assessment Categories — compute, data, networking, output, serverless, AI/ML, containers, security, analytics, storage, messaging, observability
- Discovery-First Architecture — auto-detects active services via Resource Explorer / Config before assessing
- Multi-Region Scanning — parallel cross-region DR gap analysis across 10+ regions
- Environment Classification — auto-tags resources as production/DR/non-prod from tags and naming patterns
- Region Role Detection — classifies regions as PRIMARY, DR/SECONDARY, or NOT_USED
- 4 Output Formats — Markdown, HTML, DOCX, PDF
- Cross-Account Access — supports STS AssumeRole and temporary credentials
- Severity Adjustment — automatically bumps production findings up, non-prod findings down
- Parallel Execution — concurrent assessments and region scans via asyncio thread pool
Installation
# Recommended: run directly with uvx
uvx aws-resiliency-mcp
# Or install via pip
pip install aws-resiliency-mcp
# Development install
pip install -e ".[dev]"
Quick Start
Claude Desktop / Amazon Quick
Add to your MCP client configuration:
{
"mcpServers": {
"aws-resiliency-mcp": {
"command": "uvx",
"args": ["aws-resiliency-mcp"],
"env": {
"AWS_PROFILE": "default",
"AWS_REGION": "us-east-1"
}
}
}
}
With Docker
{
"mcpServers": {
"aws-resiliency-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "AWS_ACCESS_KEY_ID",
"-e", "AWS_SECRET_ACCESS_KEY",
"-e", "AWS_SESSION_TOKEN",
"aws-resiliency-mcp"
]
}
}
}
Tool Reference
| Tool | Description |
|---|---|
discover_resources |
Auto-detect active AWS services in an account (Resource Explorer → Config → fallback) |
assess_compute_resiliency |
Evaluate EC2, ECS, Lambda, EKS — multi-AZ, auto-scaling, redundancy |
assess_data_resiliency |
Evaluate RDS, DynamoDB, S3, EBS, EFS — backups, replication, multi-AZ |
assess_networking_resiliency |
Evaluate VPC, ALB/NLB, Route53, CloudFront, Direct Connect — redundancy, failover |
assess_output_resiliency |
Evaluate SQS, SNS, Kinesis, API Gateway — DLQ, redundancy, throttling |
assess_serverless_resiliency |
Evaluate Step Functions, EventBridge, Cognito, AppSync — DLQ, retry, concurrency |
assess_ai_ml_resiliency |
Evaluate SageMaker, Bedrock — endpoint redundancy, model backups |
assess_containers_resiliency |
Evaluate ECS/EKS clusters, ECR — task placement, image replication |
assess_security_resiliency |
Evaluate KMS, IAM, Secrets Manager, WAF, GuardDuty — key rotation, MFA |
assess_analytics_resiliency |
Evaluate EMR, Glue, Athena, OpenSearch, Redshift — HA, backups |
assess_storage_resiliency |
Evaluate S3, EBS, EFS, FSx, Backup — versioning, replication, lifecycle |
assess_messaging_resiliency |
Evaluate SQS, SNS, EventBridge, MQ — DLQ, cross-region, HA |
assess_observability_resiliency |
Evaluate CloudWatch, CloudTrail, X-Ray — alarm coverage, log retention |
assess_multi_az_region |
Verify multi-AZ deployment within a single region |
assess_cross_region_dr |
Compare primary vs DR region resources across 10 regions |
classify_region_roles |
Detect PRIMARY/DR/NOT_USED region roles via tags or resource density |
full_resiliency_assessment |
Run all assessments with discovery, scoring, and formatted report |
Architecture
┌─────────────┐ ┌──────────────┐ ┌────────────────┐ ┌────────────┐
│ Discovery │────▶│ Assess │────▶│ Classify │────▶│ Format │
│ │ │ (parallel) │ │ (env + region)│ │ (md/html/ │
│ RE2/Config/ │ │ 12 modules │ │ severity adj │ │ docx/pdf) │
│ describe │ │ per-service │ │ region roles │ │ │
└─────────────┘ └──────────────┘ └────────────────┘ └────────────┘
- Discover — Identify which services have resources (skip empty categories)
- Assess — Run category-specific checks in parallel threads
- Classify — Tag each finding with environment context, adjust severity
- Format — Generate report in requested format with prioritized recommendations
Configuration
Credentials
The server uses the standard AWS credential chain:
- Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKEN) - AWS profiles (
AWS_PROFILE) - Instance metadata / container credentials
- SSO credentials
Cross-Account Access
Provide an account_id parameter to any tool — the server will AssumeRole to arn:aws:iam::{account_id}:role/ReadOnlyAccess.
Alternatively, pass temporary credentials directly:
assess_compute_resiliency(
region="us-east-1",
account_id="123456789012",
access_key_id="ASIA...",
secret_access_key="...",
session_token="..."
)
Environment Variables
| Variable | Default | Description |
|---|---|---|
AWS_REGION |
us-east-1 |
Default region for assessments |
AWS_PROFILE |
default |
AWS CLI profile to use |
MCP_TRANSPORT |
stdio |
MCP transport (stdio or sse) |
Output Formats
| Format | Extension | Use Case |
|---|---|---|
| Markdown | .md |
Quick terminal review, chat responses |
| HTML | .html |
Shareable standalone dashboard with styling |
| DOCX | .docx |
Formal reports for stakeholders |
.pdf |
Print-ready deliverables |
All formats include: summary metrics, DR readiness, tagging context, region strategy, per-category findings sorted by environment priority, and prioritized action items.
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run unit tests
pytest
# Run with coverage
pytest --cov=aws_resiliency_mcp --cov-report=term-missing
# Run integration tests (requires AWS credentials)
pytest -m integration
# Lint and format
ruff check src/ tests/
ruff format src/ tests/
# Type check
mypy src/
# Install pre-commit hooks
pre-commit install
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Install dev dependencies (
pip install -e ".[dev]") - Make changes and add tests
- Ensure all checks pass (
pre-commit run --all-files) - Commit (
git commit -m 'Add amazing feature') - Push and open a Pull Request
Guidelines
- All new assessment modules must include unit tests with mocked boto3 calls
- Maintain 80%+ test coverage
- Follow existing patterns for Finding creation and environment enrichment
- Use
rufffor formatting (enforced via pre-commit)
License
This project is licensed under the MIT License — see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aws_resiliency_mcp-1.0.0.tar.gz.
File metadata
- Download URL: aws_resiliency_mcp-1.0.0.tar.gz
- Upload date:
- Size: 106.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa3f87fa2d939980eaaaca1561d0e6b1a6895dd2f2e17fb4f16b3655560d4e34
|
|
| MD5 |
72a8e22e5985788db25637102c98ff5a
|
|
| BLAKE2b-256 |
78426bca33e33b7212f33fd016eb7885c257b385e8a9a8bef03293941e93e14a
|
File details
Details for the file aws_resiliency_mcp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: aws_resiliency_mcp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 58.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
990dcf22813b930c28c00d3a78823cdb775225ec40a68f0a3cdf06dd9e1ba01f
|
|
| MD5 |
4658ecdf096b0b248823f9f175a962a0
|
|
| BLAKE2b-256 |
c1fdb158dbd0807c683359d7d1a135afc368a4e7dc27f2ef4f7812304b57f2d0
|