项目简介
MCP 服务打包器 ('mcp-bundler') 是一个库和命令行工具,旨在简化和标准化多个 MCP 服务(如提供特定工具或资源的 MCP 服务)的部署和组合。通过使用此打包器,开发者可以将分散的 MCP 服务整合成一个单一的、易于管理和共享的 MCP 接口,供 MCP 客户端(通常是大型语言模型应用)连接和使用。
主要功能点
- 整合多个 MCP 服务: 允许将通过不同方式(如命令行程序、SSE 服务器、内存中实例)运行的多个 MCP 服务定义和组合在一起。
- 统一接口: 将所有配置的子 MCP 服务的能力(例如工具列表和调用)聚合成一个统一的 MCP 接口对外暴露。
- 多种传输模式支持: 打包后的服务可以作为独立的命令行程序运行,支持 Stdio (标准输入/输出) 或 SSE (Server-Sent Events) 等传输协议,方便与 MCP 客户端建立连接。
- 环境变量管理: 提供机制将运行打包器时的环境变量映射并传递给其内部启动或连接的子 MCP 服务。
本质上,它扮演了一个 MCP 网关或聚合器的角色,对外表现为一个单一的 MCP 服务器。
安装步骤
'mcp-bundler' 主要作为 Node.js 库使用。你需要先安装 Node.js 和 npm/yarn/bun 包管理器。
- 创建一个新的 Node.js 项目 (如果还没有的话):
mkdir my-mcp-app cd my-mcp-app npm init -y # 或 yarn init -y / bun init -y - 安装 'mcp-bundler' 作为依赖:
npm install @wrtnlabs/mcp-bundler # 或 yarn add @wrtnlabs/mcp-bundler / bun add @wrtnlabs/mcp-bundler - 你还需要安装 '@modelcontextprotocol/sdk':
npm install @modelcontextprotocol/sdk # 或 yarn add @modelcontextprotocol/sdk / bun add @modelcontextprotocol/sdk
服务器配置 (供 MCP 客户端使用)
当你的 MCP 客户端需要连接到使用 'mcp-bundler' 打包并运行的 MCP 服务器时,客户端需要知道如何启动或连接到这个打包后的服务器进程。以下是 MCP 客户端配置文件中可能需要填写的关键信息示例(假设打包后的应用名为 'example-mcp'):
{ "servers": { "myBundledServer": { // 选择其中一种连接方式配置: // 方式 1: 通过 Stdio 连接 (推荐用于本地开发或简单部署) "stdio": { "command": "npx", // 或启动你打包好的应用的实际命令 (如 node dist/cli.js) "args": ["example-mcp"] // 启动打包应用所需的命令行参数 (此处以npx启动为例) }, // 方式 2: 通过 SSE 连接 (推荐用于网络服务部署) // 你需要在启动打包应用时指定端口,例如运行命令 'example-mcp --port 4506' "sse": { "url": "http://localhost:4506/sse" // 根据打包应用实际运行的地址和端口修改 } // 方式 3: InMemory 连接 (仅适用于客户端和服务端在同一进程中直接集成,不涉及独立的服务器配置) // "inMemory": {} // 不需要在客户端配置中显式声明,而是在代码中直接使用 bundler 的 createServer 方法 } } }
请注意,上述配置是给连接到打包器的 MCP 客户端使用的,用于告知客户端如何找到并启动/连接到打包后的服务实例。打包器内部如何配置和启动其包含的子 MCP 服务是在你的 Node.js 代码中完成的。
基本使用方法
-
定义你的打包配置: 在你的 Node.js 项目中创建一个文件 (例如 'src/index.ts' 或 'src/cli.ts'),使用 'mcp-bundler' 定义要打包的 MCP 服务:
import type { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { createServer as createCalculatorServer } from "@wrtnlabs/calculator-mcp"; // 假设你有一个计算器 MCP 服务 import { bundler } from "@wrtnlabs/mcp-bundler"; // 创建并导出打包器实例 export const myBundledMcp = bundler({ name: "MyAwesomeBundledServer", version: "1.0.0", mcpServers: { // 配置要包含的子 MCP 服务 calculator: createCalculatorServer({ // 示例: 包含一个内存中的计算器服务 name: "calculator", version: "1.0.0" }), notion: { // 示例: 包含一个通过 npx 启动的标准 Notion MCP 服务 command: "npx", args: ["-y", "@notionhq/notion-mcp-server"], env: { // 将打包器进程的环境变量 SECRET_NOTION_KEY 映射给 notion 服务作为 NOTION_API_KEY NOTION_API_KEY: "SECRET_NOTION_KEY" } } // 你可以在这里添加更多 MCP 服务 (如 Figma, Google Drive 等),支持 stdio, sse, inMemory 方式 }, env: { // 定义哪些环境变量需要根据目标子服务名称进行映射 SECRET_NOTION_KEY: "notion", // 当连接到名为 "notion" 的子服务时,将当前进程的 SECRET_NOTION_KEY 变量值传递过去 } }); // 如果你想让这个打包器可以直接通过命令行运行 (例如作为独立的后端进程) myBundledMcp.run(); -
构建和运行你的应用: 配置好 'package.json' 和构建工具(如 'tsup' 或 'webpack')来打包你的 Node.js 项目。构建后,你可以运行生成的入口文件(例如 'node dist/index.js')。
- 直接运行(默认为 Stdio 模式):
node dist/index.js # 或使用配置好的 npx 命令 # npx my-bundled-app - 运行在 SSE 模式(例如端口 4506):
node dist/index.js --port 4506 # 或使用配置好的 npx 命令 # npx my-bundled-app --port 4506
服务器启动后,你的 MCP 客户端就可以使用上述“服务器配置”中对应模式的连接信息来连接并使用它提供的(聚合后的)功能了。
- 直接运行(默认为 Stdio 模式):
关键词
MCP服务集成, MCP网关, LLM后端整合, 上下文服务聚合, 工具服务聚合
信息
分类
开发者工具