news 2026/4/16 18:30:26

MCP Server 运行模式入门(Streamable HTTP / stdio)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCP Server 运行模式入门(Streamable HTTP / stdio)

MCP Server 运行模式入门(Streamable HTTP / stdio)

目标:把你当前项目里“关键类/方法/字段”与 MCP 协议运行流程对上号,尽量解释“它在做什么、为什么需要它”。

目录

  • 一、Streamable HTTP 模式(基于 WebFlux)
  • 二、stdio 模式(基于标准输入输出)
  • 三、两种模式对比与选型
  • 四、项目内关键类逐段解读(对照源码)
  • 五、常见疑问与排查思路

一、Streamable HTTP 模式(基于 WebFlux)

1. 适用场景

  • 需要把 MCP Server 作为常驻服务部署(本机、服务器、容器)。
  • 需要通过HTTP接入(便于反向代理、网关、HTTPS、负载均衡)。
  • 多客户端或并发调用场景更合适。

2. 核心概念

  • Streamable HTTP:MCP 的一种传输方式,统一通过单一 HTTP 端点传输消息。
  • 端点:例如/mcp/message,客户端在此进行初始化、调用工具与接收服务端推送。
  • WebFlux:Spring 的响应式 Web 容器,用于承载 Streamable HTTP 的路由与流式消息。

3. 运行流程(概念图)

MCP Server (WebFlux)MCP ClientMCP Server (WebFlux)MCP ClientHTTP POST /mcp/message (initialize)1initialize response (capabilities)2HTTP POST /mcp/message (tool call)3tool result / streaming events4

4. 关键配置项(你的项目里)

  • spring.ai.mcp.server.stdio=false
    • 含义:关闭 stdio,启用 HTTP 传输。
  • spring.main.web-application-type=reactive
    • 含义:使用 WebFlux 作为容器。
  • spring.ai.mcp.server.sse-message-endpoint=/mcp/message
    • 含义:Streamable HTTP 端点路径。
  • server.port=8101
    • 含义:HTTP 服务监听端口。

5. WebFlux 与 MVC 的区别(简要对比)

维度WebFluxSpring MVC
编程模型响应式(Reactive Streams)同步阻塞
线程模型少量线程处理大量连接一请求一线程
适合场景高并发、流式传输、SSE传统表单/REST、同步调用
依赖容器Netty/响应式容器Servlet 容器
MCP 适配Streamable HTTP 更自然需要额外适配或走 stdio

二、stdio 模式(基于标准输入输出)

1. 适用场景

  • MCP Server 不需要暴露 HTTP 服务,仅在本机被 MCP Client 调用。
  • 更适合开发调试、小工具、单用户场景。

2. 核心概念

  • stdio:MCP Client 拉起 MCP Server 进程,通过 stdin/stdout 进行 JSON-RPC 通信。
  • 进程生命周期:通常由客户端控制,客户端启动时拉起,结束时退出。

3. 运行流程(概念图)

MCP Server (stdio)MCP ClientMCP Server (stdio)MCP Client启动服务端进程1stdin 写入 initialize2stdout 返回 capabilities3stdin 写入 tool call4stdout 返回结果5关闭进程6

4. 关键配置项(思路说明)

  • spring.ai.mcp.server.stdio=true
    • 含义:启用 stdio 模式。
  • spring.main.web-application-type=none
    • 含义:不启动 Web 容器。

三、两种模式对比与选型

维度Streamable HTTPstdio
通信方式HTTP 单端点流式stdin/stdout
部署形态常驻服务被客户端拉起
并发能力一般
网络要求需要端口无需端口
适用场景多用户/生产单机/开发

四、项目内关键类逐段解读(对照源码)

下面按你项目里的核心类解释“它的意义”和“它做了什么”。

1.StreamableMcpServerConfiguration

文件mcp-core/src/main/java/com/xbk/mcp/server/infrastructure/mcp/StreamableMcpServerConfiguration.java

(1) 类级别注解
  • @Configuration
    • 标识这是 Spring 配置类,负责创建 Bean。
  • @EnableConfigurationProperties(McpServerProperties.class)
    • 绑定spring.ai.mcp.server.*配置。
  • @ConditionalOnClass(...)
    • 只有当 MCP + WebFlux 相关类存在时才启用(避免缺依赖启动失败)。
  • @ConditionalOnExpression("${spring.ai.mcp.server.enabled:true} && !${spring.ai.mcp.server.stdio:true}")
    • 配置启用 MCP 且 stdio 关闭时,才启用 Streamable HTTP。
(2)streamableServerTransportProvider(...)
  • 作用:提供 Streamable HTTP 传输实现
  • 关键点:读取sseMessageEndpoint(默认/mcp/message),并构建 WebFlux 传输提供器。
(3)mcpStreamableRouterFunction(...)
  • 作用:把 MCP 的 HTTP 路由注册到 WebFlux 中。
  • 结果:WebFlux 会把/mcp/message交给 MCP 处理。
(4)mcpServerCapabilitiesBuilder()
  • 作用:创建 MCP ServerCapabilities 的 Builder。
  • 结果:后续会把“工具/资源/提示”能力声明进去。
(5)mcpStreamableSyncServer(...)
  • 作用:创建 MCP Server 实例并注册能力
  • 具体流程:
    1. 组装serverInfo(名称、版本)。
    2. 创建McpServer.sync(transportProvider)
    3. 从 Spring 容器里收集 Tool/Resource/Prompt。
    4. 注册到serverBuilder
    5. 设置capabilitiesBuilder
    6. build()生成 MCP Server。
(6) 关键字段含义
  • McpStreamableServerTransportProvider transportProvider
    • HTTP 传输层(Streamable HTTP),负责消息通道。
  • McpSchema.ServerCapabilities.Builder capabilitiesBuilder
    • MCP 服务端能力声明。
  • ObjectProvider<List<ToolCallback>> toolCallbacksProvider
    • Spring 容器里所有 @McpTool 形成的回调。

2.McpServerProperties

文件mcp-core/src/main/java/com/xbk/mcp/server/infrastructure/mcp/McpServerProperties.java

  • enabled:是否启用 MCP Server。
  • name/version:用于 initialize 返回的服务端标识。
  • stdio:是否走 stdio 传输。
  • sseMessageEndpoint:Streamable HTTP 端点。
  • toolChangeNotification/resourceChangeNotification/promptChangeNotification:能力变更通知开关。

3.HttpClientLogInterceptor

文件mcp-core/src/main/java/com/xbk/mcp/server/infrastructure/logging/HttpClientLogInterceptor.java

  • 作用:统一记录外部 HTTP 请求的请求头、请求体、响应体、耗时。
  • 关键点:
    • requestBody:读取并压成单行日志。
    • response.peekBody(...):读取响应,不消费原始响应流。
    • toSingleLine:把换行替换成\\n以保证日志单行。

4.CsdnToolApplication

文件mcp-tool-csdn/src/main/java/com/xbk/mcp/server/CsdnToolApplication.java

  • 作用:启动 MCP Server(CSDN 模块)并输出启动日志。
  • 说明:它不直接管 MCP 逻辑,真正的 MCP Server 在mcp-core里装配。

五、常见疑问与排查思路

1. Claude Code 显示not authenticated

  • 通常是 MCP 配置 schema 不匹配(type写错、url未指向/mcp/message)。

2. 日志出现协议版本警告

  • 客户端与服务端支持版本不一致,一般会降级继续运行。

3. 工具调用不上

  • 检查:
    • @McpTool是否被扫描到
    • 服务端是否启用了 MCP
    • Tool 是否在容器里生成 Bean

备注:如果你希望“对照源码逐行讲解”

你可以告诉我你最不理解的类或方法,我可以进一步拆成“每一段在做什么”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 17:27:47

光伏巡检服务的技术演进与核心应用分析

光伏巡检服务作为保障光伏系统高效稳定运行的关键环节&#xff0c;近年来在技术创新与行业应用方面取得了显著进展。本文将从技术构成、应用对比、发展趋势等维度&#xff0c;系统梳理光伏巡检服务的当前状态与未来方向&#xff0c;以期为相关从业者提供参考。 一、光伏巡检服…

作者头像 李华
网站建设 2026/4/15 17:00:06

稀疏激活技术揭秘:GPT-OSS-20B高效运行背后的原理

稀疏激活技术揭秘&#xff1a;GPT-OSS-20B高效运行背后的原理 你有没有试过——在一台双卡4090D的机器上&#xff0c;只用16GB显存就跑起一个20B级大模型&#xff1f; 输入一句话&#xff0c;0.8秒内给出专业级回答&#xff1b; 不依赖云端API&#xff0c;本地部署、代码可读、…

作者头像 李华
网站建设 2026/4/16 14:12:24

小白也能懂的GTE-Pro教程:从安装到语义搜索实战

小白也能懂的GTE-Pro教程&#xff1a;从安装到语义搜索实战 你有没有遇到过这些情况&#xff1f; 在公司知识库搜“服务器崩了”&#xff0c;结果返回一堆无关的运维手册&#xff1b; 输入“怎么报销吃饭的发票”&#xff0c;系统却只匹配到标题含“报销”二字的PDF&#xff1…

作者头像 李华
网站建设 2026/4/16 12:29:14

新手友好!mPLUG视觉问答工具从安装到使用全流程

新手友好&#xff01;mPLUG视觉问答工具从安装到使用全流程 你是否曾想过&#xff0c;只需上传一张图片&#xff0c;再用英文问一个问题&#xff0c;就能立刻获得关于这张图的精准解答&#xff1f;不需要联网、不上传云端、不折腾环境——所有分析都在你自己的电脑上完成。今天…

作者头像 李华
网站建设 2026/4/16 14:03:50

GLM-Image高清图像展示:8K细节还原自然风光作品

GLM-Image高清图像展示&#xff1a;8K细节还原自然风光作品 1. 这不是普通AI画图&#xff0c;是能看清松针纹理的自然风光生成器 你有没有试过用AI生成一张雪山照片&#xff0c;结果放大一看——雪是糊的&#xff0c;山是平的&#xff0c;连云层都像一层薄纱贴在天上&#xf…

作者头像 李华
网站建设 2026/4/16 16:27:22

RMBG-2.0参数与预处理详解:1024×1024缩放+归一化+尺寸还原逻辑说明

RMBG-2.0参数与预处理详解&#xff1a;10241024缩放归一化尺寸还原逻辑说明 1. 为什么抠图结果不拉伸&#xff1f;——预处理与还原的底层逻辑 你有没有试过用某些AI抠图工具&#xff0c;上传一张手机拍的竖版人像&#xff08;比如 12001800&#xff09;&#xff0c;结果下载…

作者头像 李华