AWS服务桥接服务器

AWS MCP服务器是一个连接大型语言模型(如Claude)和AWS服务的桥梁,使AI能够直接与Lambda、S3、DynamoDB等AWS资源交互。

  • by Sumedh1599
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Sumedh1599/aws-mcp-server

使用说明

AWS模型上下文协议(MCP)服务器

AWS MCP服务器在Claude等大型语言模型(LLM)和您的AWS服务之间架起了一座桥梁。它使Claude能够直接与您的AWS资源交互,包括Lambda函数、S3桶、DynamoDB表、API网关、CloudWatch日志、IAM策略和Cost Explorer数据。

版权所有©2025 Sumedh Patil,Aipresso有限公司英国

特性

  • 🔍 全面的AWS访问:连接并管理多个AWS服务
  • 🤖 LLM集成:专为Claude和其他兼容MCP的AI助手而设计
  • 🧠 情境理解:允许AI了解您的AWS环境
  • 🔧 直接运营:根据自然语言请求执行AWS操作
  • 📊 资源可视化:轻松查看和分析您的AWS资源

支持的AWS服务

此MCP服务器允许与以下设备直接交互:

  • 拉姆达:查看函数、获取代码和调用函数
  • 第3页:列出bucket、读/写对象、管理权限
  • DynamoDB 数据库:查询表、获取/放置项目、扫描数据
  • API网关:列出API、查看资源、创建部署
  • 云监控:查看日志、分析指标、创建警报
  • 国际机械师协会:查看具有详细权限的角色、用户和策略
  • CodeBuild:管理构建项目并查看构建结果
  • 成本探索者:分析成本、获取预测并跟踪支出

安装和设置

先决条件

  • Node.js 16+和npm
  • 具有适当权限的AWS帐户
  • 已安装并配置AWS CLI

步骤1:克隆并安装依赖项

# Clone the repository (or download and extract it)
git clone https://github.com/your-repo/aws-mcp-server.git

# Navigate to the project directory
cd aws-mcp-server

# Install dependencies
npm install

步骤2:配置AWS凭据

MCP服务器使用您的AWS凭据。确保您已配置它们:

# Configure AWS CLI with your credentials
aws configure

或者,您可以设置环境变量:

export AWS_ACCESS_KEY_ID=your-access-key
export AWS_SECRET_ACCESS_KEY=your-secret-key
export AWS_REGION=your-aws-region

步骤3:设置IAM权限

创建具有以下权限的IAM策略,并将其附加到IAM用户或角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:ListFunctions",
                "lambda:GetFunction",
                "lambda:Invoke"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:ListTables",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:DeleteItem"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::*/*",
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:GetLogEvents"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricData",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DescribeAlarms"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "apigateway:GET",
                "apigateway:POST"
            ],
            "Resource": "arn:aws:apigateway:*::/restapis*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:ListProjects",
                "codebuild:BatchGetProjects",
                "codebuild:StartBuild",
                "codebuild:BatchGetBuilds",
                "codebuild:ListBuildsForProject"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ce:GetCostAndUsage",
                "ce:GetCostForecast",
                "ce:GetDimensionValues",
                "ce:GetReservationUtilization"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "iam:ListUsers",
                "iam:ListPolicies",
                "iam:GetRole",
                "iam:GetUser",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:ListAttachedRolePolicies",
                "iam:ListAttachedUserPolicies"
            ],
            "Resource": "*"
        }
    ]
}

以下是如何设置此策略:

  1. 打开AWS管理控制台
  2. 导航到IAM→ 政策→ 创建策略
  3. 点击JSON选项卡
  4. 复制并粘贴上述策略
  5. 单击“下一步”,为其命名(例如“AWS MCP服务器策略”)并创建策略
  6. 将此策略附加到将运行MCP服务器的IAM用户或角色

步骤4:构建并运行服务器

# Build the TypeScript project
npm run build

# Start the MCP server
npm run start

服务器将启动并监听来自Claude或其他MCP兼容AI助手的MCP请求。

连接到克劳德

要将此MCP服务器连接到Claude:

  1. 在浏览器或应用程序中打开Claude
  2. 转到“设置”→ 插件/工具
  3. 选择“添加自定义MCP连接”
  4. 提供运行MCP服务器的URL
  5. 测试连接
  6. 连接后,Claude现在可以与您的AWS服务进行交互

使用示例

连接到Claude后,您可以发出以下请求:

# List Lambda functions
"Please show me all my Lambda functions"

# Get Lambda function code
"What's in my zip-and-patch-runner Lambda function?"

# List S3 buckets
"Show me all my S3 buckets"

# Query DynamoDB
"Can you get items from my Users table where the userId is 'user123'?"

# View CloudWatch logs
"Show me the recent logs for my payment-processor Lambda function"

# Analyze costs
"What were my AWS costs last month broken down by service?"

# View IAM policies
"Show me the permissions for the role named 'lambda-execution-role'"

自定义服务器

添加新的AWS服务

要添加对其他AWS服务的支持:

  1. 在中创建新的服务模块文件 src/services 目录
  2. 定义服务的资源、工具和提示
  3. 在中导入并注册模块 src/index.ts
  4. 重建与 npm run build

配置选项

可以通过修改以下内容来配置服务器:

  • 中的AWS SDK选项 src/utils/aws-config.ts
  • 中的服务器选项 src/index.ts
  • 各自文件中的服务特定配置

故障排除

常见问题

权限错误:

  • 确保您的IAM策略包括所有必要的权限
  • 检查您的AWS凭据是否配置正确

连接问题:

  • 验证您的网络是否允许必要的连接
  • 如果在防火墙后运行,请确保MCP服务器正确暴露

AWS SDK错误:

  • 确保您使用的是兼容的AWS SDK版本
  • 检查区域设置是否与您的AWS资源匹配

日志

服务器记录到标准输出。您可以将这些重定向到一个文件进行调试:

npm run start > mcp-server.log 2>&1

安全考虑

  • 此服务器提供对您的AWS资源的直接访问。使用适当的IAM限制。
  • 考虑在VPC或专用网络中运行以限制暴露。
  • 定期审核IAM权限,以确保其遵循最小权限原则。
  • 监控使用情况,以检测任何异常模式。

贡献

欢迎投稿!请随时提交带有增强功能、错误修复或文档改进的拉取请求。

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。


版权所有©2025 Sumedh Patil,Aipresso有限公司英国