一、基础定义MCPModel Context Protocol模型上下文协议MCP 模型上下文协议AnthropicClaude 出品方2024.11 开源的开放通用通信标准业内称作AI 领域/应用的 USB-C 通用标准接口用来统一大模型 (LLM) 和外部数据 / 工具的对接规范。MCP由Anthropic在2024年11月推出的开源开放协议被称为‌AI 领域/应用的USB-C通用标准接口‌。它的核心作用是为大语言模型连接外部工具、数据源和服务提供统一的标准化接口解决了过去每个AI模型对接不同工具都需要单独开发定制接口的效率问题简化了AI智能体的开发和扩展。它采用客户端-服务器架构支持同时对接本地资源数据库、本地文件和远程服务GitHub、Slack等API目前已经有上千个社区服务器和集成应用落地OpenAI、百度智能云、支付宝等国内外厂商都已经支持该协议。MCP 服务器聚合网站https://mcp.so/mcp.soAI 领域的 MCP 协议应用商店全球最大 MCP 服务器聚合网站用来给 Claude、Cursor 等 AI 工具外挂扩展能力。二、核心作用解决 N×M 对接痛点无 MCP 时N 个大模型 × M 个工具 N×M 套定制接口每个对接都要单独开发成本极高有 MCP 后模型端实现 1 次 MCP 客户端、工具端实现 1 次 MCP 服务端即可全生态互通NM实现 AI 工具即插即用。AI 领域/应用的USB-C通用标准接口简单说就是给大模型装了一个万能接口让 AI 能连接外部数据和工具就像 USB-C 接口能让电脑连接各种设备一样 。‌‌三、工作原理1、工作原理‌采用客户端 - 服务器架构三层标准架构C/S 架构基于 JSON-RPC2.0‌MCP Host主机‌搭载大模型的应用如 Claude 桌面端、Cursor 编辑器、自研 AI Agent管控用户授权、权限。‌MCP Client客户端Host 内部连接器和 MCP Server 建立会话、收发标准化指令。‌MCP Server服务端对接真实资源对外暴露三类能力Resources资源只读数据本地文件、数据库、接口返回数据给模型做上下文Tools工具可执行函数查天气、读写文件、调用接口、运行代码Prompts提示词预制提示词模板复用工作流2、两种通信传输方式本地进程通信stdio标准输入输出IDE、本地文件 AI 常用低延迟远程网络通信Streamable HTTP/WebSocket跨服务器、云端系统对接。四、三大核心优势标准化降本一套协议对接全量数据源大幅减少重复开发高安全性资源逻辑全在 MCP Server密钥不传给大模型细粒度权限 全操作审计生态通用OpenAI、Google、国内云厂商全兼容现成 MCP 服务文件、MySQL、Notion、Git、搜索引擎等开箱即用。五、落地使用场景AI 编程 IDECursor 通过 MCP 直接读写项目文件、调用终端企业知识库大模型通过 MCP 连内部数据库、文档系统做私有 RAGAI 智能体 Agent自动查实时行情、机票、企业 CRM 数据突破模型训练数据截止限制、减少幻觉。六、和 Function Calling、RAG 区别RAG查资料、补静态知识只读、给上下文Function Calling模型侧私有规则仅单模型调用少量函数绑定模型MCP跨厂商开放协议独立于大模型一套服务全模型通用支持海量异构数据源。维度RAG检索增强生成Function Call函数调用MCP (Model Context Protocol模型上下文协议)本质属性技术方案 / 架构范式检索 生成大模型内置原生能力模型输出规范开放通信协议 (JSON-RPC)、通用标准接口核心目的从知识库拉取静态文档数据塞进 Prompt解决幻觉、知识滞后让 LLM 自主生成入参调用本地 / 远端自定义函数获取实时数据统一 LLM 和外部服务通信标准一次开发全模型 / 全客户端复用工具数据流向单向只读知识库→向量检索→上下文→LLM只能拿数据不能改业务数据单次短回合LLM 出参→应用层执行函数→结果回灌 LLM双向读写 长连接客户端 (LLM)↔MCP 服务 (DB / 文件 / API)可增删改查、动态注册工具通俗比喻开卷查参考书写答案前翻资料随身小纸条呼叫手边工具AI 通用 USB 接口即插即用各类外设服务七、Java中应用1. pom.xml所有必需依赖?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId version3.2.0/version /parent groupIdcom.example/groupId artifactIdspringboot-mcp/artifactId version0.0.1/version dependencies !-- SpringBoot -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency !-- MCP 官方SDK -- dependency groupIdcom.anthropic/groupId artifactIdmcp-sdk/artifactId version1.0.0/version /dependency !-- MySQL -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope /dependency !-- Redis -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency !-- 工具类 -- dependency groupIdcom.alibaba/groupId artifactIdfastjson2/artifactId version2.0.32/version /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin /plugins /build /project2. application.yml配置spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: localhost port: 6379 server: port: 80803. 主程序SpringBoot MCP 全功能SpringBootMcpApplication.javaimport com.anthropic.mcp.server.McpServer; import com.anthropic.mcp.server.Tool; import com.alibaba.fastjson2.JSON; import jakarta.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.Map; SpringBootApplication public class SpringBootMcpApplication { public static void main(String[] args) { SpringApplication.run(SpringBootMcpApplication.class, args); } } // 演示Service可注入任何Bean Service class DemoService { public String hello(String name) { return SpringBoot服务返回你好 name; } } // MCP 核心服务 Component class FullMcpServer { Autowired private DemoService demoService; Autowired private JdbcTemplate jdbcTemplate; Autowired private StringRedisTemplate redisTemplate; PostConstruct public void start() { McpServer server new McpServer(); // 1. 调用SpringBoot服务 server.registerTool(Tool.builder() .name(callSpringService) .description(调用SpringBoot服务) .inputSchema( {type:object,properties:{name:{type:string}},required:[name]}) .handler(p - demoService.hello(p.get(name).getAsString())) .build() ); // 2. 执行SQL server.registerTool(Tool.builder() .name(queryDB) .description(执行SQL查询) .inputSchema( {type:object,properties:{sql:{type:string}},required:[sql]}) .handler(p - { ListMapString, Object list jdbcTemplate.queryForList(p.get(sql).getAsString()); return JSON.toJSONString(list); }) .build() ); // 3. Redis操作 server.registerTool(Tool.builder() .name(setRedis) .description(设置Redis) .inputSchema( {type:object,properties:{k:{type:string},v:{type:string}},required:[k,v]}) .handler(p - { redisTemplate.opsForValue().set(p.get(k).getAsString(), p.get(v).getAsString()); return Redis设置成功; }) .build() ); // 4. 读取文件 server.registerTool(Tool.builder() .name(readFile) .description(读取文件) .inputSchema( {type:object,properties:{path:{type:string}},required:[path]}) .handler(p - Files.readString(Paths.get(p.get(path).getAsString()))) .build() ); // 5. 执行系统命令 server.registerTool(Tool.builder() .name(runCmd) .description(执行命令) .inputSchema( {type:object,properties:{cmd:{type:string}},required:[cmd]}) .handler(p - { Process process new ProcessBuilder( System.getProperty(os.name).toLowerCase().contains(win) ? new String[]{cmd, /c, p.get(cmd).getAsString()} : new String[]{sh, -c, p.get(cmd).getAsString()} ).redirectErrorStream(true).start(); return new String(process.getInputStream().readAllBytes()); }) .build() ); new Thread(server::startStdio).start(); System.out.println(✅ SpringBoot MCP 服务已启动全功能版); } }4. 接入 Cursor直接用打开 Cursor 设置 → MCPjson{ mcpServers: { springboot-full: { command: java, args: [-jar, target/springboot-mcp-0.0.1.jar] } } }5. 你可以直接对 AI 说帮我调用 Spring 服务名字是张小明帮我查询数据库select * from user帮我设置 Rediskeyname value 李四帮我读文件application.yml帮我执行命令dir /ifconfig