Skip to content

MCP 注册与调用机制 ​

三类工具来源 ​

来源运行时执行器发现或注册方式
本地工具LocalToolExecutor、BuiltinShellDispatcherSpring Bean 或内置分发器
Feign 内部工具FeignToolExecutor@FeignToolRegistration + 启动扫描
远程 MCP 工具McpRemoteToolExecutor、McpNacosToolExecutorNacos 服务发现和 tools/list 同步

Feign 工具自动注册 ​

AiToolFeignAutoRegistrationConfig 实现 ApplicationRunner,默认由 ai.feign-tool.auto-registration.enabled=true 开启。启动时读取 FeignRegistryInitializer.registry,遍历标注 @FeignToolRegistration 的方法:

  1. 生成工具 ID(默认由接口名和方法名转 snake case,也可以在注解中指定)。
  2. 读取方法描述、参数注解和返回类型。
  3. 生成参数和响应 JSON Schema。
  4. 写入 ai_tool,保存 Feign 接口、方法、超时、权限、标签和限流元数据。
  5. 已存在的记录使用 saveOrUpdate 更新,因此修改注解后需要检查数据库状态。

Nacos MCP 服务同步 ​

NacosMcpServiceAutoRegistrationConfig 在启动时按 ai.mcp.nacos-discovery 配置发现服务,默认匹配名称前缀 mcp- 和 DEFAULT_GROUP。同步服务会:

  1. 从 Nacos Naming 获取健康实例。
  2. 调用 MCP 的 tools/list 获取工具定义。
  3. 读取 schema、描述和版本元数据。
  4. 以 service@group 为锁键,避免同一服务并发同步。
  5. 将工具写入或更新 ai_tool,再由 Agent 工具选择逻辑加载。

NacosMcpServiceListenerConfig 监听实例变化,并通过 listenerDelayMs 防抖;定时健康检查还会发现新服务并重新同步。Nacos 3.x 的 MCP Registry 与 Naming 是两套数据面,McpServiceSyncService 同时兼容 Registry 全量扫描。

关键配置 ​

yaml
ai:
  feign-tool:
    auto-registration:
      enabled: true
  mcp:
    nacos-discovery:
      enabled: true
      service-name-prefix: mcp-
      sync-on-startup: true
      default-timeout-ms: 30000
      auto-publish: true
      listener-delay-ms: 1000

实际配置来自 Nacos 时,以 Nacos 配置覆盖本地 application.yml。工具被同步到数据库并不等于对所有 Agent 可用,还需要在 Agent 的 toolIds 或工具集关系中完成授权和挂载。

调用链 ​

Agent 节点先根据工具 ID 和 Agent 配置选择执行器,再由 McpToolArguments 规范化参数。MCP 调用上下文通过 McpSessionContextHolder 透传 sessionId 等会话信息;工具结果会进入 ToolResultStore、响应流和日志链路。