Skip to content

Conversation

@eryajf
Copy link
Member

@eryajf eryajf commented Dec 20, 2025

Summary by CodeRabbit

发布说明

  • 新功能

    • 支持外部MCP服务器集成,可从配置文件加载和管理多个MCP服务器
    • 自动发现并代理外部MCP工具到系统中,支持工具名称前缀配置
    • 新增list-tools命令,显示所有已注册的内置和外部MCP工具列表
    • 新增配置选项支持自动注册外部工具和自定义工具名称格式
  • 文档

    • 新增外部MCP集成完整指南、配置示例和使用场景说明
  • 杂务

    • 依赖配置更新

✏️ Tip: You can customize this high-level summary in your review settings.

- 新增对非内置工具(如 CNB)的支持
- 通过已注册的处理器调用底层 MCP 工具
- 添加工具查找失败和调用错误的日志记录
@eryajf eryajf added the enhancement New feature or request label Dec 20, 2025
@coderabbitai
Copy link

coderabbitai bot commented Dec 20, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

新增外部 MCP 客户端集成:配置格式与加载、MCP 客户端管理器、外部工具代理与注册、MCP 服务器增强(列举与路由)、CLI 列出工具命令及示例/文档与示例配置文件。

Changes

哨兵 / 文件 变更摘要
忽略与依赖
\.gitignore, go.mod, config.example.yaml
添加 mcp_servers.json.gitignore;将 gopkg.in/yaml.v3 调整为直接依赖;在示例配置中新增 server.mcp.auto_register_external_toolsserver.mcp.tool_name_formatmcp_servers_config
主配置结构
internal/config/config.go, internal/config/mcp_servers.go
Config 中新增 MCPServersConfig 字段;在 MCPConfig 中新增 AutoRegisterExternalToolsToolNameFormat;新增 LoadMCPServersConfigMCPServerConfig/MCPServersConfig 类型及验证逻辑(JSON/YAML 支持、默认值、类型校验)
MCP 客户端管理器
internal/mcpclient/manager.go
新增线程安全的 ManagerMCPClient 实现:从配置加载、按类型注册(stdio/SSE/streamableHttp)、初始化并列举工具、CallTool、Get/List、Close/CloseAll 等生命周期方法
外部工具代理与注册
internal/imcp/external.go
为 MCP 服务器添加 RegisterExternalMCPToolsregisterProxyTool:跳过未启用自动注册的服务,处理命名冲突,构建并注册代理工具,代理处理器将调用外部 MCP 客户端
MCP 服务器增强
internal/imcp/server.go
新增 ListTools(ctx) 方法;在 CallTool 中增加通过已注册处理器调用的分支;StartSSE 启动日志包含工具总数
命令行与主入口
cmd/root.go
集成 MCP 客户端管理:在运行路径和 list-tools 命令中加载外部 MCP 配置、创建 Manager、可选自动注册外部工具、列举并分类工具,确保在错误与退出时关闭外部客户端
示例与文档
mcp_servers.example.json, README.md, docs/*
新增 mcp_servers.example.json 示例;更新 README.md 中 MCP 描述;新增/更新多份文档(external-mcp-integration.md、mcp-client-integration.md、CHANGELOG_MCP_CLIENT.md、MCP_CLIENT_INTEGRATION_SUMMARY.md)说明集成方案与使用示例

Sequence Diagram(s)

sequenceDiagram
    participant App as 应用(主流程)
    participant Cfg as 配置加载器
    participant MCPMgr as MCP 客户端管理器
    participant ExtMCP as 外部 MCP 服务
    participant MCPSrv as 本地 ZenOps MCP 服务器
    participant Proxy as 代理工具

    App->>Cfg: 读取 mcp_servers_config 文件
    Cfg-->>App: 返回 MCPServersConfig
    App->>MCPMgr: NewManager() / LoadFromConfig(cfg)
    MCPMgr->>ExtMCP: 为每个启用服务器建立连接(StdIO/SSE/StreamableHttp)
    ExtMCP-->>MCPMgr: 初始化并返回可用工具列表
    MCPMgr-->>MCPMgr: 存储客户端与工具信息

    App->>MCPSrv: 创建/复用本地 MCP 服务器
    App->>MCPSrv: RegisterExternalMCPTools(ctx, MCPMgr)
    MCPSrv->>MCPMgr: 列出所有外部客户端与工具
    loop 为每个工具
        MCPSrv->>Proxy: 创建代理工具(应用前缀)
        Proxy->>MCPSrv: 在本地注册该代理工具
    end

    Note over MCPSrv,Proxy: 运行时工具调用流程
    MCPSrv->>Proxy: CallTool(toolName, args)
    Proxy->>MCPMgr: CallTool(外部服务器名, 原始Tool, args)
    MCPMgr->>ExtMCP: 转发请求并等待结果
    ExtMCP-->>MCPMgr: 返回工具执行结果
    MCPMgr-->>Proxy: 返回结果
    Proxy-->>MCPSrv: 将结果返回给调用方

    App->>MCPMgr: CloseAll() 清理所有外部客户端
    MCPMgr->>ExtMCP: 关闭连接
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • 关注点:
    • internal/mcpclient/manager.go:并发控制、不同传输实现、错误传播与资源清理
    • internal/imcp/external.go:代理注册的冲突检测与请求转发细节
    • cmd/root.go:初始化与生命周期(启动/错误/关闭)整合、新命令的边界与输出
    • internal/config/mcp_servers.go:配置解析(JSON/YAML)与验证逻辑、默认值
    • internal/imcp/server.go:CallTool 路由分支与 ListTools 的一致性

Poem

🐰 我是小兔跳进仓,外部 MCP 把我请上,
工具前缀轻轻绑,代理一路把信传,
启动列表数声响,注册清理都到位,
配置示例写成行,🐇 欢欢喜喜新能力。

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat_mcp

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ad5ee74 and 80d1cd9.

📒 Files selected for processing (15)
  • .gitignore (1 hunks)
  • README.md (1 hunks)
  • cmd/root.go (5 hunks)
  • config.example.yaml (1 hunks)
  • docs/CHANGELOG_MCP_CLIENT.md (1 hunks)
  • docs/MCP_CLIENT_INTEGRATION_SUMMARY.md (1 hunks)
  • docs/external-mcp-integration.md (1 hunks)
  • docs/mcp-client-integration.md (1 hunks)
  • go.mod (1 hunks)
  • internal/config/config.go (2 hunks)
  • internal/config/mcp_servers.go (1 hunks)
  • internal/imcp/external.go (1 hunks)
  • internal/imcp/server.go (2 hunks)
  • internal/mcpclient/manager.go (1 hunks)
  • mcp_servers.example.json (1 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@eryajf eryajf merged commit 33df9e4 into main Dec 20, 2025
1 check passed
@eryajf eryajf deleted the feat_mcp branch December 20, 2025 12:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants