You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ld...@apache.org on 2026/03/12 11:06:45 UTC

(camel) branch main updated: CAMEL-23178: [camel-jbang-mcp] Allow configuring additional Maven repositories for catalog resolution

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

ldemasi 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 4f82de7fd6d0 CAMEL-23178: [camel-jbang-mcp] Allow configuring additional Maven repositories for catalog resolution
4f82de7fd6d0 is described below

commit 4f82de7fd6d05366d99f8c73fe0e958a611eff07
Author: Luigi De Masi <ld...@redhat.com>
AuthorDate: Thu Mar 12 09:33:12 2026 +0100

    CAMEL-23178: [camel-jbang-mcp] Allow configuring additional Maven repositories for catalog resolution
---
 .../dsl/jbang/core/commands/mcp/CatalogTools.java  | 17 +++--
 .../jbang/core/commands/mcp/CatalogToolsTest.java  | 86 ++++++++++++++++++++++
 2 files changed, 98 insertions(+), 5 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 bab82da3b9ed..02baeb9bb801 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
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.jbang.core.commands.mcp;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import jakarta.enterprise.context.ApplicationScoped;
@@ -33,6 +34,7 @@ import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
 import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.LanguageModel;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
 
 /**
  * MCP Tools for querying the Camel Catalog using Quarkus MCP Server.
@@ -40,6 +42,9 @@ import org.apache.camel.tooling.model.LanguageModel;
 @ApplicationScoped
 public class CatalogTools {
 
+    @ConfigProperty(name = "camel.catalog.repos")
+    Optional<String> catalogRepos;
+
     private CamelCatalog catalog;
 
     public CatalogTools() {
@@ -307,24 +312,26 @@ public class CatalogTools {
     // Catalog loading
 
     private CamelCatalog loadCatalog(String runtime, String camelVersion) throws Exception {
+        String repos = catalogRepos.orElse(null);
+
         // If a specific version is requested, load that version's catalog
         if (camelVersion != null && !camelVersion.isBlank()) {
             RuntimeType runtimeType = resolveRuntime(runtime);
             if (runtimeType == RuntimeType.springBoot) {
-                return CatalogLoader.loadSpringBootCatalog(null, camelVersion, true);
+                return CatalogLoader.loadSpringBootCatalog(repos, camelVersion, true);
             } else if (runtimeType == RuntimeType.quarkus) {
-                return CatalogLoader.loadQuarkusCatalog(null, camelVersion, null, true);
+                return CatalogLoader.loadQuarkusCatalog(repos, camelVersion, null, true);
             } else {
-                return CatalogLoader.loadCatalog(null, camelVersion, true);
+                return CatalogLoader.loadCatalog(repos, camelVersion, true);
             }
         }
 
         // No specific version, use runtime-specific catalog or default
         RuntimeType runtimeType = resolveRuntime(runtime);
         if (runtimeType == RuntimeType.springBoot) {
-            return CatalogLoader.loadSpringBootCatalog(null, null, true);
+            return CatalogLoader.loadSpringBootCatalog(repos, null, true);
         } else if (runtimeType == RuntimeType.quarkus) {
-            return CatalogLoader.loadQuarkusCatalog(null, RuntimeType.QUARKUS_VERSION, null, true);
+            return CatalogLoader.loadQuarkusCatalog(repos, RuntimeType.QUARKUS_VERSION, null, true);
         }
 
         return catalog;
diff --git a/dsl/camel-jbang/camel-jbang-mcp/src/test/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogToolsTest.java b/dsl/camel-jbang/camel-jbang-mcp/src/test/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogToolsTest.java
new file mode 100644
index 000000000000..1a7283cac144
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-mcp/src/test/java/org/apache/camel/dsl/jbang/core/commands/mcp/CatalogToolsTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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;
+
+import java.util.Optional;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class CatalogToolsTest {
+
+    private CatalogTools createTools(String repos) {
+        CatalogTools tools = new CatalogTools();
+        tools.catalogRepos = Optional.ofNullable(repos);
+        return tools;
+    }
+
+    @Test
+    void defaultCatalogWithNoRepos() {
+        CatalogTools tools = createTools(null);
+
+        // Should use the default catalog (no version specified, no repos)
+        CatalogTools.ComponentListResult result = tools.camel_catalog_components(null, null, 5, null, null);
+
+        assertThat(result).isNotNull();
+        assertThat(result.camelVersion()).isNotNull();
+    }
+
+    @Test
+    void defaultCatalogWithEmptyRepos() {
+        CatalogTools tools = createTools("");
+
+        CatalogTools.ComponentListResult result = tools.camel_catalog_components(null, null, 5, null, null);
+
+        assertThat(result).isNotNull();
+        assertThat(result.camelVersion()).isNotNull();
+    }
+
+    @Test
+    void catalogWithExtraRepos() {
+        CatalogTools tools = createTools("https://maven.repository.redhat.com/ga/");
+
+        // Should still work — the extra repo is added but default catalog doesn't need it
+        CatalogTools.ComponentListResult result = tools.camel_catalog_components(null, null, 5, null, null);
+
+        assertThat(result).isNotNull();
+        assertThat(result.camelVersion()).isNotNull();
+    }
+
+    @Test
+    void catalogWithMultipleRepos() {
+        CatalogTools tools = createTools(
+                "https://maven.repository.redhat.com/ga/,https://repository.jboss.org/nexus/content/groups/public/");
+
+        CatalogTools.ComponentListResult result = tools.camel_catalog_components(null, null, 5, null, null);
+
+        assertThat(result).isNotNull();
+        assertThat(result.camelVersion()).isNotNull();
+    }
+
+    @Test
+    void componentDocWithRepos() {
+        CatalogTools tools = createTools("https://maven.repository.redhat.com/ga/");
+
+        // timer is a core component, should always be available
+        CatalogTools.ComponentDetailResult result = tools.camel_catalog_component_doc("timer", null, null);
+
+        assertThat(result).isNotNull();
+        assertThat(result.name()).isEqualTo("timer");
+    }
+}