项目简介
本项目是一个基于 Model Context Protocol (MCP) 构建的后端服务器实现,旨在为LLM(大型语言模型)应用提供结构化的上下文信息和功能扩展能力。它使用 Vercel 作为部署平台,Redis 作为消息队列,实现了 MCP 协议的关键特性,例如工具注册和调用,并通过 Server-Sent Events (SSE) 与客户端进行实时通信。
主要功能点
- 资源 (Resources) 管理: 虽然代码中没有显式展示资源管理功能,但 MCP 服务器的架构设计允许未来轻松扩展资源管理能力。
- 工具 (Tools) 注册与执行: 允许开发者注册自定义工具,并通过 MCP 协议供 LLM 客户端调用,实现外部功能扩展。示例代码中已包含一个 "echo" 工具。
- Prompt 模板 (Prompts) 支持: 代码架构支持 Prompt 模板的定义和渲染,但具体实现需要根据实际应用场景进行扩展。
- 基于 Redis 的消息队列: 使用 Redis 作为消息队列,处理客户端请求和服务器响应,支持高并发和可扩展性。
- Server-Sent Events (SSE) 通信: 使用 SSE 协议与客户端建立持久连接,实现实时的双向通信,符合 MCP 协议对传输协议的要求。
- Vercel 部署: 针对 Vercel 平台优化部署流程,方便用户快速部署和使用 MCP 服务器。
安装步骤
- 安装 Node.js 和 pnpm: 确保你的开发环境已安装 Node.js (18+) 和 pnpm 包管理器。
- 安装依赖: 克隆仓库到本地后,在项目根目录下运行 'pnpm install' 安装项目依赖。
pnpm install - 配置环境变量: 复制 '.env.example' 文件并重命名为 '.env',根据你的 Redis 服务器配置修改 '.env' 文件中的环境变量。
cp .env.example .envREDIS_URL=redis://localhost:6379 # 你的 Redis 服务器连接 URL,例如本地 Redis 或云 Redis 服务 PORT=3000 # 服务器监听端口,默认为 3000 DEBUG=false # 调试模式开关 - 启动开发服务器: 运行 'pnpm dev' 命令启动本地开发服务器。
pnpm dev
服务器配置 (MCP 客户端)
MCP 客户端需要配置以下信息以连接到 My-MCP Server:
{ "serverName": "my-mcp-server", // MCP 服务器名称,可自定义 "command": "pnpm", // 启动服务器的命令,这里使用 pnpm "args": [ // 启动服务器命令的参数 "exec", // pnpm exec 命令,用于执行脚本 "ts-node", // 使用 ts-node 运行 TypeScript 代码 "api/index.ts" // 服务器入口文件路径 ], "transports": [ // 配置支持的传输协议 { "type": "sse", // 使用 Server-Sent Events 协议 "url": "http://localhost:3000/sse", // SSE 端点 URL,根据实际部署地址修改 "messageUrl": "http://localhost:3000/message?sessionId={sessionId}" // 消息端点 URL,sessionId 会在客户端连接时动态替换 } ] }
参数注释:
- 'serverName': MCP 服务器的名称,客户端用于标识连接的服务器。
- 'command': 启动 MCP 服务器的可执行命令,例如 'node'、'pnpm'、'python' 等。
- 'args': 传递给启动命令的参数列表,用于指定服务器的入口文件、运行模式等。
- 'transports': 配置客户端与服务器通信的传输协议,本项目实现了 SSE 传输。
- 'type': 传输协议类型,本项目为 'sse' (Server-Sent Events)。
- 'url': SSE 连接端点的 URL,客户端通过此 URL 建立 SSE 连接。
- 'messageUrl': 消息发送端点的 URL,客户端通过 POST 请求向此 URL 发送消息。'{sessionId}' 是占位符,客户端会在建立连接后将其替换为实际的会话 ID。
注意: 上述配置中的 'url' 和 'messageUrl' 假设服务器运行在本地 3000 端口。如果部署到 Vercel 或其他平台,请将 'localhost:3000' 替换为实际的服务器地址。
基本使用方法
- 启动 MCP 服务器: 按照安装步骤启动 My-MCP Server。
- 运行 MCP 客户端: 使用任何支持 MCP 协议的客户端,并按照 "服务器配置" 中的 JSON 配置连接到 My-MCP Server。
- 调用工具: 在 MCP 客户端中,可以使用注册的工具 (例如示例中的 "echo" 工具)。客户端发送符合 MCP 协议的 JSON-RPC 请求,服务器会处理请求并返回 JSON-RPC 响应。
- 添加新工具: 编辑 'api/server.ts' 文件,在 'initializeMcpApiHandler' 函数中,使用 'server.tool()' 方法注册新的工具,并定义工具的参数和执行逻辑。
// api/server.ts (示例 - 添加一个新的工具) import { z } from "zod"; import { initializeMcpApiHandler } from "../lib/mcp-api-handler"; const handler = initializeMcpApiHandler( (server) => { // ... 现有的 echo 工具 ... server.tool("greet", { name: z.string() }, async ({ name }) => ({ // 注册名为 "greet" 的新工具 content: [{ type: "text", text: 'Hello, ${name}!' }], // 工具执行逻辑:返回包含问候语的文本内容 })); }, { capabilities: { tools: { echo: { description: "Echo a message", }, greet: { // 声明新工具的 capabilities description: "Say hello to someone", }, }, }, } ); export default handler;
修改 'api/server.ts' 后,需要重启服务器才能使新的工具生效。
信息
分类
AI与计算