现在人们打棋牌麻将谁不想赢?手机微乐麻将必赢神器但是手机棋牌麻将是这么好赢的吗?在手机上打棋牌麻将想赢,不仅需要运气,也需要技巧。掌握的棋牌麻将技巧就...
2025-08-16 0
MCP 是一种开放协议,通过标准化的服务器实现,使 AI 模型能够安全地与本地和远程资源进行交互。用大白话讲,MCP 就是一项约定,比如前后端开发接口,需要先定义好 json 数据结构,MCP 就类似于这个定义好的数据结构,但是具体如何生成这个 json 数据结构,不同的人,不同的语言会有不同的实现方式;
解决了 AI 大模型因数据孤岛限制无法发挥潜力的难题。举个例子,以前我们想要 AI 大模型使用我们的数据,要么自己复制粘贴,要么上传下载,其中都需要人参与,MCP 就是 AI 大模型与数据资源中间的一座桥梁,通过 MCP 服务和 MCP 客户端,只要遵循这套协议,就能实现万物互联;
MCP 遵循 CS 架构(客户端-服务端),有三个核心概念:MCP HOST :发起请求的 LLM 应用程序,可以理解为用户请求入口;MCP Client :在应用程序内部,专门与 MCP Server 进行交互的工具,类似 HttpClient 的作用,提供调用本地 MCP Server 和远程 MCP Server 的能力;MCP Server :为 MCP Client 提供各类服务,比如文件操作,数据库操作等资源服务,可本地部署,也可远程部署;
-
MCP Client 的基本工作流程如下:
MCP Server 主要提供三种类型的功能:
以上功能可以为 AI 应用提供丰富的上下文信息和操作能力,从而增强 LLM 大模型的实用性和灵活性。
目前已经出现了很多好玩的 MCP Server,有兴趣的小伙伴可以访问 官方 MCP Server 列表 、MCP.so 、阿里云 MCP 或者 Awesome MCP Server 。
MCP Client 与 MCP Server 通信采用以下两种方式,并且都是使用 JSON-RPC 2.0数据格式进行消息通信:
目前市面上有很多工具可以支持调用 MCP Server,比如 Cursor ,Cline 等,大家有兴趣的可以去了解一下:
安装 nodejs 环境:请安装 nodejs 18+ 以上版本,并保证以下命令生效:
node -vnpm -vnpx -v
安装 python 环境:建议安装 python-3 11 或以上版本 ;
说明 :目前 MCP Server 基本都是使用 Nodejs 或者 Python 编写的,想要使用官方或者第三方的 MCP Server 需要保障本地有对应的运行环境;
接下里开始创建 SpringBoot 项目
pom.xml:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>
application.yml:
spring: ai: openai: chat: options: model: "deepseek-chat" api-key: "xxxxxxxxxxxxxxxxxxxxxxxx" base-url: "https://api.deepseek.com"
上面的 api-key 需要去 deepseek 官网 获取,创建 api-key 后需要充值,否则调用的时候会返回余额不足,影响使用效果;
目前我在 demo 中接了两款 MCP Server,且都在本地运行。
执行以下命令安装对应的 MCP Server 到机器上:
npm install mysql-mcp-servernpm install @modelcontextprotocol/server-filesystem
application.yml 相关配置如下:
spring: ai: mcp: client: stdio: connections: mysql: # Windows操作系统使用npx.cmd,Linux和MacOS使用npxcommand: "npx.cmd" args: # mcp server 名称- "mysql-mcp-server" env: # 数据库ip"MYSQL_HOST": "127.0.0.1" # 数据库服务端口"MYSQL_PORT": "3306" # 数据库用户名"MYSQL_USER": "xxxx" # 数据库密码"MYSQL_PASSWORD": "xxxx" # 数据库名称"MYSQL_DATABASE": "xxxx" filesystem: # Windows 操作系统使用 npx.cmd,Linux 和 MacOS 使用 npxcommand: "npx.cmd" args: - "-y" - "@modelcontextprotocol/server-filesystem" # 在此文件夹内进行文件操作,需根据具体需求调整目标文件夹- "E:\\mcp_test"
import org.springframework.ai.chat.client.ChatClient;import org.springframework.ai.chat.model.ChatModel;import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration public class McpClientConfiguration { @Bean ChatClient chatClient(ChatModel chatModel, SyncMcpToolCallbackProvider toolCallbackProvider) { return ChatClient .builder(chatModel) .defaultTools(toolCallbackProvider.getToolCallbacks()) .build(); } }
import jakarta.annotation.Resource;import org.springframework.ai.chat.client.ChatClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/api/mcp") public class McpClientController {@Resource private ChatClient chatClient;@GetMapping("/ai") String generation(String userInput) { return this.chatClient.prompt() .user(userInput) .call() .content(); } }
至此我们的 demo 项目就搞定了,下面咱们来看看效果如何:
http://127.0.0.1:8081/api/mcp/ai?userInput=请帮我创建一个ai.txt,并在里面写入hello ai!
http://127.0.0.1:8081/api/mcp/ai?userInput=帮我查一下courier.user表中有多少条数据
虽然现在有很多文章聊 MCP 的,但是大多数都是科普文,即使是实战的,也很少有 java 或者 spring 相关的。另一个就是 spring ai 目前还没有 release 版本的 mcp jar 包,很多 LLM 实现上没有完全支持 mcp,导致想要找到合适的 maven 比较困难。
一开始按照网上资料在 application.yml 中配置 MCP Server,一启动项目就报错:
其实是因为 Windows 环境下 npx 命令需要有后缀 cmd:npx.cmd ,不能完全参照网上资料直接写 npx 。也就是说,调用命令需要根据操作系统环境进行调整。
一般在网上找到的 MCP Server 配置如下,以 百度地图 MCP Server 为例:
{ "mcpServers": { "baidu-maps": { "command": "python", "args": [ "-m", "mcp_server_baidu_maps" ], "env": { "BAIDU_MAPS_API_KEY": "<YOUR_API_KEY>" } } }}
或者
{ "mcpServers": { "baidu-map": { "command": "npx", "args": [ "-y", "@baidumap/mcp-server-baidu-map" ], "env": { "BAIDU_MAP_API_KEY": "{您的AK}" } } }}
如果是 python 环境的话,根据文档,需要先安装 MCP Server :
pip install mcp-server-baidu-maps
上面的两类配置最终转换为 application.yml 如下:
Python 版本
spring: ai: mcp: client: stdio: connections: baidu-maps: command: "python.cmd" args: - "-m" - "mcp_server_baidu_maps" env: "BAIDU_MAPS_API_KEY": "<YOUR_API_KEY>"
Nodejs 版本
spring: ai: mcp: client: stdio: connections: baidu-maps: command: "npx.cmd" args: - "-y" - "@baidumap/mcp-server-baidu-map" env: "BAIDU_MAP_API_KEY": "<YOUR_API_KEY>"
第一轮对话:请帮我生成查询 user 表总共有多少条的 sql 语句
返回结果:select count(*) from user; 需要我帮你执行嘛?
第二轮对话:是的,请帮我执行这条查询语句
返回结果:请告诉我你需要执行哪条语句?
上面的示例就是多轮对话上下文丢失的问题,这个问题的处理结果很快在 deepseek 官方文档 找到了解决方案:
也就是说,如果需要保持上下文不丢失,那么需要把所有的历史问答全部发给 deepseek 大模型,这样将带来两个明显的问题:
未来,MCP 有望成为企业数字化转型的核心枢纽 ——从“数据搬运工”进化为“智能决策大脑”。期待这一技术组合持续迭代,为开发者带来更极致的体验,为行业树立高可用、高智能的集成范式标杆。
相关文章
现在人们打棋牌麻将谁不想赢?手机微乐麻将必赢神器但是手机棋牌麻将是这么好赢的吗?在手机上打棋牌麻将想赢,不仅需要运气,也需要技巧。掌握的棋牌麻将技巧就...
2025-08-16 0
您好:这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人...
2025-08-16 0
您好:这款游戏是可以开挂的,软件加微信【添加图中微信】确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人...
2025-08-16 0
发表评论