You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2026/02/12 09:10:13 UTC
(camel) branch CAMEL-22985 created (now de88527bd014)
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a change to branch CAMEL-22985
in repository https://gitbox.apache.org/repos/asf/camel.git
at de88527bd014 CAMEL-22985 - camel-jbang-mcp - Add tool for yaml-dsl-validator
This branch includes the following new commits:
new de88527bd014 CAMEL-22985 - camel-jbang-mcp - Add tool for yaml-dsl-validator
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(camel) 01/01: CAMEL-22985 - camel-jbang-mcp - Add tool for yaml-dsl-validator
Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch CAMEL-22985
in repository https://gitbox.apache.org/repos/asf/camel.git
commit de88527bd014de3334972f1c5cd170a00487fcf7
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Feb 12 10:06:41 2026 +0100
CAMEL-22985 - camel-jbang-mcp - Add tool for yaml-dsl-validator
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../modules/ROOT/pages/camel-jbang-mcp.adoc | 25 +++++++++-
dsl/camel-jbang/camel-jbang-mcp/pom.xml | 6 +++
.../jbang/core/commands/mcp/TransformTools.java | 54 ++++++++++++++++++++++
3 files changed, 84 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 0aa2857fb6b0..32438585bf9c 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 15 tools organized into six functional areas.
+The server exposes 16 tools organized into six functional areas.
=== Catalog Exploration
@@ -109,6 +109,11 @@ The server exposes 15 tools organized into six functional areas.
| Validates Camel endpoint URIs against the catalog schema. Catches unknown options, missing required parameters,
invalid enum values, and type mismatches. Also provides suggestions for misspelled option names.
+| `camel_validate_yaml_dsl`
+| Validates 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 including instance path, error type,
+ and schema path.
+
| `camel_transform_route`
| Assists with route DSL format transformation between YAML and XML.
|===
@@ -273,6 +278,24 @@ Validate this Kafka endpoint: kafka:myTopic?brkers=localhost:9092&groupId=myGrou
The assistant calls `camel_validate_route` and detects the typo (`brkers`), reports the URI as invalid, and
suggests the correct option name (`brokers`).
+=== Validating YAML DSL Structure
+
+----
+Validate this YAML route definition for me:
+
+- route:
+ from:
+ uri: timer:yaml
+ steps:
+ - setCheese:
+ simple: Hello Camel
+ - log: ${body}
+----
+
+The assistant calls `camel_validate_yaml_dsl` which validates the route against the Camel YAML DSL JSON schema
+and reports that `setCheese` is not a valid DSL element, returning the instance path and error type so the AI
+can suggest the correct processor name (e.g., `setBody`).
+
=== Understanding a Route
Paste a route and ask:
diff --git a/dsl/camel-jbang/camel-jbang-mcp/pom.xml b/dsl/camel-jbang/camel-jbang-mcp/pom.xml
index 5b6998c20d45..f507a62c08ec 100644
--- a/dsl/camel-jbang/camel-jbang-mcp/pom.xml
+++ b/dsl/camel-jbang/camel-jbang-mcp/pom.xml
@@ -86,6 +86,12 @@
<artifactId>camel-jbang-core</artifactId>
</dependency>
+ <!-- Camel YAML DSL Validator for schema validation -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-yaml-dsl-validator</artifactId>
+ </dependency>
+
<!-- test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
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 19ee6a216386..be69d593818a 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
@@ -16,6 +16,8 @@
*/
package org.apache.camel.dsl.jbang.core.commands.mcp;
+import java.io.File;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -23,12 +25,14 @@ import java.util.Map;
import jakarta.enterprise.context.ApplicationScoped;
+import com.networknt.schema.ValidationMessage;
import io.quarkiverse.mcp.server.Tool;
import io.quarkiverse.mcp.server.ToolArg;
import io.quarkiverse.mcp.server.ToolCallException;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.catalog.EndpointValidationResult;
+import org.apache.camel.dsl.yaml.validator.YamlValidator;
/**
* MCP Tools for validating and transforming Camel routes using Quarkus MCP Server.
@@ -37,6 +41,7 @@ import org.apache.camel.catalog.EndpointValidationResult;
public class TransformTools {
private final CamelCatalog catalog;
+ private YamlValidator yamlValidator;
public TransformTools() {
this.catalog = new DefaultCamelCatalog(true);
@@ -150,6 +155,49 @@ public class TransformTools {
return result;
}
+ /**
+ * 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. "
+ + "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) {
+
+ if (route == null || route.isBlank()) {
+ throw new ToolCallException("'route' parameter is required", null);
+ }
+
+ try {
+ if (yamlValidator == null) {
+ yamlValidator = new YamlValidator();
+ yamlValidator.init();
+ }
+
+ File tempFile = File.createTempFile("camel-validate-", ".yaml");
+ try {
+ Files.writeString(tempFile.toPath(), route);
+ List<ValidationMessage> messages = yamlValidator.validate(tempFile);
+
+ List<YamlDslError> errors = null;
+ if (!messages.isEmpty()) {
+ errors = messages.stream()
+ .map(m -> new YamlDslError(
+ m.getMessage(),
+ m.getInstanceLocation() != null ? m.getInstanceLocation().toString() : null,
+ m.getType(),
+ m.getSchemaLocation() != null ? m.getSchemaLocation().toString() : null))
+ .toList();
+ }
+
+ return new YamlDslValidationResult(messages.isEmpty(), messages.size(), errors);
+ } finally {
+ tempFile.delete();
+ }
+ } catch (Exception e) {
+ throw new ToolCallException("Failed to validate YAML DSL: " + e.getMessage(), e);
+ }
+ }
+
/**
* Extract endpoint URIs from a YAML route definition.
*/
@@ -213,4 +261,10 @@ public class TransformTools {
public boolean supported;
public String recommendation;
}
+
+ public record YamlDslValidationResult(boolean valid, int numberOfErrors, List<YamlDslError> errors) {
+ }
+
+ public record YamlDslError(String error, String instancePath, String type, String schemaPath) {
+ }
}