JVM MCP Server について
JVM MCP Server は、jps、jstack、jmap などの JDK 標準ツールを用いた軽量な JVM 監視・診断 MCP サーバーです。Arthas などのサードパーティ製ツールを使わずに、AI エージェントから Java アプリケーションを分析したい開発者を対象としており、SSH 経由のリモート監視にも対応しています。
主な機能
- 01JDK 標準ツールを使用し、サードパーティ依存なし
- 02Java プロセスの一覧と JVM・メモリ・スレッド情報の取得
- 03スタックトレースとクラス構造の取得
- 04クラスのデコンパイルとメソッドの検索・監視
- 05ローカルおよび SSH によるリモート監視
活用シーン
- 01AI エージェントによる稼働中 Java アプリケーションのスレッド問題調査
- 02JVM のメモリ使用量とクラスロード統計の確認
- 03リモートサーバー上の Java プロセスの監視
MCP 対応
本プロジェクトは MCP サーバーであり、list_java_processes、get_stack_trace、decompile_class などの JVM 監視・診断ツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
JVM MCP Server
ネイティブ JDK ツールを基盤とする、軽量な JVM 監視・診断用 MCP(Multi-Agent Communication Protocol)サーバーの実装です。Arthas のようなサードパーティ製ツールを必要とせず、AI エージェントに Java アプリケーションを監視・分析する強力な機能を提供します。
ホステッドデプロイ
Fronteir AIでホステッドデプロイを利用できます。
特長
- 依存関係ゼロ:ネイティブ JDK ツール(jps、jstack、jmap など)のみを使用します
- 軽量:エージェントベースのソリューションと比較して、リソース消費を最小限に抑えます
- 高い互換性:すべての Java バージョンおよびプラットフォームで動作します
- 非侵襲的:対象アプリケーションを変更する必要はありません
- 安全:JDK 認定のツールとコマンドのみを使用します
- リモート監視:SSH 経由でローカルとリモートの両方の JVM を監視できます
主な機能
基本的な監視
- Java プロセスの一覧表示と識別
- JVM の基本情報の取得
- メモリ使用量の監視
- スレッド情報とスタックトレースの分析
- クラス読み込み統計
- クラス構造の詳細情報
高度な機能
- メソッド呼び出しパスの分析
- クラスの逆コンパイル
- メソッドの検索と調査
- メソッド呼び出しの監視
- ロガーレベルの管理
- システムリソースダッシュボード
システム要件
- Python 3.6+
- JDK 8+
- Linux/Unix/Windows OS
- SSH アクセス(リモート監視の場合)
インストール
uv を使用する(推奨)
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh # Linux/macOS
# or
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
# Install the package
uv pip install jvm-mcp-server
pip を使用する
pip install jvm-mcp-server
ソースからインストール
# Clone the repository
git clone https://github.com/your-repo/jvm-mcp-server.git
cd jvm-mcp-server
# Using uv (recommended)
uv venv # Create virtual environment
uv sync # Install dependencies
# Or install in development mode
uv pip install -e .
クイックスタート
サーバーの起動
uv を使用する(推奨)
# Local mode
uv run jvm-mcp-server
# Using environment variables file for remote mode
uv run --env-file .env jvm-mcp-server
# In specific directory
uv --directory /path/to/project run --env-file .env jvm-mcp-server
uvx を使用する
# Local mode
uvx run jvm-mcp-server
# With environment variables
uvx run --env-file .env jvm-mcp-server
Python を直接使用する
from jvm_mcp_server import JvmMcpServer
# Local mode
server = JvmMcpServer()
server.run()
# Remote mode (via environment variables)
# Set SSH_HOST, SSH_PORT, SSH_USER, SSH_PASSWORD or SSH_KEY
import os
os.environ['SSH_HOST'] = 'user@remote-host'
os.environ['SSH_PORT'] = '22'
server = JvmMcpServer()
server.run()
MCP 設定で使用する
{
"mcpServers": {
"jvm-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/jvm-mcp-server",
"run",
"--env-file",
"/path/to/jvm-mcp-server/.env",
"jvm-mcp-server"
]
}
}
}
利用可能なツール
JVM-MCP-Server は、JVM の監視と診断に必要な包括的なツールを提供します。
list_java_processes:すべての Java プロセスを一覧表示しますget_thread_info:指定したプロセスのスレッド情報を取得しますget_jvm_info:JVM の基本情報を取得しますget_memory_info:メモリ使用量の情報を取得しますget_stack_trace:スレッドのスタックトレース情報を取得しますget_class_info:構造を含むクラスの詳細情報を取得しますget_stack_trace_by_method:メソッド呼び出しパスを取得しますdecompile_class:クラスのソースコードを逆コンパイルしますsearch_method:クラス内のメソッドを検索しますwatch_method:メソッド呼び出しを監視しますget_logger_info:ロガー情報を取得しますset_logger_level:ロガーレベルを設定しますget_dashboard:システムリソースダッシュボードを取得しますget_jcmd_output:JDK の jcmd コマンドを実行しますget_jstat_output:JDK の jstat コマンドを実行します
各ツールの詳しいドキュメントについては、利用可能なツールを参照してください。
アーキテクチャ
JVM-MCP-Server は、モジュール式のアーキテクチャに基づいて構築されています。
- コマンドレイヤー:JDK のネイティブコマンドをラップします
- 実行レイヤー:ローカルおよびリモートでのコマンド実行を処理します
- フォーマッターレイヤー:コマンド出力を処理して整形します
- MCP インターフェース:FastMCP プロトコルを通じて機能を公開します
主なコンポーネント
BaseCommand:すべてのコマンドの抽象基底クラスCommandExecutor:コマンド実行のインターフェース(ローカルおよびリモート)OutputFormatter:コマンド出力を整形するインターフェースJvmMcpServer:すべてのツールを登録するメインサーバークラス
開発状況
プロジェクトは現在活発に開発されています。現在の進捗については、Native_TODO.md をご覧ください。
完了済み
- コアアーキテクチャとコマンドフレームワーク
- 基本コマンドの実装(jps、jstack、jmap、jinfo、jcmd、jstat)
- クラス情報取得システム
- MCP ツールのパラメーター型の互換性修正
開発中
- キャッシュ機構
- メソッドのトレース
- パフォーマンス監視
- エラー処理の改善
貢献
貢献を歓迎します!お気軽にプルリクエストを送信してください。
- リポジトリをフォークします
- 機能ブランチを作成します(
git checkout -b feature/amazing-feature) - 変更をコミットします(
git commit -m 'Add some amazing feature') - ブランチにプッシュします(
git push origin feature/amazing-feature) - プルリクエストを作成します
ライセンス
このプロジェクトは MIT ライセンスの下で公開されています。詳細については、LICENSE ファイルをご覧ください。
NP|## 謝辞
#MH|
#TK|- JDK ツールのドキュメント
#WY|- FastMCP プロトコル仕様
#JK|- 貢献者およびテスター
#BP|
#KG|## 権限要件
#YM|
#KB|一部の JVM 診断コマンド(jstack、jmap、jinfo、jcmd など)では、対象の JVM プロセスにアタッチするために十分な権限が必要です。権限エラーが発生した場合は、次の解決策をお試しください。
#YB|
#KB|### よくあるエラー
#RR|
#KB|- Permission denied:権限が不足しています
#YZ|- Unable to open socket file:JVM プロセスに接続できません
#KD|- No such process:プロセスが存在しないか、終了しています
#MH|
#KB|### 解決策
#BR|
#KB|1. sudo で実行する(推奨):sudo uv run jvm-mcp-server
#XZ|2. 対象の Java プロセスと同じユーザーで実行する:Java プロセスのユーザー ID を確認し、そのユーザーとして実行します
#HM|3. JDK に実験的なアタッチ権限を追加する:JVM の起動引数に次を追加します
```
-XX:+AllowRedefinitionToAddDeleteMethods
```
#XQ|4. Docker の場合:コンテナに十分な権限があることを確認します(--privileged を指定するか、/proc をマウントします)
#KB|
#KB|注:list_java_processes は jps コマンドを使用するため、特別な権限は必要ありません。その他のコマンドでは、上記の解決策に従って設定が必要な場合があります。
- JDK ツールのドキュメント
- FastMCP プロトコル仕様
- 貢献者およびテスター
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
