Skip to main content
Glama

AWS MCP Server

This is a Model Context Protocol (MCP) server that provides read-only access to AWS resources. It is built using TypeScript and the AWS SDK v3.

Features

This server exposes the following tools:

  • get_aws_caller_identity: Verify the current AWS credentials.

  • list_s3_buckets: List all S3 buckets.

  • list_ec2_instances: List EC2 instances in the configured region (or a specified region).

  • list_iam_users: List IAM users.

Related MCP server: AWS Athena MCP Server

Prerequisites

  • Node.js (v16 or higher)

  • AWS Credentials (Access Key ID and Secret Access Key) with read-only permissions.

Setup

  1. Install dependencies:

    npm install
  2. Build the project:

    npm run build

    (Note: npm run build is not defined in package.json yet, command is npx tsc)

Usage (Private / Team)

Since this is a private tool, you can share it with your team in two main ways:

  1. Push this code to your private repository (GitHub, GitLab, etc.).

  2. Team members should clone the repository:

    git clone <your-private-repo-url>
    cd mcp-server-aws
    npm install
    npm run build
  3. Configure MCP Client: Use the absolute path to the locally built file.

    {
      "mcpServers": {
        "aws-mcp": {
          "command": "node",
          "args": ["/path/to/cloned/repo/dist/index.js"],
          "env": {
            "AWS_ACCESS_KEY_ID": "YOUR_ACCESS_KEY",
            "AWS_SECRET_ACCESS_KEY": "YOUR_SECRET_KEY",
            "AWS_REGION": "us-east-1"
          }
        }
      }
    }

Option 2: Share as a Single File (.tgz)

You can package the server into a single file and send it to your team (Slack, Email, Sharepoint).

  1. Create the package:

    npm pack

    This creates a file like mcp-server-aws-1.0.0.tgz.

  2. Team members install it globally (or locally):

    npm install -g mcp-server-aws-1.0.0.tgz
  3. Configure MCP Client: If installed globally, they can run it directly:

    {
      "mcpServers": {
        "aws-mcp": {
          "command": "mcp-server-aws",
          "args": [],
          "env": { ... }
        }
      }
    }

### Option 2: Running Locally

If you cloned the repository and built it locally:

**Command**: `node`
**Args**: `/path/to/dist/index.js` (Absolute path recommended)

**Example Configuration (JSON)**:

```json
{
  "mcpServers": {
    "aws-mcp": {
      "command": "node",
      "args": ["/Users/bhaveshkumarparmar/Desktop/Shellkode/MSP-Projects/MCP-server-aws/dist/index.js"],
      "env": {
        "AWS_ACCESS_KEY_ID": "YOUR_ACCESS_KEY",
        "AWS_SECRET_ACCESS_KEY": "YOUR_SECRET_KEY",
        "AWS_REGION": "us-east-1"
      }
    }
  }
}

Development

To run the server in development mode (watching for changes):

npx tsx watch src/index.ts

Available Tools

58 tools
check_ip_in_wafC

Checks if an IP address exists in any WAF IP Set (Blocklists/Allowlists).

Inputs: ip_address (required).

get_aws_caller_identityB

Returns the AWS IAM caller identity (user/role) to verify credentials.

Inputs: no named parameters.

get_budget_detailsB

Lists all AWS Budgets along with their status, limits, and current spend.

Inputs: account_id (required).

get_cost_anomaliesC

Retrieves cost anomalies detected by AWS Cost Anomaly Detection.

Inputs: start_date (required), end_date (required).

get_cost_breakdownB

Detailed cost analysis. If service_name is provided, breaks down that service by Usage Type. Otherwise, breaks down by Service.

Inputs: start_date, end_date, service_name.

get_cost_by_serviceB

Retrieves AWS costs broken down by service for the specified date range.

Inputs: start_date, end_date.

get_cost_forecastC

Predicts future costs for a specified time range.

Inputs: start_date (required), end_date (required), granularity, prediction_interval_level.

get_instance_detailsC

Retrieves detailed information about a specific EC2 instance.

Inputs: instance_id (required).

get_metric_statisticsB

Retrieves statistics for a specific CloudWatch metric.

Inputs: namespace (required), metric_name (required), dimensions, start_time, +3 more.

get_recent_costC

Retrieves daily AWS costs for the specified date range (default: last 7 days).

Inputs: start_date, end_date.

get_recent_logsC

Retrieves recent log events from a CloudWatch Log Group.

Inputs: log_group_name (required), limit.

get_reservation_utilizationC

Retrieves Reserved Instance (RI) utilization percentages.

Inputs: start_date (required), end_date (required).

get_savings_plans_utilizationC

Retrieves Savings Plans utilization percentages.

Inputs: start_date (required), end_date (required).

get_service_healthB

Lists recent open events from AWS Health Dashboard.

Inputs: no named parameters.

get_target_healthB

Retrieves the health of targets in a specified Target Group.

Inputs: target_group_arn (required).

get_waf_sampled_requestsC

Retrieves sampled requests from a Web ACL.

Inputs: web_acl_arn (required), rule_metric_name (required), scope, time_window_seconds.

list_access_denied_eventsC

Lists recent Access Denied or Unauthorized events from CloudTrail.

Inputs: limit.

list_auto_scaling_groupsB

Lists Auto Scaling Groups with their capacity settings.

Inputs: no named parameters.

list_backup_jobsB

Lists recent backup jobs, optionally filtering by state (default: FAILED).

Inputs: state, hours.

list_cloudformation_stacksB

Lists CloudFormation stacks and their status.

Inputs: no named parameters.

list_cloudfront_distributionsB

Lists CloudFront distributions with their domain names and status.

Inputs: no named parameters.

list_cloudtrail_changesC

Lists write/mutation events (Create, Update, Delete) for a specific resource or service.

Inputs: resource_id, lookup_key, lookup_value, days.

list_cloudwatch_alarmsC

Lists CloudWatch alarms, optionally filtering by state.

Inputs: state.

list_dynamodb_tablesB

Lists DynamoDB tables.

Inputs: no named parameters.

list_ec2_instancesB

Lists EC2 instances in the current region, showing ID, type, state, and public IP.

Inputs: region.

list_ecs_clustersB

Lists ECS clusters with their status and running task counts.

Inputs: no named parameters.

list_ecs_servicesC

Lists services in a specific ECS cluster.

Inputs: cluster (required).

list_eks_clustersB

Lists EKS clusters in the current region.

Inputs: no named parameters.

list_expiring_certificatesB

Lists ACM certificates expiring within the specified days.

Inputs: days.

list_guardduty_findingsC

Lists recent high-severity GuardDuty findings.

Inputs: severity, limit.

list_hosted_zonesB

Lists all Route53 Hosted Zones.

Inputs: no named parameters.

list_iam_usersB

Lists IAM users in the AWS account.

Inputs: no named parameters.

list_internet_gatewaysB

Lists Internet Gateways and their attachments.

Inputs: no named parameters.

list_lambda_functionsB

Lists Lambda functions with runtimes and last modified dates.

Inputs: no named parameters.

list_listener_rulesB

Lists listeners and routing rules (host, path) for a specified Load Balancer.

Inputs: load_balancer_arn (required).

list_load_balancersB

Lists all Application and Network Load Balancers.

Inputs: no named parameters.

list_nat_gatewaysC

Lists NAT Gateways with their state and public IP.

Inputs: vpc_id.

list_old_access_keysC

Lists access keys older than 90 days (or specified days).

Inputs: days.

list_open_security_groupsA

Lists security groups that allow ingress from 0.0.0.0/0 on specified ports (default: 22, 3389).

Inputs: ports.

list_rds_instancesB

Lists RDS instances with engine versions and status.

Inputs: no named parameters.

list_recent_cloudtrail_eventsB

Lists recent CloudTrail events to track console access and changes.

Inputs: limit, lookup_attribute_key, lookup_attribute_value.

list_record_setsC

Lists DNS records for a given hosted zone.

Inputs: hosted_zone_id (required).

list_route_tablesB

Lists route tables with their routes and associations.

Inputs: vpc_id.

list_s3_bucketsB

Lists all S3 buckets in the AWS account.

Inputs: check_public_access.

list_scaling_activitiesC

Describes recent scaling activities for an Auto Scaling Group.

Inputs: auto_scaling_group_name (required).

list_secretsB

Lists Secrets Manager secrets (names only).

Inputs: no named parameters.

list_security_groupsC

Lists all security groups.

Inputs: vpc_id.

list_sns_topicsB

Lists all SNS topics.

Inputs: no named parameters.

list_ssm_parametersB

Lists SSM Parameters (names only).

Inputs: no named parameters.

list_subnetsB

Lists subnets with availability zones and available IP counts.

Inputs: vpc_id.

list_target_groupsC

Lists all Target Groups.

Inputs: load_balancer_arn.

list_trusted_advisor_checksC

Lists Trusted Advisor checks available.

Inputs: no named parameters.

list_unassociated_eipsB

Lists Elastic IPs that are not associated with any instance.

Inputs: no named parameters.

list_unused_ebs_volumesB

Lists EBS volumes that are available (not attached to any instance).

Inputs: no named parameters.

list_users_without_mfaA

Lists IAM users who do not have MFA enabled.

Inputs: no named parameters.

list_vpcsB

Lists all VPCs in the current region.

Inputs: no named parameters.

list_web_aclsC

Lists Web ACLs (Global/CloudFront or Regional).

Inputs: scope.

search_cloudwatch_logsC

Search CloudWatch logs using a filter pattern (e.g., 'ERROR', 'Exception').

Inputs: log_group_name (required), filter_pattern (required), limit, hours, +2 more.

Tool Schema Changelog

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

    TDQS

    B3.2/5.0

    Scored across 58 tools

    Disambiguation4/5

    Most tools are clearly distinct, targeting specific AWS services and operations (e.g., list_ec2_instances vs. get_instance_details). However, some overlap exists, such as list_recent_cloudtrail_events and list_cloudtrail_changes, which could cause confusion without careful reading of descriptions. Overall, the domain coverage is broad but well-organized.

    Naming Consistency5/5

    Tool names follow a highly consistent verb_noun pattern throughout, using snake_case uniformly. All tools start with verbs like 'get', 'list', 'check', or 'search', followed by specific nouns, making them predictable and easy to parse. No deviations or mixed conventions are present.

    Tool Count2/5

    With 58 tools, the count is excessive for a single server, making it overwhelming and likely to cause agent confusion. While AWS is a broad domain, this many tools suggests poor scoping; it would be more coherent if split into focused sub-servers (e.g., cost management, security, compute).

    Completeness4/5

    The tool set provides extensive coverage across AWS services, including monitoring, security, cost, and infrastructure, with many CRUD-like operations (e.g., list and get tools). Minor gaps exist, such as limited mutation tools (e.g., no create or delete operations), but agents can still perform comprehensive read-only analysis and diagnostics.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables direct interaction with AWS S3 buckets through the Model Context Protocol, allowing users to list and manage S3 bucket operations using their AWS credentials.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables execution of SQL queries against AWS Athena databases with schema discovery, query status management, and result retrieval through a standardized Model Context Protocol interface.
      55 PyPI
      24
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A read-only Model Context Protocol server that exposes over 60 AWS tools across services like EC2, S3, and IAM for AI agent interaction. It features multi-region support, resource caching, and audit logging to provide secure, AI-ready access to AWS infrastructure data.
      92 npm
      ISC