Skip to main content
Glama
prashantgupta123

AWS FinOps MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
AWS_REGIONNoDefault AWS regionus-east-1
AWS_PROFILENoAWS profile namedefault
MCP_SERVER_HOSTNoHost to bind to (default: 0.0.0.0)0.0.0.0
MCP_SERVER_MODENoEnable HTTP server mode (default: stdio)stdio
MCP_SERVER_PORTNoPort to listen on (default: 8000)8000
PYTHONUNBUFFEREDNoEnable unbuffered output1
AWS_ACCESS_KEY_IDNoAWS access key (not recommended, use profiles or IAM roles instead)
MCP_TOOL_CATEGORIESNoEnable specific categories (default: all). Options: cleanup, cost, capacity, security, performance, upgrade, network, storage, containers, messaging, database, monitoring, application, governanceall
AWS_SECRET_ACCESS_KEYNoAWS secret key (not recommended, use profiles or IAM roles instead)

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

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

Find NAT Gateways with no traffic in the specified period.

find_unused_vpc_endpointsC

Find VPC Endpoints with no connections in the specified period.

find_unused_internet_gatewaysC

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

find_unused_cloudfront_distributionsC

Find CloudFront distributions with no requests in the specified period.

find_unused_route53_hosted_zonesC

Find Route53 hosted zones with no query activity.

find_unused_s3_bucketsC

Find S3 buckets with no activity in the specified period.

get_s3_storage_class_recommendationsC

Get S3 storage class optimization recommendations.

find_old_ecs_task_definitionsC

Find old ECS task definitions not used by any service.

find_unused_ecr_imagesC

Find unused ECR images older than specified days.

find_unused_launch_templatesB

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

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
find_unused_sqs_queuesC

Find SQS queues with no messages sent or received.

find_unused_sns_topicsC

Find SNS topics with no subscriptions or no messages published.

find_unused_eventbridge_rulesC

Find EventBridge rules with no invocations.

find_unused_dynamodb_tablesC

Find DynamoDB tables with no read/write activity.

find_underutilized_dynamodb_tablesC

Find DynamoDB tables with low capacity utilization.

find_unused_cloudwatch_alarmsC

Find CloudWatch alarms in INSUFFICIENT_DATA state for extended period.

find_orphaned_cloudwatch_dashboardsC

Find CloudWatch dashboards with widgets referencing deleted resources.

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

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

find_underutilized_elasticache_clustersC

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

find_overutilized_elasticache_clustersC

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

find_underutilized_ecs_servicesC

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

find_underutilized_lambda_functionsC

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

get_savings_plans_recommendationsC

Get Savings Plans recommendations from AWS Cost Explorer.

get_reserved_instance_recommendationsC

Get Reserved Instance purchase recommendations from AWS Cost Explorer.

analyze_reserved_instance_utilizationC

Analyze Reserved Instance utilization and coverage.

get_ebs_volume_type_recommendationsC

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

get_snapshot_lifecycle_recommendationsC

Get recommendations for snapshot lifecycle management and cleanup.

analyze_data_transfer_costsC

Analyze data transfer costs using AWS Cost Explorer.

get_nat_gateway_optimization_recommendationsC

Get recommendations for optimizing NAT Gateway costs.

find_outdated_rds_engine_versionsC

Find RDS instances not running the latest engine version.

find_outdated_elasticache_engine_versionsC

Find ElastiCache clusters not running the latest engine version.

find_outdated_lambda_runtimesC

Find Lambda functions with deprecated or outdated runtimes.

find_ec2_instances_with_old_generationsC

Find EC2 instances using previous generation instance types.

find_ebs_volumes_with_old_typesC

Find EBS volumes using previous generation volume types.

find_outdated_ecs_platform_versionsC

Find ECS services not using the latest platform version.

find_outdated_eks_cluster_versionsC

Find EKS clusters not running the latest Kubernetes version.

analyze_lambda_cold_startsC

Analyze Lambda functions for cold start issues.

analyze_api_gateway_performanceD

Analyze API Gateway performance metrics.

analyze_dynamodb_throttlingC

Analyze DynamoDB tables for throttling issues.

analyze_rds_performance_insightsC

Analyze RDS Performance Insights data.

analyze_cloudfront_cache_hit_ratioC

Analyze CloudFront cache hit ratios.

find_unencrypted_ebs_volumesC

Find EBS volumes without encryption enabled.

find_unencrypted_s3_bucketsC

Find S3 buckets without default encryption enabled.

find_unencrypted_rds_instancesC

Find RDS instances without encryption enabled.

find_public_s3_bucketsC

Find S3 buckets with public access enabled.

find_overly_permissive_security_groupsC

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

find_untagged_resourcesC

Find AWS resources missing required tags.

analyze_tag_complianceC

Analyze tag compliance across AWS resources.

generate_cost_allocation_reportC

Generate cost allocation report based on resource tags.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/prashantgupta123/aws-pillar-mcp-server'

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