跳到主要内容
📖 本章预览

本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。

第14章 MCP 协议:一个标准打通所有 AI 工具生态

14.1 从 Function Calling 到 MCP:为什么需要协议

上一章讲了 Function Calling,LLM 可以调用你注册的函数。但有个问题:每个 AI 框架的工具注册方式都不一样。你在 Spring AI 里写的工具,LangChain 用不了;你在 OpenAI 注册的函数,换到通义千问又要改格式。

MCP(Model Context Protocol)解决的就是这个问题:定义一个统一的协议标准,让工具提供方只需要实现一次,所有支持 MCP 的 AI 应用都能直接用。

没有 MCP 的世界:
工具A → 适配 Spring AI 格式
工具A → 适配 LangChain 格式
工具A → 适配 OpenAI 格式
(每个工具要适配 N 个框架,N×M 的组合爆炸)

有了 MCP 的世界:
工具A → 实现 MCP Server(一次)
Spring AI → MCP Client ─┐
LangChain → MCP Client ─┤── 都能调用工具A
OpenAI → MCP Client ─┘
(每个工具实现一次,每个框架实现一次,N+M)

14.1.1 MCP 架构全景

┌─────────────────────────────────────────────────────┐
│ 你的 AI 应用 │
│ ┌─────────────┐ │
│ │ ChatModel │ │
│ │ (LLM 调用) │ │
│ └──────┬──────┘ │
│ │ Function Calling │
│ ┌──────▼──────┐ │
│ │ MCP Client │ ← Spring AI 内置 │
│ └──────┬──────┘ │
└─────────┼───────────────────────────────────────────┘
│ JSON-RPC 2.0(stdio / SSE / HTTP)

┌─────▼─────┐ ┌─────────────┐ ┌─────────────┐
│ MCP Server │ │ MCP Server │ │ MCP Server │
│ 文件系统 │ │ 数据库查询 │ │ 企业内部API │
└───────────┘ └─────────────┘ └─────────────┘

14.1.2 MCP 的三种能力

能力说明类比
Tools可调用的函数Function Calling 的标准化版本
Resources可读取的数据源类似 REST API 的 GET
Prompts预定义的 Prompt 模板可复用的提示词库

14.1.3 MCP 通信方式

三种传输方式:

1. stdio(标准输入输出)
应用 ←→ 子进程(通过 stdin/stdout 通信)
适用:本地工具,如文件系统、命令行工具

2. SSE(Server-Sent Events)
应用 ←→ HTTP 长连接
适用:远程服务,需要流式推送

3. HTTP(Streamable HTTP)
应用 ←→ 标准 HTTP 请求
适用:无状态的远程服务

14.2 实战一:接入社区 MCP Server

MCP 生态已经有大量现成的 Server,直接拿来用。

14.2.1 接入文件系统 MCP Server

// .kiro/settings/mcp.json 或项目配置
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/你的目录"],
"disabled": false
}
}
}

这个 Server 提供了文件读写、目录列表等工具,LLM 可以直接操作文件系统。

14.2.2 在 Spring AI 中编程接入 MCP Server

/**
* 通过 stdio 方式连接 MCP Server
* MCP Server 作为子进程启动,通过标准输入输出通信


🔒 解锁完整内容

本章剩余内容需要解锁后查看

以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。

加入知识星球你将获得:

  • ✅ 全部 26 章完整内容 + 持续更新
  • ✅ 配套源码 + 实战项目
  • ✅ 一对一答疑 + 面试辅导
  • ✅ 简历优化 + 内推机会

📚 本章完整目录

以下为本章完整目录结构,加入知识星球即可解锁全部内容。

14.2.3 MCP 工具调用的完整流程

14.3 实战二:开发自定义 MCP Server

14.3.1 场景:企业员工查询 MCP Server

14.4 实战三:Tool 开发最佳实践

14.4.1 Tool 描述的好坏直接决定 LLM 能不能正确调用

14.4.2 参数描述的重要性

14.4.3 返回值设计

14.4.4 安全防护:SQL 注入防护示例

14.5 多工具协作编排

14.5.1 LLM 自动编排

14.5.2 工具调用链的可观测性

14.6 Function Calling vs MCP 对比

14.7 Controller 暴露接口