io.github.musaddiq-dev/aws-cli-mcp-server
Allows executing AWS CLI commands, suggesting AWS commands, listing AWS regions, and retrieving caller identity via AWS.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@io.github.musaddiq-dev/aws-cli-mcp-serverlist my S3 buckets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Python 3.12+
AWS CLI v2 installed and available on
PATHAWS CLI authentication configured and configuration through an AWS profile, IAM Identity Center/SSO, environment variables, an IAM role, or another AWS-supported credential provider
MCP-compatible client such as Claude Desktop, Cursor, VS Code, or another MCP host
Installation
When published to PyPI, install or run the server like a standard Python MCP package:
uvx mdev-aws-mcp-serverFor 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 .envVariable | Description | Default |
| Default AWS region |
|
| AWS credentials profile |
|
| Working directory for file operations |
|
| Emit warnings for destructive-looking operations |
|
| Application log level |
|
Running
mdev-aws-mcp-serverFrom a local checkout before PyPI publication, run:
python -m aws_mcp_server.serverMCP 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-serverVS 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 |
| Execute an AWS CLI command | Can modify AWS resources |
| Suggest common AWS CLI commands | Read-only |
| List AWS regions | Read-only |
| Return current AWS identity | Read-only |
Development
pip install -e .
pip install -e '.[dev]'
pytest
ruff check .
ruff format .
pyrightSmoke 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 pytestManual AWS check, if credentials are configured:
aws sts get-caller-identityDistribution
This server is published through the standard Python MCP distribution path:
PyPI package:
mdev-aws-mcp-serverMCP Registry name:
io.github.musaddiq-dev/aws-cli-mcp-serverRuntime hint:
uvxTransport:
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_awson 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 toolscall_awsExecute AWS CLI CommandADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| cli_command | Yes | The complete AWS CLI command to execute. MUST start with 'aws' | |
| max_results | No | Optional limit for number of results (useful for pagination) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 RegionsARead-only
Get a list of available AWS regions.
Returns: Dictionary with success status and list of AWS regions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 IdentityARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 CommandsARead-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:
Include the AWS service name (EC2, S3, Lambda, etc.)
Describe the action you want to perform
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
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language description of what you want to accomplish |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.2- First observed
call_aws - First observed
get_aws_regions - First observed
get_caller_identity - First observed
suggest_aws_commands
TDQS
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.
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.
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.
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
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
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
An MCP server that provides congressional transcripts
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
A simple MCP server built with FastMCP and python
Related MCP Servers
- FlicenseCqualityDmaintenanceA Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with your AWS environment. This allows for natural language querying and management of your AWS resources during conversations. Think of better Amazon Q alternative.3294-
- FlicenseNot gradedqualityFmaintenanceAn MCP server that enables Claude to generate and execute AWS CLI commands, allowing users to manage AWS resources through natural language conversations.2-
- AlicenseNot gradedqualityNot gradedmaintenanceA Python CLI package aaws published to GitHub with PyPI distribution via GitHub Actions. Natural language in → AWS CLI command out, with explain, confirm, and safety layers. Available as MCP server.-
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides tools for creating and managing AWS resources using boto3, including EC2, S3, VPC, subnets, security groups, and RDS.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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