ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

使用 Serverless Framework 将 JavaScript MCP Server 部署到 AWS Bedrock AgentCore Runtime

使用 Serverless Framework 将 JavaScript MCP Server 部署到 AWS Bedrock AgentCore Runtime 使用 Serverless Framework 将 JavaScript MCP Server 部署到 AWS Bedrock AgentCore Runtime【免费下载链接】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-server 示例 为核心完整讲解如何用一个最小可运行的 JavaScript 服务实现 Model Context ProtocolMCP并通过 Serverless Framework 的ai配置将其实例化为 AgentCore Runtime 智能体供 Cursor、Claude Desktop、Amazon Q CLI 等任意 MCP 客户端以 Streamable HTTP 远程消费。读完本文你将掌握无状态 MCP Server 的服务端写法、serverless.yml中protocol: MCP的声明方式以及用 AgentCore Runtime SDK 做端到端验证的完整闭环。示例概览一个可部署到 AgentCore Runtime 的 MCP Server示例位于 packages/serverless/lib/plugins/aws/bedrock-agentcore/examples/javascript/mcp-server是一个部署在 AWS Bedrock AgentCore Runtime 上的 JavaScript MCP Server。它通过 Model Context Protocol 暴露简单工具任何实现了 MCP 客户端协议的生态Cursor、Claude Desktop、Amazon Q CLI 等都可以消费这些工具。示例由 6 个文件构成除 README 外核心文件与职责如下文件作用index.jsMCP Server 实现Express modelcontextprotocol/sdkStreamable HTTP 传输package.json依赖声明与start启动脚本serverless.ymlServerless Framework 配置声明 AgentCore Runtimetest-invoke.js基于 AWS SDK 的端到端调用验证脚本package-lock.json依赖锁文件从仓库目录结构看examples 下还提供了 LangGraph、Strands 等其他 JavaScript/Python 智能体示例而本示例的定位最纯粹只做 MCP 协议端点不做业务 Agent 编排适合作为接入 AgentCore MCP 协议的第一个落地实验。示例暴露的三个工具MCP Server 通过tools/list向客户端声明可用工具。本示例注册了三个工具工具描述add将两个数字相加multiply将两个数字相乘get_current_time获取当前日期与时间支持可选时区在 index.js 中工具借助modelcontextprotocol/sdk的server.registerTool注册并用zod描述输入参数从而自动生成符合 MCP 规范的inputSchemaadd与multiply入参a、b均为z.number()执行结果通过content: [{ type: text, text: ... }]返回get_current_time入参timezone为可选的z.string()代码注释中给出了America/New_York、Europe/London、UTC等典型取值未传时默认UTC最终调用Date.prototype.toLocaleString格式化输出。这正好体现了 MCP 工具声明的核心范式参数 Schema 工具名 工具描述 异步执行函数SDK 负责把这三者编译成标准 JSON-RPC 的tools/call处理流程。前置条件运行与部署本示例需要满足Node.js 24.xpackage.json 中engines.node显式声明为24.x已配置凭证的 AWS 账号示例使用provider: aws需要具备创建 Bedrock AgentCore 资源的权限已全局安装 Serverless Frameworknpm i -g serverless。需要留意的是AWS Bedrock AgentCore 只在部分区域开放部署前应确认目标区域可用详见 插件 README 的 Supported AWS Regions 说明。服务端实现无状态的 Streamable HTTP MCP 端点index.js 的核心设计思想是无状态statelessServer 通过 Express 在8000端口暴露POST /mcp端点该端点即 AgentCore Runtime 对 MCP 协议 runtime 的预期入口。具体实现分三层1. MCP Server 工厂createMcpServer()每次被调用都会创建一个全新实例const server new McpServer({ name: mcp-server, version: 1.0.0, })工具注册、Schema 校验都在这个工厂函数内完成因此每个 HTTP 请求拿到的是彼此隔离、互不共享状态的 server 实例——这正是云上无状态容器所期望的行为。2. Streamable HTTP 传输接入app.post(/mcp, async (req, res) { const server createMcpServer() const transport new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, // 无状态——不维护持久会话 enableJsonResponse: true, }) await server.connect(transport) res.on(close, () { transport.close() server.close() }) await transport.handleRequest(req, res, req.body) })关键点sessionIdGenerator: undefined显式关闭会话复用确保每个请求独立处理 JSON-RPC 消息并在响应关闭close时清理 transport 与 server 资源。这也是与 MCP 官方StreamableHTTPServerTransport面向每请求一实例部署模型的典型配合方式。3. 协议边界处理与错误兜底GET /mcp按 MCP 规范返回405 Method Not Allowed错误体为标准 JSON-RPC 格式code-32000请求处理抛出异常时若响应头尚未发出则以 JSON-RPC 错误码-32603Internal server error返回500保证协议格式始终自洽服务监听0.0.0.0:8000容器内打印MCP server running on http://0.0.0.0:8000/mcp便于排查。从 runtime.js 编译器 的注释可印证AgentCore Runtime 的ProtocolConfiguration只是字符串枚举HTTP、MCP、A2A运行时内部按协议类型路由流量因此 HTTP 层 JSON-RPC 的 MCP 载荷结构是接通 AgentCore 的关键前提。配置解析serverless.yml 如何声明一个 MCP 协议 Agent示例的 serverless.yml 极其精简service: mcp-server provider: name: aws ai: agents: assistant: protocol: MCP它依赖的是 Bedrock AgentCore 插件暴露的顶层ai属性插件文档见 bedrock-agentcore/README.md。ai.agents用于定义 Runtime Agent示例在此设置了关键项service: mcp-server服务名作为资源命名的组成部分provider.name: awsAWS 提供商ai.agents.assistant.protocol: MCP告诉 AgentCore 把发往该 Runtime 的流量按 MCP 协议路由。在插件 README 的 Runtime Agent 属性表中protocol的合法取值为http、mcp或a2a。查看 compilers/runtime.js 的buildProtocolConfiguration实现可以看到无论是字符串简写protocol: MCP还是对象形式protocol: { type: MCP }编译器最终都会将其规范化为大写枚举并写入生成的AWS::BedrockAgentCore::Runtime资源的ProtocolConfiguration属性。此外示例没有提供 Dockerfile、也没有声明handler/runtime说明本示例采用code deployment路径编译器会根据是否存在entryPoint判定是否走代码打包上传runtime.js 第 255-270 行配合插件在部署时自动构建容器并注入环境。若你对更复杂的 Agent 声明内存、网关、工具、鉴权、VPC 网络等感兴趣可继续阅读 插件 README。部署与本地开发部署到 AWS在mcp-server目录执行npm install sls deploynpm install安装express、modelcontextprotocol/sdk、zod等依赖详见 package.jsonsls deploy生成 CloudFormation 模板并创建 AgentCore Runtime 资源。按插件 README 说明部署后插件会自动创建形如{Name}RuntimeArn、{Name}RuntimeId的 CloudFormation 输出。可用sls info查询已部署资源的 Runtime ARN——这也是下文验证脚本所需的输入。本地开发npm install sls devsls dev提供带热重载hot reload的本地开发体验详见 插件 README 的命令列表便于在推送云端前快速迭代工具逻辑。日常运维可配合sls logs --agent assistant拉取 Agent 日志、sls remove清理资源。将 MCP 客户端接入已部署的 Runtime部署完成后该 Runtime 可被任何支持通过 Streamable HTTP 接入远程 MCP Server的客户端消费。连接方式与鉴权配置属于 AgentCore 的调用侧细节示例 README 明确指出调用细节与认证设置请参考 AgentCore 官方 MCP 运行时文档仓库内该 README 首尾均有对应外链指引。实操上的参考路径是先用下文的管理端 SDK 完成initialize等握手验证确认端点与鉴权就绪后再把 Runtime URL 配置到 Cursor、Claude Desktop 或 Amazon Q CLI 的 MCP Server 配置中。端到端验证用 AgentCore Runtime SDK 调用 MCP 工具示例自带的 test-invoke.js 是一个不依赖第三方 MCP 客户端的验证脚本它直接用 AWS SDK 的BedrockAgentCoreClient向已部署 Runtime 发送 JSON-RPC 消息非常适合在连接 GUI 客户端之前确认服务端一切正常。使用方式npm install aws-sdk/client-bedrock-agentcore RUNTIME_ARNarn:aws:bedrock-agentcore:... node test-invoke.jsRUNTIME_ARN必填可用sls info获取缺失时脚本会打印用法并退出AWS_REGION可选默认us-east-1每次InvokeAgentRuntimeCommand请求都会携带qualifier: DEFAULT首响应返回的runtimeSessionId会被缓存并用于后续消息test-invoke.js 第 36-50 行。脚本执行的完整 MCP 会话脚本按 MCP 标准握手顺序逐步验证每一步都打印对应结果initializeJSON-RPC id1声明protocolVersion: 2025-11-25与客户端信息校验服务端返回的serverInfo与协议版本notifications/initialized携带已缓存的runtimeSessionId发送初始化完成通知tools/listid2枚举服务端工具列表输出add、multiply、get_current_time及其描述tools/call依次真实调用四个用例——add(5, 3)、multiply(7, 6)、get_current_time(UTC)、get_current_time(America/New_York)并打印每个调用的文本结果test-invoke.js 第 106-114 行。此外脚本还处理了响应可能是字符串、字节流或 ReadableStream 的多种形态streamToString辅助函数保证在accept: application/json, text/event-stream的流式返回下也能正确解析。该脚本与 index.js 一起构成服务端实现 协议级验证的完整闭环前者证明 HTTP 端点与工具注册逻辑正确后者证明 Runtime 的路由、会话与 JSON-RPC 转发在 AWS 侧链路畅通。小结从示例到自有 MCP Server这个最小示例演示了把 MCP 工具送上云的一条极简路径在 Express 里用modelcontextprotocol/sdk实现无状态POST /mcp端点再通过 Serverless Framework 的ai.agents.name.protocol: MCP把它注册为 AgentCore Runtime。接下来扩展自己的服务时只需在createMcpServer中继续调用registerTool添加业务工具并把 serverless.yml 补充上环境变量、网络模式或生命周期等配置参考 插件 README 的属性表即可让现有客户端立刻消费新能力。【免费下载链接】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),仅供参考
返回列表