MCP调用流程图

组件关系 Excel MCP Server ExcelMCPClient McpExcelToolDiscoveryService McpExcelToolConfig DefaultToolRegistry OpenAiChatModel ToolCallingManager 工具调用阶段 需要工具调用 不需要工具调用 OpenAiChatModel处理 大模型请求 ToolCallingManager判断是否需要工具调用 匹配可用工具 调用ExcelMCPClient.callTool 构建SSE请求 发送到Excel MCP Server 接收SSE响应 解析工具执行结果 返回给OpenAiChatModel 生成最终响应 启动阶段 Spring容器初始化 应用启动 McpExcelToolDiscoveryService初始化 调用MCP Server的/capabilities接口 解析工具元数据 存储工具定义到Map McpExcelToolConfig初始化 注入McpExcelToolDiscoveryService 获取所有工具定义 注册工具到DefaultToolRegistry OpenAiModelConfig初始化 创建ToolCallingManager 创建OpenAiChatModel

流程图说明

启动阶段

  1. 应用启动:Spring Boot应用程序启动
  2. Spring容器初始化:创建并初始化所有Spring Bean
  3. McpExcelToolDiscoveryService初始化
    • 调用MCP Server的/capabilities接口获取工具元数据
    • 解析并存储工具定义到内部Map中
  4. McpExcelToolConfig初始化
    • 注入McpExcelToolDiscoveryService
    • 获取所有工具定义并注册到DefaultToolRegistry
  5. OpenAiModelConfig初始化
    • 创建ToolCallingManager
    • 创建OpenAiChatModel并配置ToolCallingManager

工具调用阶段

  1. 大模型请求:用户发送请求到应用程序
  2. OpenAiChatModel处理:接收并处理请求
  3. ToolCallingManager判断:判断是否需要调用工具
  4. 工具匹配:如果需要调用工具,匹配可用的工具
  5. ExcelMCPClient调用:调用ExcelMCPClient的callTool方法
  6. 构建SSE请求:构建Server-Sent Events请求
  7. 发送请求:发送请求到Excel MCP Server
  8. 接收响应:接收SSE响应
  9. 解析结果:解析工具执行结果
  10. 返回结果:将结果返回给OpenAiChatModel
  11. 生成响应:生成最终响应返回给用户

组件关系

  • ExcelMCPClient:与Excel MCP Server通信的客户端
  • McpExcelToolDiscoveryService:动态发现Excel MCP Server的工具
  • McpExcelToolConfig:将动态工具注册到Spring AI中
  • OpenAiChatModel:处理大模型请求
  • ToolCallingManager:管理工具调用
  • DefaultToolRegistry:注册和管理所有可用工具
  • Excel MCP Server:外部服务,提供Excel操作工具

技术要点

  1. 动态工具发现:通过调用MCP Server的/capabilities接口动态获取工具定义
  2. 工具注册:将动态发现的工具注册到Spring AI的DefaultToolRegistry
  3. SSE通信:使用Server-Sent Events与Excel MCP Server通信
  4. 异步处理:使用AtomicReference和CountDownLatch处理异步响应
  5. 超时控制:设置超时机制确保请求不会无限等待

配置说明

  • application.yml中配置Excel MCP Server的URL和超时时间
  • bootstrap.yml中设置allow-bean-definition-overriding: true允许Bean定义覆盖
  • 通过McpExcelToolConfig控制工具的注册和管理

这个流程图清晰地展示了从应用启动到工具调用的完整流程,包括各个组件之间的关系和交互方式。

相关推荐
咩咩啃树皮10 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚10 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白12 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司13 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地14 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415914 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风16 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z1234567898617 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112317 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员18 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus