当前位置: 首页 > news >正文

10.Spring ai alibaba MCP本地远程

📌 MCP本地&远程调用

🧩 一、概述

🐙1. 两个互联领域的重大挑战

第一、Agent 与 Tools(工具)的交互

Agent需要调用外部工具和APl、访问数据库、执行代码等。 ->mcp

第二、Agent 与 Agent(其他智能体或用户)的交互

Agent 需要理解其他Agent的意图、协同完成任务、与用户进行自然的对话。 ->A2A

🐙2. 如何学智能体

  • Java语言
  • +
  • Spring Al / LangChain / LangChain4J ==> Al智能落地项目
  • +
  • MCP

🛠️ 二、mcp能干什么

  1. 举例1:开发部署:开发者通过自然语言指令“部署新版本到测试环境”,触发MCP链式调用GitLab API(代码合并)、Jenkins API(构建镜像)、Slack API(通知团队)。
  2. 举例2: SQL查询:开发者通过自然语言输入,比如“查询某集团部门上个季度销售额”,就能查询出数据库的数据,并结合大模型进行回答,不再需要编写SQL,MCP自动转换为精准SQL语句并执行。
  3. 举例3:开发部署:开发者通过自然语言指令“部署新版本到测试环境”,触发MCP链式调用GitLab APl(代码合并)、Jenkins APl(构建镜像)、Slack APl(通知团队)。
  4. 举例4:旅游规划:当我要去旅行时,旅行规划助手通过MCP同时调用天气APl(获取目的地气象)、交通API(查询航班动态)、地图API(规划路线),AI自动生成带实时数据的行程方案。
  5. 举例5:联网搜索:我们在与LLM交互时,经常需要联网搜索最新信息以减少幻觉。然而,这里也存在问题:
    • ① 并非所有聊天机器人都支持联网功能
    • ② 即使支持联网,也可能不包含你习惯使用的搜索引擎。
  6. 举例6:业绩查询:用户询问“查询上季度营业额”,MCP自动组合调用CRM系统API(获取客户数据)+财务系统API(调取报表)+邮件APl(发送总结报告)。

📚 三、mcp是什么

🐙1. mcp理解

  • MCP(Model Context Protocol,模型上下文协议):2024年11月底,由Anthropic推出的一种开放标准。旨在为大语言模型(LLM)提供统一的、标准化方式与外部数据源和工具之间进行通信。
  • 传统AI集成的问题:这种为每个数据源构建独立连接的方式,可以被视为一个M*N问题。问题:架构碎片化,难以扩展,限制了A获取必要上下文信息的能力
  • MCP解决方案:提供统一且可靠的方式来访问所需数据,克服了以往集成方法的局限性。MCP作为一种标准化协议,极大地简化了大语言模型与外部世界的交互方式,使开发者能够以统一的方式为AI应用添加各种能力
  • 官方文档:https://modelcontextprotocol.io/introduction

🐙2. 谁支持了MCP

  • 2024年11月底:Anthropic推出了MCP。目标就是能在Agent的开发过程中,让大模型更加便捷地调用外部工具。
  • 2025年2月份:Cursor(AI代码编辑器)正式宣布加入MCP功能支持,一举将MCP推到了全体开发人员面前!
  • 2025年3月27日:OpenAI智能体支持MCP。OpenAI联合创始人兼首席执行官Sam Altman也特意发文大赞MCP,可见其对Agent的重要性。

🌐 四、mcp那些平台支持

  1. github
    • MCP官方资源:https://github.com/modelcontextprotocol/servers
    • MCP热门资源:https://github.com/punkpeye/awesome-mcp-servers
  2. 其它平台
    • MCP.so:https://mcp.so/zh
    • 阿里云百炼:https://bailian.console.aliyun.com/?tab=mcp#/mcp-market
    • Glama:https://glama.ai/mcp/servers
    • Smithery:https://smithery.ai
    • cursor:https://cursor.directory

🎯 五、mcp应用场景&通信机制

🐙1. 应用场景

应用领域典型场景MCP价值代表实现
智能编程助手代码生成、Bug修复、API集成安全访问本地代码库、CI/CD系统Cursor、VS Code插件
数据分析工具自然语言查询数据库、可视化生成安全查询内部数据库、连接BI工具XiYanSQL-MCP、数据库MCP服务器
企业知识管理知识库查询、文档生成、邮件撰写安全访问内部文档、保护隐私数据文件系统MCP、Email-MCP
创意设计工具3D建模、图形生成、UI设计与专业软件无缝集成Blender MCP、浏览器自动化
工作流自动化多系统协调、事件驱动流程跨系统安全协作Cloudflare MCP、AWS自动化套件

🐙2. MCP通信机制

MCP的通信机制根据MCP的规范,当前支持两种通信机制(传输方式):

  1. stdio(标准输入输出):主要用在本地服务上,操作你本地的软件或者本地的文件。比如Blender这种就只能用Stdio因为他没有在线服务。MCP默认通信方式
    • ① 优点
      • 这种方式适用于客户端和服务器在同一台机器上运行的场景,简单。
      • stdio模式无需外部网络依赖,通信速度快,适合快速响应的本地应用。
      • 可靠性高,且易于调试
    • ② 缺点
      • stdio的配置比较复杂,我们需要做些准备工作,你需要提前安装需要的命令行工具。
      • stdio模式为单进程通信,无法并行处理多个客户端请求,同时由于进程资源开销较大,不适合在本地运行大量服务。(限制了其在更复杂分布式场景中的使用)
  2. SSE(Server-Sent Events):主要用在远程通信服务上,服务本身就有在线的APl,比如访问你的谷歌邮件,天气情况等。
    • 场景
      • SSE方式适用于客户端和服务器位于不同物理位置的场景。
      • 适用于实时数据更新、消息推送、轻量级监控和实时日志流等场景
      • 对于分布式或远程部署的场景,基于HTTP和SSE的传输方式则更为合适。
    • 优点
      • 配置方式非常简单,基本上就一个链接就行,直接复制他的链接填上就行

🔧 六、MCP环境安装

🐙1. uvx和npx指令安装

stdio的本地环境安装

stdio的本地环境有两种:

  1. 一种是Python编写的服务
    • uvx命令
      • cmd下安装pip install uv
      • powershell 下安装powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 |iex"
      • 验证uv --version/ uvx --help
  2. 一种用TypeScript编写的服务
    • npx命令
      • 安装 node.js:https://nodeis.org/zh-cn(傻瓜式安装)
      • 验证node -v/ npm -v

💻七、MCP本地应用

🐙1.服务端应用

1️⃣导入依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--mcp-server-webflux--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency>
2️⃣配置文件
server.port=8013
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
spring.application.name=LocalMcpService# ====mcp-server Config=============
spring.ai.mcp.server.type=async
spring.ai.mcp.server.name=weather-mcp-server
spring.ai.mcp.server.version=1.0.0
3️⃣编写工具类(此处简单模拟)
@Service
public class WeatherService
{@Tool(description = "根据城市名称获取天气预报")public String getWeatherByCity(@ToolParam(description = "城市名称") String city){Map<String, String> map = Map.of("北京", "降雨频繁,其中今天和后天雨势较强,部分地区有暴雨并伴强对流天气,需注意","上海", "多云,15℃~27℃,南风3级,当前温度27℃。");return map.getOrDefault(city, "抱歉:未查询到对应城市!");}
}
4️⃣Tool call暴露给外部
    @Beanpublic ToolCallbackProvider weatherTools(WeatherService weatherService){return MethodToolCallbackProvider.builder().toolObjects(weatherService) //加载服务.build();}

🐙2.客户端应用

1️⃣导入依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!--spring-ai-alibaba dashscope--><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency>
2️⃣配置文件
server.port=8014
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
spring.application.name=LocalMcpClientspring.ai.dashscope.api-key=${qwen-api}
spring.ai.mcp.client.type=async
spring.ai.mcp.client.request-timeout=60s
spring.ai.mcp.client.ena
#调用服务端地址bled=true
spring.ai.mcp.client.sse.connections.mcp-server1.url=http://localhost:8013
3️⃣编写工具类
    @Beanpublic ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools){return ChatClient.builder(chatModel).defaultToolCallbacks(tools.getToolCallbacks())  //mcp协议,配置见yml文件.build();}
}
4️⃣服务调用
@RestController
public class McpClientController
{@Resourceprivate ChatClient chatClient;//使用mcp支持// http://localhost:8014/mcpclient/chat?msg=上海@GetMapping("/mcpclient/chat")public Flux<String> chat(@RequestParam(name = "msg",defaultValue = "北京") String msg){return chatClient.prompt(msg).stream().content();}

🐙3.联调测试

GET http://localhost:8014/mcpclient/chat?msg=上海

GET http://localhost:8014/mcpclient/chat?msg=%E4%B8%8A%E6%B5%B7HTTP/1.1 200 
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 05 Oct 2025 02:04:57 GMT上海的天气预报如下:多云,气温在15℃到27℃之间,风向为南风,风力3级,当前温度为27℃。请注意适时增减衣物,合理安排出行。Response code: 200; Time: 3137ms (3 s 137 ms); Content length: 63 bytes (63 B)

🌍八、MCP远程调用

🐙1.导入依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!--spring-ai-alibaba dashscope--><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><!-- 2.mcp-clent 依赖 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId></dependency>

🐙2.百度地图配置文件

mcp地址: https://mcp.so/zh/server/baidu-map/baidu-maps

百度地图api-key地址: https://lbsyun.baidu.com/apiconsole/key

{"mcpServers":{"baidu-map":{"command": "cmd","args": ["/c", "npx", "-y", "@baidumap/mcp-server-baidu-map"],"env":  {"BAIDU_MAP_API_KEY": "你自己申请的key"}}}
}
//aq0gJ4CHpajWZ3LS0XtUougbsUfV8MHp

###🐙 3.配置文件

server.port=8015
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
spring.application.name=ClientCallBaiduMcpServer
# ====SpringAIAlibaba Config=============
spring.ai.dashscope.api-key=${qwen-api}
# ====mcp-client Config=============
spring.ai.mcp.client.request-timeout=20s
spring.ai.mcp.client.toolcallback.enabled=true
spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-server.json5

🐙4.编写工具类

@Configuration
public class ClientMcpConfig {@Beanpublic ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {return ChatClient.builder(chatModel)//mcp协议,配置见yml文件,此处只赋能给ChatClient对象.defaultToolCallbacks(tools.getToolCallbacks()).build();}@Beanpublic RestClient.Builder restClientBuilder() {return RestClient.builder();}
}

🐙5.服务调用

    /*** 添加了MCP调用能力* http://localhost:8015/mcp/chat?msg=查询怀柔苏峪口站天气*/@GetMapping("/mcp/chat")public Flux<String> chat(@RequestParam(name = "msg", defaultValue = "查询怀柔苏峪口站天气") String msg) {return chatClient.prompt(msg).stream().content();}

🐙6.测试

GET http://localhost:8015/mcp/chat?msg=%E6%9F%A5%E8%AF%A2%E6%80%80%E6%9F%94%E8%8B%8F%E5%B3%AA%E5%8F%A3%E7%AB%99%E5%A4%A9%E6%B0%94HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: text/plain;charset=UTF-8怀柔苏峪口站当前天气为小雨,气温19℃,体感温度20℃,相对湿度86%,北风1级,空气质量良好(AQI 39)。**未来几天天气预报:**
- **10月5日(今天)**:小雨,气温12~21℃,北风转西风<3级。
- **10月6日**:小雨转多云,气温13~17℃,南风转北风<3级。
- **10月7日**:多云,气温7~23℃,南风转东北风<3级。
- **10月8日**:小雨,气温5~14℃,南风转东北风<3级。
- **10月9日**:小雨,气温4~10℃,东北风<3级。**生活指数建议:**
- **穿衣**:较舒适,建议穿薄外套或牛仔裤等服装。
- **感冒**:易发,请注意保暖,避免着凉。
- **运动**:较不宜,有降水,推荐在室内进行休闲运动。
- **洗车**:不适宜,两天内有雨。
- **紫外线**:弱,涂擦SPF12-15、PA+护肤品即可。Response code: 200 (OK); Time: 7039ms (7 s 39 ms); Content length: 393 bytes (393 B)

好记性不如赖笔头
写文档下雨了没注意收鞋子衣服,老妈回来骂了我一顿ε(┬┬﹏┬┬)3

http://www.dtcms.com/a/446230.html

相关文章:

  • Python2 和 Python3的区别
  • 哪些网站做的比较好的文化建设的内容
  • 个人网站备案通过后招商外包服务公司
  • 手机网站建设的重点步骤电商网站毕业设计论文
  • 国内网站设计案例欣赏网站推广方法
  • 【LaTeX】 11 LaTeX 字体与间距控制
  • MySQL的联合索引以及其最左前缀原则
  • 小迪web自用笔记55
  • Principal v6.15 中文汉化版安装教程|Mac .dmg 文件安装步骤详解
  • Quantum transfer learning学习笔记
  • 台州做网站多少钱济南建设工程交易网
  • ASP3605电源芯片的性能优化与改进思路
  • 兰亭妙微高端网站设计方案:为什么模板站无法体现品牌价值?
  • 【深度学习01】快速上手 PyTorch:环境 + IDE+Dataset
  • 免费源码html网站怎么做一个个人网页
  • 怎样做网站赚流量什么是域名为什么需要它
  • 南通外贸建站网络系统管理属于什么专业类别
  • 做公号模版网站东莞计算机培训机构哪个最好
  • Doris专题5- Rollup与查询
  • 爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南——千亿级商品比价系统架构与自动化运维
  • XMLHttpRequest 发送json 格式的数据,servlet 接收
  • PCIe协议之复位篇之Fundamental Reset (Cold or Warm Reset) 和 HotReset(一)
  • 数据结构与算法:合集1.0版
  • Redis 常见面试题
  • PostgreSQL透明加密(TDE)技术深度解析:从实现原理到国密合规实践
  • 86-dify案例分享-Qwen3-VL+Dify:从作业 OCR 到视频字幕,多模态识别工作流一步教,附体验链接
  • [ClaudeCode指北] Windows 本地 MCP 服务器配置与管理指南
  • 【LeetCode热题100(34/100)】合并 K 个升序链表
  • 怎么建设网站数据库广告营销策略分析
  • 英文网站营销邢台论坛网