An AWS Labs Model Context Protocol (MCP) server for managing AWS EC2 instances, AMIs, security groups, volumes, snapshots, and related infrastructure with cost-effective KMS-encrypted key pair storage
Project description
AWS EC2 MCP Server
A comprehensive Model Context Protocol (MCP) server for managing AWS EC2 infrastructure including instances, AMIs, security groups, EBS volumes, snapshots, VPC networking, and SSH key pairs with secure storage options.
Features
This MCP server acts as a bridge between MCP clients and AWS EC2, allowing generative AI models to create, configure, and manage EC2 resources. The server provides a secure way to interact with AWS EC2 resources while maintaining proper access controls and resource validation.
Core Capabilities
- EC2 Instances: Complete lifecycle management - launch, terminate, start, stop, reboot, and detailed monitoring
- Security Groups: Full CRUD operations - create, modify, delete security groups and manage inbound/outbound rules
- Key Pairs: Create SSH key pairs with mandatory secure storage (Secrets Manager, S3+KMS, Parameter Store)
- EBS Volumes: Complete volume management - create, attach, detach, delete with support for different volume types
- EBS Snapshots: Create and list volume snapshots for backup and recovery
- AMIs (Amazon Machine Images): Create custom AMIs from instances, list popular AMIs, and manage lifecycle
- VPC & Networking: Comprehensive networking support - manage VPCs, subnets, and find suitable placement options
Security Features
- Input Validation: Comprehensive validation for all AWS resource IDs using regex patterns
- Permission-Based Access Control: Environment variable controls for write operations and sensitive data access
- Response Sanitization: Automatic sanitization to prevent sensitive information leakage (passwords, keys, etc.)
- Secure Key Storage: Mandatory private key storage with three options:
- AWS Secrets Manager: Enterprise-grade secret management
- S3 + KMS Encryption: Cost-effective storage with automatic encryption
- Parameter Store: Simple parameter storage with encryption
- Security Validation: Comprehensive validation decorators and error handling
- Write Operation Protection: Configurable protection requiring explicit enabling of destructive operations
Prerequisites
- AWS Account: Active AWS account with appropriate EC2 management permissions
- AWS Credentials: Properly configured AWS credentials via:
- AWS CLI (
aws configure) - Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - IAM roles (for EC2 instances)
- AWS credential files
- AWS CLI (
- Python 3.10+: Required for running the MCP server
- Network Access: Outbound internet access to AWS APIs
Installation
| Cursor | VS Code |
|---|---|
Using uvx (Recommended)
Configure the MCP server in your MCP client configuration (e.g., for Claude Desktop, edit the configuration file):
{
"mcpServers": {
"awslabs.ec2-mcp-server": {
"command": "uvx",
"args": ["awslabs.ec2-mcp-server@latest"],
"env": {
"AWS_PROFILE": "default",
"AWS_REGION": "us-west-2",
"FASTMCP_LOG_LEVEL": "INFO",
"ALLOW_WRITE": "true",
"ALLOW_SENSITIVE_DATA": "false"
},
"disabled": false,
"autoApprove": []
}
}
}
Using Docker
First, build the Docker image:
docker build -t awslabs/ec2-mcp-server .
Then configure with Docker in your MCP client:
{
"mcpServers": {
"awslabs.ec2-mcp-server": {
"command": "docker",
"args": [
"run",
"--rm",
"--interactive",
"--env-file", "/path/to/.env",
"awslabs/ec2-mcp-server:latest"
],
"env": {},
"disabled": false,
"autoApprove": []
}
}
}
Configuration Options
Environment Variables
Core Configuration
AWS_PROFILE: AWS profile name (default: "default")AWS_REGION: AWS region for operations (default: "us-east-1")ALLOW_WRITE: Enable write operations like create/modify/delete (default: "false", REQUIRED for most operations)ALLOW_SENSITIVE_DATA: Enable access to sensitive resource data (default: "false")
Logging Configuration
FASTMCP_LOG_LEVEL: Logging verbosity - DEBUG, INFO, WARNING, ERROR (default: "INFO")FASTMCP_LOG_FILE: Optional log file path for persistent logging
Key Storage Configuration (for create_key_pair)
S3_KEYPAIR_BUCKET: S3 bucket for encrypted private keys (default: auto-generated)S3_KEYPAIR_PREFIX: S3 object prefix for organization (default: "private-keys")KMS_KEY_ID: Custom KMS key ID for S3 encryption (default: aws/s3)
Security Settings
Important: Write operations are disabled by default for security. Set ALLOW_WRITE=true to enable resource creation/modification/deletion.
Key Pair Storage Configuration
When creating key pairs, you must specify a storage method. Configure these environment variables for S3 KMS encrypted storage:
S3 with KMS Encryption (Recommended - Most Cost-Effective):
S3_KEYPAIR_BUCKET: S3 bucket name for storing encrypted private keys (optional: defaults toec2-mcp-keypairs-{region})S3_KEYPAIR_PREFIX: S3 key prefix for organizing stored keys (default: "private-keys")KMS_KEY_ID: Custom KMS key ID (optional: defaults to aws/s3 default key)
S3 Features:
- Automatic KMS encryption with default aws/s3 key or custom KMS key
- Tag support - EC2 key pair tags are automatically applied to S3 objects (when provided)
- URL encoding - Special characters in tags are properly encoded
- Secure storage - Private keys stored as
.pemfiles with proper content type
Cost Comparison (1000 key pairs):
- S3 + KMS: ~$0.003/month (99.9% cheaper!)
- Parameter Store: $0-50/month
- Secrets Manager: $400/month
Available Tools
The server provides 33 tools across 7 categories for comprehensive EC2 management:
🖥️ EC2 Instances (9 tools)
list_instances- List EC2 instances with advanced filtering and status informationget_instance_details- Get comprehensive instance details including networking and securitylaunch_instance- Launch new instances with full configuration (AMI, type, security, networking)terminate_instance- Permanently terminate instances (requires ALLOW_WRITE=true)start_instance- Start stopped instancesstop_instance- Stop running instances with optional force flagreboot_instance- Reboot running instancesget_subnet_info- Get detailed subnet information for networking decisionslist_subnets- List available subnets with filtering and VPC association
🔒 Security Groups (5 tools)
list_security_groups- List security groups with filtering by ID, name, or VPCget_security_group_details- Get detailed security group rules and configurationcreate_security_group- Create new security groups with description and VPC associationdelete_security_group- Delete security groups (requires ALLOW_WRITE=true)modify_security_group_rules- Add/remove inbound and outbound rules with protocol/port configuration
🔑 Key Pairs (3 tools) - SECURE STORAGE MANDATORY
list_key_pairs- List available EC2 key pairs with fingerprints and metadatacreate_key_pair- Create SSH key pairs with mandatory secure storage- REQUIRED:
storage_methodparameter (no default provided for security) - Options: "secrets_manager", "s3_encrypted", or "parameter_store"
- Key Types: Supports RSA and ED25519 key generation
- S3 Features: Automatic KMS encryption, tag propagation, proper content types
- Security: Private keys never exposed through MCP interface
- REQUIRED:
delete_key_pair- Delete key pairs and optionally remove stored private keys
💾 EBS Volumes (5 tools)
list_volumes- List EBS volumes with status, attachment info, and encryption detailscreate_volume- Create new EBS volumes with size, type (gp2/gp3/io1/io2), and encryptiondelete_volume- Delete EBS volumes (must be unattached, requires ALLOW_WRITE=true)attach_volume- Attach volumes to EC2 instances with device specificationdetach_volume- Detach volumes from instances safely
📸 EBS Snapshots (2 tools)
list_snapshots- List EBS snapshots with filtering by owner, volume, and statuscreate_snapshot- Create point-in-time snapshots from EBS volumes for backup
📀 AMIs - Amazon Machine Images (4 tools)
list_amis- List AMIs with ownership filtering and detailed metadataget_popular_amis- Get curated popular public AMIs (Amazon Linux, Ubuntu, Windows, RHEL)create_image- Create custom AMIs from running instances with reboot optionsderegister_image- Deregister/delete AMIs (requires ALLOW_WRITE=true)
🌐 VPC & Networking (5 tools)
list_vpcs- List Virtual Private Clouds with CIDR and default statusget_default_vpc- Get the default VPC for the current regionfind_suitable_subnet- Find appropriate subnets for instance placement based on requirementsdelete_vpc- Delete VPCs with dependency checking (advanced operation)list_subnets- List subnets with VPC filtering and availability zone information
Common Workflows
🚀 Launch a Web Server
get_popular_amis- Find the latest Amazon Linux 2023 AMIcreate_key_pair- Create SSH access (MUST choose storage: "secrets_manager", "s3_encrypted", or "parameter_store")create_security_group- Create security group allowing HTTP (port 80) and SSH (port 22)launch_instance- Launch instance with AMI, key pair, and security groupget_instance_details- Verify instance is running and get public IP
🎯 Create Custom AMI
list_instances- Find your pre-configured instancestop_instance- Stop instance for consistent snapshot (optional but recommended)create_image- Create AMI from the stopped instancestart_instance- Restart the original instance if stoppedlist_amis- Verify AMI creation progress
📦 Volume Management & Backup
create_volume- Create additional EBS storageattach_volume- Attach to running instance (specify device like /dev/sdf)create_snapshot- Create backup snapshot of the volumelist_snapshots- Monitor snapshot progress and manage backups
🔧 Security Group Management
create_security_group- Create new security group with descriptionmodify_security_group_rules- Add inbound rules (e.g., port 80, 443, 22)list_security_groups- Review security group configurationsget_security_group_details- Examine specific rule details
Required AWS Permissions
The server requires comprehensive IAM permissions for EC2 management and secure key storage:
Minimum Required Permissions
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:*",
"sts:GetCallerIdentity"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:PutParameter",
"ssm:DeleteParameter",
"ssm:AddTagsToResource"
],
"Resource": "arn:aws:ssm:*:*:parameter/ec2/keypairs/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:CreateBucket",
"s3:PutBucketEncryption",
"s3:PutPublicAccessBlock",
"s3:HeadBucket"
],
"Resource": [
"arn:aws:s3:::ec2-mcp-keypairs-*",
"arn:aws:s3:::ec2-mcp-keypairs-*/*"
]
},
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:CreateSecret",
"secretsmanager:DeleteSecret",
"secretsmanager:TagResource"
],
"Resource": "arn:aws:secretsmanager:*:*:secret:ec2/keypairs/*"
},
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": [
"s3.*.amazonaws.com",
"secretsmanager.*.amazonaws.com",
"ssm.*.amazonaws.com"
]
}
}
}
]
}
🔒 Security Considerations
- Principle of Least Privilege: The above permissions can be further restricted to specific resources
- Production Use: Consider limiting
ec2:*to specific actions needed for your use case - Key Storage: Choose appropriate storage method based on your security and cost requirements
- Region Restriction: Add region conditions to limit operations to specific AWS regions
License
This project is licensed under the Apache License, Version 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file awslabs_ec2_mcp_server-0.1.2.tar.gz.
File metadata
- Download URL: awslabs_ec2_mcp_server-0.1.2.tar.gz
- Upload date:
- Size: 147.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df9e49da16ea0ccb63b34eed91944aca4d1c1330caa6a07f3c14440f500894cd
|
|
| MD5 |
8a79858957fad2302e2b778a96f8a2d6
|
|
| BLAKE2b-256 |
725cb858fce73d40449f3647066d62070e69b256d960f4524e4fc9db07a1d90f
|
File details
Details for the file awslabs_ec2_mcp_server-0.1.2-py3-none-any.whl.
File metadata
- Download URL: awslabs_ec2_mcp_server-0.1.2-py3-none-any.whl
- Upload date:
- Size: 55.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a469043787512d6e638de31cbd7e3823da04cb7c1e16a04436de2447f329085d
|
|
| MD5 |
c25a1c4f3932859a1bf655f144279814
|
|
| BLAKE2b-256 |
6ba6ca48307ae9c5ef0ca5ecd18e9b6576ae9b6d384c464f9c225c6eccd05bc6
|