当前位置: 首页 > 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回答用户
http://www.dtcms.com/a/146868.html

相关文章:

  • Linux之信号
  • Linux——系统安全及应用
  • 2025年pta团队设计天梯赛题解
  • 【软件工程】 适配器模式
  • C#接口开发异常:System.Web.HttpRequestValidationException
  • 怎么建立自然语言领域的评价标准
  • 人工智能在智能家居中的应用与发展
  • ubuntu20.04安装安装x11vnc服务基于gdm3或lightdm这两种主流的显示管理器。
  • PyTorch深度学习框架60天进阶学习计划 - 第47天:模型压缩蒸馏技术(一)
  • Java面试(2025)—— Spring MVC
  • CentOS7系统安装Docker教程
  • 目标跟踪中的聚类算法:DBSCAN Kmeans GMM
  • 【第十六届 蓝桥杯 省 C/Python A/Java C 登山】题解
  • <数据集>小船识别数据集<目标检测>
  • 平板电脑做欧盟网络安全法案(EU)2022/30
  • 14.第二阶段x64游戏实战-分析人物的名字
  • 基于opencv和PaddleOCR识别身份证信息
  • Spring Boot 整合 JavaFX 核心知识点详解
  • 科学视角下的养生新范式——高压氧舱:重塑健康边界的氧护革命
  • 使用 Electron 打包可执行文件和资源:完整实战教程
  • Prompt 攻击与防范:大语言模型安全的新挑战
  • 文字、语音、图片、视频四个模态两两之间(共16种转换方向)的生成技术及理论基础的详细说明及表格总结
  • 【2025面试Java常问八股之redis】zset数据结构的实现,跳表和B+树的对比
  • 基于大模型的血栓性外痔全流程风险预测与治疗管理研究报告
  • Linux系统下docker 安装 redis
  • hadoop与spark的区别和联系
  • 蚂蚁全媒体总编刘鑫炜再添新职,出任共工新闻社新媒体研究院院长
  • n8n 中文系列教程_05.如何在本机部署/安装 n8n(详细图文教程)
  • Java 服务器端 jar 包内 class 文件替换与配置文件修改高级技术指南
  • 在 Spring Boot 项目中怎么识别和优化慢 SQL ?