This is an automated email from the ASF dual-hosted git repository.
oscerd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 790043518795 CAMEL-23472: camel-jbang-mcp - Deduplicate @ToolArg
descriptions
790043518795 is described below
commit 7900435187959c17f349fb9f8565a91143994a11
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon May 11 14:01:27 2026 +0200
CAMEL-23472: camel-jbang-mcp - Deduplicate @ToolArg descriptions
Reduces the MCP tool schema payload sent on every session start by
introducing ToolArgDocs with five shared description constants
(RUNTIME, RUNTIME_REQUIRED, CAMEL_VERSION, VERSION_QUERY, PLATFORM_BOM)
and replacing 50 duplicated @ToolArg descriptions across 11 tool
classes — CatalogTools, ComponentPropertiesTools,
ConfigurationValidateTools, DependencyCheckTools, DiagnoseTools,
ExplainTools, HardenTools, MigrationTools, TestScaffoldTools,
TransformTools, and VersionTools.
The largest duplicate clusters before this change:
* "Runtime type: main, spring-boot, or quarkus (default: main)" — 18 copies
* Multi-line "Platform BOM coordinates in GAV format ..." — 16 copies
* "Camel version to use ..." — 12+ copies (with two minor variants)
* Multi-line "Version to query ..." — 3 copies
After this change no two @ToolArg annotations in the module share the
same multi-line description literal. No public API changes; all 224
tests in dsl/camel-jbang/camel-jbang-mcp pass locally.
Closes #23119
---
.../dsl/jbang/core/commands/mcp/CatalogTools.java | 66 ++++++++--------------
.../commands/mcp/ComponentPropertiesTools.java | 9 +--
.../commands/mcp/ConfigurationValidateTools.java | 7 +--
.../core/commands/mcp/DependencyCheckTools.java | 7 +--
.../dsl/jbang/core/commands/mcp/DiagnoseTools.java | 7 +--
.../dsl/jbang/core/commands/mcp/ExplainTools.java | 7 +--
.../dsl/jbang/core/commands/mcp/HardenTools.java | 7 +--
.../jbang/core/commands/mcp/MigrationTools.java | 4 +-
.../jbang/core/commands/mcp/TestScaffoldTools.java | 6 +-
.../dsl/jbang/core/commands/mcp/ToolArgDocs.java | 44 +++++++++++++++
.../jbang/core/commands/mcp/TransformTools.java | 7 +--
.../dsl/jbang/core/commands/mcp/VersionTools.java | 2 +-
12 files changed, 94 insertions(+), 79 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogTools.java
index c0539a5899fa..ea3bc1a8885a 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogTools.java
@@ -52,15 +52,9 @@ public class CatalogTools {
@ToolArg(description = "Filter components by name
(case-insensitive substring match)") String filter,
@ToolArg(description = "Filter by category label (e.g., cloud,
messaging, database, file)") String label,
@ToolArg(description = "Maximum number of results to return
(default: 50)") Integer limit,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Version to query. For Main or Spring Boot:
the Camel version (e.g., 4.17.0). "
- + "For quarkus: the Quarkus Platform
version (e.g., 3.31.3) as returned by "
- + "camel_version_list quarkusVersion field.
"
- + "If not specified, uses the default
catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.
For quarkus runtime, all three coordinates "
- + "are used for BOM resolution. For main
and spring-boot, the version is extracted "
- + "and used as the catalog version.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.VERSION_QUERY) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
int maxResults = limit != null ? limit : 50;
@@ -98,15 +92,9 @@ public class CatalogTools {
"endpoint parameters, and usage examples.")
public ComponentDetailResult camel_catalog_component_doc(
@ToolArg(description = "Component name (e.g., kafka, http, file,
timer)") String component,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Version to query. For Main or Spring Boot:
the Camel version (e.g., 4.17.0). "
- + "For quarkus: the Quarkus Platform
version (e.g., 3.31.3) as returned by "
- + "camel_version_list quarkusVersion field.
"
- + "If not specified, uses the default
catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.
For quarkus runtime, all three coordinates "
- + "are used for BOM resolution. For main
and spring-boot, the version is extracted "
- + "and used as the catalog version.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.VERSION_QUERY) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (component == null || component.isBlank()) {
throw new ToolCallException("Component name is required", null);
@@ -162,10 +150,9 @@ public class CatalogTools {
public DataFormatListResult camel_catalog_dataformats(
@ToolArg(description = "Filter by name") String filter,
@ToolArg(description = "Maximum results (default: 50)") Integer
limit,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
int maxResults = limit != null ? limit : 50;
@@ -195,10 +182,9 @@ public class CatalogTools {
"(e.g., simple, jsonpath, xpath, groovy, jq).")
public LanguageListResult camel_catalog_languages(
@ToolArg(description = "Filter by name") String filter,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
try {
CamelCatalog cat = catalogService.loadCatalog(runtime,
camelVersion, platformBom);
@@ -225,10 +211,9 @@ public class CatalogTools {
+ "Maven coordinates, and configuration parameters.")
public DataFormatDetailResult camel_catalog_dataformat_doc(
@ToolArg(description = "Data format name (e.g., json-jackson,
avro, csv, protobuf, jaxb)") String dataformat,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (dataformat == null || dataformat.isBlank()) {
throw new ToolCallException("Data format name is required", null);
@@ -260,10 +245,9 @@ public class CatalogTools {
+ "Maven coordinates, and configuration parameters.")
public LanguageDetailResult camel_catalog_language_doc(
@ToolArg(description = "Language name (e.g., simple, jsonpath,
xpath, jq, groovy)") String language,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (language == null || language.isBlank()) {
throw new ToolCallException("Language name is required", null);
@@ -295,10 +279,9 @@ public class CatalogTools {
public EipListResult camel_catalog_eips(
@ToolArg(description = "Filter by name") String filter,
@ToolArg(description = "Filter by category (e.g., routing,
transformation, error handling)") String label,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
try {
CamelCatalog cat = catalogService.loadCatalog(runtime,
camelVersion, platformBom);
@@ -325,10 +308,9 @@ public class CatalogTools {
description = "Get detailed documentation for a Camel EIP
(Enterprise Integration Pattern).")
public EipDetailResult camel_catalog_eip_doc(
@ToolArg(description = "EIP name (e.g., split, aggregate, choice,
filter)") String eip,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (eip == null || eip.isBlank()) {
throw new ToolCallException("EIP name is required", null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ComponentPropertiesTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ComponentPropertiesTools.java
index 8d1b9aa92c8b..596c8bca1403 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ComponentPropertiesTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ComponentPropertiesTools.java
@@ -52,12 +52,9 @@ public class ComponentPropertiesTools {
"component-level defaults via the same prefix in
application.properties.")
public ComponentPropertiesResult camel_component_properties(
@ToolArg(description = "Component name / scheme (e.g., kafka,
http, file, timer)") String component,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Version to query. For Main or Spring Boot:
the Camel version (e.g., 4.17.0). "
- + "For quarkus: the Quarkus Platform
version. "
- + "If not specified, uses the default
catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.VERSION_QUERY) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (component == null || component.isBlank()) {
throw new ToolCallException("Component name is required", null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ConfigurationValidateTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ConfigurationValidateTools.java
index 523fbd4062a5..d575e5a84e41 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ConfigurationValidateTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ConfigurationValidateTools.java
@@ -56,10 +56,9 @@ public class ConfigurationValidateTools {
public ConfigurationValidateResult camel_configuration_validate(
@ToolArg(description = "Configuration property lines to validate.
Can be a single line "
+ "(e.g. \"camel.main.streamCaching=true\")
or multiple lines separated by newlines.") String properties,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to query. If not specified,
uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (properties == null || properties.isBlank()) {
throw new ToolCallException("properties argument is required",
null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DependencyCheckTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DependencyCheckTools.java
index ec5f667d0461..d9fbfda06a1c 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DependencyCheckTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DependencyCheckTools.java
@@ -60,10 +60,9 @@ public class DependencyCheckTools {
+ "Sensitive content is automatically
detected and masked.") String pomContent,
@ToolArg(description = "Route definitions (YAML, XML, or Java DSL)
to check for missing component dependencies. "
+ "Multiple routes can be provided
concatenated.") String routes,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom,
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom,
@ToolArg(description = "If true (default), automatically sanitize
POM content by masking credentials") Boolean sanitizePom) {
if (pomContent == null || pomContent.isBlank()) {
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
index e8921e505743..6a90580c87b8 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
@@ -78,10 +78,9 @@ public class DiagnoseTools {
+ "ResolveEndpointFailedException,
FailedToCreateRouteException, and more.")
public DiagnoseResult camel_error_diagnose(
@ToolArg(description = "The Camel stack trace or error message to
diagnose") String error,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (error == null || error.isBlank()) {
throw new ToolCallException("Error message or stack trace is
required", null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ExplainTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ExplainTools.java
index bdf5bdadaa08..66d0a027c516 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ExplainTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ExplainTools.java
@@ -52,10 +52,9 @@ public class ExplainTools {
public RouteContextResult camel_route_context(
@ToolArg(description = "The Camel route content (YAML, XML, or
Java DSL)") String route,
@ToolArg(description = "Route format: yaml, xml, or java (default:
yaml)") String format,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (route == null || route.isBlank()) {
throw new ToolCallException("Route content is required", null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/HardenTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/HardenTools.java
index 1d5ef73a4108..22116be69e33 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/HardenTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/HardenTools.java
@@ -54,10 +54,9 @@ public class HardenTools {
public HardenContextResult camel_route_harden_context(
@ToolArg(description = "The Camel route content (YAML, XML, or
Java DSL)") String route,
@ToolArg(description = "Route format: yaml, xml, or java (default:
yaml)") String format,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (route == null || route.isBlank()) {
throw new ToolCallException("Route content is required", null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationTools.java
index 66bdcd624243..503705f906df 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationTools.java
@@ -112,7 +112,7 @@ public class MigrationTools {
@ToolArg(description = "Comma-separated list of Camel component
artifactIds") String camelComponents,
@ToolArg(description = "Current Camel version (e.g., 3.20.0)")
String currentVersion,
@ToolArg(description = "Target Camel version (e.g., 4.18.0)")
String targetVersion,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus") String runtime,
+ @ToolArg(description = ToolArgDocs.RUNTIME_REQUIRED) String
runtime,
@ToolArg(description = "Current Java version (e.g., 11, 17, 21)")
String javaVersion) {
if (camelComponents == null || camelComponents.isBlank()) {
@@ -210,7 +210,7 @@ public class MigrationTools {
+ "BEFORE running the OpenRewrite recipes. If the
project does not compile, fix the build "
+ "errors first. OpenRewrite requires a compilable
project to parse and transform the code.")
public MigrationRecipesResult camel_migration_recipes(
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus") String runtime,
+ @ToolArg(description = ToolArgDocs.RUNTIME_REQUIRED) String
runtime,
@ToolArg(description = "Current Camel version (e.g., 4.4.0)")
String currentVersion,
@ToolArg(description = "Target Camel version (e.g., 4.18.0)")
String targetVersion,
@ToolArg(description = "Current Java version (e.g., 11, 17)")
String javaVersion,
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TestScaffoldTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TestScaffoldTools.java
index c49631d59615..457ea6db86d6 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TestScaffoldTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TestScaffoldTools.java
@@ -82,10 +82,8 @@ public class TestScaffoldTools {
@ToolArg(description = "The Camel route definition (YAML or XML)")
String route,
@ToolArg(description = "Route format: yaml or xml (default:
yaml)") String format,
@ToolArg(description = "Target runtime: main or spring-boot
(default: main)") String runtime,
- @ToolArg(description = "Camel version to use for catalog lookups
(e.g., 4.17.0). "
- + "If not specified, uses the default
catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion
for catalog lookups.") String platformBom) {
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (route == null || route.isBlank()) {
throw new ToolCallException("Route content is required", null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ToolArgDocs.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ToolArgDocs.java
new file mode 100644
index 000000000000..aeb84c3b8e9a
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/ToolArgDocs.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.mcp;
+
+/**
+ * Shared description literals for {@code @ToolArg} annotations on MCP tools.
Centralized to keep the MCP tool schema
+ * payload (sent to clients on every session start) small.
+ */
+final class ToolArgDocs {
+
+ /** Runtime selector with default. */
+ static final String RUNTIME = "Runtime: main | spring-boot | quarkus
(default: main)";
+
+ /** Runtime selector without default. */
+ static final String RUNTIME_REQUIRED = "Runtime: main | spring-boot |
quarkus";
+
+ /** Camel version for catalog lookups. */
+ static final String CAMEL_VERSION = "Camel version (e.g., 4.17.0);
defaults to catalog version.";
+
+ /** Multi-runtime version selector; for quarkus use the Quarkus Platform
version. */
+ static final String VERSION_QUERY = "Version: main/spring-boot uses Camel
version (e.g., 4.17.0); "
+ + "quarkus uses Quarkus Platform
version (e.g., 3.31.3) "
+ + "from camel_version_list
quarkusVersion. Defaults to catalog version.";
+
+ /** Platform BOM override. */
+ static final String PLATFORM_BOM = "Platform BOM GAV
(groupId:artifactId:version); overrides camelVersion.";
+
+ private ToolArgDocs() {
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TransformTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TransformTools.java
index a51ed3eb5ffc..0bd498c0c888 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TransformTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/TransformTools.java
@@ -65,10 +65,9 @@ public class TransformTools {
public ValidationResult camel_validate_route(
@ToolArg(description = "Camel endpoint URI to validate (e.g.,
'kafka:myTopic?brokers=localhost:9092')") String uri,
@ToolArg(description = "YAML route definition to validate") String
route,
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
- @ToolArg(description = "Camel version to use (e.g., 4.17.0). If
not specified, uses the default catalog version.") String camelVersion,
- @ToolArg(description = "Platform BOM coordinates in GAV format
(groupId:artifactId:version). "
- + "When provided, overrides camelVersion.")
String platformBom) {
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
+ @ToolArg(description = ToolArgDocs.CAMEL_VERSION) String
camelVersion,
+ @ToolArg(description = ToolArgDocs.PLATFORM_BOM) String
platformBom) {
if (uri == null && route == null) {
throw new ToolCallException("Either 'uri' or 'route' is required",
null);
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
index 2be2f176c1a9..a72bf7bbae52 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/VersionTools.java
@@ -45,7 +45,7 @@ public class VersionTools {
description = "List available Camel versions for a specific runtime
(main, spring-boot, quarkus). " +
"Returns version information including release date,
JDK requirements, and LTS status.")
public VersionListResult camel_version_list(
- @ToolArg(description = "Runtime type: main, spring-boot, or
quarkus (default: main)") String runtime,
+ @ToolArg(description = ToolArgDocs.RUNTIME) String runtime,
@ToolArg(description = "Only show LTS (Long Term Support) releases
(default: false)") Boolean lts,
@ToolArg(description = "Minimum Camel version to include (e.g.,
4.0)") String fromVersion,
@ToolArg(description = "Maximum number of versions to return
(default: 10)") Integer limit) {