This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch CAMEL-22976 in repository https://gitbox.apache.org/repos/asf/camel.git
commit bca7c83e6197f5cffa932b6793413aa141c021e2 Author: Andrea Cosentino <[email protected]> AuthorDate: Tue Feb 10 13:37:01 2026 +0100 CAMEL-22976 - Camel-jbang-MCP: Add doc tool for dataformat and language too 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) { + } }
