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 14c790dcd5ad CAMEL-22976 - Camel-jbang-MCP: Add doc tool for 
dataformat and language too (#21384)
14c790dcd5ad is described below

commit 14c790dcd5adf32137a7a5e07a65d852fa303a03
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Feb 10 14:22:26 2026 +0100

    CAMEL-22976 - Camel-jbang-MCP: Add doc tool for dataformat and language too 
(#21384)
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../modules/ROOT/pages/camel-jbang-mcp.adoc        |  10 +-
 .../dsl/jbang/core/commands/mcp/CatalogTools.java  | 102 +++++++++++++++++++++
 2 files changed, 111 insertions(+), 1 deletion(-)

diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang-mcp.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-jbang-mcp.adoc
index a1d7c1089fc6..0aa2857fb6b0 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang-mcp.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-mcp.adoc
@@ -24,7 +24,7 @@ By default, the HTTP server is disabled. To enable it, set 
`quarkus.http.host-en
 
 == Available Tools
 
-The server exposes 13 tools organized into six functional areas.
+The server exposes 15 tools organized into six functional areas.
 
 === Catalog Exploration
 
@@ -43,9 +43,17 @@ The server exposes 13 tools organized into six functional 
areas.
 | `camel_catalog_dataformats`
 | List available data formats (JSON, XML, CSV, Avro, Protobuf, and others).
 
+| `camel_catalog_dataformat_doc`
+| Get detailed documentation for a specific data format including all 
configuration options, Maven coordinates,
+  and model information.
+
 | `camel_catalog_languages`
 | List expression languages (Simple, JsonPath, XPath, JQ, Groovy, and others).
 
+| `camel_catalog_language_doc`
+| Get detailed documentation for a specific expression language including all 
configuration options and
+  Maven coordinates.
+
 | `camel_catalog_eips`
 | List Enterprise Integration Patterns with filtering by category.
 
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 29f813da9014..374e8028bcbf 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
@@ -156,6 +156,46 @@ 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, "
+                        + "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) {
+
+        if (dataformat == null || dataformat.isBlank()) {
+            throw new ToolCallException("Data format name is required", null);
+        }
+
+        DataFormatModel model = catalog.dataFormatModel(dataformat);
+        if (model == null) {
+            throw new ToolCallException("Data format not found: " + 
dataformat, null);
+        }
+
+        return toDataFormatDetailResult(model);
+    }
+
+    /**
+     * Tool to get detailed documentation for a specific expression language.
+     */
+    @Tool(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) {
+
+        if (language == null || language.isBlank()) {
+            throw new ToolCallException("Language name is required", null);
+        }
+
+        LanguageModel model = catalog.languageModel(language);
+        if (model == null) {
+            throw new ToolCallException("Language not found: " + language, 
null);
+        }
+
+        return toLanguageDetailResult(model);
+    }
+
     /**
      * Tool to list EIPs (Enterprise Integration Patterns).
      */
@@ -361,6 +401,58 @@ public class CatalogTools {
                 options);
     }
 
+    private DataFormatDetailResult toDataFormatDetailResult(DataFormatModel 
model) {
+        List<OptionInfo> options = new ArrayList<>();
+        if (model.getOptions() != null) {
+            model.getOptions().forEach(opt -> options.add(new OptionInfo(
+                    opt.getName(),
+                    opt.getDescription(),
+                    opt.getType(),
+                    opt.isRequired(),
+                    opt.getDefaultValue() != null ? 
opt.getDefaultValue().toString() : null,
+                    opt.getGroup())));
+        }
+
+        return new DataFormatDetailResult(
+                model.getName(),
+                model.getTitle(),
+                model.getDescription(),
+                model.getLabel(),
+                model.isDeprecated(),
+                model.getSupportLevel() != null ? 
model.getSupportLevel().name() : null,
+                model.getGroupId(),
+                model.getArtifactId(),
+                model.getVersion(),
+                model.getModelName(),
+                options);
+    }
+
+    private LanguageDetailResult toLanguageDetailResult(LanguageModel model) {
+        List<OptionInfo> options = new ArrayList<>();
+        if (model.getOptions() != null) {
+            model.getOptions().forEach(opt -> options.add(new OptionInfo(
+                    opt.getName(),
+                    opt.getDescription(),
+                    opt.getType(),
+                    opt.isRequired(),
+                    opt.getDefaultValue() != null ? 
opt.getDefaultValue().toString() : null,
+                    opt.getGroup())));
+        }
+
+        return new LanguageDetailResult(
+                model.getName(),
+                model.getTitle(),
+                model.getDescription(),
+                model.getLabel(),
+                model.isDeprecated(),
+                model.getSupportLevel() != null ? 
model.getSupportLevel().name() : null,
+                model.getGroupId(),
+                model.getArtifactId(),
+                model.getVersion(),
+                model.getModelName(),
+                options);
+    }
+
     // Result record classes for Jackson serialization
 
     public record ComponentListResult(int count, String camelVersion, 
List<ComponentInfo> components) {
@@ -401,4 +493,14 @@ public class CatalogTools {
     public record EipDetailResult(String name, String title, String 
description, String label,
             List<OptionInfo> options) {
     }
+
+    public record DataFormatDetailResult(String name, String title, String 
description, String label,
+            boolean deprecated, String supportLevel, String groupId, String 
artifactId,
+            String version, String modelName, List<OptionInfo> options) {
+    }
+
+    public record LanguageDetailResult(String name, String title, String 
description, String label,
+            boolean deprecated, String supportLevel, String groupId, String 
artifactId,
+            String version, String modelName, List<OptionInfo> options) {
+    }
 }

Reply via email to