返回市场
示例-ECS-MCP服务器

示例-ECS-MCP服务器

作者:aws-samples2 星标更新:2025-11-18

项目介绍

ECS MCP Server 示例

以下示例演示了如何使用 AWS Fargate 部署 Amazon ECS 的代理 AI 架构。它使用 AWS CDK 来部署架构组件。

高级架构

高级架构

细节

该架构由以下组件组成:

  • 应用负载均衡器:接收传入的 API 调用并将其转发到 AI 服务
  • AI 服务:一个简单的 AI 代理,连接两个 MCP 服务器以执行操作
  • MCP 服务器一:使用 MCP Python SDK 自定义构建的 MCP 服务器。在此示例中,MCP 服务器实现了 数学工具
  • MCP 服务器二:托管现有的 MCP 服务器(AWS API MCP 服务器)。为了这个示例,此 MCP 服务器的角色仅限于列出您账户中的 AWS 存储桶

AWS Fargate 服务之间的服务到服务通信使用 Service ConnectAI 服务利用自定义的 DNS 名称来连接此示例中可用的 MCP 服务器。

该示例还会生成一个 AWS 密钥,用于在调用应用负载均衡器 URL 时作为 x-api-key 头。

先决条件

  • 在本地机器上安装了 Node.js(版本 >= 20)
  • 在您的机器上安装了 Docker
  • 在本地机器上配置了 AWS CLI
  • 在您的账户中配置了对 Anthropic Claude Sonnet 4 的 Bedrock 模型访问

开始使用

要将此示例部署到您的账户,请按照以下说明操作:

# 安装依赖项
$ npm install
# 登录公共 ECR 注册表以允许下载基础镜像
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
# 初始化您的 AWS 环境(如果您尚未这样做)
$ npm run cdk bootstrap
# 将 CDK 堆栈部署到您的账户
$ npm run cdk deploy

测试

一旦部署完成,您将从 AWS CDK 获得以下输出:

 ✅  EcsMcpServerSampleStack

✨  部署时间: 362.32秒

输出:
EcsMcpServerSampleStack.ALBLoadBalancerDNS6ED38D87 = [应用负载均衡器 URL]
EcsMcpServerSampleStack.AiServiceSecretARN2FB050DB = [密钥 ARN]

在调用应用负载均衡器 URL 之前,您需要通过以下命令检索密钥值:

$ aws secretsmanager get-secret-value --secret-id [密钥 ARN]
# 或使用以下命令直接获取值
$ aws secretsmanager get-secret-value --secret-id [密钥 ARN] --output json | jq -r '.SecretString'

现在您有了所有信息,可以调用应用负载均衡器 URL 来测试代理:

curl --location 'http://[ALB-URL]/chat' \
--header 'x-api-key: [密钥值]' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "什么命令可以列出 AWS 存储桶"
}'
{
  "answer": "列出 AWS S3 存储桶的命令是:\n\n```bash\naws s3 ls\n```\n\n此命令将显示您 AWS 账户中的所有 S3 存储桶,显示:\n- 创建日期和时间\n- 存储桶名称\n\n如输出所示,它列出了所有存储桶及其创建时间戳和名称。该命令跨所有区域工作,并显示您整个 AWS 账户中的存储桶。\n"
}

或执行 AWS CLI 命令:

curl --location 'http://[ALB-URL]/chat' \
--header 'x-api-key: [密钥值]' \
--header 'Content-Type:  application/json' \
--data '{
    "prompt": "列出我所有的 AWS 存储桶"
}'
{
  "answer": "这是您所有的 S3 存储桶: [省略]"
}

或使用 自定义 MCP 服务器 计算一些数学问题:

curl --location 'http://[ALB-URL]/chat' \
--header 'x-api-key: [密钥值]' \
--header 'Content-Type: application/json' \
--data '{
    "prompt": "2+2等于多少"
}'
{
  "answer": "2 + 2 = **4**\n"
}

安全性

有关更多信息,请参阅 CONTRIBUTING

许可证

本库根据 MIT-0 许可证授权。请参阅 LICENSE 文件。