HTTP流式处理工具

基于Model Context Protocol(MCP)的HTTP流式处理工具,提供问候和基础算术功能,并在DynamoDB中持久化用户会话历史。

  • by InspectorGadget
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 InspectorGadget/mcp-http-streamer

使用说明

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推出的完整路径:

  1. 为构建Docker镜像 linux/arm64 (可通过 DOCKER_PLATFORM).
  2. 确保目标Amazon ECR存储库存在。
  3. 登录、标记并推送图像。
  4. 使用映像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.

许可证

麻省理工学院