This is an automated email from the ASF dual-hosted git repository.

acosentino 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 dba5a0f7194e CAMEL-23270: Camel-Jbang-MCP: Add MCP tool annotations 
(readOnlyHint, destructiveHint, openWorldHint) to all tools (#22341)
dba5a0f7194e is described below

commit dba5a0f7194ee762d5d31b57b5982fe45c2d7e89
Author: Andrea Cosentino <[email protected]>
AuthorDate: Mon Mar 30 15:29:04 2026 +0200

    CAMEL-23270: Camel-Jbang-MCP: Add MCP tool annotations (readOnlyHint, 
destructiveHint, openWorldHint) to all tools (#22341)
    
    Add @Tool.Annotations(readOnlyHint=true, destructiveHint=false,
    openWorldHint=false) to all 27 tool methods across 12 tool classes.
    All tools in this module are read-only (query catalogs, validate input,
    generate scaffolds) so this explicitly declares that to MCP clients,
    enabling auto-approval and better tool selection decisions.
    
    Quarkus MCP Server SDK 1.11.0 already supports these annotations.
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../dsl/jbang/core/commands/mcp/CatalogTools.java  | 24 ++++++++++++++--------
 .../core/commands/mcp/DependencyCheckTools.java    |  3 ++-
 .../dsl/jbang/core/commands/mcp/DiagnoseTools.java |  3 ++-
 .../dsl/jbang/core/commands/mcp/ExplainTools.java  |  3 ++-
 .../dsl/jbang/core/commands/mcp/HardenTools.java   |  3 ++-
 .../dsl/jbang/core/commands/mcp/KameletTools.java  |  6 ++++--
 .../jbang/core/commands/mcp/MigrationTools.java    | 12 +++++++----
 .../commands/mcp/MigrationWildflyKarafTools.java   |  3 ++-
 .../dsl/jbang/core/commands/mcp/OpenApiTools.java  |  9 +++++---
 .../jbang/core/commands/mcp/TestScaffoldTools.java |  3 ++-
 .../jbang/core/commands/mcp/TransformTools.java    |  9 +++++---
 .../dsl/jbang/core/commands/mcp/VersionTools.java  |  3 ++-
 12 files changed, 54 insertions(+), 27 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 4b6ea3992c0a..c0539a5899fa 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
@@ -44,7 +44,8 @@ public class CatalogTools {
     /**
      * Tool to list available Camel components.
      */
-    @Tool(description = "List available Camel components from the catalog. " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "List available Camel components from the catalog. " +
                         "Returns component name, description, and labels. " +
                         "Use filter to search by name, label to filter by 
category.")
     public ComponentListResult camel_catalog_components(
@@ -92,7 +93,8 @@ public class CatalogTools {
     /**
      * Tool to get detailed documentation for a specific component.
      */
-    @Tool(description = "Get detailed documentation for a Camel component 
including all options, " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get detailed documentation for a Camel component 
including all options, " +
                         "endpoint parameters, and usage examples.")
     public ComponentDetailResult camel_catalog_component_doc(
             @ToolArg(description = "Component name (e.g., kafka, http, file, 
timer)") String component,
@@ -154,7 +156,8 @@ public class CatalogTools {
     /**
      * Tool to list data formats.
      */
-    @Tool(description = "List available Camel data formats for 
marshalling/unmarshalling " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "List available Camel data formats for 
marshalling/unmarshalling " +
                         "(e.g., json, xml, csv, avro, protobuf).")
     public DataFormatListResult camel_catalog_dataformats(
             @ToolArg(description = "Filter by name") String filter,
@@ -187,7 +190,8 @@ public class CatalogTools {
     /**
      * Tool to list expression languages.
      */
-    @Tool(description = "List available Camel expression languages " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "List available Camel expression languages " +
                         "(e.g., simple, jsonpath, xpath, groovy, jq).")
     public LanguageListResult camel_catalog_languages(
             @ToolArg(description = "Filter by name") String filter,
@@ -216,7 +220,8 @@ public class CatalogTools {
     /**
      * Tool to get detailed documentation for a specific data format.
      */
-    @Tool(description = "Get detailed documentation for a Camel data format 
including all options, "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get detailed documentation for a Camel data format 
including all options, "
                         + "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,
@@ -250,7 +255,8 @@ public class CatalogTools {
     /**
      * Tool to get detailed documentation for a specific expression language.
      */
-    @Tool(description = "Get detailed documentation for a Camel expression 
language including all options, "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get detailed documentation for a Camel expression 
language including all options, "
                         + "Maven coordinates, and configuration parameters.")
     public LanguageDetailResult camel_catalog_language_doc(
             @ToolArg(description = "Language name (e.g., simple, jsonpath, 
xpath, jq, groovy)") String language,
@@ -283,7 +289,8 @@ public class CatalogTools {
     /**
      * Tool to list EIPs (Enterprise Integration Patterns).
      */
-    @Tool(description = "List Camel Enterprise Integration Patterns (EIPs) 
like split, aggregate, " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "List Camel Enterprise Integration Patterns (EIPs) 
like split, aggregate, " +
                         "filter, choice, multicast, circuit-breaker, etc.")
     public EipListResult camel_catalog_eips(
             @ToolArg(description = "Filter by name") String filter,
@@ -314,7 +321,8 @@ public class CatalogTools {
     /**
      * Tool to get detailed documentation for a specific EIP.
      */
-    @Tool(description = "Get detailed documentation for a Camel EIP 
(Enterprise Integration Pattern).")
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          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,
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 2c964e5a9162..c135563558c2 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
@@ -47,7 +47,8 @@ public class DependencyCheckTools {
     /**
      * Tool to check Camel dependency hygiene for a project.
      */
-    @Tool(description = "Check Camel project dependency hygiene. Given a 
pom.xml (and optionally route definitions), "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Check Camel project dependency hygiene. Given a 
pom.xml (and optionally route definitions), "
                         + "detects outdated Camel dependencies compared to the 
latest catalog version, "
                         + "missing Maven dependencies for components used in 
routes, "
                         + "and version conflicts between the Camel BOM and 
explicit dependency overrides. "
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 2a5abc1078f5..525a279e4755 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
@@ -72,7 +72,8 @@ public class DiagnoseTools {
     /**
      * Tool to diagnose Camel errors from stack traces or error messages.
      */
-    @Tool(description = "Diagnose a Camel error from a stack trace or error 
message. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Diagnose a Camel error from a stack trace or error 
message. "
                         + "Returns the identified component/EIP involved, 
common causes for the error, "
                         + "links to relevant Camel documentation, and 
suggested fixes. "
                         + "Covers the most common Camel exceptions including 
NoSuchEndpointException, "
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 9fd798a78604..c111e28eec47 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
@@ -46,7 +46,8 @@ public class ExplainTools {
     /**
      * Tool to get enriched context for a Camel route.
      */
-    @Tool(description = "Get enriched context for a Camel route including 
documentation for all components and EIPs used. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get enriched context for a Camel route including 
documentation for all components and EIPs used. "
                         +
                         "Returns structured data with component descriptions, 
EIP explanations, and route structure. " +
                         "Use this context to understand and explain the 
route.")
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 1686af3ba056..b47896b87af8 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
@@ -48,7 +48,8 @@ public class HardenTools {
     /**
      * Tool to get security hardening context for a Camel route.
      */
-    @Tool(description = "Get security hardening analysis context for a Camel 
route. " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get security hardening analysis context for a Camel 
route. " +
                         "Returns security-sensitive components, potential 
vulnerabilities, " +
                         "and security best practices. Use this context to 
provide security " +
                         "hardening recommendations for the route.")
diff --git 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/KameletTools.java
 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/KameletTools.java
index 71b83e8d9e10..cd167e5ed52d 100644
--- 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/KameletTools.java
+++ 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/KameletTools.java
@@ -40,7 +40,8 @@ public class KameletTools {
     /**
      * Tool to list available Kamelets.
      */
-    @Tool(description = "List available Camel Kamelets from the Kamelet 
Catalog. " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "List available Camel Kamelets from the Kamelet 
Catalog. " +
                         "Returns kamelet name, type (source, sink, action), 
support level, and description. " +
                         "Use filter to search by name or description, type to 
filter by category.")
     public KameletListResult camel_catalog_kamelets(
@@ -97,7 +98,8 @@ public class KameletTools {
     /**
      * Tool to get detailed documentation for a specific Kamelet.
      */
-    @Tool(description = "Get detailed documentation for a specific Camel 
Kamelet including all properties/options, "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get detailed documentation for a specific Camel 
Kamelet including all properties/options, "
                         + "dependencies, and usage information.")
     public KameletDetailResult camel_catalog_kamelet_doc(
             @ToolArg(description = "Kamelet name (e.g., aws-s3-source, 
kafka-sink, log-action)") String kamelet,
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 f62bc97157e2..9628a9132f1d 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
@@ -47,7 +47,8 @@ public class MigrationTools {
     /**
      * Step 1: Analyze a project's pom.xml to detect runtime, Camel version, 
Java version, and components.
      */
-    @Tool(description = "Analyze a Camel project's pom.xml to detect the 
runtime type (main, spring-boot, quarkus, "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Analyze a Camel project's pom.xml to detect the 
runtime type (main, spring-boot, quarkus, "
                         + "wildfly, karaf), Camel version, Java version, and 
Camel component dependencies. "
                         + "This is the first step in a migration workflow.")
     public ProjectAnalysisResult camel_migration_analyze(
@@ -96,7 +97,8 @@ public class MigrationTools {
     /**
      * Step 2: Check compatibility and provide relevant migration guide 
references.
      */
-    @Tool(description = "Check migration compatibility for Camel components by 
providing relevant migration guide "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Check migration compatibility for Camel components by 
providing relevant migration guide "
                         + "URLs and Java version requirements. The LLM should 
consult the migration guides for "
                         + "detailed component rename mappings and API 
changes.")
     public CompatibilityResult camel_migration_compatibility(
@@ -194,7 +196,8 @@ public class MigrationTools {
     /**
      * Step 3: Get Maven commands to run OpenRewrite migration recipes.
      */
-    @Tool(description = "Get Maven commands to run Camel OpenRewrite migration 
recipes for upgrading between versions. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get Maven commands to run Camel OpenRewrite migration 
recipes for upgrading between versions. "
                         + "Returns the exact Maven commands to execute on the 
project. "
                         + "PREREQUISITE: The project MUST compile successfully 
('mvn clean compile' must pass) "
                         + "BEFORE running the OpenRewrite recipes. If the 
project does not compile, fix the build "
@@ -278,7 +281,8 @@ public class MigrationTools {
     /**
      * Search migration guides for a specific term.
      */
-    @Tool(description = "Search Camel migration and upgrade guides for a 
specific term or component name. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Search Camel migration and upgrade guides for a 
specific term or component name. "
                         + "Returns matching snippets from the official guides 
with version info and URLs. "
                         + "Supports fuzzy matching for typo tolerance. "
                         + "Use this instead of web search when looking up 
migration-related changes, "
diff --git 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationWildflyKarafTools.java
 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationWildflyKarafTools.java
index 17f938204dc2..acadcc3e287b 100644
--- 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationWildflyKarafTools.java
+++ 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/MigrationWildflyKarafTools.java
@@ -42,7 +42,8 @@ public class MigrationWildflyKarafTools {
     /**
      * WildFly/Karaf migration guidance with archetype-based project creation.
      */
-    @Tool(description = "Get migration guidance for Camel projects running on 
WildFly, Karaf, or WAR-based "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get migration guidance for Camel projects running on 
WildFly, Karaf, or WAR-based "
                         + "application servers. Returns the Maven archetype 
command to create a new target project, "
                         + "migration steps, and relevant migration guide URLs. 
"
                         + "IMPORTANT: When migrating to a different runtime 
(e.g., WildFly to Quarkus, Karaf to Spring Boot), "
diff --git 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/OpenApiTools.java
 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/OpenApiTools.java
index bb1f9b09bc09..5b7f00ae423d 100644
--- 
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/OpenApiTools.java
+++ 
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/OpenApiTools.java
@@ -48,7 +48,8 @@ public class OpenApiTools {
 
     private static final Set<String> VALID_MISSING_OPERATION_MODES = 
Set.of("fail", "ignore", "mock");
 
-    @Tool(description = "Validate an OpenAPI specification for use with 
Camel's contract-first REST support. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Validate an OpenAPI specification for use with 
Camel's contract-first REST support. "
                         + "Checks for compatibility issues like missing 
operationIds, unsupported security schemes, "
                         + "and OpenAPI 3.1 features that Camel does not fully 
support.")
     public ValidateResult camel_openapi_validate(
@@ -127,7 +128,8 @@ public class OpenApiTools {
         return new ValidateResult(valid, errors, warnings, info, 
operationCount);
     }
 
-    @Tool(description = "Generate Camel YAML scaffold for contract-first 
OpenAPI integration. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Generate Camel YAML scaffold for contract-first 
OpenAPI integration. "
                         + "Produces a rest:openApi configuration block and 
route stubs for each operation "
                         + "defined in the spec. This is the recommended 
approach since Camel 4.6.")
     public ScaffoldResult camel_openapi_scaffold(
@@ -191,7 +193,8 @@ public class OpenApiTools {
         return new ScaffoldResult(yaml.toString(), stubs.size(), filename, 
mode, apiTitle);
     }
 
-    @Tool(description = "Get guidance on configuring Camel's contract-first 
REST missingOperation modes "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Get guidance on configuring Camel's contract-first 
REST missingOperation modes "
                         + "(fail, ignore, mock). For 'mock' mode, provides 
directory structure, mock file paths, "
                         + "and example content derived from the OpenAPI spec.")
     public MockGuidanceResult camel_openapi_mock_guidance(
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 fbfabb47efa0..c49631d59615 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
@@ -72,7 +72,8 @@ public class TestScaffoldTools {
     /**
      * Tool to generate a JUnit 5 test skeleton for a Camel route.
      */
-    @Tool(description = "Generate a JUnit 5 test skeleton for a Camel route. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Generate a JUnit 5 test skeleton for a Camel route. "
                         + "Given a YAML or XML route definition, produces a 
test class with "
                         + "CamelTestSupport or @CamelSpringBootTest 
boilerplate, "
                         + "mock endpoints for producer endpoints, MockEndpoint 
assertions, "
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 f6abeb11d7e5..ed9d857075bd 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
@@ -58,7 +58,8 @@ public class TransformTools {
     /**
      * Tool to validate a Camel route or endpoint URI.
      */
-    @Tool(description = "Validate a Camel endpoint URI or route definition. " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Validate a Camel endpoint URI or route definition. " +
                         "Checks syntax, required options, and valid parameter 
names.")
     public ValidationResult camel_validate_route(
             @ToolArg(description = "Camel endpoint URI to validate (e.g., 
'kafka:myTopic?brokers=localhost:9092')") String uri,
@@ -154,7 +155,8 @@ public class TransformTools {
     /**
      * Tool to transform routes between DSL formats.
      */
-    @Tool(description = "Transform a Camel route between different DSL formats 
(YAML, XML). " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Transform a Camel route between different DSL formats 
(YAML, XML). " +
                         "Note: Java to YAML/XML transformation has 
limitations.")
     public TransformResult camel_transform_route(
             @ToolArg(description = "Route definition to transform") String 
route,
@@ -261,7 +263,8 @@ public class TransformTools {
     /**
      * Tool to validate a YAML DSL route definition against the Camel YAML DSL 
JSON schema.
      */
-    @Tool(description = "Validate a YAML DSL route definition against the 
Camel YAML DSL JSON schema. "
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          description = "Validate a YAML DSL route definition against the 
Camel YAML DSL JSON schema. "
                         + "Checks for valid DSL elements, correct route 
structure, and returns detailed schema validation errors.")
     public YamlDslValidationResult camel_validate_yaml_dsl(
             @ToolArg(description = "YAML DSL route definition to validate") 
String route) {
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 4e9aec34b76c..2be2f176c1a9 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
@@ -41,7 +41,8 @@ public class VersionTools {
     /**
      * Tool to list available Camel versions for a specific runtime.
      */
-    @Tool(description = "List available Camel versions for a specific runtime 
(main, spring-boot, quarkus). " +
+    @Tool(annotations = @Tool.Annotations(readOnlyHint = true, destructiveHint 
= false, openWorldHint = false),
+          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,

Reply via email to