使用说明
@库诺比/mcp bundler
连接到远程MCP服务器,并在本地缓存其工具、资源和提示。核心 McpBundler 与传输无关,处理连接生命周期、元数据刷新和重新连接感知转发。可选的 McpBundlerServerAdapter 可以将远程元数据重新导出到本地 McpServer.
安装
npm install @kunobi/mcp-bundler
用法
import { McpBundler, McpBundlerServerAdapter } from '@kunobi/mcp-bundler';
const bundler = new McpBundler({
name: 'my-server',
transport: {
type: 'http',
url: 'http://127.0.0.1:3030/mcp',
},
reconnect: { enabled: true, intervalMs: 5_000, maxRetries: Infinity },
});
const adapter = new McpBundlerServerAdapter(bundler, {
toolPrefix: 'my-server__',
promptPrefix: 'my-server__',
mapResource: (resource) => ({
name: `my-server__${resource.name}`,
uri: `my-server://resource/${encodeURIComponent(resource.uri)}`,
}),
});
bundler.on('connected', async () => {
await adapter.registerTools(server);
await adapter.registerResources(server);
await adapter.registerPrompts(server);
});
bundler.on('disconnected', () => {
adapter.unregisterTools(server);
adapter.unregisterResources(server);
adapter.unregisterPrompts(server);
});
bundler.on('tools_changed', async () => {
adapter.unregisterTools(server);
await adapter.registerTools(server);
});
bundler.on('resources_changed', async () => {
adapter.unregisterResources(server);
await adapter.registerResources(server);
});
bundler.on('prompts_changed', async () => {
adapter.unregisterPrompts(server);
await adapter.registerPrompts(server);
});
await bundler.connect();
稳定的代理可以在短暂的下游断开连接期间保持最后已知的注册可见,并依赖于 callTool / readResource / getPrompt 按需重新连接。如果你想要使用寿命更长的曲面,请在适配器层中取消取消对寄存器的抖动,而不是在第一次传输时删除所有内容。
API
new McpBundler(options)
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
name |
string |
必需 | 日志记录标识符 |
transport |
McpTransportConfig |
必需 | 下游MCP传输配置(http 或 stdio) |
reconnect.enabled |
boolean |
true |
断开连接时自动重新连接 |
reconnect.intervalMs |
number |
5000 |
重新连接尝试之间的延迟 |
reconnect.maxRetries |
number |
Infinity |
最大重新连接尝试次数 |
logger |
function |
没有行动 | (level, message, data?) => void |
方法
连接
connect()--连接到远程服务器reconnectNow()--取消任何挂起的重新连接计时器,并立即重试close()--断开并停止重新连接getState()--获取连接状态(idle,connecting,connected,disconnected)
元数据和转发
listTools()--从下游服务器获取当前工具列表getToolDefinitions()--获取缓存的完整下游工具定义getTools()--获取缓存的工具名称callTool(name, args?)--将工具调用直接转发到下游服务器listResources()--从下游服务器获取当前资源列表getResourceDefinitions()--获取缓存的完整下游资源定义getResources()--获取缓存的资源URIreadResource(uri)--直接读取下游资源listPrompts()--从下游服务器获取当前提示列表getPromptDefinitions()--获取缓存的完整下游提示定义getPrompts()--获取缓存的提示名称getPrompt(name, args?)--直接获取下游提示
new McpBundlerServerAdapter(bundler, options?)
当您想在本地重新注册捆绑服务器时,请使用可选的服务器适配器 McpServer.
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
toolPrefix |
string |
"" |
应用于重新导出的工具名称的前缀 |
promptPrefix |
string |
"" |
应用于重新导出的提示名称的前缀 |
mapToolName |
(tool) => string |
-- | 完全控制本地工具名称 |
mapPromptName |
(prompt) => string |
-- | 完全控制本地提示符名称 |
mapResource |
(resource) => { name, uri, ... } |
identity | 完全控制本地资源名称和URI |
适配器方法
registerTools(server)--在本地注册缓存的下游工具McpServerunregisterTools(server)--删除此适配器以前注册的工具registerResources(server)--在本地注册缓存的下游资源McpServerunregisterResources(server)--删除此适配器以前注册的资源registerPrompts(server)--在本地上注册缓存的下游提示McpServerunregisterPrompts(server)--删除此适配器以前注册的提示
事件
connected--已建立连接disconnected--连接丢失tools_changed--远程工具列表已更改resources_changed--远程资源列表已更改prompts_changed--远程提示列表已更改
所有这三个 *_changed 事件由MCP驱动 listChanged 通知——bundler订阅下游服务器,并在它们发出更改信号时自动刷新。
发展
pnpm install
pnpm build
pnpm test
