aws_ec2
Control AWS EC2 instances using MCP SysOperator. Perform actions like listing, creating, starting, stopping, or terminating instances. Specify regions, instance types, and configurations for precise management.
Instructions
Manage AWS EC2 instances (list, create, start, stop, terminate)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| count | No | ||
| filters | No | ||
| imageId | No | ||
| instanceIds | No | ||
| instanceType | No | ||
| keyName | No | ||
| region | Yes | ||
| securityGroups | No | ||
| tags | No | ||
| terminationProtection | No | ||
| userData | No | ||
| waitForCompletion | No |
Implementation Reference
- src/sysoperator/index.ts:91-95 (registration)Registration of the 'aws_ec2' tool in the toolDefinitions object, specifying its description, input schema from aws.ts, and handler function.aws_ec2: { description: 'Manage AWS EC2 instances (list, create, start, stop, terminate)', schema: aws.EC2InstanceSchema, handler: aws.ec2InstanceOperations, },
- Zod schema defining the input parameters for the aws_ec2 tool, including required region and action, and optional parameters for EC2 operations.export const EC2InstanceSchema = z.object({ action: EC2InstanceActionEnum, region: z.string().min(1, 'AWS region is required'), instanceIds: z.array(z.string()).optional(), filters: z.record(z.any()).optional(), instanceType: z.string().optional(), imageId: z.string().optional(), keyName: z.string().optional(), securityGroups: z.array(z.string()).optional(), userData: z.string().optional(), count: z.number().optional(), tags: z.record(z.string()).optional(), waitForCompletion: z.boolean().optional().default(true), terminationProtection: z.boolean().optional() });
- The primary handler function for the aws_ec2 tool. Dynamically generates an Ansible playbook based on the action (list, create, terminate, start, stop) and executes it using Ansible's amazon.aws.ec2_instance module to manage EC2 instances.export async function ec2InstanceOperations(args: EC2InstanceOptions): Promise<string> { await verifyAwsCredentials(); const { action, region, instanceIds, filters, instanceType, imageId, keyName, securityGroups, userData, count, tags, waitForCompletion, terminationProtection, ...restParams } = args; let playbookContent = `--- - name: AWS EC2 ${action} operation hosts: localhost connection: local gather_facts: no tasks:`; switch (action) { case 'list': playbookContent += ` - name: List EC2 instances amazon.aws.ec2_instance_info: region: "${region}" ${filters ? formatYamlParams({ filters }) : ''} register: ec2_info - name: Display instances debug: var: ec2_info.instances`; break; case 'create': playbookContent += ` - name: Create EC2 instance amazon.aws.ec2_instance: region: "${region}" state: present instance_type: "${instanceType}" image_id: "${imageId}" ${formatYamlParams({ key_name: keyName, security_groups: securityGroups, user_data: userData, exact_count: count, tags: tags, wait: waitForCompletion, termination_protection: terminationProtection, ...restParams })} register: ec2_create - name: Display created instance details debug: var: ec2_create`; break; case 'terminate': playbookContent += ` - name: Terminate EC2 instances amazon.aws.ec2_instance: region: "${region}" instance_ids: ${JSON.stringify(instanceIds)} state: absent wait: ${waitForCompletion ? 'yes' : 'no'} register: ec2_terminate - name: Display termination result debug: var: ec2_terminate`; break; case 'start': playbookContent += ` - name: Start EC2 instances amazon.aws.ec2_instance: region: "${region}" instance_ids: ${JSON.stringify(instanceIds)} state: running wait: ${waitForCompletion ? 'yes' : 'no'} register: ec2_start - name: Display start result debug: var: ec2_start`; break; case 'stop': playbookContent += ` - name: Stop EC2 instances amazon.aws.ec2_instance: region: "${region}" instance_ids: ${JSON.stringify(instanceIds)} state: stopped wait: ${waitForCompletion ? 'yes' : 'no'} register: ec2_stop - name: Display stop result debug: var: ec2_stop`; break; default: // Should be caught by Zod validation, but good to have a fallback throw new AnsibleError(`Unsupported EC2 action: ${action}`); } // Execute the generated playbook return executeAwsPlaybook(`ec2-${action}`, playbookContent); }