UNPKG

@voyager-0x/agent-mcp

Version:

Voyager MCP Agent - A powerful Model Context Protocol agent

111 lines (110 loc) 4.91 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.createWebMcpModule = createWebMcpModule; exports.createMcpServerModule = createMcpServerModule; const inMemory_js_1 = require("@modelcontextprotocol/sdk/inMemory.js"); const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js"); const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js"); function createWebMcpModule({ title }, callback) { const version = "unset"; const [clientTransport, serverTransport] = inMemory_js_1.InMemoryTransport.createLinkedPair(); const client = new index_js_1.Client({ name: title, version, }); client.connect(clientTransport); const mcpServer = new mcp_js_1.McpServer({ name: title, version, }); callback(mcpServer); mcpServer.connect(serverTransport); return client; } async function createMcpServerModule(config) { const { title, serverUrl } = config; // 添加重试逻辑 const maxRetries = 3; let lastError; for (let attempt = 1; attempt <= maxRetries; attempt++) { try { console.log(`正在连接到MCP服务器 (尝试 ${attempt}/${maxRetries}): ${serverUrl}`); // 创建MCP客户端连接到外部服务器 const client = new index_js_1.Client({ name: title, version: "1.0.0", }, { capabilities: { tools: {}, resources: {}, }, }); // 根据URL协议选择连接方式 let transport; if (serverUrl.startsWith("ws://") || serverUrl.startsWith("wss://")) { // WebSocket连接 const { WebSocketClientTransport } = await Promise.resolve().then(() => __importStar(require("@modelcontextprotocol/sdk/client/websocket.js"))); transport = new WebSocketClientTransport(new URL(serverUrl)); } else if (serverUrl.startsWith("http://") || serverUrl.startsWith("https://")) { // StreamableHTTP连接 - 使用默认配置,SDK 自动处理 Session ID const { StreamableHTTPClientTransport } = await Promise.resolve().then(() => __importStar(require("@modelcontextprotocol/sdk/client/streamableHttp.js"))); // 使用默认配置,让 SDK 自动处理所有细节 transport = new StreamableHTTPClientTransport(new URL(serverUrl)); } else { throw new Error(`不支持的协议: ${serverUrl},支持 ws://, wss://, http://, https://`); } // 连接到服务器 - Session ID 会在此过程中自动处理 await client.connect(transport); console.log(`MCP 客户端 "${title}" 已成功连接到: ${serverUrl}`); return client; } catch (error) { lastError = error; console.warn(`连接尝试 ${attempt} 失败:`, error?.message || error); if (attempt < maxRetries) { // 等待一段时间后重试 const delay = attempt * 1000; // 递增延迟 console.log(`等待 ${delay}ms 后重试...`); await new Promise((resolve) => setTimeout(resolve, delay)); } } } console.error("创建MCP服务器连接失败 (所有重试都失败):", lastError); throw new Error(`连接到MCP服务器失败: ${lastError?.message || lastError}`); }