使用说明
项目简介
本项目是一个基于 AWS Lambda 函数构建的 MCP (Model Context Protocol) 服务器示例,它使用 Streamable HTTP API 提供实时的、流式的响应。该示例旨在展示如何在 serverless 环境下实现 MCP 服务器,并提供了工具注册和调用的基本功能。它使用了 'mcp-streamablehttp' 传输协议,并通过 AWS SAM 进行部署。
请注意: 该示例使用了 Model Context Protocol TypeScript 库的未发布版本,可能存在兼容性问题。同时,由于实现方式较为特殊(访问私有属性等),可能并非在所有情况下都如预期工作,仅作为概念验证。
主要功能点
- MCP 协议支持: 实现了 MCP 协议的核心服务器功能,可以处理 MCP 客户端的请求。
- 工具调用: 支持注册和调用工具,示例中提供了 'echo' (回显消息) 和 'add' (加法计算) 两个工具。
- Streamable HTTP: 使用 Streamable HTTP 传输协议,支持实时响应流。
- Server-Sent Events (SSE): 支持通过 GET 请求建立 SSE 流,用于实时数据推送。
- 无状态服务器: Lambda 函数的特性使得服务器实例是无状态的,每次请求都会创建新的实例。
- AWS Lambda 部署: 通过 AWS SAM 部署到 AWS Lambda,实现 serverless 架构。
安装步骤
- 安装 prerequisite: 确保已安装 AWS CLI, SAM CLI, Node.js 22.x, 和 Docker。
- 克隆仓库: 使用以下命令克隆仓库(需要 '--recursive' 标志以包含子模块):
git clone --recursive https://github.com/moritalous/mcp-streamablehttp-lambda-sample.git cd mcp-streamablehttp-lambda-sample - 安装依赖: 进入 'mcp-function' 目录并安装 npm 依赖,并执行 setup 脚本:
cd mcp-function npm install npm run setup cd .. - 构建应用: 使用 SAM CLI 构建 Lambda 函数的部署包:
sam build - 部署应用: 使用 SAM CLI 部署应用到 AWS。首次部署需要 guided 模式进行配置:
按照提示输入栈名称 (Stack Name)、AWS 区域 (AWS Region) 等信息。部署完成后,会输出 Lambda 函数的 URL (Function URL)。sam deploy --guided
MCP 客户端配置
MCP 客户端需要配置 MCP 服务器的地址才能连接。对于本示例,服务器地址即为部署后输出的 Lambda 函数 URL (Function URL)。
在客户端配置中,您需要设置服务器 URL 为该 Lambda 函数 URL。例如,在 'mcp-function/src/client.ts' 示例客户端中,通过环境变量 'MCP_SERVER_URL' 配置:
const serverUrl = process.env.MCP_SERVER_URL || 'http://localhost:3001/mcp';
您需要将 'MCP_SERVER_URL' 环境变量设置为您的 Lambda 函数 URL。
配置示例 (JSON 格式,仅供参考,MCP 客户端具体配置方式可能不同):
{ "serverName": "mcp-streamablehttp-lambda-server", "serverUrl": "https://<your-lambda-function-url>/mcp" // 替换为您的 Lambda 函数 URL }
注意: 实际 MCP 客户端可能不需要 JSON 格式配置,而是直接接受服务器 URL 字符串。请参考您使用的 MCP 客户端的具体文档进行配置。
基本使用方法
-
获取 Lambda 函数 URL: 部署成功后,从 SAM CLI 的输出中获取 Lambda 函数 URL。
-
配置客户端: 将 Lambda 函数 URL 设置为 MCP 客户端的服务器地址(例如,设置 'MCP_SERVER_URL' 环境变量)。
-
运行客户端: 进入 'mcp-function' 目录,运行示例客户端:
cd mcp-function MCP_SERVER_URL=https://<your-lambda-function-url>/mcp npm run dev:client将 '<your-lambda-function-url>' 替换为您的实际 Lambda 函数 URL。
客户端会连接到 Lambda 函数,并调用 'echo' 和 'add' 两个示例工具,输出结果。
清理资源
当不再需要该示例时,可以使用以下命令删除部署的 AWS 资源:
sam delete --stack-name <your-stack-name> # 将 <your-stack-name> 替换为您部署时设置的栈名称
信息
分类
AI与计算