FEATURED · 精选文章

Serverless Framework 如何在 AWS Lambda 上部署 MCP Server 并获取 Streamable HTTP 端点?

发布时间 / 2026/9/11 8:20:39
来源 / 创域科博编辑部
栏目 / 资讯中心
Serverless Framework 如何在 AWS Lambda 上部署 MCP Server 并获取 Streamable HTTP 端点? Serverless Framework 如何在 AWS Lambda 上部署 MCP Server 并获取 Streamable HTTP 端点【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless你有一个用 官方 MCP TypeScript SDK 编写的 Model Context ProtocolMCPServer希望把它跑在 AWS Lambda 上得到一个可直接被 Claude、IDE 助手等 AI 客户端调用的 Streamable HTTP 端点。Serverless Framework 的mcp配置块可以完成这件事你只需写一个标准 SDK 模块Framework 负责 HTTPS 路由、响应流式传输、授权接入、打包以及把 Lambda 流式运行时桥接到 SDK 的 web 标准fetch处理器。部署完成后每个 server 都会成为服务里的一个普通函数serverless logs -f name、serverless invoke -f name、版本和回滚都照常可用。本文的主路径来自 MCP Servers 指南从安装 SDK、写模块、声明配置到部署并验证端点。准备条件在开始之前确认以下前置条件均出自项目文档已安装 Node.js 运行时并通过 NPM 全局安装了 Serverless Framework见安装文档npm i serverless -g已配置可用的 AWS 凭证。文档推荐浏览器方式serverless login aws基于 AWS 控制台登录生成短期凭证或使用aws configure sso配置 SSO 后运行serverless login aws sso。MCP Server 模块要求Node.js 20 或更新版本这是 SDK 自身的下限且zod 需要 4.2 或更新在 zod 3 上tools/list会返回 input schema 为空的工具客户端能看到工具却无法填写参数。运行时的确定规则provider.runtime未设置或设为非 Node 运行时例如 Python 服务时server 运行在nodejs24.x设为 Node.js 20 的运行时则原样使用设为低于 20 的 Node 运行时会在校验阶段被MCP_UNSUPPORTED_NODE_RUNTIME拒绝。安装 SDK 并编写 Server 模块在一个新目录中初始化包并安装 MCP SDK 与 zodnpm init -y npm install modelcontextprotocol/server zod然后编写 server 模块。它就是一个普通 SDK server不需要任何 Lambda 概念或 Serverless Framework API默认导出createMcpHandler()的返回值——一个暴露 web 标准fetch方法的对象。其他导出形式会在冷启动时报错错误信息会点名server:属性// src/server.mjs import { createMcpHandler, McpServer } from modelcontextprotocol/server import { z } from zod export default createMcpHandler(() { const server new McpServer({ name: crm, version: 1.0.0 }) server.registerTool( lookupCustomer, { description: Look up a customer by email, inputSchema: z.object({ email: z.string() }), }, async ({ email }) ({ content: [{ type: text, text: Customer record for ${email} }], }), ) return server })注意打包约束Classic zip 模式下打包会移除devDependencies因此modelcontextprotocol/server和zod必须放在dependencies中否则运行时会出现ERR_MODULE_NOT_FOUNDFramework 发现该组合时会给出警告也可以设置package.excludeDevDependencies: false。在 serverless.yml 中声明 MCP Server在serverless.yml的mcp.servers下声明 server键是 server 名server是模块路径相对serverless.ymlservice: crm-tools frameworkVersion: 4 provider: name: aws region: us-east-1 mcp: servers: crm: server: src/server.mjs每个 server 可用的可选项完整说明见配置参考属性默认值说明timeout60秒1–900同时设置函数超时和流式集成超时两者不会漂移memorySize1024MB128–10240未设置时回退到provider.memorySizeenvironment{}函数环境变量支持 CloudFormation 内建函数authorizer—在 API Gateway 层做访问控制Lambda authorizer、Cognito 用户池或aws_iam被拒绝的请求不会调用 server 函数oauthDiscovery—发布 RFC 9728 OAuth 受保护资源发现文档仅声明不做强制校验state—为 elicitation 往返提供签名密钥true表示由 stack 自动创建服务级的provider.architecture、provider.vpc、provider.layers同样适用于这些 server权限通过provider.iam调整。本版本不支持按 server 单独配置 URL 路径、域名、CORS、vpc、layers、role或provisionedConcurrency。部署服务在serverless.yml所在目录执行serverless deploy部署摘要会为每个 server 打印一行端点文档示例如下实际输出中的 API id 与区域以你的部署为准mcp: crm → https://abc123def.execute-api.us-east-1.amazonaws.com/dev/crm/mcp这个端点就是 Streamable HTTP 端点所有 MCP server 都挂在/name/mcp路径下即使服务里只有一个 server 也是如此将来新增第二个 server 时 URL 不会变动并且它们与你的http函数共享同一个AWS::ApiGateway::RestApi、同一个 stage 和同一个自定义域名。路由编译为单个ANY方法非 POST 动词由 SDK 按规范返回错误体。验证端点两条文档给出的验证路径1. 事后查询端点。serverless info会打印与部署摘要相同的端点行这是日后查找 URL 的方式serverless info2. 用 Streamable HTTP 客户端实际调用。任何 Streamable HTTP MCP 客户端都可以。文档以 MCP Inspector 的 CLI 模式为例配置文件选择 server并通过protocolEra显式选择当前协议修订版Inspector 默认是旧修订版// mcp.json { mcpServers: { crm: { type: streamable-http, url: https://abc123def.execute-api.us-east-1.amazonaws.com/dev/crm/mcp, protocolEra: modern } } }npx modelcontextprotocol/inspector --cli \ --config mcp.json --server crm --method tools/list其中url需要替换为你自己部署摘要中打印的端点。不加--cli运行时 Inspector 会打开浏览器 UI同样的协议版本选择对应连接设置里的Protocol Era选项。tools/list能正确返回你在模块中注册的工具如lookupCustomer即说明端点工作正常。日志和直接调用也走普通函数的方式serverless logs -f crm查看该 server 自己的 CloudWatch 日志serverless invoke -f crm直接触达函数。端点 URL 的三种形态端点形态由域名配置决定自定义域名来自provider.domain本版本没有按 server 配置的domain键因为域名属于共享 API 而不是某个 server配置URL默认端点https://api-id.execute-api.region.amazonaws.com/stage/name/mcp设置provider.domain: mcp.example.comhttps://mcp.example.com/name/mcp该域名上带basePath: v1映射https://mcp.example.com/v1/name/mcp两个与 URL 相关的校验约束值得注意server 名用作函数键、Lambda 名后缀service-stage-name和 URL 路径段字符集为^[a-zA-Z0-9-_]$well-known是保留名若你的http事件在 MCP 路由的同一 API Gateway 资源上声明了同路径的具体方法会因分流 JSON-RPC 流量风险被API_GATEWAY_EXTERNAL_EVENT_ROUTE_COLLISION拒绝子路径如/crm/mcp/extra不受影响。这些配置错误运行时不支持、命名冲突等在配置解析阶段就会抛出因此serverless print和serverless package也能提前发现而不只是deploy。限制与注意事项以下边界来自Limitations in this release 章节直接决定部署方式的选择Dev Mode 不服务 MCP server。在serverless dev下打包集成会退出并给出警告必须用serverless deploy部署后测试。静默的长工具需要 regional 端点。provider.endpointType默认EDGEEdge 优化端点会在响应流静默约 30 秒后结束计算的是两次写入之间的间隔而非总时长客户端会看到504设置provider.endpointType: REGIONAL可把该界限提高到约 5 分钟。任何运行超过约 300 秒的工具都必须通过 SDK 的 progress 通知持续写流来重置静默计时timeout不会改变这个界限。package.artifact预构建产物不被支持会报MCP_PREBUILT_ARTIFACT_UNSUPPORTED因为该产物会按原样上传Framework 的入口文件永远无法进入。serverless-mcp/目录被保留。打包阶段会把预构建入口暂存到服务目录下的serverless-mcp/运行结束时再删除你自己的服务如果已有该路径会报MCP_ENTRY_STAGING_PATH_TAKEN而不是被覆盖删除。deploy function的限制它可以更新 server 代码但如果 server 的environment中包含 CloudFormation 引用state传密钥的方式以及你自己的!Ref/!GetAtt值环境变量的更新会整体被跳过需要完整serverless deploy。授权由你负责。Framework 从不校验 token不设authorizer的端点就是公开的和没有 authorizer 的http事件一样文档建议只让匿名调用者能安全使用的工具保持这种状态。remove会删除一切包括自动创建的 state secret之后重新部署是安全的rollback正常回滚所有 MCP 资源都在 stack 内。继续深入授权与 OAuth 发现的完整做法Lambda authorizer、Cognito 用户池、aws_iam、模块内requireBearerAuth校验见 Authentication 与 OAuth discovery 章节。需要 elicitation工具中途向调用方要输入时设置state: true由 stack 自动创建签名密钥或指向你自己的 SSM/Secrets Manager ARN详见 Elicitation state 章节。打包策略Classic zip 与build.esbuild单文件 bundle 的取舍见 Packaging 章节。【免费下载链接】serverless⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.项目地址: https://gitcode.com/GitHub_Trending/se/serverless创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻