MCP HTTP流媒体
模型上下文协议(MCP)的HTTP流式实现,它公开了一些无状态工具(问候语和基本算术),同时在DynamoDB中持久化用户历史记录。服务器可以在本地、Docker内部运行,也可以作为Lambda运行时适配器前面的AWS Lambda函数运行。
项目布局
- main.go –连接MCP服务器、HTTP处理程序和工具注册。
- 助手/state.go –用DynamoDB支持的会话状态持久性包装工具处理程序。
- session/store.go –DynamoDB客户端、TTL逻辑和会话文档的CRUD帮助程序。
- 结构/参数.go –请求MCP工具使用的有效载荷模式。
- –两阶段构建,生成与Lambda兼容的引导二进制文件,并捆绑AWS Lambda Runtime Adapter扩展。
- deploy.sh –可配置的助手,用于构建、推送容器映像并将其连接到AWS Lambda函数中。
可用的MCP工具
| 工具 | 目的 | 注释 |
|---|---|---|
greet | 致以友好的问候。 | 需要 name 和 channel (电子邮件、短信、推送)。 |
add, subtract, multiply, divide | 两个浮点数上的基本算术。 | Division防止除以零,并在会话历史记录中记录错误条目。 |
fetch_url | 执行HTTP GET并报告上游状态。 | 在会话历史记录中记录每次获取的URL。 |
每个工具都包裹在 helpers.WithState,确保会话状态根据MCP请求自动加载、更改和持久化。
会话存储
会话在DynamoDB项目中以以下方式键入 pk (会话ID)。该模式存储序列化的工具历史记录和簿记列(createdAt, lastSeen, ttl).默认值可以用环境变量覆盖(见下文)。新会话是在首次访问时自动创建的,因此除了配置表外,不需要预先播种。
HTTP表面
服务器正在监听 :8080 并公开单个路由:
GET /mcp–Lambda适配器使用的健康/就绪探针。POST /mcp–MCP流端点由处理mcp.NewStreamableHTTPHandler.DELETE /mcp–当呼叫者提供时,可选会话重置Mcp-Session-Id在标题中。
本地开发
先决条件:
- 转到1.25.3+
- Docker(可选但推荐)
- 具有DynamoDB访问权限的AWS凭据(需要,因为存储会立即初始化)
步骤:
git clone https://github.com/InspectorGadget/http-streamer.git
cd http-streamer
export SESSION_TABLE=mcp_sessions
export SESSION_TTL_SECONDS=3600
go run ./...服务器记录检测到的表/区域并开始监听 http://localhost:8080/mcp.
部署到AWS Lambda
deploy.sh 自动化从本地映像构建到Lambda推出的完整路径:
- 为构建Docker镜像
linux/arm64(可通过DOCKER_PLATFORM). - 确保目标Amazon ECR存储库存在。
- 登录、标记并推送图像。
- 使用映像URI、体系结构和环境有效负载创建或更新指定的Lambda函数。
示例用法:
export APP_NAME=mcp-http
export AWS_ACCOUNT_ID=123456789012
export AWS_REGION=ap-southeast-1
export ROLE_ARN=arn:aws:iam::123456789012:role/mcp-http-lambda
./deploy.sh以(权力)否决 IMAGE_TAG, ECR_REPO, IMAGE_URI, ARCHITECTURE, ENV_VARS等,根据多环境部署的需要。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 8080 | HTTP侦听器端口(在Docker镜像+Lambda环境中设置)。 |
AWS_REGION | 源自DynamoDB和AWS客户端的AWS SDK | 区域。 |
SESSION_TABLE | mcp_sessions | 包含会话项的DynamoDB表。 |
SESSION_TTL_SECONDS | 3600 | TTL范围应用于新的/更新的会话行。 |
APP_NAME | (必填) deploy.sh) | Lambda函数名称和逻辑应用程序标识符。 |
AWS_ACCOUNT_ID | (必填) deploy.sh) | 托管ECR+Lambda的帐户。 |
ECR_REPO | $APP_NAME-repo | 容器映像的目标ECR存储库。 |
ROLE_ARN | arn:aws:iam:::role/your-role-name | Lambda函数承担IAM角色。 |
IMAGE_TAG | latest | 标签在本地和ECR中都应用。 |
IMAGE_URI | .dkr.ecr.../$ECR_REPO:$IMAGE_TAG | 完全合格的图像参考;自动派生但覆盖升级版本。 |
DOCKER_PLATFORM | linux/arm64 | 构建平台 docker build. |
ARCHITECTURE | arm64 | Lambda架构标志。 |
ENV_VARS | Variables={PORT=8080,...} | 部署脚本使用的序列化Lambda环境。 |
故障排除
- DynamoDB访问错误 –确保在运行二进制文件和IAM主体可以调用的环境中解析AWS凭据
GetItem,PutItem,UpdateItem,DeleteItem上SESSION_TABLE. - Lambda冷启动延迟 –考虑缩小
SESSION_TTL_SECONDS或重复使用会话以避免额外的PutItem电话。 - 流媒体故障 –确认
AWS_LWA_ENABLE_RESPONSE_STREAMING=true相关的Lambda适配器环境变量与中的变量匹配 .
许可证
麻省理工学院
