AWS EC2 MCP Server
A Model Context Protocol (MCP) server for managing AWS EC2 instances, AMIs, security groups, volumes, and related infrastructure with cost-effective KMS-encrypted key pair storage.
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: Launch, terminate, start, stop, and reboot instances
- Security Groups: Create, modify, and delete security groups and rules
- Key Pairs: Create and manage SSH key pairs with secure storage
- EBS Volumes: Create, attach, detach, and delete volumes
- EBS Snapshots: Create and manage volume snapshots
- AMIs: Create custom AMIs from instances and manage their lifecycle
- VPC Management: List and manage VPCs, subnets, and networking components
Security Features
- Input validation for all AWS resource IDs
- Permission-based access control with environment variable controls
- Response sanitization to prevent sensitive data leakage
- Secure private key storage with KMS encryption (S3), Secrets Manager, or Parameter Store
- Cost-effective KMS encryption for S3 storage (99.9% cheaper than Secrets Manager)
- Configurable write operation protection
Prerequisites
- AWS account with permissions to manage EC2 resources
- AWS credentials configured (AWS CLI, environment variables, or IAM roles)
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:
"awslabs.elasticache-mcp-server": {
"command": "docker",
"args": [
"run",
"--rm",
"--interactive",
"--env",
"FASTMCP_LOG_LEVEL=ERROR",
"awslabs/ec2-mcp-server:latest"
],
"env": {},
"disabled": false,
"autoApprove": []
}
Configuration Options
Environment Variables
AWS_PROFILE: AWS profile name (default: "default")AWS_REGION: AWS region (default: "us-east-1")ALLOW_WRITE: Enable write operations like create/modify/delete (default: "false")ALLOW_SENSITIVE_DATA: Enable access to sensitive resource data (default: "false")FASTMCP_LOG_LEVEL: Logging level - DEBUG, INFO, WARNING, ERROR (default: "INFO")FASTMCP_LOG_FILE: Optional log file path
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
EC2 Instances (9 tools)
list_instances- List EC2 instances with filtering optionsget_instance_details- Get detailed information about a specific instancelaunch_instance- Launch new EC2 instances with full configurationterminate_instance- Terminate EC2 instances permanentlystart_instance- Start stopped instancesstop_instance- Stop running instances (with optional force flag)reboot_instance- Reboot running instancesget_subnet_info- Get subnet information for networkinglist_subnets- List available subnets for instance placement
Security Groups (5 tools)
list_security_groups- List security groups with filteringget_security_group_details- Get detailed security group configurationcreate_security_group- Create new security groups with descriptionsdelete_security_group- Delete security groupsmodify_security_group_rules- Add/remove inbound and outbound rules
Key Pairs (3 tools) - Storage Method Required
list_key_pairs- List available EC2 key pairscreate_key_pair- Requires storage_method parameter (no default)- Must specify one of: "secrets_manager", "s3_encrypted", or "parameter_store"
- Cannot create key pair without explicitly specifying where to store the private key
- For S3 encryption: Uses KMS encryption with default aws/s3 key (configure S3_KEYPAIR_BUCKET for custom bucket)
- S3 tagging: EC2 key pair tags are automatically applied to S3 objects (only when tags are provided)
delete_key_pair- Delete key pairs and associated stored private keys
EBS Volumes (5 tools)
list_volumes- List EBS volumes with status and attachment infocreate_volume- Create new EBS volumes with specified size and typedelete_volume- Delete EBS volumes (must be unattached)attach_volume- Attach volumes to EC2 instancesdetach_volume- Detach volumes from instances
EBS Snapshots (2 tools)
list_snapshots- List EBS snapshots with filteringcreate_snapshot- Create snapshots from EBS volumes
AMIs - Amazon Machine Images (4 tools)
list_amis- List AMIs with ownership and filtering optionsget_popular_amis- Get popular public AMIs (Amazon Linux, Ubuntu, Windows, RHEL)create_image- Create custom AMIs from running instancesderegister_image- Deregister/delete AMIs
VPC & Networking (5 tools)
list_vpcs- List Virtual Private Cloudsget_default_vpc- Get the default VPC for the regionfind_suitable_subnet- Find appropriate subnets for instance placementdelete_vpc- Delete VPCs (advanced operation)list_subnets- List subnets with VPC filtering
Common Workflows
Launch a Web Server
get_popular_amis- Find latest Amazon Linux AMIcreate_key_pair- YOU MUST CHOOSE: storage_method="secrets_manager" OR "s3_encrypted" OR "parameter_store"create_security_groupfor HTTP/SSH accesslaunch_instancewith the AMI, key pair, and security group
Create Custom AMI
list_instances- Find your configured instancestop_instance- Stop for consistent snapshotcreate_image- Create AMI from instancestart_instance- Restart original instance
Volume Management
create_volume- Create additional storageattach_volume- Attach to running instancecreate_snapshot- Backup volume data
Required AWS Permissions
The server requires the following IAM permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:*",
"ssm:GetParameter",
"ssm:PutParameter",
"ssm:DeleteParameter",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"secretsmanager:GetSecretValue",
"secretsmanager:CreateSecret",
"secretsmanager:DeleteSecret",
"sts:GetCallerIdentity"
],
"Resource": "*"
}
]
}
For production use, consider implementing more restrictive permissions based on your specific needs.
License
This project is licensed under the Apache License, Version 2.0.
Metadata
Release files for test-awslabs.ec2-mcp-server 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| test_awslabs_ec2_mcp_server-0.1.7.tar.gz | 151.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| test_awslabs_ec2_mcp_server-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 204.6 kB
Release files / test_awslabs_ec2_mcp_server-0.1.7.tar.gz
| Download URL | test_awslabs_ec2_mcp_server-0.1.7.tar.gz |
|---|---|
| Size | 151.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
873802f23f7044f8ac8d899e777ab3771948f7d3bfa29e49806f0ce3b47e903a
|
|
BLAKE2b-256 checksum How to use checksums |
674821ac6d888839f7788148e1c42f7521af3d8de80404a6fd44051953663e81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.2
|
Release files / test_awslabs_ec2_mcp_server-0.1.7-py3-none-any.whl
| Download URL | test_awslabs_ec2_mcp_server-0.1.7-py3-none-any.whl |
|---|---|
| Size | 53.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
370e3b02cc3d80987b7fe35ba20c50d208ede13743a6f3344c2c14010777ed86
|
|
BLAKE2b-256 checksum How to use checksums |
40c55fb8dd706ca551076d1015c5d14dadc2c66c10da4d62ff33cee2ed8c253e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.2
|