Dev MCP
|
Experimental
この機能は現在、実験的です。 |
概要
Quarkus アプリケーションを dev モードで実行すると、Model Context Protocol (MCP) サーバーを公開できます。これは、Dev UI の MCP ツール (呼び出し可能なメソッド) で使用されるメソッドと、 MCP リソース によって公開されるデータを提示します。
MCP クライアントの接続
Dev UI の設定ダイアログを開き、Dev MCP タブを選択します。そこで Dev MCP を有効にし、接続の詳細 (デフォルトは http://localhost:8080/q/dev-mcp) を取得して、どのクライアントが接続されているかを確認できます。
Streamable Protocol, version 2025‑03‑26 をサポートするすべての MCP クライアントは、その URL を使用して接続できます。クライアントが接続されると、タブに表示されます。
エクステンション開発者向けガイド
エクステンションは、Dev MCP サーバーに追加のツールやリソースを提供できます。統合方法は Dev UI への提供と似ていますが、説明 (description) が必須です。単一の JSON‑RPC サービスを Dev UI と Dev MCP の両方に使用できます。説明のないメソッドは Dev UI にのみ表示され、説明のあるメソッドは両方に表示されます。
MCP リソース
リソースとは、エクステンションによって公開されるデータのことです。リソースを作成するには 2 つの方法があります。
ビルド時データに対する MCP リソース
Dev UI にすでに公開されているビルド時データは、Dev MCP でも利用可能にできます。addBuildTimeData() を呼び出すときに説明を指定してください。
footerPageBuildItem.addBuildTimeData(
"jokes",
jokesBuildItem.getJokes(),
"Some funny jokes that the user might enjoy"
);
追加の description 引数は新しいものです。これがない場合、データは Dev UI にのみ表示されます。指定されると、jokes データは MCP リソースになりますが、デフォルトではこのリソースは無効になっています。説明の後の別のパラメーターとして true を渡すことで、デフォルトを有効に変更できます。ユーザーはどのみち Dev UI でこれを変更できるため、これは単に適切なデフォルト設定にすぎません。
footerPageBuildItem.addBuildTimeData(
"jokes",
jokesBuildItem.getJokes(),
"Some funny jokes that the user might enjoy",
true
);
記録された値に対する MCP リソース
記録された値 (レコーダーによって実行時に生成されたデータ) を MCP リソースとして公開するには、デプロイメントモジュールで ビルド時アクション を定義します。アクションには説明を含める必要があります。
@BuildStep(onlyIf = IsLocalDevelopment.class)
BuildTimeActionBuildItem createBuildTimeActions() {
BuildTimeActionBuildItem item = new BuildTimeActionBuildItem(); (1)
item.actionBuilder() (2)
.methodName("getMyRecordedValue")
.description("A well‑thought‑out description") (3)
.runtime(runtimeValue) (4)
.build();
return item;
}
| 1 | BuildTimeActionBuildItem を返すか、生成します。 |
| 2 | ビルダーを使用してアクションを設定します。 |
| 3 | 人間が読み取り可能な説明を設定します。 |
| 4 | レコーダーによって返される実行時の値を指定します。 |
デフォルトではこのリソースは無効になっており、ユーザーは Dev UI で有効にする必要があります。ビルダーメソッドで .enableMcpFuctionByDefault() を追加することで、このデフォルトを変更できます。
MCP ツール
ツールは、クライアントが呼び出すことができるメソッドに対応します。メソッドとそのパラメーターに説明を指定することで、任意の JSON‑RPC メソッドをツールとして公開できます。ツールはランタイムまたはデプロイメントのクラスパスのいずれかで実行できます。
ランタイムクラスパスに対する MCP ツール
実行時の情報やアクション (ログレベルの変更など) を公開するには、ランタイムモジュールまたは runtime-dev モジュールで JSON‑RPC サービス を定義し、メソッドとパラメーターに @JsonRpcDescription アノテーションを付けます。
public class MyExtensionRPCService {
@JsonRpcDescription("Update a specific logger's level in this Quarkus application") (1)
public JsonObject updateLogLevel(
@JsonRpcDescription("The logger name as defined in the logging implementation") String loggerName,
@JsonRpcDescription("The new log level") String levelValue) { (2)
// implementation…
}
}
| 1 | メソッドの説明。 |
| 2 | 各パラメーターの説明。 |
デフォルトではこのツールは無効になっており、ユーザーは Dev UI で有効にする必要があります。メソッドに @DevMCPEnableByDefault アノテーションを付けることで、このデフォルトを変更できます。
デプロイメントモジュールで JSON‑RPC サービスを登録する必要があります。
@BuildStep
JsonRPCProvidersBuildItem registerRpcService() { (1)
return new JsonRPCProvidersBuildItem(MyExtensionRPCService.class); (2)
}
| 1 | JsonRPCProvidersBuildItem を生成します。 |
| 2 | ランタイムモジュールまたは runtime-dev モジュール内の、メソッドを含むクラスを指定します。 |
Dev MCP では @JsonRpcDescription が必須です。これがない場合、メソッドは Dev UI でのみ利用可能になります。メソッドはプリミティブ、String、JsonObject、JsonArray、または JSON にシリアライズ可能な任意の POJO を返すことができます。非同期メソッド (Uni、CompletionStage、または @NonBlocking アノテーションが付いたメソッド) もサポートされています。
デプロイメントクラスパスに対する MCP ツール
デプロイメントクラスパス上で アクションを実行 する必要がある場合があります (設定ファイルの書き込みなど)。その場合、JSON‑RPC サービスは作成せず、代わりに BuildTimeActionBuildItem を介してサプライヤーを提供します。
@BuildStep(onlyIf = IsLocalDevelopment.class)
BuildTimeActionBuildItem createBuildTimeActions() {
BuildTimeActionBuildItem actions = new BuildTimeActionBuildItem();
actions.actionBuilder()
.methodName("updateProperty")
.description("Update a configuration/property in the Quarkus application") (1)
.parameter("name", "The name of the configuration/property to update") (2)
.parameter("value", "The new value for the configuration/property")
.function(map -> {
Map<String, String> values = Collections.singletonMap(
map.get("name"), map.get("value"));
updateConfig(values);
return true;
})
.build();
return actions;
}
| 1 | メソッドの説明。 |
| 2 | 各パラメーターの説明。 |
function 内のコードはデプロイメントクラスパスで実行されます。この関数は、プレーンな値、または非同期処理のための CompletionStage もしくは CompletableFuture を返すことができます。
デフォルトではこのツールは無効になっており、ユーザーは Dev UI で有効にする必要があります。ビルダーメソッドで .enableMcpFuctionByDefault() を追加することで、このデフォルトを変更できます。