当前位置: 首页 > news >正文

Spring AI MCP

MCP是什么

MCP是模型上下文协议(Model Context Protocol)的简称,是一个开源协议,由Anthropic(Claude开发公司)开发,旨在让大型语言模型(LLM)能够以标准化的方式连接到外部数据源和工具。它就像AI应用的通用接口,帮助开发者构建更灵活、更具上下文感知能力的AI应用,而无需为每个AI模型和外部系统组合进行定制集成。MCP被设计为一个通用接口,类似于USB-C端口,允许LLM应用以一致的方式连接到各种数据源和工具,如文件、数据库、API等。

MCP的三个概念

MCP Server

基于各语言的MCP SDK开发的程序或服务。简单来说就是一个后端服务,这个服务提供的方法就是MCP Tool。

MCP Tool

MCP Tool 属于MCP Server,一个MCP Server可以有多个MCP Tool。类似一个类里有多个方法,又或者一个服务里有多个接口。

MCP Client

当一段代码,一个Agent,一个客户端,基于MCP的规范去使用、去调用MCP Server里的MCP Tool时,它就是MCP Client。

MCP的调用流程

调用流程如图所示,其实和function calling是类似的
来自阿里云文章

MCP 案例

MCP 的两种传输协议,以下案例使用 sse (http),另一种是 stdio

MCP Server

基于Spring AI 的 MCP 服务端,提供天气预报的服务
■ 根据地区查询当天天气
■ 根据地区查询近期天气预报

// 定义 Tools
class WeatherServer {private WeatherExec weatherExec ;@Tool(name = "todayWeather", description = "根据地区查询当日天气")public WeatherModel todayWeather(String address) {return weatherExec.todayWeather(address);}@Tool(name = "futureWeather", description = "根据地区查询近期天气预报")public WeatherForecastModel futureWeather(String address) {return weatherExec.futureWeather(address);}}class Config {// 配置 Tools Bean@Beanpublic ToolCallbackProvider toolCallbackProvider(CustomService customService) {return MethodToolCallbackProvider.builder().toolObjects(customService).build();}}

MCP Client

这里仅描述 MCP 客户端和服务端的一些交互,暂不涉及 LLM

建立连接
获取MCP Server 的工具列表
执行一个工具

建立连接

客户端与服务端基于 SSE 建立长连接

curl --location 'http://localhost:8080/sse'

响应 endpoint /mcp/message 即触发事件的接口地址

发送获取 MCP 工具列表事件

触发事件,通过SSE返回结果

curl --location 'http://localhost:8080/mcp/message' \
--header 'Content-Type: application/json' \
--data '{"method": "tools/list","jsonrpc": "2.0","id": "xxx-id-001"
}'

sse 响应 message

{"jsonrpc": "2.0","id": "xxx-id-001","result": {"tools": [{"name": "todayWeather","description": "根据地区查询当日天气","inputSchema": {"type": "object","properties": {"address": {"type": "string"}}}},{...}]}
}

发送执行 MCP 工具事件

触发事件,通过SSE返回结果

curl --location 'http://localhost:8080/mcp/message' \
--header 'Content-Type: application/json' \
--data '{"method": "tools/call","jsonrpc": "2.0","id": "xxx-id-002","params": {"name": "todayWeather","arguments": {"address": "广州"}}
}'

sse 响应 message

{"jsonrpc": "2.0","id": "xxx-id-002","result": {"content": [{"type": "text","type": "text","text": "MCP Server 执行工具返回的数据"}],"isError": false}
}

Agent

MCP + LLM 其实就是个Agent
在这里插入图片描述

  1. 用户向Agent提问
  2. Agent调用MCP Server的接口,获取可用工具列表
  3. Agent调用LLM
    • 非函数调用,直接回复用户
    • 函数调用则继续
  4. Agent调用MCP Server的接口执行工具函数,获取执行结果
  5. 再次调用大模型,获取最终答案
  6. Agent回答用户

参考
Nacos MCP Registry


http://www.mrgr.cn/news/99312.html

相关文章:

  • 字符串拼接问题的最佳解决方案
  • MetaGPT智能体框架深度解析:记忆模块设计与应用实践
  • C语言高频面试题——常量指针与指针常量区别
  • 堆栈溢出 StackOverflowError 排查
  • 辛格迪客户案例 | 浙江高跖医药委托生产质量管理协同(OWL MAH)项目
  • vue3 + element-plus中el-dialog对话框滚动条回到顶部
  • 存储器综合:内存条
  • [SpringBoot]配置文件(1)
  • 查看matlab函数帮助文档的方法
  • 嵌入式工程师( C / C++ )笔试面试题汇总
  • Python常用的第三方模块之二【openpyxl库】读写Excel文件
  • 前端笔记-Vue3(上)
  • Linux学习笔记|入门指令
  • Linux:权限相关问题
  • Linux 入门十一:Linux 网络编程
  • 辛格迪客户案例 | 上海科济药业细胞治疗生产及追溯项目(CGT)
  • 3200温控板电路解析
  • 推荐系统/业务,相关知识/概念1
  • 【Maven】项目管理工具
  • 诱骗协议芯片支持PD2.0/3.0/3.1/PPS协议,支持使用一个Type-C与电脑传输数据和快充取电功能