Arthas MCP Server 实战指南:用 AI 工具调用驱动 Java 诊断
2026/9/19 23:49:30 网站建设 项目流程

Arthas MCP Server 实战指南:用 AI 工具调用驱动 Java 诊断

【免费下载链接】arthasAlibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas项目地址: https://gitcode.com/gh_mirrors/ar/arthas

Arthas MCP Server 是 Alibaba Java 诊断利器 Arthas 的实验性模块,它实现了基于 MCP(Model Context Protocol,版本 2025-03-26)协议的服务端,通过 HTTP/Netty 提供统一的 JSON-RPC 2.0 接口,让 AI 助手(如 Cherry Studio、Cline 等)能够以"工具调用"(tool calling)的方式直接执行 Arthas 诊断命令。读完本文,你将掌握 arthas-mcp-server 的架构原理、26 个诊断工具的完整清单、配置启动步骤,以及如何在 AI 客户端中接入并完成认证。

模块定位与架构概览

什么是 Arthas MCP Server

MCP(Model Context Protocol)是由 Anthropic 提出的标准化协议,用于连接 AI 助手与外部工具和数据源。arthas-mcp-server是 Arthas),它把 Arthas 的终端命令封装成 MCP 协议下的"工具"(Tool),AI 客户端通过标准的 JSON-RPC 2.0 请求即可触发诊断动作,从而实现"自然语言下指令 → AI 调用工具 → 返回诊断结果"的闭环。

从模块依赖看,arthas-mcp-server仅依赖arthas-model与 Netty(netty-buffernetty-handlernetty-transportnetty-codec-http)、fastjson2、Jackson 2.18.1 与 slf4j,Java 编译级别为 8,说明它是一套轻量、独立的协议服务端实现,不耦合 Arthas 核心的 shell 层。

服务端分层与启动链路

MCP 服务端代码位于 arthas-mcp-server/src/main/java/com/taobao/arthas/mcp/server,主要分为四层:

  • protocol/spec:MCP 协议规范层,定义了McpSchemaMcpSessionMcpTransportMcpServerTransportProvider、事件存储EventStore等抽象与规范类,对应 MCP 协议 2025-03-26 版本;
  • protocol/server:Netty 服务端实现,包括McpNettyServerMcpStatelessNettyServer、HTTP 请求处理器(McpHttpRequestHandlerMcpStreamableHttpRequestHandlerMcpStatelessHttpRequestHandler)、传输层(NettyStreamableServerTransportProviderNettyStatelessServerTransport)以及初始化握手McpInitRequestHandler
  • tool:工具抽象层,定义了Tool/ToolParam注解、ToolDefinition工具定义、ToolCallback回调以及基于 JSON Schema 的入参校验生成器JsonSchemaGenerator
  • task:任务管理扩展层,提供TaskManagerTaskStoreTaskMessageQueue以及InMemoryTaskStore等实现,支持长时间运行工具的异步任务化。

在 Arthas 核心模块中,ArthasMcpBootstrap(core/src/main/java/com/taobao/arthas/core/mcp/ArthasMcpBootstrap.java)负责接收配置并创建ArthasMcpServer,后者(core/src/main/java/com/taobao/arthas/core/mcp/ArthasMcpServer.java)完成实际的启动工作:

  1. 注册 Arthas 特定的 JSON 过滤器(McpObjectVOFilter);
  2. 通过McpServerProperties.Builder构建服务端配置;
  3. 扫描com.taobao.arthas.core.mcp.tool.function基础包下的全部工具并分类;
  4. 按协议模式启动 Streamable 或 Stateless 服务器;
  5. 在启动日志中打印MCP EndpointTransport mode

其中命令的真正执行者是一个关键的CommandExecutor接口(arthas-mcp-server/src/main/java/com/taobao/arthas/mcp/server/CommandExecutor.java),它抽象了 Arthas 命令的同步/异步执行、session 生命周期管理、结果拉取、任务中断与认证注入等能力,是 MCP 工具层与 Arthas 核心命令引擎之间的桥梁。

两种传输协议模式

McpServerProperties.ServerProtocol枚举(McpServerProperties.java)可以看出,服务端支持两种模式:

模式枚举值特点
STREAMABLE(默认)STREAMABLE有状态模式,通过 HTTP/SSE 维持持久连接,支持流式工具、进度通知与会话状态,适合交互式诊断
STATELESSSTATELESS无状态模式,每个请求相互独立,适合简单的一次性查询

在源码中,协议值通过ServerProtocol.valueOf(protocol.toUpperCase())解析,非法值会被记录警告并回退到默认的STREAMABLE;Streamable 模式还会额外初始化ArthasCommandSessionManager会话管理器与固定大小的任务线程池(线程名为mcp-task-*,使用SynchronousQueue无缓冲队列 +AbortPolicy兜底拒绝策略),避免 I/O 密集任务污染公共 ForkJoinPool。

支持的 26 个诊断工具清单

Arthas MCP Server 将 Arthas 命令封装为 26 个工具(对应core模块 core/src/main/java/com/taobao/arthas/core/mcp/tool/function 下按basic1000jvm300klass100monitor200等包分类的*Tool.java实现),按功能分为三大类:

JVM 相关工具(13 个)

工具功能描述
dashboard实时展示 JVM/应用面板,支持自定义刷新间隔和次数控制
heapdump生成 JVM heap dump 文件,支持--live选项只导出存活对象
jvm查看当前 JVM 的信息
mbean查看或监控 MBean 属性信息,支持实时刷新和模式匹配
memory查看 JVM 的内存信息
thread查看线程信息及堆栈,支持查找阻塞线程和最忙线程
sysprop查看或修改系统属性,支持动态修改 JVM 系统属性
sysenv查看系统环境变量
vmoption查看或更新 VM 选项,支持动态调整 JVM 参数
perfcounter查看 Perf Counter 信息,显示 JVM 性能计数器
vmtool虚拟机工具集合,支持强制 GC、获取实例、线程中断等
getstatic查看类的静态字段值
ognl执行 OGNL 表达式,动态调用方法和访问字段

Class/ClassLoader 相关工具(8 个)

工具功能描述
sc查看 JVM 已加载的类信息,支持详细信息和统计
sm查看已加载类的方法信息,显示方法签名和修饰符
jad反编译指定已加载类的源码,将字节码反编译为 Java 代码
classloaderClassLoader 诊断工具,查看类加载器统计、继承树、URLs
mc内存编译器,将 Java 源码编译为字节码文件
redefine重定义类,加载外部 class 文件重新定义 JVM 中的类
retransform重新转换类,触发类的重新转换和字节码增强
dump将 JVM 中实际运行的 class 字节码导出到指定目录

监控诊断工具(5 个)

工具功能描述
monitor实时监控指定类的指定方法的调用情况
stack输出当前方法被调用的调用路径,帮助分析方法的调用链路
trace追踪方法内部调用路径,输出每个节点的耗时信息,支持条件过滤和耗时阈值设置
tt方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,支持事后查看和重放
watch观察指定方法的调用情况,包含入参、返回值和抛出异常等信息,支持实时流式输出

这些工具在服务启动时通过DefaultToolCallbackProvider扫描注册,并依据tool.taskSupport属性被分类为普通工具(FORBIDDEN)、可选任务工具(OPTIONAL)与必需任务工具(REQUIRED)。其中,watch、trace、monitor 等长时间运行工具在 Streamable 模式下可注册为任务感知工具(task-aware tool),配合内存版InMemoryTaskStore(任务 TTL 默认 30 分钟)与InMemoryTaskMessageQueue实现异步任务的创建、查询与取消(对应tasks/listtasks/canceltools/call增强等能力),从源码结构看这是为长耗时诊断命令准备的异步化方案。

快速开始:从配置到 AI 客户端接入

1. 配置 MCP 服务

首先在arthas.properties中配置 MCP 服务的访问路径。该文件位于 core/src/main/java/arthas.properties,默认配置为:

# MCP (Model Context Protocol) configuration arthas.mcpEndpoint=/mcp

配置项由Configure类(core/src/main/java/com/taobao/arthas/core/config/Configure.java)承载,ArthasBootstrap在启动时会检测该配置并触发 MCP 服务初始化。arthas.properties还支持以下 MCP 相关配置项:

配置项说明默认值
arthas.mcpEndpointMCP 服务的访问路径/mcp
arthas.mcpProtocol传输协议模式:STREAMABLE(有状态)或STATELESS(无状态)STREAMABLE
arthas.httpPortHTTP 服务端口8563
arthas.password认证密码(开启认证时使用)

2. 启动应用

正常启动 Arthas 或带有 Arthas 的 Java 应用后,MCP 服务会在 HTTP 端口 8563 上对外暴露。可以先用 curl 验证服务是否就绪:

curl http://localhost:8563/mcp

如果返回 MCP 协议相关信息,说明服务已成功启动。服务端启动日志中也会打印MCP EndpointTransport mode两行信息,便于确认实际生效的端点与协议。

3. 在 AI 客户端中配置 MCP 服务器

在 Cherry Studio、Cline 等 AI 客户端的设置中添加 MCP 服务器:

{ "mcpServers": { "arthas-mcp": { "type": "streamableHttp", "url": "http://localhost:8563/mcp" } } }

配置完成后,AI 即可通过工具调用方式执行 Arthas 命令,例如"看一下这个 JVM 的线程状态""追踪 demo.MathGame 的 run 方法"等,AI 会选择合适的工具(threadtrace等)完成诊断。

开启认证:Bearer Token 鉴权

当在arthas.properties中设置了arthas.password时,MCP Server 会自动开启鉴权功能,AI 客户端需要在请求头中携带 Bearer Token,token 值就是配置的密码本身

配置文件示例:

arthas.password=your-secure-password

AI 客户端配置示例:

{ "mcpServers": { "arthas-mcp-streamable-server": { "type": "streamableHttp", "url": "http://localhost:8563/mcp", "headers": { "Authorization": "Bearer your-secure-password" } } } }

注意:Authorizationheader 中的 token 必须与arthas.password配置的值完全一致,否则鉴权失败。

从源码看,认证支持由 core/src/main/java/com/taobao/arthas/core/mcp/util/McpAuthExtractor.java 与协议层的McpAuthExtractor(arthas-mcp-server/src/main/java/com/taobao/arthas/mcp/util/McpAuthExtractor.java)实现:认证主体(subject)会被挂载到 Netty Channel 的AttributeKeyarthas.auth.subject)上,供后续命令执行时注入 session;同时支持通过X-User-Id请求头携带用户 ID,用于命令执行的统计上报。BasicHttpAuthenticatorHandler(core/src/main/java/com/taobao/arthas/core/shell/term/impl/http/BasicHttpAuthenticatorHandler.java)也会对 MCP 端点做统一认证校验。

进阶:协议模式与配置要点

显式指定协议模式

默认情况下服务以STREAMABLE模式启动,如需切换为无状态的STATELESS模式,可在arthas.properties中显式配置:

arthas.mcpEndpoint=/mcp # 可选,默认为 STREAMABLE arthas.mcpProtocol=STREAMABLE

两种模式的取舍:Streamable 适合 watch、trace、monitor 等需要流式输出和会话状态的交互式诊断场景;Stateless 模式每个请求相互独立,适合一次性查询,且该模式不注册任务感知工具(源码中enableTasks = false),所有工具一律以普通工具方式注册。

服务端默认参数

McpServerProperties.Builder(McpServerProperties.java)的默认值可以看出服务端的关键默认参数:

参数默认值说明
namemcp-server服务端名称,实际启动时被设置为arthas-mcp-server
version1.0.0服务端版本号
mcpEndpoint/mcpMCP 端点路径
requestTimeout10 秒请求超时时间
initializationTimeout30 秒MCP 初始化握手超时时间
toolChangeNotificationtrue工具变更通知能力
protocolSTREAMABLE传输协议模式

总结

Arthas MCP Server 打通了"AI 大模型 ↔ MCP 协议 ↔ Arthas 命令引擎"的链路,让 Java 应用的日常诊断从"人肉敲命令"演进为"自然语言对话式诊断"。它基于 Netty 与 JSON-RPC 2.0 实现了标准 MCP 服务端(支持 Streamable HTTP 与 Stateless 两种传输模式),内置 26 个覆盖 JVM 监控、Class/ClassLoader 诊断与方法级追踪的工具,并提供 Bearer Token 认证与异步任务扩展能力。如需深入了解,可继续阅读:

  • 模块源码:arthas-mcp-server/src/main/java/com/taobao/arthas/mcp/server
  • 核心装配与工具扫描:core/src/main/java/com/taobao/arthas/core/mcp
  • 官方文档:site/docs/doc/mcp-server.md 与英文版 site/docs/en/doc/mcp-server.md

提示:Arthas MCP Server 目前属于实验性功能,接口与配置可能在后续版本中调整,请以当前仓库实际内容为准。

【免费下载链接】arthasAlibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas项目地址: https://gitcode.com/gh_mirrors/ar/arthas

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询