AWS FinOps MCP Server
# AWS FinOps MCP Server
> **Production-Ready Deployment**: This MCP server is optimized for deployment on Amazon Bedrock AgentCore Runtime
Model Context Protocol (MCP) server for AWS Financial Operations (FinOps) - providing comprehensive tools for cloud resource optimization, cost management, and performance monitoring.
## ๐ Quick Start - Deploy to AWS
### Deploy to Amazon Bedrock AgentCore (Recommended)
Deploy your MCP server to production in minutes:
```bash
# 1. Create ECR repository
./create-ecr-repo.sh
# 2. Update configuration
sed -i 's/ecr: auto/ecr: aws-pillar-mcp-server/' .bedrock_agentcore.yaml
# 3. Deploy to AWS
agentcore launch
# 4. Test your deployment
agentcore invoke '{"prompt": "find unused resources in us-east-1"}'
```
๐ **Complete Deployment Guides:**
- **[AGENTCORE_DEPLOYMENT_FINAL.md](AGENTCORE_DEPLOYMENT_FINAL.md)** - Complete deployment guide with troubleshooting
- **[AGENTCORE_QUICKSTART.md](AGENTCORE_QUICKSTART.md)** - Quick 5-minute deployment
- **[AGENTCORE_RUNTIME_REVIEW.md](AGENTCORE_RUNTIME_REVIEW.md)** - Status review and next steps
- **[QUICK_FIX_DEPLOYMENT.md](QUICK_FIX_DEPLOYMENT.md)** - Quick fixes for common issues
- **[MANUAL_AGENTCORE_DEPLOY.md](MANUAL_AGENTCORE_DEPLOY.md)** - Manual Docker deployment
### Local Development
```bash
# Install dependencies
pip install -e .
# Run locally
python -m aws_finops_mcp
```
## ๐ฏ Quick Overview
- **76 Tools** across 14 categories for comprehensive AWS optimization
- **Category Filtering** - Load only the tools you need (NEW!)
- **Dual Modes** - stdio for direct integration, HTTP for remote access
- **Cost Savings** - Identify unused resources and optimization opportunities
- **Security & Compliance** - Find unencrypted resources and security issues
- **Performance Analysis** - Analyze and optimize application performance
- **Ready-to-Use IAM Policies** - Get started in minutes
๐ **[View Architecture Diagrams](ARCHITECTURE_DIAGRAMS.md)** - Visual system architecture and data flows
## ๐ What's New
### Category-Based Tool Filtering
**Problem**: Loading all 76 tools can be slow and overwhelming for MCP clients.
**Solution**: Use `MCP_TOOL_CATEGORIES` to enable only the categories you need!
```bash
# Load only cost and cleanup tools (25 tools instead of 76)
export MCP_TOOL_CATEGORIES="cleanup,cost"
python -m aws_finops_mcp
# 67% reduction in tool count, faster loading, easier navigation
```
**Benefits**:
- โก **67-89% faster loading** for focused use cases
- ๐ฏ **Better organization** - see only relevant tools
- ๐ง **Flexible** - change categories without code changes
- โ
**Backward compatible** - defaults to all tools
๐ See [TOOL_CATEGORIES.md](TOOL_CATEGORIES.md) for complete guide
### New Tools Added
- **Network**: NAT Gateways, VPC Endpoints, Internet Gateways, CloudFront, Route53
- **Storage**: S3 buckets, storage class recommendations
- **Containers**: ECS clusters/services, ECR images, launch templates
- **Messaging**: SQS queues, SNS topics, EventBridge rules
- **Database**: DynamoDB tables and utilization
- **Monitoring**: CloudWatch alarms and dashboards
- **Performance**: Lambda cold starts, API Gateway, DynamoDB throttling, RDS insights, CloudFront cache
- **Security**: Unencrypted resources, public S3 buckets, permissive security groups
- **Governance**: Untagged resources, tag compliance, cost allocation
- **Capacity**: ElastiCache, ECS services, Lambda utilization
- **Upgrade**: Lambda runtimes, EC2 generations, EBS types, RDS/ElastiCache engines, EKS versions
- **Cost**: Savings Plans, Reserved Instances, EBS optimization, snapshots, data transfer, NAT Gateway
## ๐ Tool Categories
| Category | Tools | Description |
|----------|-------|-------------|
| ๐งน **Cleanup** | 9 | Find unused resources to delete |
| ๐ฐ **Cost** | 16 | Cost optimization and analysis |
| ๐ **Capacity** | 9 | Resource utilization and right-sizing |
| ๐ **Security** | 5 | Security compliance checks |
| โก **Performance** | 5 | Performance analysis and tuning |
| ๐ **Upgrade** | 8 | Outdated resource detection |
| ๐ **Network** | 5 | Network resource optimization |
| ๐พ **Storage** | 2 | Storage optimization |
| ๐ฆ **Containers** | 4 | Container resource management |
| ๐ฌ **Messaging** | 3 | Messaging service cleanup |
| ๐๏ธ **Database** | 2 | Database optimization |
| ๐ **Monitoring** | 3 | Monitoring resource cleanup |
| ๐ **Application** | 2 | Application health monitoring |
| ๐๏ธ **Governance** | 3 | Tagging and compliance |
**Total: 76 tools** - Use category filtering to load only what you need!
```bash
# Load only cost and cleanup tools (25 tools instead of 76)
export MCP_TOOL_CATEGORIES="cost,cleanup"
python -m aws_finops_mcp
```
๐ See [TOOL_CATEGORIES.md](TOOL_CATEGORIES.md) for complete documentation
## Features
**76 Tools Across 14 Categories** - Use category filtering to load only what you need!
### ๐งน Cleanup Tools (9 tools)
Find unused AWS resources to reduce costs:
- `find_unused_lambda_functions` - Lambda functions with no invocations
- `find_unused_elastic_ips` - Unattached Elastic IPs ($3.60/month each)
- `find_unused_amis` - AMIs not used by instances or ASGs
- `find_unused_load_balancers` - Load balancers with no traffic ($22-32/month)
- `find_unused_target_groups` - Target groups with no targets or traffic
- `find_unused_log_groups` - CloudWatch Log Groups with no recent events
- `find_unused_snapshots` - EBS snapshots not associated with AMIs ($0.05/GB/month)
- `find_unused_security_groups` - Security groups not attached to resources
- `find_unused_volumes` - Unattached EBS volumes
### ๐ฐ Cost Tools (16 tools)
Cost optimization, analysis, and savings recommendations:
**Cost Optimization Hub:**
- `get_all_cost_optimization_recommendations` - All 19 resource types
- `get_cost_optimization_ec2` - EC2 instance recommendations
- `get_cost_optimization_lambda` - Lambda function recommendations
- `get_cost_optimization_rds` - RDS instance recommendations
- `get_cost_optimization_ebs` - EBS volume recommendations
**Cost Explorer:**
- `get_cost_by_region` - Cost breakdown by AWS region
- `get_cost_by_service` - Cost breakdown by AWS service
- `get_cost_by_region_and_service` - Combined region and service breakdown
- `get_daily_cost_trend` - Daily cost trends with statistics
**Savings & Optimization:**
- `get_savings_plans_recommendations` - Savings Plans recommendations
- `get_reserved_instance_recommendations` - RI purchase recommendations
- `analyze_reserved_instance_utilization` - RI utilization and coverage
- `get_ebs_volume_type_recommendations` - EBS volume type optimization
- `get_snapshot_lifecycle_recommendations` - Snapshot lifecycle management
- `analyze_data_transfer_costs` - Data transfer cost analysis
- `get_nat_gateway_optimization_recommendations` - NAT Gateway optimization
### ๐ Capacity Tools (9 tools)
Resource utilization analysis for right-sizing:
**Compute:**
- `find_underutilized_ec2_instances` - EC2 with low CPU/memory (โค20%)
- `find_overutilized_ec2_instances` - EC2 with high CPU/memory (โฅ80%)
- `find_underutilized_lambda_functions` - Lambda with low invocations
**Database:**
- `find_underutilized_rds_instances` - RDS with low CPU (โค20%)
- `find_overutilized_rds_instances` - RDS with high CPU (โฅ80%)
- `find_underutilized_dynamodb_tables` - DynamoDB with low capacity
- `find_overutilized_dynamodb_tables` - DynamoDB with high capacity (>80%)
- `find_underutilized_elasticache_clusters` - ElastiCache with low CPU (<20%)
- `find_overutilized_elasticache_clusters` - ElastiCache with high CPU/memory (>80%)
**Containers:**
- `find_underutilized_ecs_services` - ECS services with low CPU/memory (<20%)
### ๐ Security Tools (5 tools)
Security compliance and best practices:
- `find_unencrypted_ebs_volumes` - EBS volumes without encryption
- `find_unencrypted_s3_buckets` - S3 buckets without default encryption
- `find_unencrypted_rds_instances` - RDS instances without encryption
- `find_public_s3_buckets` - S3 buckets with public access enabled
- `find_overly_permissive_security_groups` - Security groups with 0.0.0.0/0 rules
### โก Performance Tools (5 tools)
Performance analysis and optimization:
- `analyze_lambda_cold_starts` - Lambda cold start analysis
- `analyze_api_gateway_performance` - API Gateway performance metrics
- `analyze_dynamodb_throttling` - DynamoDB throttling issues
- `analyze_rds_performance_insights` - RDS Performance Insights data
- `analyze_cloudfront_cache_hit_ratio` - CloudFront cache performance
### ๐ Upgrade Tools (8 tools)
Identify outdated resources needing upgrades:
**Compute:**
- `find_asgs_with_old_amis` - Auto Scaling Groups using old AMIs
- `find_outdated_lambda_runtimes` - Lambda with deprecated runtimes
- `find_ec2_instances_with_old_generations` - EC2 using previous generation types
- `find_ebs_volumes_with_old_types` - EBS using previous generation types
- `find_outdated_ecs_platform_versions` - ECS not on latest platform version
**Database:**
- `find_outdated_rds_engine_versions` - RDS not on latest engine version
- `find_outdated_elasticache_engine_versions` - ElastiCache not on latest version
**Containers:**
- `find_outdated_eks_cluster_versions` - EKS not on latest Kubernetes version
### ๐ Network Tools (5 tools)
Network resource optimization:
- `find_unused_nat_gateways` - NAT Gateways with no traffic ($32.40/month)
- `find_unused_vpc_endpoints` - VPC Endpoints with no connections ($7.20/month per AZ)
- `find_unused_internet_gateways` - Unattached Internet Gateways
- `find_unused_cloudfront_distributions` - CloudFront with no requests
- `find_unused_route53_hosted_zones` - Route53 zones with no queries
### ๐พ Storage Tools (2 tools)
Storage optimization:
- `find_unused_s3_buckets` - S3 buckets with no activity
- `get_s3_storage_class_recommendations` - S3 storage class optimization (30-95% savings)
### ๐ฆ Container Tools (4 tools)
Container and orchestration resource management:
- `find_old_ecs_task_definitions` - Old ECS task definitions not in use
- `find_unused_ecr_images` - Unused ECR images ($0.10/GB/month)
- `find_unused_launch_templates` - EC2 launch templates not in use
- `find_unused_ecs_clusters_and_services` - ECS clusters/services with no activity
### ๐ฌ Messaging Tools (3 tools)
Messaging service optimization:
- `find_unused_sqs_queues` - SQS queues with no messages
- `find_unused_sns_topics` - SNS topics with no subscriptions/messages
- `find_unused_eventbridge_rules` - EventBridge rules with no invocations
### ๐๏ธ Database Tools (2 tools)
Database resource analysis:
- `find_unused_dynamodb_tables` - DynamoDB tables with no read/write activity
- `find_underutilized_dynamodb_tables` - DynamoDB with low capacity utilization
### ๐ Monitoring Tools (3 tools)
Monitoring resource cleanup:
- `find_unused_cloudwatch_alarms` - CloudWatch alarms in INSUFFICIENT_DATA state
- `find_orphaned_cloudwatch_dashboards` - Dashboards referencing deleted resources
- `find_orphaned_cloudwatch_alarms` - Alarms not associated with active resources
### ๐ Application Tools (2 tools)
Application health monitoring:
- `find_target_groups_with_high_error_rate` - Target groups with 5XX errors (>5%)
- `find_target_groups_with_high_response_time` - Target groups with slow response times (>1s)
### ๐๏ธ Governance Tools (3 tools)
Resource governance and compliance:
- `find_untagged_resources` - Resources missing required tags
- `analyze_tag_compliance` - Tag compliance analysis across resources
- `generate_cost_allocation_report` - Cost allocation by tags
---
### โจ Tool Features
All tools include:
- โ
**Comprehensive Details** - Full ARNs, configurations, and metadata
- โ
**Cost Estimates** - Monthly cost savings potential
- โ
**Complete Tags** - Cost allocation and ownership tracking
- โ
**Age Calculations** - Prioritize cleanup efforts
- โ
**Security Details** - Encryption, KMS keys, ownership
- โ
**Total Savings** - Aggregate cost savings per tool
### ๐ Deployment Modes
**Standard Mode (stdio)**: Direct integration with MCP clients
**HTTP Server Mode**: Remote access via REST API for distributed deployments
- Run on EC2 and connect from anywhere
- SSH tunnel for secure development
- HTTPS with Nginx for production
- AWS Systems Manager for no-SSH access
- API endpoints: `/health`, `/tools`, `/mcp`
## Installation
### ๐ NEW: Deploy to Amazon Bedrock AgentCore
Deploy this MCP server to AWS Bedrock AgentCore for production-ready, scalable agent integration:
```bash
# Quick deployment (recommended)
pip install bedrock-agentcore-starter-toolkit
agentcore launch
```
**Quick Links:**
- โก [Quick Fix Deployment](./QUICK_FIX_DEPLOYMENT.md) - Deploy in 5 commands
- ๐ [Manual Deployment Guide](./MANUAL_AGENTCORE_DEPLOY.md) - Step-by-step manual process
- ๐ [Complete Documentation](./BEDROCK_AGENTCORE_DEPLOYMENT.md) - Full deployment guide
- โ๏ธ [Deployment Comparison](./AGENTCORE_COMPARISON.md) - Choose the right method
**Two Deployment Methods:**
1. **Gateway (Lambda)** - Quick setup, serverless, cost-effective
2. **Runtime (Container)** - Production-ready, unlimited execution time (use `agentcore launch`)
### Quick Start (Virtual Environment)
```bash
# Automated setup
./setup.sh
# Run the server (stdio mode)
./run.sh
# Run tests
./test.sh
```
### Manual Installation
```bash
# Using pip
pip install .
# Using uv
uv pip install .
# For development
pip install -e ".[dev]"
```
### Docker Installation
#### Option 1: Standard Mode (stdio)
```bash
# Build and run with Docker
./docker-run.sh run
# Or use Docker Compose
docker-compose up -d
# View logs
docker-compose logs -f
```
#### Option 2: HTTP Server Mode (Remote Access)
```bash
# Run with HTTP server for remote access
docker-compose -f docker-compose-http.yml up -d
# Test the server
curl http://localhost:8000/health
# View logs
docker-compose -f docker-compose-http.yml logs -f
```
See [DEPLOYMENT.md](DEPLOYMENT.md) for detailed deployment options including EC2, ECS, Lambda, and Kubernetes.
See [REMOTE_ACCESS_GUIDE.md](REMOTE_ACCESS_GUIDE.md) for remote access setup and configuration.
## Usage
### ๐ฏ Tool Category Filtering (NEW!)
**Problem**: Loading all 76 tools can be slow and overwhelming for clients.
**Solution**: Use `MCP_TOOL_CATEGORIES` to enable only the tools you need!
```bash
# Enable only cleanup and cost tools (25 tools instead of 76)
export MCP_TOOL_CATEGORIES="cleanup,cost"
python -m aws_finops_mcp
# Enable all tools (default)
export MCP_TOOL_CATEGORIES="all"
python -m aws_finops_mcp
```
**Available Categories** (14 total):
- `cleanup` (9 tools) - Find unused resources
- `cost` (16 tools) - Cost optimization and analysis
- `capacity` (9 tools) - Resource utilization analysis
- `security` (5 tools) - Security compliance checks
- `performance` (5 tools) - Performance analysis
- `upgrade` (8 tools) - Outdated resource detection
- `network` (5 tools) - Network resource optimization
- `storage` (2 tools) - Storage optimization
- `containers` (4 tools) - Container resource management
- `database` (2 tools) - Database optimization
- `messaging` (3 tools) - Messaging service cleanup
- `monitoring` (3 tools) - Monitoring resource cleanup
- `application` (2 tools) - Application health monitoring
- `governance` (3 tools) - Tagging and compliance
๐ **See [TOOL_CATEGORIES.md](TOOL_CATEGORIES.md) for complete documentation and examples**
### Mode 1: Standard MCP Server (stdio)
Add to your MCP client configuration (e.g., Kiro's `mcp.json`):
```json
{
"mcpServers": {
"aws-finops": {
"command": "python",
"args": ["-m", "aws_finops_mcp"],
"env": {
"AWS_PROFILE": "your-profile",
"AWS_REGION": "us-east-1",
"MCP_TOOL_CATEGORIES": "cleanup,cost,security"
}
}
}
}
```
Or using uvx:
```json
{
"mcpServers": {
"aws-finops": {
"command": "uvx",
"args": ["aws-pillar-mcp-server"]
}
}
}
```
### Mode 2: HTTP Server (Remote Access)
Run the server in HTTP mode for remote access:
```bash
# Set environment variable
export MCP_SERVER_MODE=http
export MCP_SERVER_HOST=0.0.0.0
export MCP_SERVER_PORT=8000
# Run the server
python -m aws_finops_mcp
# Or use Docker
docker-compose -f docker-compose-http.yml up -d
```
#### HTTP API Endpoints
**Health Check**:
```bash
curl http://localhost:8000/health
```
**List Tools**:
```bash
curl http://localhost:8000/tools
```
**Execute Tool**:
```bash
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"tool": "get_cost_by_region",
"arguments": {
"region_name": "us-east-1"
}
}'
```
#### Remote Access Options
**SSH Tunnel** (Recommended for Development):
```bash
# On EC2
docker-compose -f docker-compose-http.yml up -d
# On your laptop
ssh -i your-key.pem -L 8000:localhost:8000 ec2-user@your-ec2-ip -N
# Connect to localhost:8000
curl http://localhost:8000/health
```
**HTTPS with Nginx** (Recommended for Production):
```bash
# Automated setup on EC2
./setup-ec2-remote.sh yes yes your-domain.com
# Access via HTTPS
curl https://your-domain.com/health
```
See [REMOTE_ACCESS_GUIDE.md](REMOTE_ACCESS_GUIDE.md) for complete remote access setup instructions.
### Tool Parameters
All tools accept the following parameters:
**AWS Credentials** (one of):
- `profile_name`: AWS profile name
- `role_arn`: IAM role ARN to assume
- `access_key` + `secret_access_key`: Direct credentials
- `access_key` + `secret_access_key` + `session_token`: Temporary credentials
**Common Parameters**:
- `region_name`: AWS region (default: "us-east-1")
- `period`: Lookback period in days (default: 90)
- `max_results`: Maximum results to return (default: 100)
### Example Tool Calls
#### stdio Mode (MCP Client)
```python
# Find unused Lambda functions
{
"tool": "find_unused_lambda_functions",
"arguments": {
"profile_name": "production",
"region_name": "us-west-2",
"period": 90
}
}
# Find underutilized EC2 instances
{
"tool": "find_underutilized_ec2_instances",
"arguments": {
"role_arn": "arn:aws:iam::123456789012:role/FinOpsRole",
"region_name": "us-east-1",
"period": 30
}
}
# Get cost optimization recommendations
{
"tool": "get_cost_optimization_ec2",
"arguments": {
"access_key": "AKIA...",
"secret_access_key": "...",
"region_name": "us-east-1"
}
}
```
#### HTTP Mode (REST API)
```bash
# Find unused Lambda functions
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"tool": "find_unused_lambda_functions",
"arguments": {
"region_name": "us-west-2",
"period": 90
}
}'
# Get cost by region
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"tool": "get_cost_by_region",
"arguments": {
"region_name": "us-east-1"
}
}'
# Find underutilized EC2 instances
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"tool": "find_underutilized_ec2_instances",
"arguments": {
"region_name": "us-east-1",
"period": 30
}
}'
```
## AWS Permissions Required
### Quick Setup
We provide ready-to-use IAM policies for different use cases:
```bash
# Automated setup (recommended)
cd iam-policies/examples
./create-iam-role.sh finops-mcp-role full ec2
# Or create IAM user
./create-iam-user.sh finops-mcp-user full
```
### Available Policies
| Policy | Use Case | Tools Enabled |
|--------|----------|---------------|
| **Full Policy** | Production (recommended) | All 76 tools |
| **Minimal Policy** | Testing/Development | All 76 tools (basic) |
| **Read-Only Policy** | Maximum security | All 76 tools |
| **Cost-Only Policy** | Cost analysis only | 16 cost tools |
### Policy Files
- `iam-policies/finops-full-policy.json` - Complete permissions (recommended)
- `iam-policies/finops-minimal-policy.json` - Basic permissions
- `iam-policies/finops-readonly-policy.json` - Read-only access
- `iam-policies/finops-cost-only-policy.json` - Cost analysis only
### Setup Methods
**AWS Console**: Copy policy JSON โ Create Policy โ Attach to Role/User
**AWS CLI**:
```bash
aws iam create-policy \
--policy-name FinOpsFullPolicy \
--policy-document file://iam-policies/finops-full-policy.json
```
**Terraform**: See `iam-policies/examples/terraform-example.tf`
**CloudFormation**: See `iam-policies/examples/cloudformation-example.yaml`
๐ **Complete Guide**: See [IAM_SETUP_GUIDE.md](IAM_SETUP_GUIDE.md) for detailed instructions
## Architecture
```
src/aws_finops_mcp/
โโโ __main__.py # Entry point (supports stdio and HTTP modes)
โโโ server.py # FastMCP server with all 76 tools
โโโ server_filtered.py # Filtered server with category support (NEW!)
โโโ tool_categories.py # Category definitions and filtering logic (NEW!)
โโโ http_server.py # HTTP server wrapper for remote access
โโโ session.py # AWS session management
โโโ tools/
โ โโโ cleanup.py # Cleanup tools (9 tools)
โ โโโ capacity.py # Capacity analysis tools (4 tools)
โ โโโ capacity_compute.py # Compute capacity tools (1 tool)
โ โโโ capacity_database.py # Database capacity tools (4 tools)
โ โโโ cost.py # Cost optimization tools (5 tools)
โ โโโ cost_explorer.py # Cost Explorer tools (4 tools)
โ โโโ cost_savings.py # Savings recommendations (3 tools)
โ โโโ cost_storage.py # Storage cost optimization (2 tools)
โ โโโ cost_network.py # Network cost optimization (2 tools)
โ โโโ application.py # Application performance tools (2 tools)
โ โโโ upgrade.py # Upgrade recommendations (1 tool)
โ โโโ upgrade_compute.py # Compute upgrade tools (4 tools)
โ โโโ upgrade_database.py # Database upgrade tools (2 tools)
โ โโโ upgrade_containers.py # Container upgrade tools (1 tool)
โ โโโ network.py # Network optimization tools (5 tools)
โ โโโ storage.py # Storage optimization tools (2 tools)
โ โโโ containers.py # Container management tools (4 tools)
โ โโโ messaging.py # Messaging service tools (3 tools)
โ โโโ database.py # Database optimization tools (2 tools)
โ โโโ monitoring.py # Monitoring resource tools (3 tools)
โ โโโ performance.py # Performance analysis tools (5 tools)
โ โโโ security.py # Security compliance tools (5 tools)
โ โโโ governance.py # Governance and tagging tools (3 tools)
โโโ utils/
โโโ helpers.py # Helper functions
โโโ metrics.py # CloudWatch metrics utilities
```
### Deployment Modes
**stdio Mode** (Default):
```
MCP Client โโ stdin/stdout โโ MCP Server โโ AWS APIs
```
**HTTP Mode** (Remote Access):
```
MCP Client โโ HTTP/HTTPS โโ MCP Server โโ AWS APIs
(REST API)
```
### Category Filtering (NEW!)
```
User sets MCP_TOOL_CATEGORIES="cleanup,cost"
โ
__main__.py checks environment variable
โ
Loads server_filtered.py instead of server.py
โ
Only 25 tools registered (cleanup: 9 + cost: 16)
โ
Client sees only relevant tools
```
## Development
```bash
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black src/
# Lint
ruff check src/
```
## Environment Variables
### Server Configuration
```bash
# Server Mode
MCP_SERVER_MODE=http # Enable HTTP server mode (default: stdio)
MCP_SERVER_HOST=0.0.0.0 # Host to bind to (default: 0.0.0.0)
MCP_SERVER_PORT=8000 # Port to listen on (default: 8000)
# Tool Filtering (NEW!)
MCP_TOOL_CATEGORIES=cleanup,cost # Enable specific categories (default: all)
# Options: cleanup, cost, capacity, security,
# performance, upgrade, network, storage,
# containers, messaging, database,
# monitoring, application, governance
# AWS Configuration
AWS_REGION=us-east-1 # Default AWS region
AWS_PROFILE=default # AWS profile name
AWS_ACCESS_KEY_ID=... # AWS access key (not recommended)
AWS_SECRET_ACCESS_KEY=... # AWS secret key (not recommended)
# Logging
PYTHONUNBUFFERED=1 # Enable unbuffered output
```
### Example Configurations
**stdio Mode with Category Filtering** (Recommended):
```bash
export MCP_TOOL_CATEGORIES="cleanup,cost,security"
python -m aws_finops_mcp
```
**stdio Mode** (All Tools):
```bash
python -m aws_finops_mcp
```
**HTTP Mode with Category Filtering**:
```bash
export MCP_SERVER_MODE=http
export MCP_SERVER_HOST=0.0.0.0
export MCP_SERVER_PORT=8000
export MCP_TOOL_CATEGORIES="cost,capacity"
python -m aws_finops_mcp
```
**Docker HTTP Mode with Filtering**:
```bash
docker run -e MCP_SERVER_MODE=http \
-e MCP_SERVER_PORT=8000 \
-e MCP_TOOL_CATEGORIES="cleanup,cost" \
-p 8000:8000 \
aws-pillar-mcp-server
```
## License
MIT License
## Quick Reference
### Run Modes
| Mode | Command | Use Case |
|------|---------|----------|
| **stdio** | `python -m aws_finops_mcp` | Direct MCP client integration |
| **HTTP** | `MCP_SERVER_MODE=http python -m aws_finops_mcp` | Remote access, distributed deployments |
### Docker Commands
```bash
# stdio mode
docker-compose up -d
# HTTP mode
docker-compose -f docker-compose-http.yml up -d
# Test HTTP server
curl http://localhost:8000/health
```
### Remote Access
```bash
# SSH tunnel (development)
ssh -i key.pem -L 8000:localhost:8000 ec2-user@ec2-ip -N
# HTTPS setup (production)
./setup-ec2-remote.sh yes yes your-domain.com
# Test connection
./examples/test-remote-connection.sh http://localhost:8000
```
### Documentation
| Document | Description |
|----------|-------------|
| **[AGENTCORE_QUICKSTART.md](AGENTCORE_QUICKSTART.md)** | ๐ Deploy to Amazon Bedrock AgentCore in 5 minutes |
| **[BEDROCK_AGENTCORE_DEPLOYMENT.md](BEDROCK_AGENTCORE_DEPLOYMENT.md)** | ๐ Complete AgentCore deployment guide |
| **[AGENTCORE_COMPARISON.md](AGENTCORE_COMPARISON.md)** | ๐ Compare Gateway vs Runtime deployment |
| **[GETTING_STARTED.md](GETTING_STARTED.md)** | Complete setup guide with MCP configuration |
| **[TOOL_CATEGORIES.md](TOOL_CATEGORIES.md)** | Category filtering guide |
| **[CATEGORY_QUICK_REFERENCE.md](CATEGORY_QUICK_REFERENCE.md)** | Quick reference for categories |
| **[TOOLS_REFERENCE.md](TOOLS_REFERENCE.md)** | All 76 tools documentation |
| **[DEPLOYMENT.md](DEPLOYMENT.md)** | Deployment options (EC2, ECS, Lambda, K8s) |
| **[REMOTE_ACCESS_GUIDE.md](REMOTE_ACCESS_GUIDE.md)** | HTTP mode and remote access setup |
| **[IAM_SETUP_GUIDE.md](IAM_SETUP_GUIDE.md)** | IAM permissions and policies |
| **[ARCHITECTURE.md](ARCHITECTURE.md)** | System architecture and design |
| **[MIGRATION_GUIDE.md](MIGRATION_GUIDE.md)** | Migration guide for category filtering |
| **[iam-policies/README.md](iam-policies/README.md)** | IAM policy templates |
TDQS
Scored across 76 tools
Tools are highly specific to different AWS services and optimization aspects, with clear distinctions like 'find_unused_ebs_volumes' vs. 'find_ebs_volumes_with_old_types'. However, some overlap exists, such as multiple 'find_unused_' tools across services that could be conceptually similar, though descriptions clarify the target resource.
All tools follow a consistent snake_case pattern with clear verb_noun structures: 'analyze_', 'find_', 'generate_', 'get_'. This uniformity makes the tool set predictable and easy to navigate, despite the large number of tools.
With 76 tools, the count is excessive for an MCP server, making it overwhelming for agents to manage. While AWS FinOps is a broad domain, this many tools suggests fragmentation rather than a well-scoped set, likely leading to confusion and inefficiency.
The tool set comprehensively covers AWS FinOps, including cost analysis, resource optimization, performance monitoring, and security compliance across numerous services. There are no obvious gaps; tools address both proactive recommendations and reactive findings for cost savings and efficiency.