项目简介
'mcp-handler' 是一个功能强大的库,旨在帮助开发者在 Vercel 平台上,特别是针对 Next.js 和 Nuxt 等流行的 Web 框架,轻松构建和部署 Model Context Protocol (MCP) 服务器。它将您的应用程序转变为一个能够向大型语言模型 (LLM) 提供标准化上下文信息和功能的服务后端,实现 AI 模型与应用程序之间的高效实时通信。
主要功能点
- 工具注册与调用: 允许您在服务器端定义和注册各种工具(Functions),AI 模型可以通过这些工具调用外部功能,例如执行数据库查询、API 请求或任何自定义业务逻辑。
- 上下文提供: 以结构化和标准化的方式,向 LLM 客户端提供丰富的上下文信息,确保 AI 模型在交互中拥有准确和最新的数据。
- 多传输协议支持: 支持多种通信协议,包括基于 HTTP Stream 的传输和 Server-Sent Events (SSE),以适应不同的客户端和部署场景。
- 会话管理: 维护 AI 模型与您的服务器之间的会话状态,支持更长、更复杂的交互。
- 授权与安全: 提供符合 OAuth 2.0 规范的认证和权限管理机制,确保只有授权的客户端才能访问您的 MCP 服务和工具。
- 框架集成: 提供针对 Next.js (App Router) 和 Nuxt 的开箱即用适配器,未来计划支持更多 Web 框架。
安装步骤
在您的 Next.js 或 Nuxt 项目中,打开终端并运行以下命令,使用您偏好的包管理器安装 'mcp-handler' 及其必要的依赖:
npm install mcp-handler @modelcontextprotocol/sdk zod@^3 # 或 yarn add mcp-handler @modelcontextprotocol/sdk zod@^3 # 或 pnpm add mcp-handler @modelcontextprotocol/sdk zod@^3 # 或 bun add mcp-handler @modelcontextprotocol/sdk zod@^3
服务器配置(MCP客户端视角)
要让 MCP 客户端(例如 Claude Desktop、Cursor、Windsurf 等)连接到您的 'mcp-handler' 服务器,您需要向客户端提供连接信息。以下是一个配置示例的说明,它指导客户端如何通过 'mcp-remote' 代理工具连接到您的 MCP 服务器。
请将 'http://localhost:3000/api/mcp' 替换为您的实际服务器部署地址和 MCP 接口路径。
MCP 客户端配置说明:
- 服务器名称 (e.g., "remote-example"): 您为这个 MCP 服务器实例定义的易于识别的名称,客户端会使用此名称来显示和管理您的服务器。
- 命令 (command): 客户端用于启动 MCP 服务器(或其代理)的执行命令。通常推荐使用 'npx',因为它能够执行未全局安装的 Node.js 包。
- 参数 (args): 传递给 'command' 的参数列表。
- '-y':这是一个 'npx' 参数,表示在执行时自动确认,避免命令行提示。
- 'mcp-remote':这是一个由 MCP 官方提供的代理工具,它的作用是将基于 Streamable HTTP 的 MCP 服务器通信转换为 MCP 客户端通常所需的标准输入/输出 (stdio) 方式。
- 'http://localhost:3000/api/mcp':这是您的 'mcp-handler' 服务器的实际网络地址,客户端的 'mcp-remote' 代理将连接到这个地址。您需要将 'localhost:3000' 替换为您应用部署后的实际域名或 IP 地址,并确保 '/api/mcp' 与您在 Next.js 或 Nuxt 中配置的路由路径相匹配。
请注意: 某些最新版本的 MCP 客户端可能已直接支持连接到 HTTP Streamable 或 SSE 端点,不再强制需要 'mcp-remote' 代理。在这种情况下,客户端配置中可能只需直接提供服务器的 URL 即可。
基本使用方法
以下是在 Next.js (App Router) 项目中创建一个 MCP 服务器路由的示例。您可以在 'app/api/[transport]/route.ts' 文件中实现它:
// app/api/[transport]/route.ts import { createMcpHandler } from "mcp-handler"; import { z } from "zod"; // Zod 用于定义和验证工具参数 const handler = createMcpHandler( (server) => { // 在这里,您可以注册 MCP 服务器的各种功能,例如工具、资源、Prompt模板。 // 以下是一个注册“掷骰子”工具的示例: server.tool( "roll_dice", // 工具的唯一名称 "Rolls an N-sided die", // 工具的简要描述,供 AI 模型理解其功能 { sides: z.number().int().min(2), // 定义工具接受的参数及其数据类型和验证规则 }, async ({ sides }) => { // 这是工具被调用时执行的异步函数 const value = 1 + Math.floor(Math.random() * sides); return { content: [{ type: "text", text: '🎲 您掷出了 ${value} 点!' }], // 工具返回的结果 }; } ); // 您可以在此处继续注册更多的工具、资源和Prompt。 }, { // 可选的 MCP 服务器配置选项,例如声明服务器的能力。 // capabilities: { /* ... */ }, }, { // 可选的 mcp-handler 特定配置,例如 Redis 连接、日志设置和路由基础路径。 redisUrl: process.env.REDIS_URL, // 用于 SSE 传输的 Redis 连接 URL basePath: "/api", // 您的 MCP 路由的基础路径,需要与文件结构保持一致 maxDuration: 60, // MCP 请求的最大持续时间(秒) verboseLogs: true, // 启用详细的调试日志输出 } ); // 导出处理程序以响应客户端的 GET 和 POST 请求 export { handler as GET, handler as POST };
完成上述设置后,您的 MCP 客户端就可以通过配置中提供的 URL 连接到此服务器,并调用您定义的 'roll_dice' 等工具。
信息
分类
AI与计算