AWS资源查询服务器

一个基于Model Context Protocol的服务器,通过Python和boto3查询和管理AWS资源,支持Docker容器化部署。

  • by baryhuang
  • Python
  • 本地部署
  • 24 星标
  • 更新于
在 GitHub 查看 baryhuang/mcp-server-aws-resources-python

使用说明

AWS资源MCP服务器

概述

一种模型上下文协议(MCP)服务器实现,提供运行生成的python代码,通过boto3查询任何AWS资源。

风险自负: 我没有将操作限制为ReadyOnly,以便谨慎的运维人员可以使用此工具进行管理操作。您的AWS用户角色将决定您可以执行的操作的权限。

演示:修复Dynamodb权限错误

https://github.com/user-attachments/assets/de88688d-d7a0-45e1-94eb-3f5d71e9a7c7

为什么选择另一台AWS MCP服务器?

我尝试了使用开发人员访问权限的AWS聊天机器人。免费级别的资源查询限制为每月25次。下一层是每月19美元,包括我不使用的90%的功能。结果是JSON格式的,并且有很多限制。

我试着用 aws mcp 但遇到了几个问题:

  1. 设置麻烦:必须克隆一个git仓库并处理本地设置
  2. 稳定性问题:在我的Mac上不够稳定
  3. Node.js堆栈:作为一名Python开发人员,我无法有效地为Node.js代码库做出贡献

因此,我创建了这种新方法:

  • 直接从Docker镜像运行-不需要git克隆
  • 使用Python和boto3以获得更好的稳定性
  • 让Python爱好者更容易做出贡献
  • 包括用于代码执行的适当沙盒
  • 保持所有物品的集装箱化和清洁

有关模型上下文协议及其工作原理的更多信息,请参阅 Anthropic的MCP文档.

组件

资源

服务器公开以下资源:

  • aws://query_resources:一种动态资源,通过boto3查询提供对AWS资源的访问

查询示例

以下是您可以执行的一些示例查询:

  1. 列出S3存储桶:
s3 = session.client('s3')
result = s3.list_buckets()
  1. 获取最新的CodePipeline部署:
def get_latest_deployment(pipeline_name):
    codepipeline = session.client('codepipeline')

    result = codepipeline.list_pipeline_executions(
        pipelineName=pipeline_name,
        maxResults=5
    )

    if result['pipelineExecutionSummaries']:
        latest_execution = max(
            [e for e in result['pipelineExecutionSummaries']
             if e['status'] == 'Succeeded'],
            key=itemgetter('startTime'),
            default=None
        )

        if latest_execution:
            result = codepipeline.get_pipeline_execution(
                pipelineName=pipeline_name,
                pipelineExecutionId=latest_execution['pipelineExecutionId']
            )
        else:
            result = None
    else:
        result = None

    return result

result = get_latest_deployment("your-pipeline-name")

备注:所有代码段都必须设置 result 将返回给客户端的变量。这 result 变量将自动转换为JSON格式,并正确处理AWS特定的对象和日期时间值。

工具

服务器提供了一个执行AWS查询的工具:

  • aws_resources_query_or_modify
    • 执行boto3代码片段以查询或修改AWS资源
    • 输入:
      • code_snippet (string):使用boto3查询AWS资源的Python代码
      • 代码必须设置 result 带有查询输出的变量
    • 允许进口:
      • 肉毒杆菌3
      • 操作员
      • 数据
      • 日期时间
      • 皮茨
      • 日期
      • 关于
      • 时间
    • 可用的内置功能:
      • 基本类型:dict、list、tuple、set、str、int、float、bool
      • 操作:len、max、min、排序、过滤、映射、求和、任意、全部
      • 对象处理:hasattr、getattr、isinstance
      • 其他:打印, 导入

实现细节

服务器包括几个安全功能:

  • 基于AST的代码分析,用于验证导入和代码结构
  • 受限的执行环境,内置功能有限
  • 通过正确处理AWS特定对象对结果进行JSON序列化
  • 正确的错误处理和报告

设置

先决条件

您需要具有适当权限的AWS凭据才能查询AWS资源。您可以通过以下方式获得这些:

  1. 在您的AWS帐户中创建IAM用户
  2. 为程序化访问生成访问密钥
  3. 确保IAM用户对要查询的AWS服务具有必要的权限

需要以下环境变量:

  • AWS_ACCESS_KEY_ID:您的AWS访问密钥
  • AWS_SECRET_ACCESS_KEY:您的AWS密钥
  • AWS_SESSION_TOKEN:(可选)AWS会话令牌(如果使用临时凭据)
  • AWS_DEFAULT_REGION:AWS区域(如果未设置,则默认为“us-east-1”)

您还可以使用存储在 ~/.aws/credentials 文件。为此,请设置 AWS_PROFILE 将环境变量设置为配置文件名称。

注意:确保您的AWS凭据安全,切勿将其提交给版本控制。

通过Smithery安装

通过以下方式自动安装AWS Resources MCP Server for Claude Desktop 史密瑟里:

npx -y @smithery/cli install mcp-server-aws-resources-python --client claude

Docker安装

您可以在本地构建映像,也可以从Docker Hub中提取映像。该映像是为Linux平台构建的。

支持的平台

  • Linux/amd64
  • Linux/arm64
  • Linux/arm/v7

选项1:从Docker Hub拉取

docker pull buryhuang/mcp-server-aws-resources:latest

选项2:本地构建

docker build -t mcp-server-aws-resources .

运行容器:

docker run \
  -e AWS_ACCESS_KEY_ID=your_access_key_id_here \
  -e AWS_SECRET_ACCESS_KEY=your_secret_access_key_here \
  -e AWS_DEFAULT_REGION=your_AWS_DEFAULT_REGION \
  buryhuang/mcp-server-aws-resources:latest

或者使用存储的凭据和配置文件:

docker run \
  -e AWS_PROFILE=[AWS_PROFILE_NAME] \
  -v ~/.aws:/root/.aws \
  buryhuang/mcp-server-aws-resources:latest

跨平台发布

要为多个平台发布Docker镜像,您可以使用 docker buildx 命令。请按照以下步骤操作:

  1. 创建新的构建器实例 (如果你还没有):

    docker buildx create --use
    
  2. 为多个平台构建和推广形象:

    docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t buryhuang/mcp-server-aws-resources:latest --push .
    
  3. 验证映像是否可用于指定的平台:

    docker buildx imagetools inspect buryhuang/mcp-server-aws-resources:latest
    

使用Claude Desktop

使用Docker运行

使用ACCESS_KEY_ID和SECRET_ACCESS_KEY的示例

{
  "mcpServers": {
    "aws-resources": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "AWS_ACCESS_KEY_ID=your_access_key_id_here",
        "-e",
        "AWS_SECRET_ACCESS_KEY=your_secret_access_key_here",
        "-e",
        "AWS_DEFAULT_REGION=us-east-1",
        "buryhuang/mcp-server-aws-resources:latest"
      ]
    }
  }
}

使用PROFILE和装载本地AWS凭据的示例

{
  "mcpServers": {
    "aws-resources": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "AWS_PROFILE=default",
        "-v",
        "~/.aws:/root/.aws",
        "buryhuang/mcp-server-aws-resources:latest"
      ]
    }
  }
}

使用Git克隆运行

使用git clone和profile运行的示例

{
  "mcpServers": {
    "aws": {
      "command": "/Users/gmr/.local/bin/uv",
      "args": [
        "--directory",
        "/<your-path>/mcp-server-aws-resources-python",
        "run",
        "src/mcp_server_aws_resources/server.py",
        "--profile",
        "testing"
      ]
    }
  }
}