AWS上带有CDK的MCP服务器
使用CDK在AWS上部署的模型上下文协议(MCP)服务器的生产就绪实现,具有安全的私有VPC架构、与Amazon Bedrock的AI集成以及现代React前端。
🏗️ 架构概述
该项目使用HTTP网桥实现了一个纯MCP(模型上下文协议)服务器,以实现浏览器兼容性,并使用安全的私有VPC架构部署在AWS上。
graph TB
subgraph "External"
User[👤 User]
Browser[🌐 Web Browser]
end
subgraph "AWS Account"
subgraph "VPC (10.0.0.0/16)"
subgraph "Public Subnet (10.0.1.0/24)"
ALB[🔄 Application Load Balancer]
NAT[🚪 NAT Gateway]
end
subgraph "Private Subnet (10.0.2.0/24)"
subgraph "ECS Fargate Cluster"
MCPServer[📡 MCP Server Container
FastAPI + MCP Bridge
Port 8000]
Frontend[⚛️ React Frontend
Material-UI + Vite
Port 3000]
end
end
end
subgraph "AWS Services"
DynamoDB[(🗄️ DynamoDB
mcp-items table)]
Bedrock[🤖 Amazon Bedrock
AI Models]
CloudWatch[📊 CloudWatch Logs]
end
end
User --> Browser
Browser --> ALB
ALB --> Frontend
ALB --> MCPServer
MCPServer --> DynamoDB
MCPServer --> Bedrock
MCPServer --> CloudWatch
Frontend --> CloudWatch
classDef aws fill:#ff9900,stroke:#333,stroke-width:2px,color:#fff
classDef private fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef public fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef external fill:#c8e6c9,stroke:#1b5e20,stroke-width:2px
class ALB,NAT,DynamoDB,Bedrock,CloudWatch aws
class MCPServer,Frontend private
class User,Browser external🔧 MCP协议流
系统通过HTTP桥实现模型上下文协议,以实现浏览器兼容性:
sequenceDiagram
participant Frontend as React Frontend
participant Bridge as MCP HTTP Bridge
participant Server as MCP Server
participant DB as DynamoDB
participant AI as Amazon Bedrock
Frontend->>Bridge: POST /mcp
{"method": "tools/list"}
Bridge->>Server: handle_list_tools()
Server->>Bridge: [Tool definitions]
Bridge->>Frontend: {"result": {"tools": [...]}}
Frontend->>Bridge: POST /mcp
{"method": "tools/call", "params": {"name": "bedrock_chat"}}
Bridge->>Server: handle_call_tool("bedrock_chat", {...})
Server->>AI: invoke_model()
AI->>Server: AI response with JSON action
Server->>DB: execute_action() (if needed)
DB->>Server: operation_result
Server->>Bridge: [TextContent result]
Bridge->>Frontend: {"result": {"content": [...]}}🛠️ 技术栈
后端(MCP服务器)
- MCP协议:官方模型上下文协议实施
- 快速 API:用于浏览器兼容性的HTTP网桥
- 亚马逊基岩:人工智能模型集成(Titan、Claude)
- DynamoDB 数据库:用于物品存储的NoSQL数据库
- python:核心服务器实施
前端
- 反应18:现代UI框架
- 材料UI(MUI):组件库
- 快:快速构建工具
- MCP客户端:直接MCP协议通信
基础设施(AWS CDK)
- ECS Fargate:无服务器容器平台
- 应用程序负载平衡器:流量路由和SSL终止
- 垂直路径计算机:使用公共/专用子网保护专用网络
- DynamoDB 数据库:托管NoSQL数据库
- 云监控:记录和监控
- 国际机械师协会:细粒度访问控制
🔐 安全功能
网络安全
- 私有VPC:专用子网中的所有应用程序资源
- 安全组:限制性防火墙规则
- NAT网关:私人资源的出站互联网接入
- 应用负载均衡器:带有健康检查的面向公众的负载平衡器
访问控制
- IAM角色:ECS任务的细粒度权限
- 服务到服务:组件之间的安全通信
- 没有公共IP:应用程序容器无法直接访问互联网
数据保护
- DynamoDB加密:静态加密数据
- CloudWatch日志:集中、安全的日志记录
- VPC端点:私有AWS服务通信(可选)
📁 项目结构
mcp-server-cdk-package/
├── lib/
│ └── mcp-server-stack.ts # CDK infrastructure definition
├── mcp-server/
│ ├── main.py # MCP server + HTTP bridge
│ ├── requirements.txt # Python dependencies
│ └── Dockerfile # Container configuration
├── simple-frontend/
│ ├── src/
│ │ └── App.jsx # React MCP client
│ ├── package.json # Frontend dependencies
│ └── Dockerfile # Container configuration
├── bin/
│ └── mcp-server-cdk-package.ts # CDK app entry point
├── cdk.json # CDK configuration
└── README.md # This file🛠️ 先决条件
- Node.js 18或更高版本
- AWS CLI配置了适当的凭据
- Docker(用于本地开发)
- AWS-CDK-CLI(
npm install -g aws-cdk)
🚀 快速开始
1.克隆和设置
git clone
cd mcp-server-cdk-package
npm install2.部署到AWS
# Bootstrap CDK (first time only)
cdk bootstrap
# Deploy the entire stack
cdk deploy3.访问您的应用程序
部署后,您将看到带有URL的输出:
- 应用程序URL:主要前端应用程序
- MCP API:后端MCP协议端点
- 健康检查URL:后端运行状况
🏗️ 部署架构
graph LR
subgraph "Development"
Dev[👨💻 Developer]
CDK[📦 CDK Code]
end
subgraph "CI/CD Pipeline"
Deploy[🚀 cdk deploy]
Build[🔨 Container Build]
end
subgraph "AWS Production"
ECR[📦 ECR Registry]
ECS[🐳 ECS Services]
ALB[⚖️ Load Balancer]
Apps[📱 Applications]
end
Dev --> CDK
CDK --> Deploy
Deploy --> Build
Build --> ECR
ECR --> ECS
ECS --> ALB
ALB --> Apps🎯 主要特点
MCP协议实现
- 纯MCP:完全符合模型上下文协议
- HTTP网桥:通过HTTP与浏览器兼容的JSON-RPC 2.0
- 工具执行:创建、读取、更新、删除数据库项
- 资源访问:列出并读取数据源
- 人工智能集成:基岩动力智能指令处理
AI代理功能
- 自然语言:用简明英语处理用户命令
- 动作执行:解析命令并执行MCP工具调用
- JSON输出:用于可靠执行的结构化动作指令
- 错误处理:优雅的错误响应和用户反馈
生产就绪
- 自动缩放:ECS Fargate,可配置扩展
- 健康检查:ALB健康监测
- 日志记录:全面的CloudWatch集成
- 监控:容器和应用程序指标
🛠️ 可用的MCP工具
| 工具 | 说明 | 参数 |
|---|---|---|
create_item | 创建新的数据库项 | name, description, category, metadata |
list_items | 列出所有数据库项 | limit (可选) |
get_item | 按ID获取特定项目 | item_id |
delete_item | 按ID删除项目 | item_id |
bedrock_chat | 具有动作执行功能的AI代理 | message, model_id (可选) |
bedrock_analyze_items | 数据库项的AI分析 | analysis_type, model_id (可选) |
📊 可用MCP资源
| 资源 | 描述 | 数据格式 |
|---|---|---|
items://all | 所有数据库项 | JSON数组 |
bedrock://models | 可用基岩模型 | JSON数组 |
📝 API文档
MCP HTTP网桥端点
- POST/mcp:MCP协议消息(JSON-RPC 2.0)
- GET/健康:健康检查端点
- GET/docs:FastAPI自动生成的文档
MCP协议方法
tools/list:列出可用工具tools/call:使用参数执行工具resources/list:列出可用资源resources/read:读取资源内容
🔧 地方发展
在本地运行MCP服务器
cd mcp-server
pip install -r requirements.txt
python main.py在本地运行前端
cd simple-frontend
npm install
npm run devDocker开发
# Build and run backend
cd mcp-server
docker build -t mcp-server .
docker run -p 8000:8000 mcp-server
# Build and run frontend
cd simple-frontend
docker build -t mcp-frontend .
docker run -p 3000:3000 mcp-frontend🎓 使用示例
直接MCP协议
// List available tools
const tools = await mcpClient.listTools();
// Create an item
const result = await mcpClient.callTool('create_item', {
name: 'My Item',
description: 'Item description',
category: 'test'
});AI代理命令
"create an item called laptop with description work computer"
"list all items"
"delete item abc-123-def"
"analyze all items for insights"🛡️ 安全考虑
网络安全
- 所有应用程序组件的专用子网
- 具有最低访问权限的安全组
- 用于出站互联网接入的NAT网关
- 不直接向容器分配公共IP
IAM权限
- 最小权限原则
- 服务特定角色和政策
- 没有硬编码凭据
数据安全
- 静态DynamoDB加密
- CloudWatch记录加密
- VPC流日志(可选)
📈 监控和记录
CloudWatch日志
- MCP服务器:
/ecs/mcp-server - 前端:
/ecs/frontend - 保留期:7天
健康检查
- ALB健康检查:
/health端点 - 容器运行状况:ECS任务运行状况监控
- 数据库运行状况:DynamoDB连接验证
🧪 测试
测试MCP协议
# Health check
curl http://your-alb-url/health
# List MCP tools
curl -X POST http://your-alb-url/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": "1", "method": "tools/list"}'
# Create an item via MCP
curl -X POST http://your-alb-url/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": "2", "method": "tools/call", "params": {"name": "create_item", "arguments": {"name": "Test Item", "description": "A test item", "category": "test"}}}'测试AI代理
curl -X POST http://your-alb-url/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": "3", "method": "tools/call", "params": {"name": "bedrock_chat", "arguments": {"message": "create an item called laptop"}}}'🔄 CI/CD管道
该项目通过以下方式支持自动化部署:
- CDK部署:
cdk deploy用于基础设施更新 - 容器更新:零停机的ECS服务更新
- 健康检查:部署失败时自动回滚
清理
清除所有AWS资源:
cdk destroy🔧 配置
环境变量
DYNAMODB_TABLE_NAME:DynamoDB表名(默认值:mcp-items)AWS_DEFAULT_REGION:AWS区域(默认值:us-east-1)NODE_ENV:节点环境(默认值:production)
CDK配置
- VPC CIDR:
10.0.0.0/16 - 容器资源:256 CPU,512 MB内存
- 自动缩放:基于CPU/内存利用率的1-10个任务
🚨 故障排除
常见问题
- CDK启动错误:运行
cdk bootstrap手动地 - Docker构建问题:确保Docker正在运行
- 权限错误:检查AWS IAM权限
- 端口冲突:利用不同的港口促进当地发展
日志
检查CloudWatch日志:
/ecs/mcp-server-后端日志/ecs/frontend-前端日志
🎨 前端功能
- 现代用户界面:采用Material UI的简洁、响应式设计
- MCP协议:通过HTTP网桥直接进行MCP通信
- AI聊天:具有自然语言命令的交互式AI代理
- 项目管理:通过MCP工具进行完整的CRUD操作
- 实时更新:AI操作后自动刷新
- 响应式:适用于台式机和移动设备
🛡️ 生产注意事项
- 为HTTPS添加SSL证书
- 配置自定义域名
- 为DynamoDB设置备份策略
- 实施监控和警报
- 添加身份验证和授权
- 配置WAF以增强安全性
🤝 贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 彻底测试
- 提交拉取请求
📄 许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
📞 支持
对于问题和疑问:
- 在存储库中创建问题
- 检查故障排除部分
- 查看AWS CloudWatch日志
______________________________________________________________________
🎉 使用MCP服务器编写代码快乐! 🎉
