Skip to content

Commit dcd6f3e

Browse files
Dev MCP: Set default enable for some methods. Update documentation
Signed-off-by: Phillip Kruger <[email protected]>
1 parent 42893d4 commit dcd6f3e

File tree

19 files changed

+70
-7
lines changed

19 files changed

+70
-7
lines changed

docs/src/main/asciidoc/dev-mcp.adoc

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,17 @@ footerPageBuildItem.addBuildTimeData(
5252
);
5353
----
5454

55-
The extra `description` argument is new: without it the data only appears in the Dev UI. Once supplied, the `jokes` data becomes an MCP resource.
55+
The extra `description` argument is new: without it the data only appears in the Dev UI. Once supplied, the `jokes` data becomes an MCP resource, however, by default this resource will be disabled. You can change the default by passing in `true` as another parameter after description, that will change this default to be enabled. Users can change this in Dev UI anyway, so this is just a sensible default.
56+
57+
[source,java]
58+
----
59+
footerPageBuildItem.addBuildTimeData(
60+
"jokes",
61+
jokesBuildItem.getJokes(),
62+
"Some funny jokes that the user might enjoy",
63+
true
64+
);
65+
----
5666

5767
==== MCP Resources against a recorded value
5868

@@ -76,6 +86,8 @@ BuildTimeActionBuildItem createBuildTimeActions() {
7686
<3> Set a human‑readable description.
7787
<4> Provide the runtime value returned by your recorder.
7888

89+
By default this resource will be disabled, and the user has to enable it in Dev UI. You can change this default by adding `.enableMcpFuctionByDefault()` in the builder method.
90+
7991
=== MCP tools
8092

8193
A tool corresponds to a method that a client can call. Any JSON‑RPC method can be exposed as a tool by supplying descriptions on the method and its parameters.
@@ -100,6 +112,8 @@ public class MyExtensionRPCService {
100112
<1> Description of the method.
101113
<2> Description of each parameter.
102114

115+
By default this tool will be disabled, and the user has to enable it in Dev UI. You can change this default by adding the `@DevMCPEnableByDefault` annotation on the method.
116+
103117
You must register the JSON‑RPC service in the deployment module:
104118

105119
[source,java]
@@ -145,6 +159,8 @@ BuildTimeActionBuildItem createBuildTimeActions() {
145159

146160
The code in the `function` runs on the deployment classpath. The function can return a plain value, a `CompletionStage` or `CompletableFuture` for asynchronous work.
147161

162+
By default this tool will be disabled, and the user has to enable it in Dev UI. You can change this default by adding `.enableMcpFuctionByDefault()` in the builder method.
163+
148164
=== JSON‑RPC usage
149165

150166
By default all JSON‑RPC methods are visible in the Dev UI. Only methods with descriptions are exposed via Dev MCP.

extensions/agroal/runtime-dev/src/main/java/io/quarkus/agroal/runtime/dev/ui/DatabaseInspector.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import io.quarkus.assistant.runtime.dev.Assistant;
4141
import io.quarkus.datasource.common.runtime.DataSourceUtil;
4242
import io.quarkus.runtime.LaunchMode;
43+
import io.quarkus.runtime.annotations.DevMCPEnableByDefault;
4344
import io.quarkus.runtime.annotations.JsonRpcDescription;
4445

4546
public final class DatabaseInspector {
@@ -96,6 +97,7 @@ protected void init() {
9697
}
9798

9899
@JsonRpcDescription("Get all available datasources for the Database")
100+
@DevMCPEnableByDefault
99101
public List<Datasource> getDataSources() {
100102
if (isDev) {
101103
List<Datasource> datasources = new ArrayList<>();
@@ -110,6 +112,7 @@ public List<Datasource> getDataSources() {
110112
}
111113

112114
@JsonRpcDescription("Get a spesific datasource for the Database by name")
115+
@DevMCPEnableByDefault
113116
private Datasource getDatasource(@JsonRpcDescription("Datasource name") String datasource) {
114117
if (isDev) {
115118
AgroalDataSource ads = checkedDataSources.get(datasource);
@@ -126,6 +129,7 @@ private Datasource getDatasource(@JsonRpcDescription("Datasource name") String d
126129
}
127130

128131
@JsonRpcDescription("Get all the tables for a certain datasource")
132+
@DevMCPEnableByDefault
129133
public List<Table> getTables(@JsonRpcDescription("Datasource name") String datasource) {
130134
if (isDev) {
131135
List<Table> tableList = new ArrayList<>();
@@ -238,6 +242,7 @@ public String generateDot(@JsonRpcDescription("Datasource name") String datasour
238242
}
239243

240244
@JsonRpcDescription("Execute SQL against a certain datasource")
245+
@DevMCPEnableByDefault
241246
public DataSet executeSQL(@JsonRpcDescription("Datasource name") String datasource,
242247
@JsonRpcDescription("Valid SQL to execute") String sql,
243248
@JsonRpcDescription("Page number for pagable rusults, starting at 1") Integer pageNumber,

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/BuildTimeConstBuildItem.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ public BuildTimeConstBuildItem(String customIdentifier, Map<String, BuildTimeDat
3232
}
3333

3434
public void addBuildTimeData(String fieldName, Object fieldData) {
35-
this.addBuildTimeData(fieldName, fieldData, null);
35+
this.addBuildTimeData(fieldName, fieldData, null, false);
3636
}
3737

38-
public void addBuildTimeData(String fieldName, Object fieldData, String description) {
39-
this.buildTimeData.put(fieldName, new BuildTimeData(fieldData, description));
38+
public void addBuildTimeData(String fieldName, Object fieldData, String description, boolean mcpEnabledAsDefault) {
39+
this.buildTimeData.put(fieldName, new BuildTimeData(fieldData, description, mcpEnabledAsDefault));
4040
}
4141

4242
public void addAllBuildTimeData(Map<String, BuildTimeData> buildTimeData) {

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/BuildTimeContentProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ private void addFooterTabBuildTimeData(BuildTimeConstBuildItem internalBuildTime
672672
}
673673

674674
internalBuildTimeData.addBuildTimeData("footerTabs", footerTabs);
675-
internalBuildTimeData.addBuildTimeData("loggerLevels", LEVELS, "All the available logger levels");
675+
internalBuildTimeData.addBuildTimeData("loggerLevels", LEVELS, "All the available logger levels", true);
676676
}
677677

678678
private void addApplicationInfoBuildTimeData(BuildTimeConstBuildItem internalBuildTimeData,

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/logstream/LogStreamProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ void registerBuildTimeActions(BuildProducer<BuildTimeActionBuildItem> buildTimeA
6262
RuntimeUpdatesProcessor.INSTANCE.doScan(true, true);
6363
return Map.of();
6464
})
65+
.enableMcpFuctionByDefault()
6566
.build();
6667

6768
keyStrokeActions.actionBuilder()

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/menu/ConfigurationProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ void registerBuildTimeActions(
126126
updateConfig(name, value, profile, target);
127127
return true;
128128
})
129+
.enableMcpFuctionByDefault()
129130
.build();
130131

131132
configActions.actionBuilder()

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/menu/ContinuousTestingProcessor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ private void registerStartMethod(LaunchModeBuildItem launchModeBuildItem, BuildT
112112
throw new RuntimeException(e);
113113
}
114114
})
115+
.enableMcpFuctionByDefault()
115116
.build();
116117
}
117118

@@ -137,6 +138,7 @@ private void registerStopMethod(LaunchModeBuildItem launchModeBuildItem, BuildTi
137138
throw new RuntimeException(e);
138139
}
139140
})
141+
.enableMcpFuctionByDefault()
140142
.build();
141143
}
142144

@@ -157,6 +159,7 @@ private void registerRunAllMethod(LaunchModeBuildItem launchModeBuildItem, Build
157159
throw new RuntimeException(e);
158160
}
159161
})
162+
.enableMcpFuctionByDefault()
160163
.build();
161164
}
162165

@@ -258,6 +261,7 @@ private void registerGetStatusMethod(LaunchModeBuildItem launchModeBuildItem, Bu
258261
throw new RuntimeException(e);
259262
}
260263
})
264+
.enableMcpFuctionByDefault()
261265
.build();
262266
}
263267

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/menu/DevServicesProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ private void getDevServices(BuildTimeActionBuildItem buildTimeActions,
8989
.function(ignored -> CompletableFuture.supplyAsync(() -> getServices(devServiceDescriptions, otherDevServices)))
9090
.description(
9191
"Get all the DevServices started by this Quarkus app, including information on container (if any) and the config that is being set automatically")
92+
.enableMcpFuctionByDefault()
9293
.build();
9394
}
9495

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/menu/ExtensionsProcessor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ InternalPageBuildItem createExtensionsPages(ExtensionsBuildItem extensionsBuildI
4646

4747
extensionsPages.addBuildTimeData("extensions", response, "All the extensions added to this Quarkus application. "
4848
+ "Some extensions are 'active' meaning they have actions in Dev UI, and some are 'inactive', meaning they will be listed in Dev UI, but a user can not perform any actions."
49-
+ "For both active and inactive all sorts of information is available about the extension, like it's name, URL to the guide, GAV and much more");
49+
+ "For both active and inactive all sorts of information is available about the extension, like it's name, URL to the guide, GAV and much more",
50+
true, null);
5051

5152
// Page
5253
extensionsPages.addPage(Page.webComponentPageBuilder()
@@ -127,6 +128,7 @@ private void getInstallableExtensions(BuildTimeActionBuildItem buildTimeActions)
127128
}
128129
});
129130
})
131+
.enableMcpFuctionByDefault()
130132
.build();
131133
}
132134

@@ -197,6 +199,7 @@ private void removeExtension(BuildTimeActionBuildItem buildTimeActions) {
197199
}
198200
});
199201
})
202+
.enableMcpFuctionByDefault()
200203
.build();
201204
}
202205

@@ -222,6 +225,7 @@ private void addExtension(BuildTimeActionBuildItem buildTimeActions) {
222225
}
223226
});
224227
})
228+
.enableMcpFuctionByDefault()
225229
.build();
226230
}
227231

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/menu/WorkspaceProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ void createBuildTimeActions(Optional<WorkspaceBuildItem> workspaceBuildItem,
175175
.function((t) -> {
176176
return workspaceBuildItem.get().getWorkspaceItems();
177177
})
178+
.enableMcpFuctionByDefault()
178179
.build();
179180

180181
buildItemActions.actionBuilder()
@@ -236,6 +237,7 @@ void createBuildTimeActions(Optional<WorkspaceBuildItem> workspaceBuildItem,
236237
}
237238
return null;
238239
})
240+
.enableMcpFuctionByDefault()
239241
.build();
240242

241243
buildItemActions.actionBuilder()
@@ -254,6 +256,7 @@ void createBuildTimeActions(Optional<WorkspaceBuildItem> workspaceBuildItem,
254256
}
255257
return new SavedResult(null, false, "Invalid input");
256258
})
259+
.enableMcpFuctionByDefault()
257260
.build();
258261

259262
buildTimeActionProducer.produce(buildItemActions);

0 commit comments

Comments
 (0)