使用说明
MCP HTTP流媒体
模型上下文协议(MCP)的HTTP流式实现,它公开了一些无状态工具(问候语和基本算术),同时在DynamoDB中持久化用户历史记录。服务器可以在本地、Docker内部运行,也可以作为Lambda运行时适配器前面的AWS Lambda函数运行。
项目布局
- main.go –连接MCP服务器、HTTP处理程序和工具注册。
- 助手/state.go –用DynamoDB支持的会话状态持久性包装工具处理程序。
- session/store.go –DynamoDB客户端、TTL逻辑和会话文档的CRUD帮助程序。
- 结构/参数.go –请求MCP工具使用的有效载荷模式。
- Dockerfile –两阶段构建,生成与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::<acct>:role/your-role-name |
Lambda函数承担IAM角色。 |
IMAGE_TAG |
latest |
标签在本地和ECR中都应用。 |
IMAGE_URI |
<acct>.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适配器环境变量与中的变量匹配 Dockerfile.
许可证
麻省理工学院
