@@ -36,6 +36,8 @@ import { ExecutionPipeline } from '../tools/execution/ExecutionPipeline.js';
3636import { ToolRegistry } from '../tools/registry/ToolRegistry.js' ;
3737import type { Tool , ToolResult } from '../tools/types/index.js' ;
3838import { getEnvironmentContext } from '../utils/environment.js' ;
39+ import { loadProjectMcpConfig } from '../mcp/loadProjectMcpConfig.js' ;
40+ import { McpRegistry } from '../mcp/McpRegistry.js' ;
3941import { ExecutionEngine } from './ExecutionEngine.js' ;
4042import {
4143 type LoopDetectionConfig ,
@@ -1254,9 +1256,67 @@ export class Agent extends EventEmitter {
12541256 . join ( ', ' ) } `
12551257 ) ;
12561258 this . emit ( 'toolsRegistered' , builtinTools ) ;
1259+
1260+ // 注册 MCP 工具
1261+ await this . registerMcpTools ( ) ;
12571262 } catch ( error ) {
12581263 logger . error ( 'Failed to register builtin tools:' , error ) ;
12591264 throw error ;
12601265 }
12611266 }
1267+
1268+ /**
1269+ * 注册 MCP 工具
1270+ */
1271+ private async registerMcpTools ( ) : Promise < void > {
1272+ try {
1273+ // 1. 加载 .mcp.json(如果存在)
1274+ const loadedFromMcpJson = await loadProjectMcpConfig ( {
1275+ interactive : false , // Agent 初始化时不启用交互
1276+ silent : true , // 静默模式
1277+ } ) ;
1278+
1279+ if ( loadedFromMcpJson > 0 ) {
1280+ logger . debug ( `✅ Loaded ${ loadedFromMcpJson } servers from .mcp.json` ) ;
1281+ }
1282+
1283+ // 2. 获取所有 MCP 服务器配置
1284+ const configManager = ConfigManager . getInstance ( ) ;
1285+ const mcpServers = await configManager . getMcpServers ( ) ;
1286+
1287+ if ( Object . keys ( mcpServers ) . length === 0 ) {
1288+ logger . debug ( '📦 No MCP servers configured' ) ;
1289+ return ;
1290+ }
1291+
1292+ // 3. 连接所有 MCP 服务器并注册工具
1293+ const registry = McpRegistry . getInstance ( ) ;
1294+
1295+ for ( const [ name , config ] of Object . entries ( mcpServers ) ) {
1296+ try {
1297+ logger . debug ( `🔌 Connecting to MCP server: ${ name } ` ) ;
1298+ await registry . registerServer ( name , config ) ;
1299+ logger . debug ( `✅ MCP server "${ name } " connected` ) ;
1300+ } catch ( error ) {
1301+ logger . warn ( `⚠️ MCP server "${ name } " connection failed:` , error ) ;
1302+ // 继续处理其他服务器,不抛出错误
1303+ }
1304+ }
1305+
1306+ // 4. 获取所有 MCP 工具(包含冲突处理)
1307+ const mcpTools = await registry . getAvailableTools ( ) ;
1308+
1309+ if ( mcpTools . length > 0 ) {
1310+ // 5. 注册到工具注册表
1311+ this . executionPipeline . getRegistry ( ) . registerAll ( mcpTools ) ;
1312+ logger . debug ( `✅ Registered ${ mcpTools . length } MCP tools` ) ;
1313+ logger . debug (
1314+ `[MCP Tools] ${ mcpTools . map ( ( t ) => t . name ) . join ( ', ' ) } `
1315+ ) ;
1316+ }
1317+ } catch ( error ) {
1318+ logger . warn ( 'Failed to register MCP tools:' , error ) ;
1319+ // 不抛出错误,允许 Agent 继续初始化
1320+ }
1321+ }
12621322}
0 commit comments