我想做一件事:让 Claude Code 直接跑 Arthas 的 threadjad 这些命令,省掉每次 SSH 上去手敲的麻烦。Arthas 4.x 支持了 MCP,理论上可以让 AI 直接调 Arthas,但实际接的时候卡在两个地方。

本文涉及的主要依赖版本如下:

  • Arthas:4.1.8
  • Claude Code CLI:v2.1.91

MCP 服务怎么开——和我一开始想的不一样

我最初以为 Arthas 的 MCP 是通过启动参数开的,类似 --mcp 这种 flag,试了几种写法都没效果。后来翻了 Arthas 的 Configure 类和 HTTP 处理逻辑才搞明白:MCP 不是独立的服务,而是挂在 HTTP Server 上的一个特殊路径。

具体来说,McpHttpRequestHandler 负责拦截匹配 mcpEndpoint 配置的请求,这个路径需要在 arthas.properties 或系统变量里显式定义,否则默认不开。

解决 Claude Code 的 Stdio 对接问题

搞定服务端之后又碰到一个问题:Arthas MCP 暴露的是 HTTP SSE 流,但 Claude Code 只认 Stdio 接口。所以需要一个中间层把 SSE 转成 Stdio。找了一圈,社区的 mcp-remote 刚好能干这事。

最终配置步骤

开启 Arthas MCP 端点

arthas-boot.jar 的运行目录下创建 arthas.properties

1
2
3
# 开启 MCP 路径,不配的话默认不激活
arthas.mcpEndpoint=/mcp
arthas.httpPort=8563

然后正常启动 Arthas 挂载目标进程,MCP 端点就在 http://localhost:8563/mcp 上了。

用 mcp-remote 桥接到 Claude Code

先装桥接工具:

1
npm install -g mcp-remote

然后在 Claude Code 里添加 Arthas MCP:

1
2
3
4
# 把远端 HTTP SSE 转成本地 Stdio
claude mcp add arthas mcp-remote http://localhost:8563/mcp
# 不用了可以删掉
claude mcp remove arthas

确认连接

claude mcp list 能看到状态:

1
arthas: http://localhost:8563/mcp (HTTP) - ✓ Connected

跑起来的效果

Claude Code 通过 MCP 调用 Arthas 的运行截图