Skip to main content
Glama
narcissux

Arthas MCP Proxy

by narcissux

Arthas MCP Proxy

Ein auf MCP (Model Context Protocol) basierender Arthas-Diagnose-Proxy-Server, der es ermöglicht, sich in Claude-Gesprächen dynamisch per SSH mit beliebigen Servern zu verbinden, um JVM-Echtzeitdiagnosen durchzuführen.

Funktionsmerkmale

  • Dynamische Verbindung im Gespräch: Übergeben Sie direkt SSH-Adresse, Benutzername, Passwort/Schlüssel, um sich in Echtzeit mit dem Zielserver zu verbinden.

  • Parallele Diagnose mehrerer Prozesse: Jeder JVM-Prozess verfügt über einen unabhängigen Arthas-Agenten, PID-Wechsel erfolgen ohne Verzögerung.

  • Automatische Wiederverwendung von Verbindungspools: SSH-Verbindungen werden nach user@host:port zwischengespeichert und nach 5 Minuten Inaktivität automatisch freigegeben.

  • Automatisches Arthas-Attach: Beim ersten Zugriff auf eine Ziel-PID erfolgt automatisch ein Attach im Hintergrund, bei weiteren Zugriffen wird die Verbindung wiederverwendet.

  • SSE-Remote-Bereitstellung: Unterstützt die permanente Bereitstellung im HTTP-SSE-Modus, wobei Claude über eine URL eine Verbindung herstellt.

  • Unterstützung für Offline-Builds: Ermöglicht Docker-Builds in internen Netzwerken ohne Internetzugang durch vorab heruntergeladene whl-Pakete.

MCP-Tool-Liste

Tool-Name

Beschreibung

connect_ssh

Baut eine SSH-Verbindung auf und gibt eine session_id zurück

list_java_processes

Listet Java-Prozesse auf der Zielmaschine auf (zeigt Arthas-Attach-Status an)

thread_dump

Ruft den Thread-Stack ab (top N nach CPU)

heap_info

Zeigt Speicher-/Dashboard-Informationen an

watch_method

Überwacht Methodenparameter und Rückgabewerte

exec_command

Führt einen beliebigen Arthas-Befehl aus

disconnect_ssh

Trennt die SSH-Verbindung und gibt Ressourcen frei

Modell für parallele Diagnosen

Wichtig: Jeder JVM-Prozess benötigt eine unabhängige Arthas-Agenten-Instanz

PID 1234 (web)    <---> Arthas agent (port 3658)
PID 5678 (cpu)    <---> Arthas agent (port 3660)  
PID 9012 (memory) <---> Arthas agent (port 3661)
  • Erstmalige Verwendung: Automatisches Attach im Hintergrund, Arthas weist automatisch einen Port zu (ca. 5 Sekunden).

  • Nachfolgende Wechsel: Direkte Verbindung zum bestehenden Agenten, null Verzögerung.

  • Unterstützung für mehrere Prozesse: Mehrere Agenten können gleichzeitig ausgeführt werden, ein Wechsel ist jederzeit möglich.

  • Ressourcenverbrauch: Jeder Agent benötigt ca. 20-30 MB Arbeitsspeicher; es wird empfohlen, gleichzeitig <= 10 Agenten zu betreiben.

  • Freigabe: Automatische Bereinigung bei Ausführung von stop über exec_command oder beim Trennen der SSH-Verbindung.

Technologiestack

Komponente

Auswahl

Sprache

Python 3.11+

MCP SDK

mcp >= 1.6.0

SSH-Bibliothek

paramiko >= 3.4.0

HTTP-Framework

starlette + uvicorn

Schnellstart

1. Online-Build (mit Internetverbindung)

docker build -t arthas-mcp-proxy .
# 或
docker-compose up -d

2. Offline-Build (internes Netzwerk ohne Internetverbindung)

Schritt 1: Abhängigkeiten auf einer Maschine mit Internetzugang vorab herunterladen

bash download-packages.sh
# 完成后 packages/ 目录包含所有 .whl 文件

Schritt 2: Packen und in das interne Netzwerk übertragen

zip -r arthas-mcp-proxy.zip arthas-mcp-proxy/
# 通过 U 盘/SCP 传入内网服务器

Schritt 3: Build im internen Netzwerk

cd arthas-mcp-proxy
docker build --build-arg PIP_SOURCE=offline -t arthas-mcp-proxy .
# 或
PIP_SOURCE=offline docker-compose up -d --build

3. Claude-Konfiguration

SSE-Modus (Remote-Bereitstellung):

{
  "mcpServers": {
    "arthas": {
      "type": "sse",
      "url": "http://your-server-ip:8000/sse"
    }
  }
}

stdio-Modus (lokale Einbettung):

{
  "mcpServers": {
    "arthas": {
      "command": "python",
      "args": ["/path/to/main.py", "--transport", "stdio"]
    }
  }
}

Anwendungsbeispiel

Im Claude-Gespräch:

连接到 192.168.1.100,用户 root,密码 xxx,查看上面的 Java 进程。

Claude ruft automatisch connect_ssh -> list_java_processes auf.

Anschließend:

查看 PID 1234 的线程栈 top 10,然后查看 PID 5678 的内存情况。

Claude wechselt automatisch zwischen den Diagnosen der verschiedenen PIDs; bei der ersten Verwendung einer PID erfolgt ein automatisches Attach, danach wird die Verbindung wiederverwendet.

Projektstruktur

arthas-mcp-proxy/
├── main.py                  # MCP Server 入口(SSE + stdio 双模式)
├── ssh_pool.py              # SSH 连接池(动态连接 + session 复用)
├── arthas_client.py         # Arthas 命令封装(多 PID 并行支持)
├── requirements.txt         # Python 依赖
├── Dockerfile               # 双模式构建 Dockerfile
├── docker-compose.yml       # Docker Compose 配置
├── download-packages.sh     # 外网预下载脚本
├── packages/                # 离线 whl 包目录
└── README.md                # 本文档

Anforderungen an die Zielmaschine

  • Arthas ist installiert (/opt/arthas/as.sh oder benutzerdefinierter Pfad).

  • SSH ist erreichbar, der ausführende Benutzer hat Berechtigungen für das Attach an die Ziel-JVM.

  • Der Befehl jps ist verfügbar (im JDK enthalten).

Lizenz

MIT-Lizenz

F
license - not found
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/narcissux/arthas-mcp-proxy'

If you have feedback or need assistance with the MCP directory API, please join our Discord server