无服务器MCP服务器示例

提供基于AWS Lambda和ECS的无服务器MCP服务器示例实现,支持有状态和无状态模式,适用于AI代理和远程服务器场景。

  • by aws-samples
  • Python
  • 本地部署
  • 245 星标
  • 更新于
在 GitHub 查看 aws-samples/sample-serverless-mcp-servers

使用说明

无服务器MCP服务器示例

此仓库包含MCP服务器示例实现的集合。

目录 运行时 IaC 描述
lambda上的链代理 Python(代理)
Node.js(MCP)
Terraform,CDK 使用Strands Agents SDK和在AWS Lambda上运行的连接MCP服务器的AI Agent示例实现,包括与Cognito集成以进行用户身份验证
lambda python上的链代理 Python SAM 使用运行在AWS Lambda上的Strands代理SDK的AI代理示例实现
lambda nodejs上的无状态mcp Node.js Terraform 本地运行在AWS Lambda和Amazon API网关上的远程无状态MCP服务器的示例实现
lambda python上的无状态mcp Python SAM 本地运行在AWS Lambda和Amazon API网关上的远程无状态MCP服务器的示例实现
ecs-nodejs上的无状态mcp Node.js Terraform 使用应用程序负载均衡器在Amazon ECS上本地运行的远程无状态MCP服务器的示例实现
ecs-nodejs上的有状态mcp Node.js Terraform 使用应用程序负载均衡器在Amazon ECS上本地运行的远程有状态MCP服务器的示例实现
ecs-python上的有状态mcp Python SAM 在Amazon ECS上本地运行的远程有状态MCP服务器的示例实现,带有应用程序负载均衡器
lambda ops-mcp服务器 Node.js Terraform 本地MCP服务器的演示PoC,可用于发现和升级弃用运行时上的功能

有状态与无状态MCP服务器

使用时 可流式HTTP传输 对于MCP服务器/客户端,了解有状态和无状态MCP服务器实现之间的区别和权衡非常重要。每种模型都对可扩展性、连接处理和会话管理有影响。

关键方面

这 可流式HTTP传输 规范概述了两个重要功能。首先,客户可以 发起长期HTTP GET请求 建立持久的SSE(服务器发送事件)连接,即使客户端没有发送POST请求,服务器也可以推送数据。其次,如果连接中断,客户端应该能够 通过另一个GET请求重新连接来恢复通信这两个特征都意味着服务器必须能够维护持久的会话上下文并支持长期连接。阅读更多关于Streamable HTTP传输会话管理的信息 这里.

状态模型挑战

在有状态的MCP服务器中,这意味着在内存中维护会话状态,并随着时间的推移保持SSE连接的活动状态。然而,截至2025年5月初,没有一个官方的MCP SDK支持外部会话持久性(例如在Redis或DynamoDB中)。这种限制使得水平扩展有状态服务器变得困难。例如,客户端可能会与一个服务器实例建立会话,但如果后续请求被路由到另一个实例,会话上下文将丢失,连接将失败。

也就是说,如果您愿意在负载均衡器级别配置会话亲和性(也称为粘性会话),仍然可以扩展有状态的MCP服务器。例如,基于cookie的粘性会话可以确保客户端在会话期间被路由到同一服务器实例。然而,TypeScript MCP客户端SDK目前依赖于 fetch API,本机不支持cookie。为了克服这一限制,您需要实现手动cookie处理,如 stateful-mcp-on-ecs 例子。

无国籍救援

MCP规范还允许无状态服务器模式。在这种模式下,服务器不会维护请求之间的会话上下文,客户端也不会恢复断开的连接。无状态模式实现了无缝的水平扩展,在弹性和负载分布至关重要的环境中工作良好。该模型在 stateless-mcp-on-lambda, stateless-mcp-on-ecs,以及 stateless-mcp-on-lambda-python 此存储库中包含的示例。

有关进一步的说明和部署步骤,请分别参阅每个文件夹。

许可证

此库根据MIT-0许可证获得许可。请参阅LICENSE文件。