Appearance
MCP 注册与调用机制
三类工具来源
| 来源 | 运行时执行器 | 发现或注册方式 |
|---|---|---|
| 本地工具 | LocalToolExecutor、BuiltinShellDispatcher | Spring Bean 或内置分发器 |
| Feign 内部工具 | FeignToolExecutor | @FeignToolRegistration + 启动扫描 |
| 远程 MCP 工具 | McpRemoteToolExecutor、McpNacosToolExecutor | Nacos 服务发现和 tools/list 同步 |
Feign 工具自动注册
AiToolFeignAutoRegistrationConfig 实现 ApplicationRunner,默认由 ai.feign-tool.auto-registration.enabled=true 开启。启动时读取 FeignRegistryInitializer.registry,遍历标注 @FeignToolRegistration 的方法:
- 生成工具 ID(默认由接口名和方法名转 snake case,也可以在注解中指定)。
- 读取方法描述、参数注解和返回类型。
- 生成参数和响应 JSON Schema。
- 写入
ai_tool,保存 Feign 接口、方法、超时、权限、标签和限流元数据。 - 已存在的记录使用
saveOrUpdate更新,因此修改注解后需要检查数据库状态。
Nacos MCP 服务同步
NacosMcpServiceAutoRegistrationConfig 在启动时按 ai.mcp.nacos-discovery 配置发现服务,默认匹配名称前缀 mcp- 和 DEFAULT_GROUP。同步服务会:
- 从 Nacos Naming 获取健康实例。
- 调用 MCP 的
tools/list获取工具定义。 - 读取 schema、描述和版本元数据。
- 以
service@group为锁键,避免同一服务并发同步。 - 将工具写入或更新
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、响应流和日志链路。