Labsco
runjivu logo

AWS CLI

โ˜… 3

from runjivu

Interact with AWS services using the AWS CLI. Requires AWS CLI to be installed and configured.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeQuick setup

use_aws MCP Server

๐ŸŒŸ amazon-q-cli is great, and it is great because it has use_aws MCP tool to interact with AWS API.

๐Ÿ’ก Wouldn't it be greater if this use_aws was portable, and use it across different AI tools, whichever you're currently using?

โšก use_aws_mcp is a standalone Model Context Protocol (MCP) server that provides AWS CLI functionality through a standardized interface.
This server replicates the functionality of the use_aws tool from the Amazon Q Developer CLI.

๐ŸŽฌ Demo

  • Usage with Avante, MCPHub in nvim
    Demo: Avante

  • Usage with Cursor
    Demo: Cursor

โœจ Features

  • AWS CLI Integration: Execute AWS CLI commands with proper parameter handling
  • Safety Checks: Automatic detection of read-only vs. write operations
  • User Agent Management: Proper AWS CLI user agent setup for tracking
  • Parameter Formatting: Automatic conversion of parameters to kebab-case for CLI compatibility
  • Error Handling: Comprehensive error handling and output formatting
  • MCP Protocol: Full Model Context Protocol compliance
  • Human-Readable Descriptions: Rich command descriptions using terminal formatting

๐Ÿ› ๏ธ Tool Specification

The server provides a single tool called use_aws with the following schema:

{
  "name": "use_aws",
  "description": "Execute AWS CLI commands with proper parameter handling and safety checks",
  "inputSchema": {
    "type": "object",
    "properties": {
      "service_name": {
        "type": "string",
        "description": "AWS service name (e.g., s3, ec2, lambda)"
      },
      "operation_name": {
        "type": "string",
        "description": "AWS CLI operation name (e.g., list-buckets, describe-instances)"
      },
      "parameters": {
        "type": "object",
        "description": "Optional parameters for the AWS CLI command",
        "additionalProperties": true
      },
      "region": {
        "type": "string",
        "description": "AWS region (e.g., us-west-2, eu-west-1)"
      },
      "profile_name": {
        "type": "string",
        "description": "Optional AWS profile name"
      },
      "label": {
        "type": "string",
        "description": "Optional label for the operation"
      }
    },
    "required": ["service_name", "operation_name", "region"]
  }
}

๐Ÿ“š Examples

List S3 Buckets

{
  "name": "use_aws",
  "arguments": {
    "service_name": "s3",
    "operation_name": "ls",
    "region": "us-west-2"
  }
}

Describe EC2 Instances

{
  "name": "use_aws",
  "arguments": {
    "service_name": "ec2",
    "operation_name": "describe-instances",
    "region": "us-west-2",
    "parameters": {
      "instance-ids": "i-1234567890abcdef0"
    }
  }
}

List Lambda Functions with Profile

{
  "name": "use_aws",
  "arguments": {
    "service_name": "lambda",
    "operation_name": "list-functions",
    "region": "us-west-2",
    "profile_name": "development"
  }
}

๐Ÿ›ก๏ธ Safety Features

Read-Only Operation Detection

The server automatically detects read-only operations based on the operation name prefix:

  • Read-only prefixes: get, describe, list, ls, search, batch_get
  • Write operations: All other operations require explicit user acceptance

Output Truncation

Large outputs are automatically truncated to prevent memory issues, with a maximum response size of 100KB.

Development

Running Tests

cargo test

๐Ÿ”จ Building for Development

cargo build

Running with Logging

RUST_LOG=use_aws=debug cargo run

Examples

# Run the description demo
cargo run --example description_demo

Architecture

The project is structured as follows:

  • src/lib.rs: Core library with types and constants
  • src/error.rs: Error handling types
  • src/use_aws.rs: Core AWS CLI functionality (replicated from original)
  • src/mcp_server.rs: MCP server implementation
  • src/main.rs: Binary entry point
  • examples/description_demo.rs: Example demonstrating command descriptions

๐Ÿ“ฆ Dependencies

If you do not have Cargo (the Rust package manager) installed, you can get it by installing Rust using rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Follow the on-screen instructions to complete the installation. After installation, restart your terminal and ensure Cargo is available by running:

cargo --version

You should see the installed Cargo version printed.

This project is distributed as a Rust crate. The following dependencies are managed automatically by Cargo:

  • tokio
  • serde
  • serde_json
  • eyre
  • bstr
  • convert_case
  • async-trait
  • thiserror
  • tracing
  • tracing-subscriber
  • crossterm

test/dev dependencies:

  • tokio-test

You do not need to install these manually; Cargo will handle them during installation.

๐Ÿ“„ License

MIT, Apache-2.0

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests
  5. Submit a pull request

๐Ÿ”’ Security

This server executes AWS CLI commands, which may have security implications:

  • Ensure proper AWS credentials and permissions
  • Review all commands before execution
  • Use read-only operations when possible
  • Consider running in a restricted environment

References