跳转至

运行期工具变更:检测与刷新架构

本页描述运行期“工具变更自动生效”的完整链路:监控发现变化 → 触发全量刷新 → Registry 缓存更新。

✨ 核心思想

  • 分层职责:
  • 监控层负责“何时、为什么刷新”(定时/通知/重连后)
  • 内容层负责“一次性全量刷新工具定义”
  • 缓存层只做权威存取(无定时逻辑)
  • 稳健优雅:先轻量检测,再按需全量刷新,减少不必要消耗

🧭 架构图

graph TB
    subgraph 运行期组件
      LC[LifecycleManager\n健康检查/状态机]
      TM[ToolsUpdateMonitor\n通知+2h轮询]
      CM[ServiceContentManager\n全量刷新]
      RE[ServiceRegistry\n权威缓存]
      OR[MCPOrchestrator]
      FM[FastMCP]
    end

    LC --> RE
    TM -->|检测变化| CM
    CM -->|list_tools→更新tool_cache| RE

    subgraph 触发器
      R[重连成功]
      S[文件同步(mcp.json)]
      M[手动刷新]
    end

    R --> CM
    S --> OR
    OR --> CM
    M --> CM

    OR --> FM

🔁 刷新触发清单

  • 初次连接/重连成功:Orchestrator._update_service_cache() → 全量写入
  • 周期检测:ToolsUpdateMonitor 遍历活跃会话,发现差异后触发 ContentManager.force_update
  • 兜底轮询:ServiceContentManager 定期拉取 list_tools 对比 hash,变化则全量刷新
  • 手动触发:orchestrator.refresh_service_content(service_name)

🧩 配置要点

  • tools_update_interval_seconds:统一控制 ToolsUpdateMonitor 与 ServiceContentManager 周期(后者读取 Orchestrator config 覆盖默认值)
  • update_tools_on_reconnection:重连成功后是否立刻更新工具(默认 True)

更新时间:2025-08-18