AWS MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AWS MCP Server list my EC2 instances in us-west-2"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Install dependencies:
npm installBuild the project:
npm run build(Note:
npm run buildis not defined in package.json yet, command isnpx tsc)
Usage (Private / Team)
Since this is a private tool, you can share it with your team in two main ways:
Option 1: Share via Git (Recommended)
Push this code to your private repository (GitHub, GitLab, etc.).
Team members should clone the repository:
git clone <your-private-repo-url> cd mcp-server-aws npm install npm run buildConfigure 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).
Create the package:
npm packThis creates a file like
mcp-server-aws-1.0.0.tgz.Team members install it globally (or locally):
npm install -g mcp-server-aws-1.0.0.tgzConfigure 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.tsAvailable Tools
58 toolscheck_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
Scored across 58 tools
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.
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.
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).
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
Related MCP Connectors
Services, case studies, 169 data and AI guides, and AI readiness scoring. Read-only, keyless.
Provides read access to your GKE and Kubernetes resources.
Discover Frontier inference capabilities and read sanitized usage through read-only tools.
AWS Cost Explorer cost, forecast, and anomaly reporting through user-connected IAM credentials.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables direct interaction with AWS S3 buckets through the Model Context Protocol, allowing users to list and manage S3 bucket operations using their AWS credentials.-
- AlicenseNot gradedqualityDmaintenanceEnables 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 PyPI24MIT
- AlicenseNot gradedqualityCmaintenanceProvides secure, read-only access to Snowflake databases through the Model Context Protocol. It allows users to query data while strictly prohibiting destructive SQL commands like INSERT, UPDATE, or DELETE.MIT
- AlicenseNot gradedqualityDmaintenanceA 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 npmISC