Skip to main content
Glama
AWS FinOps MCP Server

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 your MCP server to production in minutes:

# 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:

Local Development

# Install dependencies
pip install -e .

# Run locally
python -m aws_finops_mcp

Related MCP server: Cloud FinOps Analyst MCP Server

๐ŸŽฏ 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 - 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!

# 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 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!

# 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 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:

# Quick deployment (recommended)
pip install bedrock-agentcore-starter-toolkit
agentcore launch

Quick Links:

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)

# Automated setup
./setup.sh

# Run the server (stdio mode)
./run.sh

# Run tests
./test.sh

Manual Installation

# Using pip
pip install .

# Using uv
uv pip install .

# For development
pip install -e ".[dev]"

Docker Installation

Option 1: Standard Mode (stdio)

# 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)

# 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 for detailed deployment options including EC2, ECS, Lambda, and Kubernetes.

See 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!

# 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 for complete documentation and examples

Mode 1: Standard MCP Server (stdio)

Add to your MCP client configuration (e.g., Kiro's mcp.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:

{
  "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:

# 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:

curl http://localhost:8000/health

List Tools:

curl http://localhost:8000/tools

Execute Tool:

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):

# 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):

# 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 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)

# 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)

# 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:

# 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:

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 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

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black src/

# Lint
ruff check src/

Environment Variables

Server Configuration

# 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):

export MCP_TOOL_CATEGORIES="cleanup,cost,security"
python -m aws_finops_mcp

stdio Mode (All Tools):

python -m aws_finops_mcp

HTTP Mode with Category Filtering:

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:

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

# 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

# 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

๐Ÿ†• Deploy to Amazon Bedrock AgentCore in 5 minutes

BEDROCK_AGENTCORE_DEPLOYMENT.md

๐Ÿ†• Complete AgentCore deployment guide

AGENTCORE_COMPARISON.md

๐Ÿ†• Compare Gateway vs Runtime deployment

GETTING_STARTED.md

Complete setup guide with MCP configuration

TOOL_CATEGORIES.md

Category filtering guide

CATEGORY_QUICK_REFERENCE.md

Quick reference for categories

TOOLS_REFERENCE.md

All 76 tools documentation

DEPLOYMENT.md

Deployment options (EC2, ECS, Lambda, K8s)

REMOTE_ACCESS_GUIDE.md

HTTP mode and remote access setup

IAM_SETUP_GUIDE.md

IAM permissions and policies

ARCHITECTURE.md

System architecture and design

MIGRATION_GUIDE.md

Migration guide for category filtering

iam-policies/README.md

IAM policy templates

Available Tools

76 tools
analyze_api_gateway_performanceD

Analyze API Gateway performance metrics.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

analyze_cloudfront_cache_hit_ratioC

Analyze CloudFront cache hit ratios.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

analyze_data_transfer_costsC

Analyze data transfer costs using AWS Cost Explorer.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

analyze_dynamodb_throttlingC

Analyze DynamoDB tables for throttling issues.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

analyze_lambda_cold_startsC

Analyze Lambda functions for cold start issues.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

analyze_rds_performance_insightsC

Analyze RDS Performance Insights data.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

analyze_reserved_instance_utilizationC

Analyze Reserved Instance utilization and coverage.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

analyze_tag_complianceC

Analyze tag compliance across AWS resources.

Inputs: region_name, required_tags, profile_name, role_arn, +3 more. Returns: object

find_asgs_with_old_amisA

Find Auto Scaling Groups using AMIs older than the specified period.

Args:
    region_name: AWS region name
    period: Minimum age in days for AMI to be considered old (default: 90)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with ASGs using old AMIs

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_ebs_volumes_with_old_typesC

Find EBS volumes using previous generation volume types.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_ec2_instances_with_old_generationsC

Find EC2 instances using previous generation instance types.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_old_ecs_task_definitionsC

Find old ECS task definitions not used by any service.

Inputs: region_name, age_days, profile_name, role_arn, +3 more. Returns: object

find_orphaned_cloudwatch_alarmsB

Find CloudWatch alarms not associated with any active AWS resources.

This validates alarms against actual resources across multiple services:
EC2, RDS, ECS, Lambda, SQS, Target Groups, and Load Balancers.

Inputs: region_name, max_results, profile_name, role_arn, +3 more. Returns: object

find_orphaned_cloudwatch_dashboardsC

Find CloudWatch dashboards with widgets referencing deleted resources.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_outdated_ecs_platform_versionsC

Find ECS services not using the latest platform version.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_outdated_eks_cluster_versionsC

Find EKS clusters not running the latest Kubernetes version.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_outdated_elasticache_engine_versionsC

Find ElastiCache clusters not running the latest engine version.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_outdated_lambda_runtimesC

Find Lambda functions with deprecated or outdated runtimes.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_outdated_rds_engine_versionsC

Find RDS instances not running the latest engine version.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_overly_permissive_security_groupsC

Find security groups with overly permissive rules (0.0.0.0/0 or ::/0).

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_overutilized_dynamodb_tablesC

Find DynamoDB tables with high capacity utilization (>80%).

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_overutilized_ec2_instancesA

Find EC2 instances with high CPU or memory utilization (โ‰ฅ80%).

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 30)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with overutilized EC2 instances

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_overutilized_elasticache_clustersC

Find ElastiCache clusters with high CPU or memory utilization (>80%).

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_overutilized_rds_instancesA

Find RDS instances with high CPU utilization (โ‰ฅ80%).

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 30)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with overutilized RDS instances

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_public_s3_bucketsC

Find S3 buckets with public access enabled.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_target_groups_with_high_error_rateA

Find target groups with high error rates (5XX errors).

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 7)
    error_threshold: Error rate threshold percentage (default: 5.0)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with target groups having high error rates

Inputs: region_name, period, error_threshold, profile_name, +4 more. Returns: object

find_target_groups_with_high_response_timeB

Find target groups with high response times.

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 7)
    response_time_threshold: Response time threshold in seconds (default: 1.0)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with target groups having high response times

Inputs: region_name, period, response_time_threshold, profile_name, +4 more. Returns: object

find_underutilized_dynamodb_tablesC

Find DynamoDB tables with low capacity utilization.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_underutilized_ec2_instancesA

Find EC2 instances with low CPU and memory utilization (โ‰ค20%).

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 30)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with underutilized EC2 instances

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_underutilized_ecs_servicesC

Find ECS services with low CPU and memory utilization (<20%).

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_underutilized_elasticache_clustersC

Find ElastiCache clusters with low CPU utilization (<20%).

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_underutilized_lambda_functionsC

Find Lambda functions with low invocation rates or high error rates.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_underutilized_rds_instancesA

Find RDS instances with low CPU utilization (โ‰ค20%).

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 30)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with underutilized RDS instances

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unencrypted_ebs_volumesC

Find EBS volumes without encryption enabled.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_unencrypted_rds_instancesC

Find RDS instances without encryption enabled.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_unencrypted_s3_bucketsC

Find S3 buckets without default encryption enabled.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_untagged_resourcesC

Find AWS resources missing required tags.

Inputs: region_name, required_tags, profile_name, role_arn, +3 more. Returns: object

find_unused_amisA

Find AMIs not used by any EC2 instances, ASGs, or Spot Fleet Requests.

Args:
    region_name: AWS region name
    period: Minimum age in days for AMI to be considered unused (default: 90)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused AMIs

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unused_cloudfront_distributionsC

Find CloudFront distributions with no requests in the specified period.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_cloudwatch_alarmsC

Find CloudWatch alarms in INSUFFICIENT_DATA state for extended period.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_dynamodb_tablesC

Find DynamoDB tables with no read/write activity.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_ecr_imagesC

Find unused ECR images older than specified days.

Inputs: region_name, age_days, profile_name, role_arn, +3 more. Returns: object

find_unused_ecs_clusters_and_servicesA

Find ECS clusters and services with no activity in the specified period.

Identifies:
- Clusters with no active services, tasks, or scheduled tasks
- Services with zero running tasks and no recent CloudWatch activity

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_elastic_ipsB

Find unattached Elastic IPs.

Args:
    region_name: AWS region name
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused Elastic IPs

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_unused_eventbridge_rulesC

Find EventBridge rules with no invocations.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_internet_gatewaysC

Find Internet Gateways not attached or attached to VPCs with no resources.

Inputs: region_name, max_results, profile_name, role_arn, +3 more. Returns: object

find_unused_lambda_functionsA

Find Lambda functions with no invocations in the specified period.

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 90)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused Lambda functions

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unused_launch_templatesB

Find EC2 launch templates not used by any Auto Scaling Group or instance.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

find_unused_load_balancersA

Find load balancers with no traffic in the specified period.

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 90)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused load balancers

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_log_groupsA

Find CloudWatch Log Groups with no recent log events.

Args:
    region_name: AWS region name
    period: Lookback period in days (default: 90)
    max_results: Maximum results to return (default: 50)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused log groups

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unused_nat_gatewaysC

Find NAT Gateways with no traffic in the specified period.

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unused_route53_hosted_zonesC

Find Route53 hosted zones with no query activity.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_s3_bucketsC

Find S3 buckets with no activity in the specified period.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_security_groupsB

Find security groups not attached to any resources.

Args:
    region_name: AWS region name
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused security groups

Inputs: region_name, max_results, profile_name, role_arn, +3 more. Returns: object

find_unused_snapshotsA

Find EBS snapshots not associated with any AMI or volume.

Args:
    region_name: AWS region name
    period: Minimum age in days for snapshot to be considered unused (default: 90)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused snapshots

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unused_sns_topicsC

Find SNS topics with no subscriptions or no messages published.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_sqs_queuesC

Find SQS queues with no messages sent or received.

Inputs: region_name, period, profile_name, role_arn, +3 more. Returns: object

find_unused_target_groupsA

Find target groups with no registered targets or no traffic.

This function identifies target groups that are:
1. Not attached to any load balancer, OR
2. Have no registered targets, OR
3. Have registered targets but no traffic in the specified period

Args:
    region_name: AWS region name
    period: Lookback period in days for traffic check (default: 7)
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused target groups

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

find_unused_volumesA

Find EBS volumes that are not attached to any instance.

Args:
    region_name: AWS region name
    max_results: Maximum results to return (default: 100)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with unused EBS volumes

Inputs: region_name, max_results, profile_name, role_arn, +3 more. Returns: object

find_unused_vpc_endpointsC

Find VPC Endpoints with no connections in the specified period.

Inputs: region_name, period, max_results, profile_name, +4 more. Returns: object

generate_cost_allocation_reportC

Generate cost allocation report based on resource tags.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_all_cost_optimization_recommendationsA

Get all cost optimization recommendations from AWS Cost Optimization Hub.

Returns recommendations for all resource types (19 types total).

Args:
    region_name: AWS region to filter recommendations (optional)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    List of dictionaries with cost optimization recommendations by resource type

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: result

get_cost_by_regionA

Get cost breakdown by AWS region for the specified period.

Args:
    start_date: Start date in YYYY-MM-DD format (default: first day of last month)
    end_date: End date in YYYY-MM-DD format (default: first day of current month)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with cost breakdown by region

Inputs: start_date, end_date, profile_name, role_arn, +3 more. Returns: object

get_cost_by_region_and_serviceA

Get cost breakdown by AWS region and service for the specified period.

Args:
    start_date: Start date in YYYY-MM-DD format (default: first day of last month)
    end_date: End date in YYYY-MM-DD format (default: first day of current month)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with cost breakdown by region and service

Inputs: start_date, end_date, profile_name, role_arn, +3 more. Returns: object

get_cost_by_serviceA

Get cost breakdown by AWS service for the specified period.

Args:
    start_date: Start date in YYYY-MM-DD format (default: first day of last month)
    end_date: End date in YYYY-MM-DD format (default: first day of current month)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with cost breakdown by service

Inputs: start_date, end_date, profile_name, role_arn, +3 more. Returns: object

get_cost_optimization_ebsC

Get EBS volume cost optimization recommendations.

Args:
    region_name: AWS region to filter recommendations (optional)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with EBS cost optimization recommendations

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_cost_optimization_ec2C

Get EC2 instance cost optimization recommendations.

Args:
    region_name: AWS region to filter recommendations (optional)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with EC2 cost optimization recommendations

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_cost_optimization_lambdaC

Get Lambda function cost optimization recommendations.

Args:
    region_name: AWS region to filter recommendations (optional)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with Lambda cost optimization recommendations

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_cost_optimization_rdsB

Get RDS instance cost optimization recommendations.

Args:
    region_name: AWS region to filter recommendations (optional)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with RDS cost optimization recommendations

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_daily_cost_trendB

Get daily cost trend for the specified number of days.

Args:
    days: Number of days to look back (default: 30)
    profile_name: AWS profile name (optional)
    role_arn: IAM role ARN to assume (optional)
    access_key: AWS access key ID (optional)
    secret_access_key: AWS secret access key (optional)
    session_token: AWS session token for temporary credentials (optional)

Returns:
    Dictionary with daily cost trend and statistics

Inputs: days, profile_name, role_arn, access_key, +2 more. Returns: object

get_ebs_volume_type_recommendationsC

Get recommendations for optimizing EBS volume types based on usage patterns.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_nat_gateway_optimization_recommendationsC

Get recommendations for optimizing NAT Gateway costs.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_reserved_instance_recommendationsC

Get Reserved Instance purchase recommendations from AWS Cost Explorer.

Inputs: region_name, service, profile_name, role_arn, +3 more. Returns: object

get_s3_storage_class_recommendationsC

Get S3 storage class optimization recommendations.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_savings_plans_recommendationsC

Get Savings Plans recommendations from AWS Cost Explorer.

Inputs: region_name, profile_name, role_arn, access_key, +2 more. Returns: object

get_snapshot_lifecycle_recommendationsC

Get recommendations for snapshot lifecycle management and cleanup.

Inputs: region_name, retention_days, profile_name, role_arn, +3 more. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    B3/5.0

    Scored across 76 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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.

    Completeness5/5

    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.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language analysis of AWS costs, automated FinOps waste audits, and budget monitoring across multiple profiles and regions while keeping credentials secure locally.
      48 PyPI
      184
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables analyzing AWS cloud costs through natural language queries, providing cost summaries, anomaly detection, idle resource identification, rightsizing recommendations, and tagging compliance via Claude.
      10
      19 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language analysis of AWS cloud costs, waste audits, and budget insights across multiple profiles and regions.
      MIT
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables natural-language analysis of AWS cloud costs, waste and savings audits, and budget monitoring across multiple accounts and regions while keeping credentials local.
      -