关于 Sample Serverless MCP Servers
Sample Serverless MCP Servers 是一组在 AWS Serverless 计算上运行 AI Agent 与 MCP 服务的示例实现,适合希望在 AWS 上部署 MCP 的开发者参考。仓库同时对比了有状态与无状态 MCP 服务的取舍,并提供多种运行时和基础设施即代码方案。
主要功能
- 01基于 AWS Lambda 的无状态远程 MCP 服务示例
- 02基于 Amazon ECS 的有状态与无状态示例
- 03使用 Strands Agents SDK 的 AI Agent 示例
- 04Python 与 Node.js 运行时示例
- 05Terraform、CDK 与 SAM 部署方式
适用场景
- 01参考在 AWS Lambda 上部署远程 MCP 服务的方式
- 02在 Amazon ECS 上部署需要保持会话的 MCP 服务
- 03学习 Streamable HTTP 下有状态与无状态模式的区别
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
无服务器 MCP 服务示例

此仓库包含一系列 MCP 服务示例实现。
| 目录 | 运行时 | IaC | 描述 |
|---|---|---|---|
| strands-agent-on-lambda | Python(Agent) Node.js(MCP) | Terraform、CDK | 使用 Strands Agents SDK 实现的 AI Agent 示例,并连接到运行在 AWS Lambda 上的 MCP 服务;包含与 Cognito 的集成,用于用户身份验证 |
| strands-agent-on-lambda-python | Python | SAM | 使用 Strands Agents SDK 实现的 AI Agent 示例,运行在 AWS Lambda 上 |
| stateless-mcp-on-lambda-nodejs | Node.js | Terraform | 在 AWS Lambda 和 Amazon API Gateway 上原生运行的远程无状态 MCP 服务示例 |
| stateless-mcp-on-lambda-python | Python | SAM | 在 AWS Lambda 和 Amazon API Gateway 上原生运行的远程无状态 MCP 服务示例 |
| stateless-mcp-on-ecs-nodejs | Node.js | Terraform | 在 Amazon ECS 上原生运行,并使用 Application Load Balancer 的远程无状态 MCP 服务示例 |
| stateful-mcp-on-ecs-nodejs | Node.js | Terraform | 在 Amazon ECS 上原生运行,并使用 Application Load Balancer 的远程有状态 MCP 服务示例 |
| stateful-mcp-on-ecs-python | Python | SAM | 在 Amazon ECS 上原生运行,并使用 Application Load Balancer 的远程有状态 MCP 服务示例 |
| lambda-ops-mcp-server | Node.js | Terraform | 一个本地 MCP 服务的概念验证演示,可用于发现并升级运行时已弃用的函数 |
有状态与无状态 MCP 服务
使用 Streamable HTTP Transport 与 MCP 服务/客户端交互时,了解有状态和无状态 MCP 服务实现之间的差异及其权衡非常重要。每种模式都会影响可扩展性、连接处理和会话管理。
关键方面
Streamable HTTP Transport 规范说明了两项重要能力。首先,客户端可以发起一个长期运行的 HTTP GET 请求,建立持久的 SSE(服务器发送事件)连接,使服务即使在客户端尚未发送 POST 请求时也能推送数据。其次,如果连接中断,客户端应能通过另一个 GET 请求重新连接并恢复通信。这两项功能都意味着服务必须能够维护持久的会话上下文并支持长期连接。点击此处了解有关 Streamable HTTP Transport 会话管理的更多信息。
有状态模型的挑战
在有状态的 MCP 服务中,这意味着要在内存中维护会话状态,并随着时间推移保持 SSE 连接。可是,截至 2025 年 5 月上旬,没有任何官方 MCP SDK 支持外部会话持久化(例如存储在 Redis 或 DynamoDB 中)。这一限制使有状态服务难以进行水平扩展。例如,客户端可能与某个服务实例建立会话,但如果后续请求被路由到另一个实例,会话上下文就会丢失,连接也会失败。
尽管如此,只要愿意在负载均衡器层配置会话亲和性(也称为粘性会话),仍然可以扩展有状态的 MCP 服务。例如,基于 Cookie 的粘性会话可以确保客户端在整个会话期间都被路由到同一个服务实例。不过,TypeScript MCP Client SDK 目前依赖 fetch API,而该 API 本身不支持 Cookie。要绕过这一限制,你需要手动处理 Cookie,如 stateful-mcp-on-ecs 示例所示。

无状态模式来帮忙
MCP 规范也允许使用无状态服务模式。在此模式下,服务不会在请求之间维护会话上下文,也不要求客户端恢复已断开的连接。无状态模式支持无缝水平扩展,适用于弹性和负载分配至关重要的环境。本仓库中的 stateless-mcp-on-lambda、stateless-mcp-on-ecs 和 stateless-mcp-on-lambda-python 示例展示了这种模式。


有关进一步说明和部署步骤,请分别参阅各文件夹。
许可证
此库采用 MIT-0 License 许可。请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。