使用说明
项目简介
Middy MCP 中间件是一个基于 Middy 框架的组件,旨在帮助开发者在 AWS Lambda 函数中快速搭建 Model Context Protocol (MCP) 服务器。它简化了 AWS Lambda 函数与 MCP 协议的集成过程,特别是与 AWS API Gateway 的配合使用,使得开发者能够以 Serverless 的方式部署 MCP 服务器。
主要功能点
- MCP 协议支持: 完整支持 MCP 协议,能够处理 MCP 客户端发送的 JSON-RPC 请求并返回符合 MCP 协议的响应。
- AWS Lambda 集成: 无缝集成 AWS Lambda 函数,利用 Lambda 的 Serverless 架构,实现弹性伸缩和按需付费的 MCP 服务。
- API Gateway 兼容: 兼容 AWS API Gateway (REST API 和 HTTP API) 以及 ALB (Application Load Balancer),方便通过 HTTP(S) 协议暴露 MCP 服务。
- Middy 中间件: 基于 Middy 框架构建,可以方便地与其他 Middy 中间件组合使用,例如错误处理、请求验证等。
- 灵活的工具和 Prompt 管理: 允许开发者在 Lambda 函数中定义和注册 MCP 工具和 Prompt 模板,扩展 LLM 应用的功能。
安装步骤
- 确保你的开发环境已安装 Node.js (>= 18.0.0) 和 npm 或 pnpm。
- 在你的 AWS Lambda 函数项目中,使用 npm 或 pnpm 安装 'middy-mcp' 中间件:
同时,你可能需要安装 '@middy/core' 和 '@middy/http-error-handler' 以获得更好的开发体验,特别是错误处理能力。pnpm install middy-mcp
你还需要安装 '@modelcontextprotocol/sdk' 作为 MCP 协议 SDK。pnpm install @middy/core @middy/http-error-handlerpnpm install @modelcontextprotocol/sdk
服务器配置
MCP 服务器是为 MCP 客户端提供服务的后端。对于使用 'middy-mcp' 构建的 MCP 服务器,客户端需要配置服务器的访问地址。由于此方案将 MCP 服务器部署为 AWS Lambda 函数并通过 API Gateway 暴露 HTTP 接口,因此 MCP 客户端需要配置 API Gateway 的终端节点 URL。
以下是一个 MCP 客户端配置示例 (JSON 格式),展示了如何配置连接到通过 'middy-mcp' 部署在 AWS Lambda 上的 MCP 服务器:
{ "serverName": "My Lambda MCP Server", "transport": { "type": "http", "endpoint": "https://<your-api-gateway-endpoint>.amazonaws.com" // 将 <your-api-gateway-endpoint>.amazonaws.com 替换为你的 API Gateway 终端节点 URL // 例如: "https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/ Prod" } }
配置说明:
- 'serverName': MCP 服务器的名称,可以自定义。
- 'transport.type': 传输协议类型,对于通过 API Gateway 访问的 Lambda MCP 服务器,应设置为 '"http"'。
- 'transport.endpoint': API Gateway 的终端节点 URL。这是 MCP 客户端连接到你的 Lambda MCP 服务器的关键地址。你需要在 AWS API Gateway 控制台中找到你部署的 API 的终端节点 URL,并替换 '<your-api-gateway-endpoint>.amazonaws.com'。
注意: 请确保你的 API Gateway 配置允许 'POST' 请求到 Lambda 函数,并且使用了 Proxy 集成,以便将请求完整地转发给 Lambda 函数处理。
基本使用方法
-
创建 MCP 服务器实例: 在你的 Lambda 函数代码中,首先需要创建 'McpServer' 实例,并注册你的工具 (Tools) 和 Prompt 模板 (Prompts)。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; const server = new McpServer({ name: "Lambda Hosted MCP Server", version: "1.0.0", }); server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }], })); -
使用 'mcpMiddleware': 将 'mcpMiddleware' 添加到你的 Middy 处理链中,并将 'McpServer' 实例传递给它。
import middy from "@middy/core"; import httpErrorHandler from "@middy/http-error-handler"; import mcpMiddleware from "middy-mcp"; import { handler as rawHandler } from './your-lambda-handler'; // 假设你的原始 Handler 代码在 your-lambda-handler.ts 中 export const handler = middy(rawHandler) // 如果你有原始的 handler 函数,使用 rawHandler 替换 .use(mcpMiddleware({ server })) .use(httpErrorHandler());如果你的 Lambda 函数是全新的,你可以直接在 handler 中使用 'mcpMiddleware':
import middy from "@middy/core"; import httpErrorHandler from "@middy/http-error-handler"; import mcpMiddleware from "middy-mcp"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; const server = new McpServer({ /* ... */ }); server.tool(/* ... */); const mcpHandler = async (event, context) => { // 你的 Lambda 函数逻辑 (如果需要在 MCP 处理前后执行其他操作) return {}; // MCP 中间件会处理响应,这里可以返回空对象 }; export const handler = middy(mcpHandler) .use(mcpMiddleware({ server })) .use(httpErrorHandler()); -
部署到 AWS Lambda: 将你的 Lambda 函数代码打包并部署到 AWS Lambda。
-
配置 API Gateway: 在 AWS API Gateway 中创建一个 API,并配置一个 'POST' 路由,使用 Proxy 集成将请求转发到你的 Lambda 函数。 确保 API Gateway 的终端节点 URL 与你在 MCP 客户端配置中填写的 'transport.endpoint' 一致。
完成以上步骤后,你的 MCP 服务器就成功部署在 AWS Lambda 上了。MCP 客户端可以通过配置的 API Gateway 终端节点 URL 连接到你的服务器并开始交互。
信息
分类
开发者工具