From 8ee76412b075ca2e8c31a421098031057b21330f Mon Sep 17 00:00:00 2001
From: Denislav Prinov
Date: Tue, 17 Feb 2026 10:56:51 +0200
Subject: [PATCH] Restructure hawkbit-mcp into starter/server modules following
the hawkbit conventions (#2923)
Signed-off-by: Denislav Prinov
---
hawkbit-mcp/hawkbit-mcp-server/pom.xml | 62 +++++++++
.../hawkbit/mcp/server/McpServerStart.java | 3 -
.../src/main/resources/application.properties | 0
hawkbit-mcp/hawkbit-mcp-starter/pom.xml | 114 +++++++++++++++++
.../mcp/McpAutoConfiguration.java | 52 ++++++++
.../client/AuthenticationValidator.java | 0
.../HawkbitAuthenticationValidator.java | 4 -
.../client/McpAuthenticationException.java | 0
.../config/HawkbitClientConfiguration.java | 0
.../server/config/HawkbitMcpProperties.java | 0
.../config/McpHttpClientConfiguration.java | 0
.../config/McpSecurityConfiguration.java | 1 +
.../config/McpStdioClientConfiguration.java | 0
.../server/config/McpToolConfiguration.java | 0
.../hawkbit/mcp/server/dto/ActionRequest.java | 0
.../server/dto/DistributionSetRequest.java | 0
.../hawkbit/mcp/server/dto/ListRequest.java | 0
.../mcp/server/dto/OperationResponse.java | 0
.../hawkbit/mcp/server/dto/PagedResponse.java | 0
.../mcp/server/dto/RolloutRequest.java | 0
.../mcp/server/dto/SoftwareModuleRequest.java | 0
.../mcp/server/dto/TargetFilterRequest.java | 0
.../hawkbit/mcp/server/dto/TargetRequest.java | 0
.../server/prompts/HawkbitPromptProvider.java | 0
.../HawkbitDocumentationResource.java | 0
.../server/tools/HawkbitMcpToolProvider.java | 0
...ot.autoconfigure.AutoConfiguration.imports | 1 +
.../resources/hawkbit-entity-definitions.md | 0
.../main/resources/prompts/hawkbit-context.md | 0
.../src/main/resources/prompts/rsql-help.md | 0
hawkbit-mcp/pom.xml | 119 ++----------------
31 files changed, 239 insertions(+), 117 deletions(-)
create mode 100644 hawkbit-mcp/hawkbit-mcp-server/pom.xml
rename hawkbit-mcp/{ => hawkbit-mcp-server}/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java (82%)
rename hawkbit-mcp/{ => hawkbit-mcp-server}/src/main/resources/application.properties (100%)
create mode 100644 hawkbit-mcp/hawkbit-mcp-starter/pom.xml
create mode 100644 hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/autoconfigure/mcp/McpAutoConfiguration.java
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/client/AuthenticationValidator.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java (95%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java (99%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/DistributionSetRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java (100%)
create mode 100644 hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/resources/hawkbit-entity-definitions.md (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/resources/prompts/hawkbit-context.md (100%)
rename hawkbit-mcp/{ => hawkbit-mcp-starter}/src/main/resources/prompts/rsql-help.md (100%)
diff --git a/hawkbit-mcp/hawkbit-mcp-server/pom.xml b/hawkbit-mcp/hawkbit-mcp-server/pom.xml
new file mode 100644
index 000000000..15b5342ed
--- /dev/null
+++ b/hawkbit-mcp/hawkbit-mcp-server/pom.xml
@@ -0,0 +1,62 @@
+
+
+ 4.0.0
+
+ org.eclipse.hawkbit
+ hawkbit-mcp-parent
+ ${revision}
+
+
+ hawkbit-mcp-server
+ hawkBit :: MCP :: Server (Standalone)
+ Standalone MCP server that connects to hawkBit via REST API
+
+
+ org.eclipse.hawkbit.mcp.server.McpServerStart
+
+
+
+
+ org.eclipse.hawkbit
+ hawkbit-mcp-starter
+ ${project.version}
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+ ${baseDir}
+ ${spring.app.class}
+ JAR
+
+
+
+
+
+
+
+ src/main/resources
+
+
+
+
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java b/hawkbit-mcp/hawkbit-mcp-server/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java
similarity index 82%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java
rename to hawkbit-mcp/hawkbit-mcp-server/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java
index f9fcccadd..6e53eae41 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java
+++ b/hawkbit-mcp/hawkbit-mcp-server/src/main/java/org/eclipse/hawkbit/mcp/server/McpServerStart.java
@@ -9,10 +9,8 @@
*/
package org.eclipse.hawkbit.mcp.server;
-import org.eclipse.hawkbit.mcp.server.config.HawkbitMcpProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration;
/**
@@ -23,7 +21,6 @@ import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServic
*
*/
@SpringBootApplication(exclude = UserDetailsServiceAutoConfiguration.class)
-@EnableConfigurationProperties(HawkbitMcpProperties.class)
public class McpServerStart {
public static void main(final String[] args) {
diff --git a/hawkbit-mcp/src/main/resources/application.properties b/hawkbit-mcp/hawkbit-mcp-server/src/main/resources/application.properties
similarity index 100%
rename from hawkbit-mcp/src/main/resources/application.properties
rename to hawkbit-mcp/hawkbit-mcp-server/src/main/resources/application.properties
diff --git a/hawkbit-mcp/hawkbit-mcp-starter/pom.xml b/hawkbit-mcp/hawkbit-mcp-starter/pom.xml
new file mode 100644
index 000000000..5f61b4c00
--- /dev/null
+++ b/hawkbit-mcp/hawkbit-mcp-starter/pom.xml
@@ -0,0 +1,114 @@
+
+
+ 4.0.0
+
+ org.eclipse.hawkbit
+ hawkbit-mcp-parent
+ ${revision}
+
+
+ hawkbit-mcp-starter
+ hawkBit :: MCP :: Spring Boot Starter
+
+
+
+
+ org.eclipse.hawkbit
+ hawkbit-sdk-mgmt
+ ${project.version}
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+
+
+ org.springframework.boot
+ spring-boot-starter-hateoas
+
+
+
+
+
+
+ org.springframework.ai
+ spring-ai-starter-mcp-server-webmvc
+
+
+ org.springframework.ai
+ spring-ai-mcp-annotations
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+ copy-hawkbit-docs
+ generate-resources
+
+ copy-resources
+
+
+ ${project.build.outputDirectory}/hawkbit-docs
+
+
+ ${project.basedir}/../../docs
+
+ README.md
+ what-is-hawkbit.md
+ quick-start.md
+ features.md
+ architecture.md
+ base-setup.md
+ hawkbit-sdk.md
+ feign-client.md
+ clustering.md
+ authentication.md
+ authorization.md
+ datamodel.md
+ rollout-management.md
+ targetstate.md
+ management-api.md
+ direct-device-integration-api.md
+ device-management-federation-api.md
+
+
+
+
+
+
+
+
+
+
diff --git a/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/autoconfigure/mcp/McpAutoConfiguration.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/autoconfigure/mcp/McpAutoConfiguration.java
new file mode 100644
index 000000000..81fe1e789
--- /dev/null
+++ b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/autoconfigure/mcp/McpAutoConfiguration.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.eclipse.hawkbit.autoconfigure.mcp;
+
+import org.eclipse.hawkbit.mcp.server.client.AuthenticationValidator;
+import org.eclipse.hawkbit.mcp.server.client.HawkbitAuthenticationValidator;
+import org.eclipse.hawkbit.mcp.server.config.HawkbitClientConfiguration;
+import org.eclipse.hawkbit.mcp.server.config.HawkbitMcpProperties;
+import org.eclipse.hawkbit.mcp.server.config.McpHttpClientConfiguration;
+import org.eclipse.hawkbit.mcp.server.config.McpSecurityConfiguration;
+import org.eclipse.hawkbit.mcp.server.config.McpStdioClientConfiguration;
+import org.eclipse.hawkbit.mcp.server.config.McpToolConfiguration;
+import org.eclipse.hawkbit.sdk.HawkbitClient;
+import org.eclipse.hawkbit.sdk.Tenant;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+
+/**
+ * Auto-configuration for the hawkBit MCP server.
+ */
+@AutoConfiguration
+@ConditionalOnClass(McpToolConfiguration.class)
+@Import({
+ McpToolConfiguration.class,
+ HawkbitClientConfiguration.class,
+ McpHttpClientConfiguration.class,
+ McpStdioClientConfiguration.class,
+ McpSecurityConfiguration.class
+})
+@EnableConfigurationProperties(HawkbitMcpProperties.class)
+public class McpAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ @ConditionalOnProperty(name = "hawkbit.mcp.validation.enabled", havingValue = "true", matchIfMissing = true)
+ public AuthenticationValidator hawkbitAuthenticationValidator(
+ final HawkbitClient hawkbitClient, final Tenant dummyTenant, final HawkbitMcpProperties properties) {
+ return new HawkbitAuthenticationValidator(hawkbitClient, dummyTenant, properties);
+ }
+}
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/AuthenticationValidator.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/AuthenticationValidator.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/AuthenticationValidator.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/AuthenticationValidator.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java
similarity index 95%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java
index 09c796515..17c39595f 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java
+++ b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/HawkbitAuthenticationValidator.java
@@ -22,17 +22,13 @@ import org.eclipse.hawkbit.mcp.server.config.HawkbitMcpProperties;
import org.eclipse.hawkbit.mgmt.rest.api.MgmtTenantManagementRestApi;
import org.eclipse.hawkbit.sdk.HawkbitClient;
import org.eclipse.hawkbit.sdk.Tenant;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
/**
* Validates authentication credentials against hawkBit REST API using the SDK.
* This validator is conditionally created when {@code hawkbit.mcp.validation.enabled=true}.
*/
@Slf4j
-@Component
-@ConditionalOnProperty(name = "hawkbit.mcp.validation.enabled", havingValue = "true", matchIfMissing = true)
public class HawkbitAuthenticationValidator implements AuthenticationValidator {
private final HawkbitClient hawkbitClient;
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
similarity index 99%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
index 51030c519..f6a1772ac 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
+++ b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
@@ -63,6 +63,7 @@ public class McpSecurityConfiguration {
@SuppressWarnings("java:S4502") // CSRF protection is not needed for stateless REST APIs using Authorization header
public SecurityFilterChain mcpSecurityFilterChain(final HttpSecurity http) throws Exception {
http
+ .securityMatcher("/mcp/**")
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/DistributionSetRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/DistributionSetRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/DistributionSetRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/DistributionSetRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java b/hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java
similarity index 100%
rename from hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java
diff --git a/hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 000000000..14244abe9
--- /dev/null
+++ b/hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1 @@
+org.eclipse.hawkbit.autoconfigure.mcp.McpAutoConfiguration
diff --git a/hawkbit-mcp/src/main/resources/hawkbit-entity-definitions.md b/hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/hawkbit-entity-definitions.md
similarity index 100%
rename from hawkbit-mcp/src/main/resources/hawkbit-entity-definitions.md
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/hawkbit-entity-definitions.md
diff --git a/hawkbit-mcp/src/main/resources/prompts/hawkbit-context.md b/hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/prompts/hawkbit-context.md
similarity index 100%
rename from hawkbit-mcp/src/main/resources/prompts/hawkbit-context.md
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/prompts/hawkbit-context.md
diff --git a/hawkbit-mcp/src/main/resources/prompts/rsql-help.md b/hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/prompts/rsql-help.md
similarity index 100%
rename from hawkbit-mcp/src/main/resources/prompts/rsql-help.md
rename to hawkbit-mcp/hawkbit-mcp-starter/src/main/resources/prompts/rsql-help.md
diff --git a/hawkbit-mcp/pom.xml b/hawkbit-mcp/pom.xml
index 12298a43f..a752ceda1 100644
--- a/hawkbit-mcp/pom.xml
+++ b/hawkbit-mcp/pom.xml
@@ -1,6 +1,6 @@