返回市场
无服务器mcp服务器样本

无服务器mcp服务器样本

作者:aws-samples219 星标更新:2025-11-18

项目介绍

示例无服务器MCP服务器

此仓库包含一组MCP服务器的示例实现。

目录运行时基础设施即代码(IaC)描述
strands-agent-on-lambdaPython(代理) <br> Node.js(MCP)Terraform, CDK使用Strands Agents SDK实现的AI代理示例,并连接到运行在AWS Lambda上的MCP服务器,包括与Cognito集成进行用户认证
strands-agent-on-lambda-pythonPythonSAM使用Strands Agents SDK实现的AI代理示例,运行在AWS Lambda上
stateless-mcp-on-lambda-nodejsNode.jsTerraform在AWS Lambda和Amazon API Gateway上原生运行的远程无状态MCP服务器示例实现
stateless-mcp-on-lambda-pythonPythonSAM在AWS Lambda和Amazon API Gateway上原生运行的远程无状态MCP服务器示例实现
stateless-mcp-on-ecs-nodejsNode.jsTerraform在Amazon ECS上原生运行的远程无状态MCP服务器示例实现,使用应用负载均衡器
stateful-mcp-on-ecs-nodejsNode.jsTerraform在Amazon ECS上原生运行的远程有状态MCP服务器示例实现,使用应用负载均衡器
stateful-mcp-on-ecs-pythonPythonSAM在Amazon ECS上原生运行的远程有状态MCP服务器示例实现,使用应用负载均衡器
lambda-ops-mcp-serverNode.jsTerraform一个本地MCP服务器的演示PoC,可用于发现和升级已弃用运行时的功能

有状态 vs 无状态MCP服务器

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

关键方面

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

有状态模型挑战

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

尽管如此,如果你愿意在负载均衡器级别配置会话亲和性,也称为粘性会话,仍然可以扩展有状态MCP服务器。例如,基于cookie的粘性会话可以确保在整个会话期间将客户端路由到相同的服务器实例。然而,目前TypeScript MCP客户端SDK依赖于fetch API,它不原生支持cookies。为了绕过这个限制,你需要实现手动cookie处理,如stateful-mcp-on-ecs示例所示。

无状态模式解救

MCP规范还允许无状态服务器模式。在这种模式下,服务器不会在请求之间维护会话上下文,客户端也不期望恢复掉线的连接。无状态模式使无缝横向扩展成为可能,并且在需要弹性和负载分布的环境中表现良好。这种模型在本仓库中的stateless-mcp-on-lambdastateless-mcp-on-ecsstateless-mcp-on-lambda-python示例中得到了展示。

请分别查看每个文件夹以获取进一步的说明和部署步骤。

许可证

本库根据MIT-0许可证发布。请参阅LICENSE文件。 </中文翻译>