Skip to main content
Glama

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
NameRequiredDescriptionDefault
actionYes
countNo
filtersNo
imageIdNo
instanceIdsNo
instanceTypeNo
keyNameNo
regionYes
securityGroupsNo
tagsNo
terminationProtectionNo
userDataNo
waitForCompletionNo

Implementation Reference

  • 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); }

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tarnover/mcp-sysoperator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server