【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架
1. 从 StdIO 切到 SSEJava MCP 服务为什么要换传输层如果你已经用 Spring AI 写过 MCP 服务大概率是从 StdIO 模式起步的打成 JAR客户端用stdio拉起进程一问一答本地跑得挺顺。但只要你想把 MCP 服务放到一台独立机器上、让多个客户端同时连、或者让服务端主动推送日志和通知StdIO 就开始别扭了——它本质是进程间管道跨网络就得自己造轮子。SSE 模式解决的就是这件事。MCP 服务启动成一个独立 Web 服务监听端口客户端通过 HTTP 长连接订阅事件流服务端可以主动把工具调用结果、通知推回来。对 Java 开发者来说Spring AI 提供了spring-ai-mcp-server-webflux-spring-boot-starter配合 WebFlux 就能把 MCP 服务暴露成 SSE 端点客户端侧再用spring-ai-mcp-client的 SSE 连接配置接上去。这篇要做的是把两个已经存在的 MCP 服务一个发 CSDN 文章、一个发微信公众号模板消息从 StdIO 改成 SSE然后在 Spring AI 测试工程里通过 SSE 连上它们最后确认工具注册和调用链路都走通。同时所有模型请求统一走 TaoToken 的 API 通道用一把 Key 管住模型调用避免在多个服务里散落不同的模型配置。适合已经写过 MCP 服务、想把它网络化、并且希望模型出口统一管理的 Java 开发者。2. TaoToken 前置统一 Key 与 API 通道准备在动手改 SSE 之前先把模型出口这件事定下来。MCP 服务本身不直接调大模型但集成 MCP 的 Spring AI 客户端要调模型如果每个测试工程、每个服务都各配一套模型地址和 Key后面排查问题会很痛苦。TaoToken 的作用就是提供一个统一的 API 通道模型对话、编码类请求都从这一个入口走。你需要先拿到一把 API Key。登录后进入控制台在 API Keys 页面创建一个新的 Key复制保存好后面配置里会用到。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API Keys 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。拿到 Key 之后模型调用的 base URL 统一指向https://taotoken.net/api。这个地址不加任何查询参数直接作为 OpenAI 兼容接口的 base URL 使用。Spring AI 的 OpenAI starter 支持自定义 base-url所以配置里改一行就行。注意API Key 不要硬编码进代码或提交到仓库用环境变量注入下面配置里我会用${TAOTOKEN_API_KEY}这种占位。如果你还没确认这把 Key 能不能正常调模型可以先去模型对话页面发一条消息验证连通性https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。确认能正常返回再往下做 SSE 集成能少走一段弯路。3. 可复制配置pom、application.yml 与客户端骨架3.1 服务端 pom.xml 关键依赖两个 MCP 服务CSDN 和微信的 pom 结构基本一致核心差异只在 artifactId 和主启动类。SSE 模式必须启用 WebFlux 支持StdIO 模式下这个依赖要注释掉这是切换时最容易漏的一步。dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-server-spring-boot-starter/artifactId /dependency !-- SSE 模式必须启用StdIO 模式请注释掉 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-mcp-server-webflux-spring-boot-starter/artifactId /dependency版本管理用 Spring AI BOM 统一控制这里用1.0.0-M6Spring Boot 用3.4.3Java 17。BOM 导入方式dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement3.2 服务端 application.ymlSSE 模式配置SSE 模式下要监听端口所以web-application-type: none必须注释掉StdIO 模式才需要它。日志的 console/file 配置在 SSE 模式下也建议注释交给容器或启动脚本管理。CSDN 服务端口 8101server: port: 8101 servlet: encoding: charset: UTF-8 force: true enabled: true spring: application: name: mcp-server-csdn ai: mcp: server: name: ${spring.application.name} version: 1.0.0 main: banner-mode: off # stdio 模式打开sse 模式注释掉 # web-application-type: none csdn: api: categories: ${CSDN_API_CATEGORIES} cookie: ${CSDN_API_COOKIE}微信服务端口 8102结构相同把name换成mcp-server-weixin配置项换成微信的original_id/app_id/app_secret/template_id/touser_id端口改 8102。3.3 客户端 application.ymlSSE 连接与 TaoToken 通道测试工程里MCP 客户端从 StdIO 切到 SSE同时把模型出口指向 TaoToken。spring: webflux: client: response-timeout: 120s ai: openai: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} chat: options: model: gpt-4o-mini mcp: client: request-timeout: 360s # stdio 模式打开 # stdio: # servers-configuration: classpath:/config/windows/mcp-servers-config.json sse: connections: mcp-server-csdn: url: http://127.0.0.1:8101 mcp-server-weixin: url: http://127.0.0.1:8102base-url指向 TaoToken 的 API 地址api-key从环境变量读。这样模型请求统一从这一个通道出去后面换模型或加限流都只改这一处。3.4 自定义 MCP 工具回调提供者Spring AI 1.0.0-M6 在 SSE 多连接场景下会出现 MCP 客户端重复注入导致工具列表里出现重复项。解决办法是自定义一个SyncMcpToolCallbackProvider遍历客户端列表按 server name 去重。Bean(syncMcpToolCallbackProvider) public SyncMcpToolCallbackProvider syncMcpToolCallbackProvider(ListMcpSyncClient mcpClients) { MapString, Integer nameToIndexMap new HashMap(); SetInteger duplicateIndices new HashSet(); for (int i 0; i mcpClients.size(); i) { String name mcpClients.get(i).getServerInfo().name(); if (nameToIndexMap.containsKey(name)) { duplicateIndices.add(i); } else { nameToIndexMap.put(name, i); } } ListInteger sortedIndices new ArrayList(duplicateIndices); sortedIndices.sort(Collections.reverseOrder()); for (int index : sortedIndices) { mcpClients.remove(index); } return new SyncMcpToolCallbackProvider(mcpClients); }这段代码的作用是同名客户端只保留第一个后面的删掉保证工具注册表里每个工具只出现一次。4. 验证请求SSE 连接建立与工具调用链路4.1 启动服务并确认 SSE 端点分别启动两个 MCP 服务的 Application 类然后访问curl -N http://127.0.0.1:8101/sse curl -N http://127.0.0.1:8102/sse-N关闭缓冲能看到服务端持续推送的事件流。如果返回 404说明 WebFlux starter 没启用或端口没监听如果连接后立刻断开检查web-application-type是否被误设成none。4.2 客户端发起工具查询在测试类里向模型提问让它列出可用工具String question 有哪些工具可以使用; // 通过 ChatClient 发起请求模型会读取 MCP 注册的工具列表预期返回类似以下是你可以使用的工具 1. functions.saveArticle发布文章到 CSDN需要文章简述、内容、标签、标题。 2. functions.weixinNotice发送微信公众号消息通知需要描述、跳转地址、平台、主题。 3. multi_tool_use.parallel并行执行多个工具。看到saveArticle和weixinNotice同时出现说明两个 SSE 连接都建立成功工具注册链路通了。4.3 实际调用一次工具光列出工具还不够要确认调用链路真的走通。让模型执行一次微信通知帮我发一条微信通知主题是测试描述是 SSE 集成验证平台是公众号模型会生成工具调用参数Spring AI 通过 SSE 把请求发给 8102 端口的 MCP 服务服务端执行后把结果推回来。如果微信侧收到消息说明整条链路——模型请求经 TaoToken 通道、工具调用经 SSE 通道——都正常。5. 本篇常见错排查端口冲突或未监听两个服务端口别设成一样8101 和 8102 分开。启动后先netstat -ano | findstr 8101确认监听状态。SSE 端点 404九成是spring-ai-mcp-server-webflux-spring-boot-starter没启用或者web-application-type: none没注释掉。SSE 模式必须是 Web 应用。工具列表重复没加自定义SyncMcpToolCallbackProvider或者 Bean 名字和默认的冲突了。确认Bean(syncMcpToolCallbackProvider)生效。客户端连不上 SSE检查sse.connections下的 url 是否带协议头http://127.0.0.1:8101这样写不要只写127.0.0.1:8101。模型请求超时webflux.client.response-timeout设 120smcp.client.request-timeout设 360s。模型侧如果走 TaoToken 通道仍超时先去模型对话页面确认 Key 有效。TaoToken 返回 401TAOTOKEN_API_KEY环境变量没注入或者 Key 被删了。去 API Keys 页面重新生成一个。StdIO 配置残留切换后stdio.servers-configuration那几行一定要注释掉否则客户端会同时尝试两种连接方式行为不可预期。6. 后续怎么用从本地验证到长期编码本地跑通 SSE 集成之后下一步通常是把它部署到服务器让 MCP 服务常驻客户端从任意机器连过来。这时候模型出口的统一管理就更重要了——服务多了Key 散落各处很难维护TaoToken 的单一通道能省掉不少配置同步的麻烦。如果你后面要做的是长期编码、Agent 类任务模型调用量大、需要稳定的通道和额度管理可以了解一下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入细节和参数说明看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。我自己的习惯是SSE 服务先在本地把工具调用链路验证透再上服务器模型通道从第一天就用统一 Key后面换模型、加服务都不用回头改一堆配置。

相关新闻

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

模型评测人工智能大模型AI 评测 【免费下载链接】opencompass OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, scie…

2026/9/28 9:43:09 阅读更多 →
快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 网站做好了没人访问,这是很多老板最头疼的事。你花大价钱做的官网,设计精美、功能齐全,但打开一看,流量为零,咨询为零。这时候你才意识到,问题不在“做没做”,而在“怎么快速做出来并推向市场”。面…

2026/9/28 9:43:09 阅读更多 →
YOLOv5车辆检测实战:从car_dataset-1到树莓派部署

YOLOv5车辆检测实战:从car_dataset-1到树莓派部署

简介:本资源是一个专为车辆目标检测任务构建的高质量标注数据集,适用于YOLOv5、YOLOv3及SSD等主流检测模型的训练与验证,面向计算机视觉初学者、算法工程师及智能交通项目开发者,有效解决夜间、白天及俯视视角下车辆识别的数据匮乏…

2026/9/28 9:42:00 阅读更多 →

最新新闻

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

搞车载总线测试的工程师,电脑里大概率都装着一套CANoe。我最早接触CANoe是刚入行那会儿,跟着前辈在项目里做网络测试,从报文发送、DBC解析到UDS诊断,基本全是靠Vector这套工具撑起来的。说实话,CANoe确实是这个行业的标…

2026/9/28 9:43:09 阅读更多 →
从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

1. 日榜的"热度"到底是怎么算出来的先别急着收藏仓库。每天打开 GitHub 的 Trending 页面,你看到的是过去 24 小时内 Star 增量最高的仓库,周榜和月榜则分别看一周、一个月内的增量。官方没有公开完整排序算法,但用久了会发现&…

2026/9/28 9:43:09 阅读更多 →
【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/28 9:43:09 阅读更多 →
OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

模型评测人工智能大模型AI 评测 【免费下载链接】opencompass OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, scie…

2026/9/28 9:43:09 阅读更多 →
快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 网站做好了没人访问,这是很多老板最头疼的事。你花大价钱做的官网,设计精美、功能齐全,但打开一看,流量为零,咨询为零。这时候你才意识到,问题不在“做没做”,而在“怎么快速做出来并推向市场”。面…

2026/9/28 9:43:09 阅读更多 →
YOLOv5车辆检测实战:从car_dataset-1到树莓派部署

YOLOv5车辆检测实战:从car_dataset-1到树莓派部署

简介:本资源是一个专为车辆目标检测任务构建的高质量标注数据集,适用于YOLOv5、YOLOv3及SSD等主流检测模型的训练与验证,面向计算机视觉初学者、算法工程师及智能交通项目开发者,有效解决夜间、白天及俯视视角下车辆识别的数据匮乏…

2026/9/28 9:42:00 阅读更多 →

日新闻

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?…

2026/9/28 0:00:34 阅读更多 →
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例…

2026/9/28 0:00:34 阅读更多 →
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。…

2026/9/28 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 5:40:26 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 9:47:26 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/28 8:07:01 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/27 9:12:14 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/28 3:51:11 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →