关于 AWS Resources MCP Server
AWS Resources MCP Server 是一个基于 Python 的 MCP 服务,让 Claude 运行 boto3 代码查询和管理 AWS 资源。它以 Docker 镜像形式提供,无需克隆仓库,并通过 AST 分析和受限执行环境来约束代码运行。
主要功能
- 01执行 boto3 代码片段查询 AWS 资源
- 02基于 AST 的导入与代码结构校验
- 03受限的代码执行环境
- 04以 Docker 镜像运行,支持多种架构
- 05支持环境变量凭证与 AWS profile
适用场景
- 01通过 Claude 查询 S3 存储桶或 CodePipeline 执行记录
- 02排查 DynamoDB 等服务的权限问题
- 03在 Docker 中运行的 AWS 运维辅助查询
MCP 相关
该项目是一个 MCP 服务,向 MCP 客户端暴露 aws://query_resources 资源和 aws_resources_query_or_modify 工具,用于执行 boto3 代码。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
AWS Resources MCP 服务
概述
一个 Model Context Protocol (MCP) 服务实现,可通过 boto3 运行生成的 Python 代码来查询任意 AWS 资源。
风险自负: 我并未将操作限制为只读,这样谨慎的运维人员就可以借助此工具执行管理操作。你的 AWS 用户角色将决定你可以执行哪些操作的权限。
演示:修复 Dynamodb 权限错误
https://github.com/user-attachments/assets/de88688d-d7a0-45e1-94eb-3f5d71e9a7c7
为什么还要做一个 AWS MCP 服务?
我尝试过带 Developer Access 的 AWS Chatbot。免费套餐对资源的查询限制为每月 25 次。下一档是每月 $19,却包含了我用不到的 90% 的功能。而且结果都是 JSON 格式,还有很多限制。
我尝试过使用 aws-mcp,但遇到了几个问题:
- 配置麻烦:必须克隆 git 仓库并处理本地配置
- 稳定性问题:在我的 Mac 上不够稳定
- Node.js 技术栈:作为一名 Python 开发者,我无法有效地向 Node.js 代码库回馈贡献
所以我创造了这个新方案,它:
- 直接从 Docker 镜像运行 - 无需 git clone
- 使用 Python 和 boto3,稳定性更好
- 让 Python 开发者更容易贡献
- 为代码执行包含适当的沙箱机制
- 让一切保持容器化且干净整洁
有关 Model Context Protocol 及其工作原理的更多信息,请参阅 Anthropic 的 MCP 文档。
组件
资源
该服务暴露以下资源:
aws://query_resources:一个动态资源,可通过 boto3 查询访问 AWS 资源
示例查询
以下是一些你可以执行的示例查询:
- 列出 S3 存储桶:
s3 = session.client('s3')
result = s3.list_buckets()
- 获取最新的 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 资源。你可以通过以下方式获取:
- 在你的 AWS 账户中创建 IAM 用户
- 为程序化访问生成访问密钥
- 确保该 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 命令。请按以下步骤操作:
-
创建新的构建器实例(如果尚未创建):
docker buildx create --use -
为多个平台构建并推送镜像:
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t buryhuang/mcp-server-aws-resources:latest --push . -
验证镜像是否可用于指定的平台:
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"
]
}
}
}
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。