diff --git a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/pom.xml b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/pom.xml
index 6734018c57a77..6ffe7156082f9 100644
--- a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/pom.xml
+++ b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/pom.xml
@@ -40,10 +40,10 @@
camel-support
-
+
org.apache.camel
- camel-spring-ai-tools
+ camel-ai-tool
${project.version}
true
@@ -98,6 +98,12 @@
assertj-core
test
+
+ org.awaitility
+ awaitility
+ ${awaitility-version}
+ test
+
org.mockito
mockito-junit-jupiter
diff --git a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
index 4193ba1953fbc..f8d54d1e417bd 100644
--- a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
+++ b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
@@ -501,9 +501,9 @@ NOTE: The component automatically configures conversation isolation using metada
=== Function Calling / Tool Integration
-The component integrates with the xref:spring-ai-tools-component.adoc[Spring AI Tools Component] to enable LLMs to call Camel routes as functions/tools. This extends the LLM's capabilities with custom logic, external APIs, database queries, and more.
+The component integrates with the xref:ai-tool-component.adoc[AI Tool Component] to enable LLMs to call Camel routes as functions/tools. This extends the LLM's capabilities with custom logic, external APIs, database queries, and more.
-When you configure the `tags` parameter, the chat component discovers all matching tools from `spring-ai-tools` routes, registers them with Spring AI's ChatClient, and allows the LLM to call them during conversation.
+When you configure the `tags` parameter, the chat component discovers all matching tools from `ai-tool` routes, registers them with Spring AI's ChatClient, and allows the LLM to call them during conversation.
[tabs]
====
@@ -512,13 +512,13 @@ Java::
[source,java]
----
// Define tools
-from("spring-ai-tools:weather?tags=weather&description=Get current weather for a location")
+from("ai-tool:weather?tags=weather&description=Get current weather for a location")
.setBody(constant("Sunny"));
-from("spring-ai-tools:calculator?tags=math&description=Evaluate mathematical expressions")
+from("ai-tool:calculator?tags=math&description=Evaluate mathematical expressions")
.setBody(constant("42"));
-from("spring-ai-tools:stock?tags=finance&description=Get current stock price")
+from("ai-tool:stock?tags=finance&description=Get current stock price")
.setBody(constant("42"));
// Chat endpoints with different tool combinations
@@ -538,17 +538,17 @@ XML::
----
-
+
Sunny
-
+
42
-
+
42
@@ -576,7 +576,7 @@ YAML::
# Define tools
- route:
from:
- uri: spring-ai-tools:weather
+ uri: ai-tool:weather
parameters:
tags: weather
description: Get current weather for a location
@@ -586,7 +586,7 @@ YAML::
- route:
from:
- uri: spring-ai-tools:calculator
+ uri: ai-tool:calculator
parameters:
tags: math
description: Evaluate mathematical expressions
@@ -596,7 +596,7 @@ YAML::
- route:
from:
- uri: spring-ai-tools:stock
+ uri: ai-tool:stock
parameters:
tags: finance
description: Get current stock price
@@ -1028,7 +1028,7 @@ template.request("direct:chat", e -> {
----
NOTE: Tool context works with Spring AI `@Tool` methods and MCP tools.
-Camel route tools (defined via `spring-ai-tools` consumer) do not receive the `ToolContext`.
+Camel route tools (defined via `ai-tool` consumer) do not receive the `ToolContext`.
=== Structured Output Validation
@@ -1384,7 +1384,7 @@ logging.level.org.springframework.ai.chat.client.advisor=DEBUG
* https://docs.spring.io/spring-ai/reference/[Spring AI Documentation]
* https://docs.spring.io/spring-ai/reference/api/tools.html[Spring AI Function Calling]
-* xref:spring-ai-tools-component.adoc[Spring AI Tools Component]
+* xref:ai-tool-component.adoc[AI Tool Component]
* xref:spring-ai-embeddings-component.adoc[Spring AI Embeddings Component]
* xref:spring-ai-vector-store-component.adoc[Spring AI VectorStore Component]
* xref:spring-ai-image-component.adoc[Spring AI Image Component]
diff --git a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/java/org/apache/camel/component/springai/chat/AiToolSpecToSpringAi.java b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/java/org/apache/camel/component/springai/chat/AiToolSpecToSpringAi.java
new file mode 100644
index 0000000000000..e4992f29e30c8
--- /dev/null
+++ b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/java/org/apache/camel/component/springai/chat/AiToolSpecToSpringAi.java
@@ -0,0 +1,73 @@
+/*
+ * 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.component.springai.chat;
+
+import java.util.Map;
+import java.util.function.Function;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.ai.tool.AiToolExecutor;
+import org.apache.camel.component.ai.tool.AiToolResult;
+import org.apache.camel.component.ai.tool.AiToolSpec;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.ai.tool.ToolCallback;
+import org.springframework.ai.tool.function.FunctionToolCallback;
+
+/**
+ * Converts a framework-agnostic {@link AiToolSpec} into a Spring AI {@link ToolCallback}. Delegates tool execution to
+ * {@link AiToolExecutor} so that argument filtering, required-parameter validation, and route invocation are handled
+ * uniformly across all AI framework adapters.
+ */
+final class AiToolSpecToSpringAi {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AiToolSpecToSpringAi.class);
+
+ private AiToolSpecToSpringAi() {
+ }
+
+ static ToolCallback toToolCallback(AiToolSpec spec) {
+ Function