AWS Cloud Control API MCP Server
Direct resource management with security scanning.
MCP Info
| Attribute | Details |
|---|---|
| Docker Image | mcp/ccapi-mcp-server |
| Author | awslabs |
| Repository | https://github.com/awslabs/mcp |
Image Building Info
| Attribute | Details |
|---|---|
| Dockerfile | https://github.com/awslabs/mcp/blob/636aca8e109b5559006044f035bb89c16e9e5410/src/ccapi-mcp-server/Dockerfile |
| Commit | 636aca8e109b5559006044f035bb89c16e9e5410 |
| Docker Image built by | Docker Inc. |
| Docker Scout Health Score | Docker Scout Health Score |
| Verify Signature | COSIGN_REPOSITORY=mcp/signatures cosign verify mcp/ccapi-mcp-server --key https://raw.githubusercontent.com/docker/keyring/refs/heads/main/public/mcp/latest.pub |
| Licence | Apache License 2.0 |
Available Tools (14)
| Tools provided by this Server | Short Description |
|---|---|
check_environment_variables |
Check if required environment variables are set correctly. |
create_resource |
Create an AWS resource. |
create_template |
Create a CloudFormation template from existing resources using the IaC Generator API. |
delete_resource |
Delete an AWS resource. |
explain |
MANDATORY: Explain any data in clear, human-readable format. |
generate_infrastructure_code |
Generate infrastructure code before resource creation or update. |
get_aws_account_info |
Get information about the current AWS account being used. |
get_aws_session_info |
Get information about the current AWS session. |
get_resource |
Get details of a specific AWS resource. |
get_resource_request_status |
Get the status of a long running operation with the request token. |
get_resource_schema_information |
Get schema information for an AWS resource. |
list_resources |
List AWS resources of a specified type. |
run_checkov |
Run Checkov security and compliance scanner on server-stored CloudFormation template. |
update_resource |
Update an AWS resource. |
Tools Details
Tool: check_environment_variables
Check if required environment variables are set correctly.
Tool: create_resource
Create an AWS resource.
This tool automatically adds default identification tags to all resources for support and troubleshooting purposes.
IMPORTANT: Always check the response for 'security_warning' field and display any warnings to the user.
| Parameters | Type | Description |
|---|---|---|
credentials_token |
string |
Credentials token from get_aws_session_info() to ensure AWS credentials are valid |
explained_token |
string |
Explained token from explain() - properties will be retrieved from this token |
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
region |
string optional |
The AWS region that the operation should be performed in |
security_scan_token |
string optional |
Security scan token from approve_security_findings() to ensure security checks were performed (only required when SECURITY_SCANNING=enabled) |
skip_security_check |
boolean optional |
Skip security checks (only when SECURITY_SCANNING=disabled) |
Tool: create_template
Create a CloudFormation template from existing resources using the IaC Generator API.
This tool allows you to generate CloudFormation templates from existing AWS resources that are not already managed by CloudFormation. The template generation process is asynchronous, so you can check the status of the process and retrieve the template once it's complete. You can pass up to 500 resources at a time.
IMPORTANT FOR LLMs: This tool only generates CloudFormation templates. If users request other IaC formats (Terraform, CDK, etc.), follow this workflow:
- Use create_template() to generate CloudFormation template from existing resources
- Convert the CloudFormation to the requested format using your native capabilities
- For Terraform specifically: Create both resource definitions AND import blocks so users can import existing resources into Terraform state ⚠️ ALWAYS USE TERRAFORM IMPORT BLOCKS (NOT TERRAFORM IMPORT COMMANDS) ⚠️
- Provide both the original CloudFormation and converted IaC to the user
Example workflow for "create Terraform import for these resources":
- create_template() → get CloudFormation template
- Convert to Terraform resource blocks
- Generate corresponding Terraform import blocks (NOT terraform import commands) Example: import { to = aws_s3_bucket.example, id = "my-bucket" }
- Provide complete Terraform configuration with import blocks
Examples:
-
Start template generation for an S3 bucket: create_template( template_name="my-template", resources=[{"ResourceType": "AWS::S3::Bucket", "ResourceIdentifier": {"BucketName": "my-bucket"}}], deletion_policy="RETAIN", update_replace_policy="RETAIN" )
-
Check status of template generation: create_template(template_id="arn:aws:cloudformation:us-east-1:123456789012:generatedtemplate/abcdef12-3456-7890-abcd-ef1234567890")
-
Retrieve generated template: create_template( template_id="arn:aws:cloudformation:us-east-1:123456789012:generatedtemplate/abcdef12-3456-7890-abcd-ef1234567890", output_format="YAML" )
| Parameters | Type | Description |
|---|---|---|
deletion_policy |
string optional |
Default DeletionPolicy for resources in the template (RETAIN, DELETE, or SNAPSHOT) |
output_format |
string optional |
Output format for the template (JSON or YAML) |
region |
string optional |
The AWS region that the operation should be performed in |
resources |
string optional |
List of resources to include in the template, each with 'ResourceType' and 'ResourceIdentifier' |
template_id |
string optional |
ID of an existing template generation process to check status or retrieve template |
template_name |
string optional |
Name for the generated template |
update_replace_policy |
string optional |
Default UpdateReplacePolicy for resources in the template (RETAIN, DELETE, or SNAPSHOT) |
Tool: delete_resource
Delete an AWS resource.
| Parameters | Type | Description |
|---|---|---|
credentials_token |
string |
Credentials token from get_aws_session_info() to ensure AWS credentials are valid |
explained_token |
string |
Explained token from explain() to ensure deletion was explained |
identifier |
string |
The primary identifier of the resource to get (e.g., bucket name for S3 buckets) |
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
confirmed |
boolean optional |
Confirm that you want to delete this resource |
region |
string optional |
The AWS region that the operation should be performed in |
Tool: explain
MANDATORY: Explain any data in clear, human-readable format.
For infrastructure operations (create/update/delete):
- CONSUMES generated_code_token and returns explained_token
- You MUST immediately display the returned explanation to user
- You MUST use the returned explained_token for create/update/delete operations
For general data explanation:
- Pass any data in 'content' parameter
- Provides comprehensive explanation of the data structure
CRITICAL: You MUST immediately display the full explanation content to the user after calling this tool. The response contains an 'explanation' field that you MUST show to the user - this is MANDATORY. Never proceed with create/update/delete operations without first showing the user what will happen.
Returns: explanation: Comprehensive explanation you MUST display to user explained_token: New token for infrastructure operations (if applicable)
| Parameters | Type | Description |
|---|---|---|
content |
string optional |
Any data to explain - infrastructure properties, JSON, dict, list, etc. |
context |
string optional |
Context about what this data represents (e.g., 'KMS key creation', 'S3 bucket update') |
format |
string optional |
Explanation format: detailed, summary, technical |
generated_code_token |
string optional |
Generated code token from generate_infrastructure_code (for infrastructure operations) |
operation |
string optional |
Operation type: create, update, delete, analyze |
user_intent |
string optional |
Optional: User's stated purpose |
Tool: generate_infrastructure_code
Generate infrastructure code before resource creation or update.
| Parameters | Type | Description |
|---|---|---|
credentials_token |
string |
Credentials token from get_aws_session_info() to ensure AWS credentials are valid |
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
identifier |
string optional |
The primary identifier of the resource for update operations |
patch_document |
array optional |
A list of RFC 6902 JSON Patch operations for update operations |
properties |
object optional |
A dictionary of properties for the resource |
region |
string optional |
The AWS region that the operation should be performed in |
Tool: get_aws_account_info
Get information about the current AWS account being used.
Common questions this tool answers:
- "What AWS account am I using?"
- "Which AWS region am I in?"
- "What AWS profile is being used?"
- "Show me my current AWS session information"
Returns: A dictionary containing AWS account information: { "profile": The AWS profile name being used, "account_id": The AWS account ID, "region": The AWS region being used, "readonly_mode": True if the server is in read-only mode, "readonly_message": A message about read-only mode limitations if enabled, "using_env_vars": Boolean indicating if using environment variables for credentials }
Tool: get_aws_session_info
Get information about the current AWS session.
This tool provides details about the current AWS session, including the profile name, account ID, region, and credential information. Use this when you need to confirm which AWS session and account you're working with.
IMPORTANT: Always display the AWS context information to the user when this tool is called. Show them: AWS Profile (or "Environment Variables"), Authentication Type, Account ID, and Region so they know exactly which AWS account and region will be affected by any operations.
Authentication types to display:
- 'env': "Environment Variables (AWS_ACCESS_KEY_ID)"
- 'sso_profile': "AWS SSO Profile"
- 'assume_role_profile': "Assume Role Profile"
- 'standard_profile': "Standard AWS Profile"
- 'profile': "AWS Profile"
SECURITY: If displaying environment variables that contain sensitive values (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), mask all but the last 4 characters with asterisks (e.g., "AKIA****1234").
Returns: A dictionary containing AWS session information including profile, account_id, region, etc.
| Parameters | Type | Description |
|---|---|---|
environment_token |
string |
Environment token from check_environment_variables() to ensure environment is properly configured |
Tool: get_resource
Get details of a specific AWS resource.
| Parameters | Type | Description |
|---|---|---|
identifier |
string |
The primary identifier of the resource to get (e.g., bucket name for S3 buckets) |
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
analyze_security |
boolean optional |
Whether to perform security analysis on the resource using Checkov |
region |
string optional |
The AWS region that the operation should be performed in |
Tool: get_resource_request_status
Get the status of a long running operation with the request token.
| Parameters | Type | Description |
|---|---|---|
request_token |
string |
The request_token returned from the long running operation |
region |
string optional |
The AWS region that the operation should be performed in |
Tool: get_resource_schema_information
Get schema information for an AWS resource.
Parameters: resource_type: The AWS resource type (e.g., "AWS::S3::Bucket")
Returns: The resource schema information
| Parameters | Type | Description |
|---|---|---|
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
region |
string optional |
The AWS region that the operation should be performed in |
Tool: list_resources
List AWS resources of a specified type.
Parameters: resource_type: The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") region: AWS region to use (e.g., "us-east-1", "us-west-2")
Returns: A dictionary containing: { "resources": List of resource identifiers }
| Parameters | Type | Description |
|---|---|---|
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
analyze_security |
boolean optional |
Whether to perform security analysis on the resources (limited to first 5 resources) |
max_resources_to_analyze |
integer optional |
Maximum number of resources to analyze when analyze_security=True |
region |
string optional |
The AWS region that the operation should be performed in |
Tool: run_checkov
Run Checkov security and compliance scanner on server-stored CloudFormation template.
SECURITY: This tool only scans CloudFormation templates stored server-side from generate_infrastructure_code(). AI agents cannot provide different content to bypass security scanning.
CRITICAL WORKFLOW REQUIREMENTS: ALWAYS after running this tool:
- Call explain() to show the security scan results to the user (both passed and failed checks)
If scan_status='FAILED' (security issues found): 2. Ask the user how they want to proceed: "fix", "proceed anyway", or "cancel" 3. WAIT for the user's actual response - do not assume their decision 4. Only after receiving user input, call approve_security_findings() with their decision
If scan_status='PASSED' (all checks passed): 2. You can proceed directly to create_resource() after showing the results
WORKFLOW REQUIREMENTS:
- ALWAYS provide a concise summary of security findings (passed/failed checks)
- Only show detailed output if user specifically requests it
- If CRITICAL security issues found: BLOCK resource creation, explain risks, provide resolution steps, ask multiple times for confirmation with warnings
- If non-critical security issues found: Ask user how to proceed (fix issues, proceed anyway, or cancel)
| Parameters | Type | Description |
|---|---|---|
explained_token |
string |
Explained token from explain() containing CloudFormation template to scan |
framework |
string optional |
The framework to scan (cloudformation, terraform, kubernetes, etc.) |
Tool: update_resource
Update an AWS resource.
IMPORTANT: Always check the response for 'security_warning' field and display any warnings to the user.
| Parameters | Type | Description |
|---|---|---|
credentials_token |
string |
Credentials token from get_aws_session_info() to ensure AWS credentials are valid |
explained_token |
string |
Explained token from explain() to ensure exact properties with default tags are used |
identifier |
string |
The primary identifier of the resource to get (e.g., bucket name for S3 buckets) |
resource_type |
string |
The AWS resource type (e.g., "AWS::S3::Bucket", "AWS::RDS::DBInstance") |
patch_document |
array optional |
A list of RFC 6902 JSON Patch operations to apply |
region |
string optional |
The AWS region that the operation should be performed in |
security_scan_token |
string optional |
Security scan token from run_checkov() to ensure security checks were performed (only required when SECURITY_SCANNING=enabled) |
skip_security_check |
boolean optional |
Skip security checks (not recommended) |
Use this MCP Server
{
"mcpServers": {
"awslabs-ccapi": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AWS_REGION",
"-e",
"AWS_PROFILE",
"-e",
"AWS_ACCESS_KEY_ID",
"-e",
"AWS_SECRET_ACCESS_KEY",
"mcp/ccapi-mcp-server"
],
"env": {
"AWS_REGION": "us-east-1",
"AWS_PROFILE": "default",
"AWS_ACCESS_KEY_ID": "AKIAIOSFODNN7EXAMPLE",
"AWS_SECRET_ACCESS_KEY": "your-aws-secret-access-key"
}
}
}
}