08-13 MCP 调试工具
✅MCP 调试工具MCP Inspector 是 MCP官方推出的一款可视化调测与调试工具,旨在帮助开发者快速验证 MCP 服务器的实现是否符合规范,并便捷地查看工具(tools)、资源(resources)、事件(events)等内容。它以一个独立的 Web UI 运行,能够与本地或远程 MCP Server 建立连接,实时展示通信内容,是目前最方便的 MCP 开发辅助工具之一。
安装要求本地有nodeJs环境:https://nodejs.org/zh-cn
本地打开cmd,启动命令,不指定版本,默认下载最新版本:
1npx @modelcontextprotocol/inspector@latest
目前最新版本是0.17.5。然后我们就可以打开浏览器访问:http://localhost:6274/
右上角的Transport Type 包含3种类型:Stdio,SSE,Streamable
Streamable HTTP我们选择Streamable 来尝试连接一下,在URL的输入框填写:http://127.0.0.1:8004/stream/test/ap ...
08-12 神奇的 context-path
✅神奇的 context-path相信大家肯定都在 Spring Boot 项目中配置过 server.servlet.context-path,这在微服务或多模块 Web 应用中非常常见,用于给每个服务分配独立的路由前缀。
然而,对于 MCP 的 SSE 机制来说,这个看似普通的 context-path,却可能成为让系统无法通信的关键因素。很多人可能会以为,只要 SSE endpoint 和 message endpoint 配置正确,系统就能正常运行,其实这并不完全。
我将在这里结合自己的亲身经历,为大家讲解这个非常奇怪的问题。尤其是在 MCP Server 与 Client 版本混用的情况下,这个 context-path 很容易让你掉进兼容性的深坑里。
官方issue:
https://github.com/spring-projects/spring-ai/issues/4168
https://github.com/spring-projects/spring-ai/issues/2512
Streamable HTTPMCP Server我们以之前的 Str ...
08-11 MCP 如何实现认证鉴权
✅MCP 如何实现认证鉴权在上一节课,我们解决了安全传输的问题。然而在实际落地中,如何防止 MCP Server 被滥用同样至关重要。
MCP 本质上允许客户端调用各种工具,这些工具可能访问数据库或内部系统 API。一旦缺乏认证和访问控制,非授权客户端就可能冒充合法用户,通过 MCP 调用敏感功能,从而导致数据泄露、系统滥用甚至破坏性操作。
因此,一个真正可用于生产环境的 MCP Server,至少需要解决两个安全问题:传输安全和访问控制。
传输安全:通过 HTTPS 确保数据在传输过程中不被窃取或篡改。
访问控制:通过认证和鉴权机制(如请求头携带 Bearer Token),防止工具被任意调用。
只有同时保障了这两点,MCP 服务才能具备生产环境下的安全能力。
经过前面的学习,我们已经知道了,MCP Server 分为本地服务和远端服务,本地服务就是 Stdio,远端服务就是 SSE 和 Streamable,这两类服务的认证方式也是有所区别。
本地服务我们可以去MCP Server的市场看一下,随便找几个公开的MCP Server,我们都能看出来,他们是通过设置env的环境 ...
08-10 将 MCP 改造为 HTTPS
✅将 MCP 改造为 HTTPSMCP 作为连接大模型与企业数据、业务系统、外部工具的关键协议,其安全性的重要程度不亚于传统 API 接口。虽然在日常开发中,我们为了快速集成,往往会把 MCP Server 部署成简单的 HTTP 服务,尤其在公司内网环境下更是如此。但这种做法在安全性上存在天然隐患。
首先,HTTP 属于明文传输协议,无论是在公司内网还是跨服务调用场景,都非常容易遭受中间人攻击(MITM)。攻击者只需要监听网络流量,就能轻易获取到 MCP 请求内容、上下文数据、模型输出,甚至是用户敏感信息。因此,在对安全性要求严格的企业环境,尤其是金融、运营商、政府、网络安全厂商中,HTTP 版 MCP Server 通常被直接判定为不合规,必须强制升级为 HTTPS/TLS 加密传输 才能上线。
通过HTTPS协议,实现通信加密、防止中间人攻击,确保所有 SSE/Streamable HTTP 通道都在受保护的链路上运行。
改造 MCP Server将 MCP Server 升级为 HTTPS 协议本身并不复杂,流程与普通 Web 服务一致:准备证书、通过 Ng ...
08-09 SSE MCP Server如何实现重连?
✅SSE MCP Server如何实现重连?在 MCP 的早期版本中,还没有出现Streamable http这种方式,主要依赖的就是本地 Stdio,远程 SSE 建立长连接。SSE 是一种典型的单向流式机制,通过一个端点持续监听服务器指令,再通过另一个端点发送消息。在稳定网络环境下,这种模式可以正常工作,但它对长连接的依赖非常强,一旦网络出现抖动、服务端重启、代理回收空闲连接,SSE 管道就会立即断开。
基于上面的问题,Spring AI MCP Client 也没有提供自动重连的能力,一旦 SSE 被中断,客户端实际上就失去了与 MCP Server 的指令通道,工具虽然注册着,但不再响应任何调用,整个智能体就会陷入无工具状态。
客户端无法自行恢复工具能力,只能重新初始化 MCP Client 才能重新建立会话。对于需要长时间稳定运行的企业级智能体系统,这明显无法满足可靠性要求。网络波动在生产环境中不可避免,而服务端升级重启也属于常态,如果 MCP Client 缺乏自愈能力,那么系统的工具链随时可能失效,导致业务流程意外中断。因此,在 SSE 模式下如何实现可靠的重连能力,成为 ...
08-08 Spring AI MCP 调用实现原理
✅Spring AI MCP 调用实现原理通过上一节,我们可以看到 chatclient 调用 mcp server 这个过程非常简洁,是不是很好奇是如何做到的,我们接下来看下源码。
如何注入mcp?我们先从init方法的getToolCallbacks进入,看下做了什么工作:
12345@PostConstructpublic void init() { ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks(); this.chatClient = ChatClient.builder(chatModel) .defaultToolCallbacks(toolCallbacks) .defaultTools() .build();}
发现他这边确实是对McpSyncClient做了一些转换处理,包装成了 SyncMcpToolCallback,这个东西说白了就是将概念的工具转换成了具有可执行能力的 ...
08-07 实战:使用Spring AI开发MCP Client
✅实战:使用Spring AI开发MCP Client
基于之前课程的讲解,我们已经深入了解了 MCP 的原理和概念,以及如何使用 Spring AI 开发 MCP Server,包括 STDIO、SSE 和 Streamable HTTP 三种模式,并使用 VSCode Cline 作为客户端来进行接入调用。
Cline 其实就是内置了 MCP Client,接下来,我们将介绍基于 Spring AI 的 MCP Client 开发,它在操作方式上与 Cline 类似,同时允许我们在项目中灵活定义 Client,使得我们的智能体实现更加丰富的功能。
还是和开发mcp server一样,我们先引包,传统web项目直接无脑用 webmvc 即可,追求响应式编程的可以使用 webflux,依然二选一即可:
1234<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client</artifactId> ...
08-06 实战:使用Spring AI开发MCP Server
✅实战:使用Spring AI开发MCP Server
StdioStdio 模式通过标准输入输出与客户端通信,服务器启动后直接在控制台读写 JSON-RPC 消息,适合本地轻量化工具或无需网络的场景,要求控制台输出完全干净,保证客户端能够正确解析消息。
1234<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency>
如果你的项目是响应式的,可以用这个包,但是不要和mvc混用,在IO密集的接口调用时会发生阻塞卡死。
1234<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webflux</artifactId& ...
08-05 如何接入MCP Server?
✅如何接入MCP Server?接下来就让我们进入实操环节,动手为我们的智能体接入 MCP Server,来亲身感受一下 MCP 的魅力所在。
目前主流已经有多款开发者常用的客户端(MCP Host)支持接入 MCP Server,其中最典型的有:
Cursor
一款面向开发者的智能编程编辑器,原生支持 MCP 协议。Cursor 能通过 MCP 自动从外部系统获取上下文(如代码库、API、数据库等),并在对话或编辑过程中调用工具(tools),几乎是目前最完整的 MCP 客户端。
VS Code Cline
Cline 是 VS Code 中的智能体工作流扩展,它内部基于 MCP 协议与外部工具交互。通过接入 MCP Server,Cline 可以调用你提供的工具、访问资源或工作环境,让 VS Code 也具备了可调用外部工具的能力,最重要的是完全免费。
Claude Desktop
Claude 官方桌面客户端也已经内置 MCP 支持。Claude 可以能读取你的资源、执行工具、调用你注册的服务,这让 Claude 不再只是一个聊天助手,而是真正能够帮助你的智能体。
V ...
08-04 深入理解MCP技术原理(下)
✅深入理解MCP技术原理(下)MCP 传输层的标准化
在上一节中,我们理解了 JSON-RPC,搞定了 MCP 的数据层标准化。如果把 MCP 比作两个人的沟通,JSON-RPC 解决了“大家说什么语言(比如都说中文)”的问题。 那么接下来,我们必须解决“用什么工具通话”的问题。是面对面说话?打电话?还是发传真?这就是我们本节要讲的第二层标准:传输层。
MCP 官方前后共定义了三种主流的标准通信管道,分别对应不同的应用场景:Stdio、SSE(旧) 和 Streamable HTTP(新)。
Stdio (标准输入输出)也就是本地直连,这是 MCP 最原始、最高效的传输方式,也是 Claude、Cursor 等本地客户端智能体的首选集成方式。
技术原理:父子进程 Stdio 传输不涉及任何网络协议(TCP/HTTP)。它的本质是进程间通信。当 MCP Host(如 Cursor)启动一个 MCP Server 时,它实际上是在操作系统中 fork 了一个子进程。
**下行通道 (Host -> Server)**:Host 将 JSON-RPC 请求序列化为字符 ...
