Skip to main content
Glama
musaddiq-dev

io.github.musaddiq-dev/aws-cli-mcp-server

by musaddiq-dev

AWS MCP Server

A Python Model Context Protocol (MCP) server that lets MCP-compatible clients inspect and operate AWS through the AWS CLI. It supports command execution with validation, command suggestions, AWS region lookup, and caller identity checks.

Features

  • Execute AWS CLI commands without shell expansion, preserving quoted arguments with shell-style parsing

  • Suggest common AWS CLI commands from natural language requests

  • Return available AWS regions

  • Return the current caller identity

  • Support stdio transport for local MCP clients

  • Validate configuration and write logs to stderr plus a local log file

Related MCP server: AWS CLI MCP Server

Safety Model

This server can execute AWS CLI commands using the credentials available to the process. It blocks shell operators by using subprocess.run(..., shell=False) and flags destructive-looking commands, but it cannot replace IAM least privilege or human review. Use scoped AWS profiles or roles, prefer non-production accounts for testing, and keep destructive commands on manual approval in your MCP client.

Requirements

Installation

When published to PyPI, install or run the server like a standard Python MCP package:

uvx mdev-aws-mcp-server

For local development from source:

git clone https://github.com/musaddiq-dev/aws-cli-mcp-server.git
cd aws-cli-mcp-server
python -m venv .venv
source .venv/bin/activate
pip install -e .

Configuration

Before running this server, install the AWS CLI using the official AWS CLI install guide, then configure credentials using the official AWS CLI sign-in guide and AWS CLI configuration guide. AWS recommends short-term credentials where possible; avoid long-term IAM user keys unless your use case requires them.

Copy the example environment file and adjust values as needed.

cp .env.example .env

Variable

Description

Default

AWS_REGION

Default AWS region

us-east-1

AWS_PROFILE

AWS credentials profile

default

AWS_MCP_WORKING_DIR

Working directory for file operations

/tmp/aws-mcp-work

AWS_MCP_REQUIRE_CONFIRMATION

Emit warnings for destructive-looking operations

true

AWS_MCP_LOG_LEVEL

Application log level

INFO

Running

mdev-aws-mcp-server

From a local checkout before PyPI publication, run:

python -m aws_mcp_server.server

MCP Client Configuration

For published installs, prefer uvx. MCP servers using stdio must write protocol messages only to stdout; this server writes logs to stderr and a local file under ~/.aws-mcp-server/logs.

Claude Desktop / Cursor / Windsurf / Cline

Most MCP clients accept this mcpServers JSON shape:

{
  "mcpServers": {
    "aws": {
      "command": "uvx",
      "args": ["mdev-aws-mcp-server"],
      "env": {
        "AWS_PROFILE": "default",
        "AWS_REGION": "us-east-1"
      }
    }
  }
}

For local development from this repository, use the installed console script path instead:

{
  "mcpServers": {
    "aws": {
      "command": "/absolute/path/to/aws-cli-mcp-server/.venv/bin/mdev-aws-mcp-server",
      "args": [],
      "env": {
        "AWS_PROFILE": "default",
        "AWS_REGION": "us-east-1"
      }
    }
  }
}

Claude Code CLI

claude mcp add aws --env AWS_PROFILE=default --env AWS_REGION=us-east-1 -- uvx mdev-aws-mcp-server

VS Code MCP

VS Code uses the same command/args/env model in its MCP configuration:

{
  "servers": {
    "aws": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mdev-aws-mcp-server"],
      "env": {
        "AWS_PROFILE": "default",
        "AWS_REGION": "us-east-1"
      }
    }
  }
}

Tools

Tool

Purpose

Safety

call_aws

Execute an AWS CLI command

Can modify AWS resources

suggest_aws_commands

Suggest common AWS CLI commands

Read-only

get_aws_regions

List AWS regions

Read-only

get_caller_identity

Return current AWS identity

Read-only

Development

pip install -e .
pip install -e '.[dev]'
pytest
ruff check .
ruff format .
pyright

Smoke Check

python -m py_compile src/aws_mcp_server/server.py src/aws_mcp_server/config.py src/aws_mcp_server/aws/executor.py
python -m pytest

Manual AWS check, if credentials are configured:

aws sts get-caller-identity

Distribution

This server is published through the standard Python MCP distribution path:

  • PyPI package: mdev-aws-mcp-server

  • MCP Registry name: io.github.musaddiq-dev/aws-cli-mcp-server

  • Runtime hint: uvx

  • Transport: stdio

The mcp-name marker at the top of this README is required for MCP Registry ownership verification. Users should prefer uvx mdev-aws-mcp-server in local MCP client configurations.

Security Notes

  • Do not commit .env, AWS credentials, profiles, access keys, or account-specific outputs.

  • Use least-privilege IAM permissions for the profile or role running this server.

  • Keep call_aws on explicit manual approval in your MCP client.

  • Do not expose this server over a network without adding authentication, TLS, and network controls.

  • Review generated command suggestions before executing them.

License

MIT

Available Tools

4 tools
call_awsExecute AWS CLI CommandA
Destructive

Execute AWS CLI commands with validation and error handling.

This is the primary tool for executing AWS CLI commands. Use this when you know the specific AWS service and operation you want to perform.

Key points:

  • Commands MUST start with "aws" and follow AWS CLI syntax

  • Default region: us-east-1 (override with --region parameter)

  • Working directory: /tmp/aws-mcp-work

  • Use absolute paths for files

Command restrictions:

  • DO NOT use shell pipes (|), redirects (>, >>, <), or command substitution ($())

  • DO NOT use shell variables or environment variables

  • DO NOT use relative paths for file operations

Examples:

  • "aws ec2 describe-instances" - List EC2 instances

  • "aws s3 ls" - List S3 buckets

  • "aws lambda list-functions" - List Lambda functions

  • "aws iam list-users" - List IAM users

  • "aws cloudwatch describe-alarms" - List CloudWatch alarms

Returns: Dictionary with success status, output data, and error information

ParametersJSON Schema
NameRequiredDescriptionDefault
cli_commandYesThe complete AWS CLI command to execute. MUST start with 'aws'
max_resultsNoOptional limit for number of results (useful for pagination)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so destructive potential is known. The description adds behavioral context: default region (us-east-1), working directory, and file path requirements. It also states validation and error handling are present. The description does not contradict annotations (no annotation_contradiction). Some additional detail about what could be destroyed (e.g., data operations) would be beneficial, but overall it's adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with sections for key points, command restrictions, examples, and return info. Every sentence adds meaningful guidance without redundancy. It is front-loaded with the core purpose and usage instructions. At approximately 150 words, it is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (executing arbitrary AWS CLI commands), the description covers essential operational constraints (syntax, restrictions, working directory, default region) and provides multiple examples. The presence of an output schema (not shown but confirmed in context) reduces the need to detail return values, though the description gives a high-level summary. The description is sufficiently complete for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (both cli_command and max_results have descriptions). The description adds value beyond schema by emphasizing that cli_command must start with 'aws', providing usage examples, and clarifying that max_results is for pagination. The schema alone would not convey these usage constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes AWS CLI commands with validation and error handling. It distinguishes itself from siblings like 'suggest_aws_commands' which suggests commands, and 'get_aws_regions' or 'get_caller_identity' which retrieve specific data. The verb 'Execute' plus resource 'AWS CLI commands' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool when you know the specific AWS service and operation, and provides a list of restrictions (no pipes, redirects, shell variables) and required syntax (command must start with 'aws'). Examples illustrate proper usage. It does not explicitly contrast with sibling tools for when not to use, but the guidance is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_aws_regionsGet AWS RegionsA
Read-only

Get a list of available AWS regions.

Returns: Dictionary with success status and list of AWS regions

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true (safe) and openWorldHint=false (fixed result set). The description adds the return structure (dictionary with success status and list), providing useful behavioral context beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, no filler, and front-loaded purpose. Every word earns its place, making it efficient for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, annotations cover safety, and an output schema exists (implied return structure), the description is complete. It states exactly what the tool returns, leaving no gaps for an agent to misinterpret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the description naturally adds nothing about them. Schema coverage is 100% (0 params). Baseline for 0 params is 4, and the description meets that without needing to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Get a list of available AWS regions'. It distinguishes from siblings like 'call_aws' (which makes API calls), 'suggest_aws_commands' (which suggests commands), and 'get_caller_identity' (which gets identity), making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description does not explicitly provide when-to-use or alternatives, the purpose is self-explanatory for a simple list retrieval tool. The context of siblings implies its role. A more explicit guideline would elevate this, but for a trivial tool, it is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_caller_identityGet Caller IdentityA
Read-only

Get the AWS identity of the current caller.

Returns information about the IAM user or role whose credentials are used to call the operation.

Returns: Dictionary with success status and caller identity (Account, ARN, UserId)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, indicating a safe read operation. The description adds value by specifying the return format (dictionary with success and identity fields). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences. The first sentence states the main purpose, and the following sentences add return details. No unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, the presence of an output schema, and annotations providing readOnlyHint, the description is complete. It explains what the tool returns without needing to cover output schema details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters are defined, so schema coverage is 100%. The description does not need to add parameter semantics; baseline 4 is appropriate for zero parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Get the AWS identity of the current caller' and mentions specific returned fields (Account, ARN, UserId). This is a specific verb+resource combination that distinguishes it from siblings like call_aws and suggest_aws_commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it (retrieve caller identity), but there is no explicit guidance on when not to use it or how it compares to siblings. The description lacks alternative recommendations or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_aws_commandsSuggest AWS CLI CommandsA
Read-only

Suggest AWS CLI commands based on a natural language query.

Use this tool when you're unsure about the exact AWS CLI command syntax or want to explore available commands for a specific task.

Best practices for query formulation:

  1. Include the AWS service name (EC2, S3, Lambda, etc.)

  2. Describe the action you want to perform

  3. Include any relevant context or constraints

Query examples:

  • "List all running EC2 instances in us-east-1"

  • "Get the size of my S3 bucket named 'my-backup-bucket'"

  • "List all IAM users with AdministratorAccess policy"

  • "Show me all Lambda functions in my account"

  • "Create a new security group for SSH access"

Returns: Dictionary with success status, query, and list of suggested commands

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language description of what you want to accomplish

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description confirms a read-only operation by describing the return as a dictionary of suggested commands. It adds transparency about the output structure, which annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet comprehensive: purpose, usage guidance, examples, and return description. Every sentence adds value, and the structure is front-loaded with the core function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no nested objects, output schema mentioned), the description fully covers the purpose, usage, and behavior. Annotations and context signals do not leave gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema defines a single 'query' string parameter with examples. The description enriches this by advising on query formulation (include service name, action, context), which adds semantic guidance beyond the schema. Schema coverage is 100%, so the description lifts the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Suggest AWS CLI commands based on a natural language query.' It specifies the verb (suggest) and resource (AWS CLI commands), distinguishing it from sibling tools like call_aws (execution) and get_aws_regions (retrieval).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use this tool: when unsure about command syntax or exploring commands. It provides best practices for query formulation and includes examples. While it doesn't directly contrast with siblings, the implicit guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.2
    • First observedcall_aws
    • First observedget_aws_regions
    • First observedget_caller_identity
    • First observedsuggest_aws_commands

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a distinct purpose: call_aws executes commands, suggest_aws_commands helps with syntax, get_aws_regions lists regions, and get_caller_identity retrieves identity. No overlap.

Naming Consistency5/5

All tools use a consistent verb_noun pattern (call_aws, suggest_aws_commands, get_aws_regions, get_caller_identity), making them predictable and easy to understand.

Tool Count4/5

With 4 tools, the server covers the core functionality of executing AWS commands with helpful utilities. While minimal, it's appropriate for the scope and not overly heavy.

Completeness5/5

The set is complete for its purpose: call_aws can execute any AWS CLI command, and the supporting tools provide command suggestions, region information, and identity details. No obvious gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/musaddiq-dev/aws-cli-mcp-server'

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