尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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),仅供参考
返回列表