项目简介

MCP Lambda Server Layer 是一个Node.js包,旨在帮助开发者在AWS Lambda环境中快速搭建基于Model Context Protocol (MCP) 的服务器。它基于MCP TypeScript SDK,并针对AWS Lambda的特性进行了适配,特别支持通过Server-Sent Events (SSE) 实现响应流式传输,这对于构建实时性要求高的LLM应用至关重要。该项目简化了在无服务器环境中部署MCP服务器的复杂性,让开发者可以更专注于工具、Prompt和资源的实现。

主要功能点

  • MCP协议兼容性: 完整实现了MCP服务器的核心功能,包括资源管理、工具注册与执行、Prompt模板定义与渲染,确保与MCP客户端的无缝对接。
  • AWS Lambda 优化: 专为AWS Lambda环境设计,充分利用Lambda的无服务器特性,提供弹性伸缩和按需付费的优势。
  • SSE流式传输: 支持Server-Sent Events协议,通过Lambda响应流式传输能力,实现与客户端的实时双向通信,特别适合需要长时间运行或实时反馈的LLM应用场景。
  • 工具和Prompt自定义: 允许开发者自定义工具 (Tools) 和 Prompt模板 (Prompts),灵活扩展服务器功能,满足不同LLM应用的需求。
  • 类型安全: 使用TypeScript开发,提供完善的类型定义,提高代码质量和开发效率。
  • 易于集成: 作为一个npm包发布,安装简单,通过简单的配置即可集成到现有的Lambda函数中。

安装步骤

  1. 安装 npm 包: 在您的Lambda函数项目目录下,使用 npm 安装 '@markvp/mcp-lambda-layer' 包:

    npm install @markvp/mcp-lambda-layer
  2. 创建 Lambda 函数处理程序: 在您的 Lambda 函数代码 (例如 'index.ts') 中,导入 'MCPHandlerFactory' 并进行配置,如下所示:

    import { MCPHandlerFactory } from '@markvp/mcp-lambda-layer';
    import { z } from 'zod';
    
    // 创建 MCP Handler 工厂,配置工具和Prompt
    const factory = new MCPHandlerFactory({
      tools: {
        summarize: {
          params: {
            text: z.string(),
          },
          handler: async ({ text }) => {
            // 在此处实现您的总结工具逻辑
            const summary = await yourSummarizeImplementation(text);
            return {
              content: [{ type: 'text', text: summary }],
            };
          },
        },
      },
      prompts: {
        generate: {
          description: '根据Prompt生成内容',
          handler: async (extra) => {
            // 在此处实现您的内容生成逻辑
            const result = await yourGenerateImplementation(extra.prompt);
            return {
              content: [{ type: 'text', text: result }],
            };
          },
        },
      },
    });
    
    // 导出 Lambda 函数处理程序
    export const handler = factory.getHandler();
  3. 配置 Lambda 函数:

    • 运行时: Node.js 18.x 或更高版本
    • 处理程序: 'index.handler' (假设您的入口文件是 'index.ts')
    • 内存: 至少 128 MB (根据实际需求调整)
    • 超时: 建议 120 秒
    • 函数 URL: 必须启用,并且需要启用响应流式传输 (Response streaming)。
    • API Gateway/ALB: 不支持与流式传输一起使用。

服务器配置

MCP客户端需要配置以下服务器信息才能连接到此MCP服务器。请注意,这里的配置是JSON格式,用于MCP客户端,无需用户理解代码。

{
  "serverName": "MCP Lambda Server",
  "command": "aws",
  "args": [
    "lambda",
    "invoke",
    "--function-name",
    "<YourFunctionName>",  //  请替换为您的Lambda函数名称
    "--invocation-type",
    "RequestResponse",
    "--payload",
    "'{ \"body\": <request_body_json> }'", //  请求体占位符,客户端会自动填充 MCP JSON-RPC 请求
    "--streaming-response-event-handler",
    "output.json" //  输出文件,实际使用中流式响应会被客户端直接处理,无需文件
  ]
}

配置参数说明:

  • 'serverName': 服务器名称,可以自定义,用于在客户端标识服务器。
  • 'command': 执行命令,这里使用 'aws lambda invoke' 命令来调用 AWS Lambda 函数。
  • 'args': 命令参数,包含:
    • '"lambda invoke"': 指定使用 Lambda invoke 命令。
    • '"--function-name", "<YourFunctionName>"': 请务必替换 '<YourFunctionName>' 为您实际部署的 Lambda 函数的名称。
    • '"--invocation-type", "RequestResponse"': 指定调用类型为请求-响应模式,虽然实际是SSE流式传输,但Lambda函数URL的流式响应仍然基于RequestResponse上下文。
    • '"--payload", "'{ "body": <request_body_json> }'"': 指定请求负载,'"<request_body_json>"' 是一个占位符,MCP客户端在发送请求时会自动将 MCP JSON-RPC 请求序列化为 JSON 字符串并替换此占位符。
    • '"--streaming-response-event-handler", "output.json"': 用于处理流式响应的事件处理器,'output.json' 在实际使用中并不重要,因为客户端通常直接处理流式数据,而不是写入文件。

注意: 上述配置中的 '<YourFunctionName>' 必须替换为您在AWS上创建的Lambda函数的实际名称。 客户端会使用此配置信息来调用您的 Lambda 函数,并将 MCP 请求作为 payload 发送,接收 SSE 流式响应。

基本使用方法

  1. 部署 Lambda 函数: 将配置好的 Lambda 函数代码部署到 AWS Lambda。确保配置了函数 URL 并启用了响应流式传输。
  2. 配置 MCP 客户端: 在您的 MCP 客户端应用中,配置上述提供的服务器配置信息。
  3. 连接和交互: 启动 MCP 客户端,客户端将根据配置连接到您的 Lambda 函数,并通过 MCP 协议进行通信,您可以利用客户端提供的界面或API来调用您在 Lambda 函数中定义的工具和Prompt,并实时接收服务器的响应。

信息

分类

AI与计算