mcpField
A
AWS Resources MCP Server

AWS Resources MCP Server

本地服务
github.com/baryhuang云与基础设施2463 周前更新

关于 AWS Resources MCP Server

AWS Resources MCP Server 是一个基于 Python 的 MCP 服务,让 Claude 运行 boto3 代码查询和管理 AWS 资源。它以 Docker 镜像形式提供,无需克隆仓库,并通过 AST 分析和受限执行环境来约束代码运行。

主要功能

  1. 01执行 boto3 代码片段查询 AWS 资源
  2. 02基于 AST 的导入与代码结构校验
  3. 03受限的代码执行环境
  4. 04以 Docker 镜像运行,支持多种架构
  5. 05支持环境变量凭证与 AWS profile

适用场景

  1. 01通过 Claude 查询 S3 存储桶或 CodePipeline 执行记录
  2. 02排查 DynamoDB 等服务的权限问题
  3. 03在 Docker 中运行的 AWS 运维辅助查询

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 aws://query_resources 资源和 aws_resources_query_or_modify 工具,用于执行 boto3 代码。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"aws-resources-python": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

AWS Resources MCP 服务

Docker Hub Docker Hub

AWS Resources Server MCP server

概述

一个 Model Context Protocol (MCP) 服务实现,可通过 boto3 运行生成的 Python 代码来查询任意 AWS 资源。

风险自负: 我并未将操作限制为只读,这样谨慎的运维人员就可以借助此工具执行管理操作。你的 AWS 用户角色将决定你可以执行哪些操作的权限。

image

演示:修复 Dynamodb 权限错误

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

为什么还要做一个 AWS MCP 服务?

我尝试过带 Developer Access 的 AWS Chatbot。免费套餐对资源的查询限制为每月 25 次。下一档是每月 $19,却包含了我用不到的 90% 的功能。而且结果都是 JSON 格式,还有很多限制。

我尝试过使用 aws-mcp,但遇到了几个问题:

  1. 配置麻烦:必须克隆 git 仓库并处理本地配置
  2. 稳定性问题:在我的 Mac 上不够稳定
  3. Node.js 技术栈:作为一名 Python 开发者,我无法有效地向 Node.js 代码库回馈贡献

所以我创造了这个新方案,它:

  • 直接从 Docker 镜像运行 - 无需 git clone
  • 使用 Python 和 boto3,稳定性更好
  • 让 Python 开发者更容易贡献
  • 为代码执行包含适当的沙箱机制
  • 让一切保持容器化且干净整洁

有关 Model Context Protocol 及其工作原理的更多信息,请参阅 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 特有的对象和 datetime 值。

工具

该服务提供一个用于执行 AWS 查询的工具:

  • aws_resources_query_or_modify
    • 执行 boto3 代码片段以查询或修改 AWS 资源
    • 输入:
      • code_snippet(字符串):使用 boto3 查询 AWS 资源的 Python 代码
      • 代码必须设置一个包含查询输出的 result 变量
    • 允许的导入:
      • boto3
      • operator
      • json
      • datetime
      • pytz
      • dateutil
      • re
      • time
    • 可用的内置函数:
      • 基本类型:dict、list、tuple、set、str、int、float、bool
      • 操作:len、max、min、sorted、filter、map、sum、any、all
      • 对象处理:hasattr、getattr、isinstance
      • 其他:print、import
实现细节

该服务包含若干安全特性:

  • 基于 AST 的代码分析,以验证导入和代码结构
  • 受限的执行环境,内置函数有限
  • 结果的 JSON 序列化,并妥善处理 AWS 特有的对象
  • 完善的错误处理与报告

配置

前置条件

你需要具有适当权限的 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 安装

要自动通过 Smithery 为 Claude Desktop 安装 AWS Resources MCP Server:

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 clone 运行
使用 git clone 和配置文件的示例
{
  "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"
      ]
    }
  }
}

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。