尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何用 Apache Dubbo 把现有 Triple 服务暴露为 MCP Server 并验证工具注册
如何用 Apache Dubbo 把现有 Triple 服务暴露为 MCP Server 并验证工具注册【免费下载链接】dubboThe java implementation of Apache Dubbo. An RPC and microservice framework.项目地址: https://gitcode.com/GitHub_Trending/du/dubbo如果你已经有一套运行在 Tripletri协议上的 Dubbo 服务想让 MCP 客户端如 LLM 应用直接把这些服务方法当作 MCP 工具调用而不是另起一个独立 MCP Server可以在 Provider 侧启用 Apache Dubbo 的dubbo-mcp模块Dubbo 会在应用启动时创建一个 MCP Server把已导出的 Triple 服务方法注册为 MCP 工具并通过 tri 协议对外提供 MCP 端点。仓库中dubbo-demo/dubbo-demo-mcp-server是一个可运行的完整示例本文以它为主路径说明开启方式、服务标记方式以及启动后如何确认工具已注册。前提条件使用仓库源码集成时从仓库根目录构建。根README.md的版本表显示 3.3.7-SNAPSHOT 支持 JDK 1.8 – 25demo 模块的 pom 配置了spring-boot-maven-plugin2.7.18并在 JDK 17 时通过 profilejdk-version-ge-17追加dubbo-spring-boot-3-autoconfigure依赖因此 Spring Boot 2.x 与 3.x 环境均可运行。服务必须以 Triple 协议导出。示例的协议配置为dubbo.protocol.name: tri端口50055。引入 dubbo-mcp 依赖参考 demo 的 pom.xml核心依赖如下dubbo-mcp是关键项其余为 Triple/REST/启动所需dependencies dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-rpc-triple/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-triple-servlet/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-rest-openapi/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-mcp/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-config-spring/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-autoconfigure/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId /dependency /dependenciesdemo 中这些org.apache.dubbo依赖的版本均为${project.version}随源码一起构建如果你基于已发布的 Dubbo 版本集成把版本改为你使用的 Dubbo 版本号即可。demo 还额外依赖了dubbo-registry-zookeeper、dubbo-remoting-netty4、dubbo-serialization-hessian2其application.yml中并没有配置注册中心示例按本地方式运行。开启 MCP Server 配置示例的 application.yml 全文如下spring: application: name: dubbo-mcp-server dubbo: application: name: ${spring.application.name} qos-enable: false protocol: name: tri port: 50055 triple: verbose: true rest: openapi: enabled: true mcp: enabled: true protocol: streamable逐项说明dubbo.protocol.name: triport: 50055MCP 服务通过 tri 协议导出。当没有单独指定 MCP 端口时MCP 端点复用该协议端口见下文端口解析逻辑。dubbo.protocol.triple.rest.mcp.enabled: trueMCP Server 总开关。不打开时应用启动日志会打印MCP service is disabled, skipping initialization且不会注册任何工具。dubbo.protocol.triple.rest.mcp.protocol: streamableMCP 传输方式取值streamable或sse。McpApplicationDeployListener 中这两种值分别构建 Streamable 或 SSE 传输其他值会记录not support protocol xxx错误MCP Server 不会创建。dubbo.protocol.triple.rest.openapi.enabled: true同时开启 REST OpenAPI。工具转换类DubboOpenApiToolConverter依赖DefaultOpenAPIService提供的方法元数据来生成工具。MCP 相关的完整配置项定义在 McpConstant 中除上面用到的两项外还包括配置键用途dubbo.protocol.triple.rest.mcp.port单独指定 MCP 服务端口dubbo.protocol.triple.rest.mcp.session-timeout长连接会话超时代码默认 60dubbo.protocol.triple.rest.mcp.include-patterns/exclude-patterns服务级暴露过滤模式dubbo.protocol.triple.rest.mcp.default.enabled服务未显式声明时的默认启用状态dubbo.protocol.triple.rest.mcp.path.sse/path.messageSSE 与消息路径McpConfig 的说明给出默认值分别为/mcp/sse和/mcp/message将现有 Triple 服务标记为 MCP 工具示例服务 HelloServiceImpl 通过DubboService(mcpEnabled true)声明该服务可暴露为 MCP 工具DubboService(mcpEnabled true) public class HelloServiceImpl implements HelloService { Override public String sayHello(String name) { System.out.println(HelloServiceImpl.sayHello called with: name); ... } ... }注册逻辑在 DubboServiceToolRegistry服务导出时遍历服务接口声明的方法由McpServiceFilter判断每个方法是否暴露通过的方法逐一注册为工具。除注解外McpConstant中还定义了按服务 URL 参数粒度的控制项mcp.enabled、mcp.tool-name、mcp.description、mcp.tags、mcp.priority用于对单个服务做开关与工具命名、描述调整。工具的默认描述模板为Execute method %s from service %s。应用入口 McpDemoApplication 是一个标准 Spring Boot 应用加上EnableDubbo即可SpringBootApplication EnableDubbo public class McpDemoApplication { public static void main(String[] args) { SpringApplication.run(McpDemoApplication.class, args); } }启动应用从仓库根目录执行假设本地 Maven 可访问依赖仓库-am会连带构建 demo 所依赖的 Dubbo 模块# 1. 构建并安装 demo 依赖的模块 ./mvnw -pl dubbo-demo/dubbo-demo-mcp-server -am install -DskipTests # 2. 启动 MCP demo 应用 ./mvnw -pl dubbo-demo/dubbo-demo-mcp-server spring-boot:runMCP 的初始化由McpApplicationDeployListener在应用onStarted阶段完成读取dubbo.protocol.triple.rest.mcp.enabled构建 MCP Server遍历所有已导出的ProviderModel逐个注册工具再把 MCP 端点作为内部服务以 tri 协议导出。验证工具注册启动完成后从日志和端点两个层面确认初始化日志。依次出现以下日志说明 MCP Server 已建立且工具已注册其中{}为实际数量{接口名}为服务接口Initializing MCP server and dynamic service registration MCP server initialized successfully, {} existing tools registered, dynamic registration enabled MCP service exported on: {}demo 的HelloService接口声明了sayHello与greetComplex两个方法若均通过McpServiceFilter的暴露条件日志中的数量应为 2。MCP service exported on:后跟的是导出 URL从中可以确认 MCP 端点的地址与端口——demo 未单独配置mcp.port因此复用 tri 协议端口50055。动态注册日志。启动后新导出的服务会触发 McpServiceExportListener 的动态注册Dynamically registered {} MCP tools for exported service: {}MCP 客户端连接。按所选protocol连接对应端点streamable模式下消息路径默认/mcp/message即http://host:50055/mcp/messagesse模式下为/mcp/sse。客户端通过 MCP 协议列出工具时应能看到由服务方法生成的工具项调用工具后会走 Dubbo 泛化调用打到服务端实现demo 实现里会打印HelloServiceImpl.sayHello called with: name据此可确认调用链路贯通。端口解析顺序见McpApplicationDeployListener.getRegisterPort优先取dubbo.protocol.triple.rest.mcp.port未配置时取name: tri的协议端口再没有则取一个随机可用端口。边界与限制protocol只支持streamable与sse两种取值其他值会记录not support protocol错误并跳过 MCP Server 创建。dubbo.protocol.triple.rest.mcp.enabled未开启时不会初始化任何 MCP 能力日志为MCP service is disabled, skipping initialization此时连接任何 MCP 端点都不会有工具可列。工具是否暴露由McpServiceFilter决定除服务上的mcpEnabled/mcp.enabled外还受include-patterns、exclude-patterns与default.enabled影响方法未通过过滤时该服务不会注册出工具日志中也不会出现对应数量的注册记录。【免费下载链接】dubboThe java implementation of Apache Dubbo. An RPC and microservice framework.项目地址: https://gitcode.com/GitHub_Trending/du/dubbo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Camofox浏览器:基于Firefox源码的隐私定制与指纹伪装方案

Camofox浏览器:基于Firefox源码的隐私定制与指纹伪装方案

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

📅 2026/9/11 8:08:01
2026平替电容笔选购指南:百元档书写体验逼近原装,从延迟到续航全解析

2026平替电容笔选购指南:百元档书写体验逼近原装,从延迟到续航全解析

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

📅 2026/9/11 8:08:01
使用 WSL 的 ProcessExitHandler 委托监控容器进程退出事件(C++ API 指南)

使用 WSL 的 ProcessExitHandler 委托监控容器进程退出事件(C++ API 指南)

使用 WSL 的 ProcessExitHandler 委托监控容器进程退出事件(C API 指南) 【免费下载链接】WSL Windows Subsystem for Linux 项目地址: https://gitcode.com/GitHub_Trending/ws/WSL 导读 ProcessExitHandler 是 WSL(Windows Subsyst…

📅 2026/9/11 8:08:01
MORE NEWS

更多资讯

📰

GHelper 快速上手指南:免费轻量,替代奥创中心管理华硕笔记本

GHelper 快速上手指南:免费轻量,替代奥创中心管理华硕笔记本 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivo…

📰

docker-android:5分钟跑通Docker Android模拟器

docker-android:5分钟跑通Docker Android模拟器 【免费下载链接】docker-android Android in docker solution with noVNC supported, video recording and mcp server 项目地址: https://gitcode.com/GitHub_Trending/do/docker-android 凌晨两点&#xff0…

📰

RA8835与UC18835在单色图形点阵LCD上的替换调试要点

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

📰

C++职责链模式:原理、优化与实战应用

1. 职责链模式基础回顾在C中实现职责链模式前,我们需要先理解这个设计模式的本质。职责链模式(Chain of Responsibility)的核心思想是将请求的发送者和接收者解耦,让多个对象都有机会处理这个请求。这些处理对象被连接成一条链&am…

📰

混合动力电动汽车Simulink建模与能量管理策略解析

1. 混合动力电动汽车Simulink模型概述这个Simulink整车模型完整再现了混合动力电动汽车(HEV)的动力系统架构,包含发动机、电机、电池组、传动系统等核心部件。我在汽车电子控制领域工作多年,发现这类模型对研发团队的价值主要体现在三个方面:…

📰

DNESP32P4 USB Host实战:从硬件供电到U盘挂载全链路解析

1. 这不是“插个U盘就能用”的事:DNESP32P4 USB Host实验的真实门槛你手里的这块DNESP32P4开发板,标着“支持USB Host”,但当你真把U盘插上去,串口打印出一串乱码、挂载失败、甚至根本没反应——这太正常了。我第一次试这个实验时…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬