☰
MCP (Model Context Protocol) 学习
2026/10/14 5:39:39 网站建设 项目流程

参考 :(2 封私信) AI是如何确定应使用的MCP Server的? - 知乎

MCP的全称是模型上下文协议(Model Context Protocol),是由Anthropic推出的一种开放标准协议。其设计目的在于让大型语言模型(LLMs)能够与外部的数据源和工具实现无缝交互。MCP就像是为AI提供了一个“通用插头”,使得这些智能模型可以像我们使用USB接口一样,轻松连接到各种不同的设备和服务上。

MCP Server Boot Starter :: Spring AI Reference

GitHub - spring-projects/spring-ai-examples

MCP允许AI模型通过标准化的方式连接到外部数据源或服务(比如天气API、数据库查询等)。

Spring MCP Server

Spring MCP Server 提供了三种不同的模式:

  • • Standard Input/Output (STDIO) - spring-ai-starter-mcp-server
  • • Spring MVC (Server-Sent Events) - spring-ai-starter-mcp-server-webmvc
  • • Spring WebFlux (Reactive SSE) - spring-ai-starter-mcp-server-webflux
  • •Standard MCP Server适合简单的本地开发和单进程通信。
  • •WebMVC Server Transport适合传统的基于 Servlet 的 Web 应用,支持同步模式。
  • •WebFlux Server Transport适合高性能、高并发的响应式应用,支持异步模式。

WebFlux Server Transport

  • •核心功能:WebFlux Server Transport 是基于 Spring WebFlux 的服务器实现。它提供了响应式 SSE 支持,能够处理高并发的异步流式数据。
  • •适用场景:适合需要高性能、非阻塞 I/O 的现代响应式应用,特别是在处理大量并发连接时表现出色。
  • •特点:
    • • 基于响应式编程模型,支持非阻塞操作。
    • • 提供响应式的 SSE 端点,客户端可以通过text/event-stream协议与服务器进行流式交互。
    • • 支持异步模式,适合需要高并发和低延迟的应用。

GitHub - spring-projects/spring-ai-examples

打开项目后,我们先运行 McpServerApplication.java

然后运行测试文件 ClientSse.java ,可以看到终端返回了天气信息。



Dify MCP客户端是指在Dify平台上通过插件安装的能够调用MCP Server的工具。具体来说:

  • Dify MCP客户端是指Dify平台上的插件,这些插件允许Dify作为客户端与MCP Server进行交互。

  • 它们包括Agent策略和MCP SSE / StreamableHTTP插件,其中Agent策略支持MCP工具,而MCP SSE / StreamableHTTP插件则用于处理基于HTTP和SSE协议的MCP请求。

  • 通过安装这些插件,Dify可以轻松地将任何MCP Server配置为工具,从而调用这些服务中的功能或数据。

这个客户端插件的存在,使得Dify能够与遵循MCP协议的外部服务无缝对接,扩展其功能并利用更多外部资源。

Dify 暂时未使用

参考:必看!SpringAI轻松构建MCP Client-Server架构-腾讯云开发者社区-腾讯云

STDIO是Standard Input/Output(标准输入/输出)的缩写。

在spring-ai-starter-mcp-client这个上下文中,支持STDIO意味着该客户端可以通过进程的标准输入(stdin)和标准输出(stdout)流与另一个进程进行通信。

具体来说:

  1. 通信方式:它不依赖于网络(如 HTTP),而是通过操作系统提供的标准输入输出流。通常,一个进程(比如你的 Spring Boot 应用)会启动另一个进程(比如一个实现了 MCP 协议的本地工具或服务),然后通过读取该子进程的stdout来接收数据,并通过向其stdin写入数据来发送指令。
  2. 应用场景:这种方式常用于与本地运行的、命令行工具风格的进程进行集成。例如,你的 Spring Boot 应用启动一个 Python 脚本,这个脚本负责与某个 AI 模型交互,两者之间通过STDIO传递 JSON 格式的请求和响应。
  3. 优点:
    • 简单高效:对于本地进程间通信(IPC),STDIO通常比网络通信开销更小。
    • 易于集成:很多脚本语言(Python, Node.js 等)编写的工具天然支持从stdin读取输入并输出到stdout,便于与主应用集成。
    • 跨语言:只要子进程能处理STDIO流,就可以用任何语言编写。
  4. 与 HTTP/SSE 的对比:
    • HTTP/SSE(Server-Sent Events) 是基于网络的通信,适用于远程服务或需要通过网络 API 访问的场景。
    • STDIO是基于本地进程管道的通信,适用于与同一台机器上运行的辅助进程协作。

总结: 在spring-ai-starter-mcp-client中,STDIO支持允许你的 Spring Boot 应用通过标准输入输出流,与一个本地运行的、实现了 MCP (Model Context Protocol) 的进程进行通信,为集成本地 AI 工具或代理提供了一种轻量级、高效的途径。

参考 SpringAI系列---【MCP协议与AI Agent技术解析】 - 少年攻城狮 - 博客园

一、核心概念与角色定位

1. MCP协议(Model Context Protocol)

  • 定义:由Anthropic提出的开放协议,标准化AI模型与外部系统的交互接口
  • 三大核心特性:
    • 🌀 动态服务发现:自动识别可用设备与服务
    • 🧩 协议统一化:屏蔽不同品牌设备的API差异
    • 🔄 双向通信:支持状态监控与实时控制

2. AI Agent(智能代理)

  • 本质:具备自主决策能力的AI程序
  • 核心能力:
    • 上下文感知(用户习惯/环境状态)
    • 多目标优化(舒适度 vs 节能)
    • 异常自愈(设备故障自动切换)

3. FunctionCall(函数调用)

  • 传统模式:硬编码调用特定设备API
  • 典型缺陷:
    • 🔗 设备强耦合(更换品牌需重构代码)
    • 📉 扩展性差(新增设备需修改逻辑)

4. Spring AI

  • 定位:企业级AI应用开发框架
  • 核心价值:
    • 🛠️ 封装MCP协议实现细节
    • 🔒 提供安全审计与权限控制
    • 📈 支持高并发设备管理

------------------------------------------------------------------------------------------------------------------------

MCP 协议深度讲解

口径来源:MCP 官方规范 2026-07-28 版 + 平台落地对照。


一、MCP 一句话定义

MCP(Model Context Protocol)= 给「AI 用工具」定的 USB 标准。

它让 AI 应用能以统一协议连接外部数据源和工具,不管对方是数据库、API、文件系统还是本地脚本。就像 USB 让所有外设插上就能用,MCP 让所有工具服务器接上就能被 AI 调用。


二、三个核心角色

MCP 是Host → Client → Server三层架构:

text

┌─────────────────────────────────────────┐ │ Host(AI 应用) │ │ 例:VS Code Copilot / 你的平台 │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ Client A │ │ Client B │ ← 连接器 │ │ └────┬─────┘ └────┬─────┘ │ └────────┼──────────────┼──────────────────┘ │ │ ▼ ▼ ┌──────────┐ ┌──────────┐ │ Server A │ │ Server B │ ← 工具/数据提供方 │ 数据库 │ │ 文件系统 │ └──────────┘ └──────────┘
角色职责你的平台对应
Host发起连接的 LLM 应用北极星平台
ClientHost 内的连接器mcp_servers/client.py
Server提供工具/数据的服务drawing-serve / quote-serve / bi-serve

三、Server 能提供三种能力

MCP Server 向 Client 暴露三类功能:

能力是什么谁控制你的平台
Tools可执行函数,模型调用模型控制(模型决定调不调)draw_parse / bi_query
Resources上下文数据,只读应用控制(应用决定给不给模型)未使用
Prompts预置提示模板用户控制(用户选择用哪个)未使用

你当前只用了Tools这一种,这是最核心也最常用的能力。


四、Tools 的协议细节

4.1 两个核心方法

方法作用返回
tools/list发现有哪些工具工具定义数组(含inputSchema)
tools/call执行某个工具执行结果(content数组)

4.2 工具定义长什么样

json

{ "name": "searchFlights", "description": "Search for available flights", "inputSchema": { "type": "object", "properties": { "origin": { "type": "string", "description": "出发城市" }, "destination": { "type": "string", "description": "到达城市" }, "date": { "type": "string", "format": "date" } }, "required": ["origin", "destination", "date"] } }

inputSchema用 JSON Schema 描述参数,默认 dialect 是 2020-12。

4.3 调用返回什么

json

{ "content": [ { "type": "text", "text": "找到 3 个航班..." } ] }

也可以返回structuredContent(结构化 JSON),适合机器消费。


五、Tools 的安全机制(官方强调)

MCP 官方规范把Tool Safety列为三大安全原则之一:

Tools 代表任意代码执行,必须谨慎对待。

官方建议的管控手段:

机制说明你的平台对应
工具执行前需用户同意每次调用可弹审批HIGH_RISK interrupt
UI 展示可用工具用户决定哪些工具可用skill 白名单
权限设置预批准安全操作岗位 allow_write
活动日志记录所有工具执行workflow_events

你的三道安全闸(重名先注册者胜 / 占名遮蔽 / skill 白名单)是在 MCP 官方建议之上的平台侧加固,MCP 协议本身不规定这些。


六、协议版本与传输的重要变化

6.1 最新版是「无状态」的

2026-07-28 版做了一个重大变更:从有状态连接改为无状态、自包含请求。

维度旧版(≤2025-11-25)新版(2026-07-28)
会话Mcp-Session-Id头移除,无会话
握手initialize/notifications/initialized移除,每请求自带信息
发现无新增server/discover
能力协商握手时协商每请求通过_meta携带
传输SSE / Streamable HTTP移除 SSE

新版每个请求通过_meta字段携带协议版本和客户端能力:

json

{ "jsonrpc": "2.0", "id": "1", "method": "tools/call", "params": { "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientInfo": { "name": "polaris", "version": "1.0" }, "io.modelcontextprotocol/clientCapabilities": {} } } }

6.2server/discover新方法

服务端必须实现server/discover,让客户端在发任何其他请求前查询服务端支持的版本、能力和身份:

json

// 请求 { "method": "server/discover" } // 响应 { "supportedVersions": ["2026-07-28"], "capabilities": { "tools": {} }, "_meta": { "io.modelcontextprotocol/serverInfo": { "name": "drawing-serve" } } }

6.3 你当前用的 SSE 是什么版本

你平台用的是SSE + initialize 握手 + Mcp-Session-Id,这是2025-06-18 或 2025-11-25 版的形态。在 2026-07-28 版中,SSE 和会话已被移除。

对你的影响:

  • 只在内网自用:当前能跑,但未来升级 MCP SDK 时需要迁移

  • 要对接外部生态:外部 MCP server 可能已在往无状态模式演进


七、MCP 的「扩展」机制

MCP 除了核心协议,还定义了可选扩展,需双方在初始化时显式协商支持:

扩展作用
Tasks长时运行操作的异步执行(轮询、中途输入、持久句柄)
Skills over MCP通过 MCP 发现和消费 agent 工作流的结构化指令
MCP Apps会话内联渲染的交互式 UI(图表、表单、视频)

你的平台未使用这些扩展,但 Tasks 扩展与你的「有界多轮编排」方向有潜在对齐空间。


八、MCP 与 A2A 的官方分工

MCP 官方定位是AI 应用 ↔ 外部工具/数据的标准化连接。A2A 官方定位是Agent ↔ Agent的任务级互通。两者互补,不冲突:

维度MCPA2A
连接对象AI 应用 ↔ 工具/数据源Agent ↔ Agent
核心概念Tools / Resources / PromptsTask / AgentCard / Artifact
方向纵向(智能体伸手用工具)横向(系统派活给岗位)
你的平台平台连各 -serve 引擎外部系统派单给平台岗位

九、一句话总结

MCP = AI 用工具的 USB 标准。三角色(Host / Client / Server),三能力(Tools / Resources / Prompts),核心方法tools/list+tools/call,默认 JSON Schema 2020-12 校验。最新 2026-07-28 版移除会话和 SSE,改为无状态自包含请求 +server/discover。你当前用的是 2025 版 SSE 形态,内网够用,对接外部生态时需关注迁移。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询