文章目录
前言
若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com
一、MCP核心概念总结
| 核心概念 |
定义 |
核心作用 |
| Resources(资源) |
服务端提供的文本、文件、数据库记录等数据 |
为AI提供最新外部知识,丰富上下文 |
| Prompts(提示词) |
服务端定义的可复用提示词模板和工作流 |
标准化AI交互模式,简化用户操作(如斜杠命令) |
| Tools(工具) |
服务端提供的可调用函数 |
扩展AI能力(计算、查询、外部系统交互),是核心特性 |
| Sampling(采样) |
服务端通过客户端向大模型发送生成请求(反向请求) |
实现复杂智能代理行为,保障用户控制和数据隐私 |
| Roots(根目录) |
定义服务器可访问的文件系统位置 |
限制访问范围,提供安全边界,防止恶意文件访问 |
| Transports(传输) |
定义客户端与服务器的通信方式(Stdio本地通信、SSE网络实时通信) |
确保不同环境下的可靠信息交换 |
二、MCP作用与意义
| 核心价值 |
具体说明 |
| 增强AI能力 |
接入外部服务实现网页搜索、数据库查询、API调用等功能 |
| 标准化规范 |
类似HTTP协议,降低开发者理解成本,避免重复开发 |
| 构建生态体系 |
类比NPM、Maven仓库,形成服务市场,促进资源共享(如MCP.so、阿里云百炼) |
三、MCP架构核心组件
| 组件 |
核心职责 |
支持特性 |
| 客户端(Client) |
与服务端建立连接、协议版本匹配、数据传输、工具/资源管理 |
根管理、采样控制、同步/异步操作;支持Stdio(本地)、SSE(远程)传输 |
| 服务端(Server) |
提供工具/资源、处理客户端请求、日志记录、多客户端连接支持 |
多传输方式(Stdio、Servlet/WebFlux/WebMVC SSE),与客户端完全解耦 |
四、MCP三种使用方式对比
| 使用方式 |
操作场景 |
关键步骤 |
优缺点 |
| 云平台使用 |
快速集成现成服务(如阿里云百炼) |
登录平台→开通目标服务(如高德地图)→添加至智能体→测试验证 |
优点:操作简便;缺点:局限性大,难直接用于自定义代码 |
| 软件客户端使用 |
本地AI工具调用(如Cursor) |
市场获取服务→安装依赖→申请API Key→配置客户端→测试 |
优点:灵活度高;缺点:需本地部署服务,配置成本高 |
| Spring AI程序使用 |
自定义Java项目集成 |
引入依赖→配置mcp-servers.json→编写客户端配置→开发测试代码→单元测试 |
优点:可定制化强,适配Spring生态;缺点:需具备后端开发能力 |
五、Spring AI MCP开发流程
5.1 服务端开发
| 步骤 |
核心操作 |
关键代码/依赖 |
| 1. 依赖引入 |
选择对应SDK(WebMVC推荐) |
spring-ai-mcp-server-webmvc-spring-boot-starter |
| 2. 配置文件 |
配置服务名称、版本、传输方式(Stdio/SSE) |
多环境配置(stdio/webmvc),指定端口 |
| 3. 服务开发 |
用@Tool注解标记工具方法,注册ToolCallbackProvider Bean |
实现图片搜索等具体功能,解析第三方API响应 |
| 4. 测试打包 |
单元测试验证功能,Maven打包为Jar包 |
测试工具方法可用性,生成可部署包 |
5.2 客户端开发
| 步骤 |
核心操作 |
关键配置/代码 |
| 1. 依赖引入 |
引入客户端Starter依赖 |
spring-ai-mcp-client-spring-boot-starter |
| 2. 配置方式 |
选择Stdio(本地Jar包)或SSE(远程服务地址) |
配置服务路径、参数、API Key |
| 3. 测试验证 |
注入ToolCallbackProvider,通过ChatClient调用工具 |
编写测试用例,验证服务调用结果 |
六、MCP部署方案对比
| 部署方式 |
适用场景 |
优缺点 |
| 本地部署 |
Stdio传输、小型项目 |
优点:配置简单;缺点:服务多了管理繁琐 |
| 远程部署 |
SSE传输、企业级应用 |
优点:可共享访问;缺点:需运维服务器 |
| Serverless部署 |
轻量服务、降本需求 |
优点:免服务器管理、弹性扩容、按使用付费;缺点:受平台限制 |
| 第三方平台提交 |
提升技术影响力、开源共享 |
优点:获取流量和曝光;缺点:需符合平台规范,存在安全审核风险 |
七、MCP安全性分析
| 类别 |
核心内容 |
| 安全现状 |
协议安全性较弱,存在隐私泄露、权限泄露、恶意脚本执行等风险 |
| 问题成因 |
1. 信息不对称(用户无法知晓服务源码);2. 上下文隔离不足(类似SQL注入);3. 大模型缺乏恶意指令识别;4. 缺乏版本控制和更新通知 |
| 改进期望 |
1. 优化工具定义,区分功能描述与执行指令;2. 完善权限控制和用户授权;3. 建立恶意指令检测机制;4. 规范服务市场审计流程 |