validationCache;
- public HawkbitAuthenticationValidator(final HawkbitClient hawkbitClient,
- final Tenant dummyTenant,
- final HawkbitMcpProperties properties) {
+ public HawkbitAuthenticationValidator(final HawkbitClient hawkbitClient, final Tenant dummyTenant, final HawkbitMcpProperties properties) {
this.hawkbitClient = hawkbitClient;
this.dummyTenant = dummyTenant;
@@ -127,4 +125,4 @@ public class HawkbitAuthenticationValidator implements AuthenticationValidator {
throw new McpAuthenticationException("SHA-256 not available." + e.getMessage());
}
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java
index 9f07ceb06..e56ce8248 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/client/McpAuthenticationException.java
@@ -14,4 +14,4 @@ public class McpAuthenticationException extends RuntimeException {
public McpAuthenticationException(String message) {
super(message);
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java
index 78caefe5e..ac83f0c61 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitClientConfiguration.java
@@ -9,6 +9,8 @@
*/
package org.eclipse.hawkbit.mcp.server.config;
+import java.util.function.BiFunction;
+
import feign.Contract;
import feign.RequestInterceptor;
import feign.codec.Decoder;
@@ -23,8 +25,6 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
-import java.util.function.BiFunction;
-
/**
* Common configuration for the hawkBit SDK client.
*
@@ -46,7 +46,7 @@ public class HawkbitClientConfiguration {
@Bean
@Primary
public HawkbitServer hawkbitServer() {
- HawkbitServer server = new HawkbitServer();
+ final HawkbitServer server = new HawkbitServer();
server.setMgmtUrl(properties.getMgmtUrl());
log.info("Configured hawkBit server URL: {}", properties.getMgmtUrl());
return server;
@@ -68,5 +68,4 @@ public class HawkbitClientConfiguration {
.requestInterceptorFn(hawkbitRequestInterceptor)
.build();
}
-
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java
index c2ebec782..808a6300f 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/HawkbitMcpProperties.java
@@ -26,6 +26,12 @@ import java.time.Duration;
@ConfigurationProperties(prefix = "hawkbit.mcp")
public class HawkbitMcpProperties {
+ public static final String OP_LIST = "list";
+ public static final String OP_CREATE = "create";
+ public static final String OP_UPDATE = "update";
+ public static final String OP_DELETE = "delete";
+ public static final String OP_DELETE_BATCH = "delete-batch";
+
/**
* Base URL of the hawkBit Management API (e.g., ...).
*/
@@ -56,19 +62,19 @@ public class HawkbitMcpProperties {
/**
* Whether to enable the built-in hawkBit tools.
- * Set to false to provide custom tool implementations.
+ * Set to false to provide custom tool implementations.
*/
private boolean toolsEnabled = true;
/**
* Whether to enable the built-in hawkBit documentation resources.
- * Set to false to provide custom resource implementations.
+ * Set false provide custom resource implementations.
*/
private boolean resourcesEnabled = true;
/**
* Whether to enable the built-in hawkBit prompts.
- * Set to false to provide custom prompt implementations.
+ * Set false provide custom prompt implementations.
*/
private boolean promptsEnabled = true;
@@ -130,10 +136,10 @@ public class HawkbitMcpProperties {
*/
public boolean isGlobalOperationEnabled(final String operation) {
return switch (operation.toLowerCase()) {
- case "list" -> listEnabled;
- case "create" -> createEnabled;
- case "update" -> updateEnabled;
- case "delete" -> deleteEnabled;
+ case OP_LIST -> listEnabled;
+ case OP_CREATE -> createEnabled;
+ case OP_UPDATE -> updateEnabled;
+ case OP_DELETE -> deleteEnabled;
default -> true;
};
}
@@ -155,10 +161,10 @@ public class HawkbitMcpProperties {
*/
public Boolean getOperationEnabled(final String operation) {
return switch (operation.toLowerCase()) {
- case "list" -> listEnabled;
- case "create" -> createEnabled;
- case "update" -> updateEnabled;
- case "delete" -> deleteEnabled;
+ case OP_LIST -> listEnabled;
+ case OP_CREATE -> createEnabled;
+ case OP_UPDATE -> updateEnabled;
+ case OP_DELETE -> deleteEnabled;
default -> null;
};
}
@@ -215,11 +221,11 @@ public class HawkbitMcpProperties {
*/
public Boolean getOperationEnabled(final String operation) {
return switch (operation.toLowerCase().replace("_", "-")) {
- case "list" -> listEnabled;
- case "delete" -> deleteEnabled;
- case "delete-batch" -> deleteBatchEnabled;
+ case OP_LIST -> listEnabled;
+ case OP_DELETE -> deleteEnabled;
+ case OP_DELETE_BATCH -> deleteBatchEnabled;
default -> null;
};
}
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java
index bf41a641f..764d78965 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpHttpClientConfiguration.java
@@ -68,5 +68,4 @@ public class McpHttpClientConfiguration {
log.info("Configured tenant for HTTP mode (per-request authentication)");
return new Tenant();
}
-
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
index 1c5886ae2..51030c519 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpSecurityConfiguration.java
@@ -9,10 +9,14 @@
*/
package org.eclipse.hawkbit.mcp.server.config;
+import java.io.IOException;
+import java.util.Optional;
+
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -33,9 +37,6 @@ import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.filter.OncePerRequestFilter;
-import java.io.IOException;
-import java.util.Optional;
-
/**
* Security configuration for the MCP server.
*
@@ -62,15 +63,14 @@ 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
- .authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
- .csrf(AbstractHttpConfigurer::disable)
- .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
+ .authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
+ .csrf(AbstractHttpConfigurer::disable)
+ .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
authenticationValidator.ifPresentOrElse(
validator -> {
log.info("Authentication validation enabled - adding validation filter");
- http.addFilterBefore(new HawkBitAuthenticationFilter(validator),
- UsernamePasswordAuthenticationFilter.class);
+ http.addFilterBefore(new HawkBitAuthenticationFilter(validator), UsernamePasswordAuthenticationFilter.class);
},
() -> log.info("Authentication validation disabled - requests will be forwarded without validation")
);
@@ -91,8 +91,9 @@ public class McpSecurityConfiguration {
private final AuthenticationValidator validator;
@Override
- protected void doFilterInternal(final HttpServletRequest request, final @NonNull HttpServletResponse response,
- final @NonNull FilterChain filterChain) throws ServletException, IOException {
+ protected void doFilterInternal(
+ final HttpServletRequest request, final @NonNull HttpServletResponse response, final @NonNull FilterChain filterChain)
+ throws ServletException, IOException {
final String authHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
final ValidationResult result = validator.validate(authHeader);
@@ -120,10 +121,7 @@ public class McpSecurityConfiguration {
throws IOException {
response.setStatus(status.value());
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
- response.getWriter().write(String.format(
- "{\"error\":\"%s\",\"message\":\"%s\"}",
- status.getReasonPhrase(),
- message));
+ response.getWriter().write(String.format("{\"error\":\"%s\",\"message\":\"%s\"}", status.getReasonPhrase(), message));
}
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java
index bca2bdfdf..1b93e4d01 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpStdioClientConfiguration.java
@@ -46,9 +46,8 @@ public class McpStdioClientConfiguration {
log.info("Configuring STDIO mode request interceptor (static credentials)");
return (tenant, controller) -> template -> {
if (properties.hasStaticCredentials()) {
- String credentials = properties.getUsername() + ":" + properties.getPassword();
- String authHeader = "Basic " + Base64.getEncoder().encodeToString(
- credentials.getBytes(StandardCharsets.UTF_8));
+ final String credentials = properties.getUsername() + ":" + properties.getPassword();
+ final String authHeader = "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8));
template.header(HttpHeaders.AUTHORIZATION, authHeader);
log.trace("Using static credentials from properties (STDIO mode)");
} else {
@@ -72,5 +71,4 @@ public class McpStdioClientConfiguration {
}
return tenant;
}
-
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java
index 6320303e2..c62eae265 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/config/McpToolConfiguration.java
@@ -45,9 +45,7 @@ public class McpToolConfiguration {
@ConditionalOnMissingBean
@ConditionalOnProperty(name = "hawkbit.mcp.tools-enabled", havingValue = "true", matchIfMissing = true)
public HawkbitMcpToolProvider hawkBitMcpToolProvider(
- final HawkbitClient hawkbitClient,
- final Tenant dummyTenant,
- final HawkbitMcpProperties properties) {
+ final HawkbitClient hawkbitClient, final Tenant dummyTenant, final HawkbitMcpProperties properties) {
return new HawkbitMcpToolProvider(hawkbitClient, dummyTenant, properties);
}
@@ -80,4 +78,4 @@ public class McpToolConfiguration {
public HawkbitPromptProvider hawkBitPromptProvider() {
return new HawkbitPromptProvider();
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java
index 3475002c2..7c8395ad0 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ActionRequest.java
@@ -9,11 +9,11 @@
*/
package org.eclipse.hawkbit.mcp.server.dto;
+import java.util.List;
+
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import java.util.List;
-
/**
* Sealed interface for action management operations.
*/
@@ -36,7 +36,7 @@ public sealed interface ActionRequest
* Request to delete multiple actions.
*
* @param actionIds list of action IDs to delete (mutually exclusive with rsql)
- * @param rsql RSQL filter query for selecting actions to delete (mutually exclusive with actionIds)
+ * @param rsql RSQL filter query for selecting actions to delete (mutually exclusive with actionIds)
*/
record DeleteBatch(List actionIds, String rsql) implements ActionRequest {}
}
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java
index bc425a503..d64732dab 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/ListRequest.java
@@ -17,13 +17,10 @@ import com.fasterxml.jackson.annotation.JsonPropertyDescription;
public record ListRequest(
@JsonPropertyDescription("RSQL filter query (e.g., 'name==test*')")
String rsql,
-
@JsonPropertyDescription("Number of items to skip (default: 0)")
Integer offset,
-
@JsonPropertyDescription("Maximum number of items to return (default: 50)")
- Integer limit
-) {
+ Integer limit) {
public static final int DEFAULT_OFFSET = 0;
public static final int DEFAULT_LIMIT = 50;
@@ -39,4 +36,4 @@ public record ListRequest(
public String getRsqlOrNull() {
return rsql != null && !rsql.isBlank() ? rsql : null;
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java
index 40a056e28..c9444f57c 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/OperationResponse.java
@@ -18,12 +18,7 @@ package org.eclipse.hawkbit.mcp.server.dto;
* @param message optional message (typically for success confirmations or error details)
* @param data the operation result data (e.g., created/updated entity)
*/
-public record OperationResponse(
- String operation,
- boolean success,
- String message,
- T data
-) {
+public record OperationResponse(String operation, boolean success, String message, T data) {
/**
* Creates a successful response with data.
@@ -52,4 +47,4 @@ public record OperationResponse(
public static OperationResponse failure(final String operation, final String message) {
return new OperationResponse<>(operation, false, message, null);
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java
index c26107ddc..496862ca1 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/PagedResponse.java
@@ -16,14 +16,9 @@ import java.util.List;
*
* @param the type of items in the response
*/
-public record PagedResponse(
- List content,
- long total,
- int offset,
- int limit
-) {
+public record PagedResponse(List content, long total, int offset, int limit) {
public static PagedResponse of(final List content, final long total, final int offset, final int limit) {
return new PagedResponse<>(content, total, offset, limit);
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java
index 02be86c1f..fdf0d7a3d 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/RolloutRequest.java
@@ -116,4 +116,4 @@ public sealed interface RolloutRequest
* @param rolloutId the rollout ID
*/
record TriggerNextGroup(Long rolloutId) implements RolloutRequest {}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java
index 11b5bdf33..835d75a08 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/SoftwareModuleRequest.java
@@ -47,4 +47,4 @@ public sealed interface SoftwareModuleRequest
* @param softwareModuleId the software module ID to delete
*/
record Delete(Long softwareModuleId) implements SoftwareModuleRequest {}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java
index ddab9dc73..c16ca5b6c 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetFilterRequest.java
@@ -46,4 +46,4 @@ public sealed interface TargetFilterRequest
* @param filterId the target filter ID to delete
*/
record Delete(Long filterId) implements TargetFilterRequest {}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java
index 3f5b6dbeb..179cf8b05 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/dto/TargetRequest.java
@@ -46,4 +46,4 @@ public sealed interface TargetRequest
* @param controllerId the target controller ID to delete
*/
record Delete(String controllerId) implements TargetRequest {}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java
index a41176c2e..c2cadbd38 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/prompts/HawkbitPromptProvider.java
@@ -64,4 +64,4 @@ public class HawkbitPromptProvider {
return "Prompt content not available.";
}
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java
index e53b1f503..395a072bd 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/resources/HawkbitDocumentationResource.java
@@ -198,4 +198,4 @@ public class HawkbitDocumentationResource {
return "Documentation not available. Please refer to the hawkBit documentation at https://eclipse.dev/hawkbit/";
}
}
-}
+}
\ No newline at end of file
diff --git a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java
index afc24e221..70261393e 100644
--- a/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java
+++ b/hawkbit-mcp/src/main/java/org/eclipse/hawkbit/mcp/server/tools/HawkbitMcpToolProvider.java
@@ -53,10 +53,10 @@ import java.util.List;
@RequiredArgsConstructor
public class HawkbitMcpToolProvider {
- private static final String OP_CREATE = "CREATE";
- private static final String OP_UPDATE = "UPDATE";
- private static final String OP_DELETE = "DELETE";
- private static final String OP_DELETE_BATCH = "DELETE_BATCH";
+ private static final String OP_CREATE = HawkbitMcpProperties.OP_CREATE.toUpperCase();
+ private static final String OP_UPDATE = HawkbitMcpProperties.OP_UPDATE.toUpperCase();
+ private static final String OP_DELETE = HawkbitMcpProperties.OP_DELETE.toUpperCase();
+ private static final String OP_DELETE_BATCH = HawkbitMcpProperties.OP_DELETE_BATCH.toUpperCase().replace('-', '_');
private static final String OP_START = "START";
private static final String OP_PAUSE = "PAUSE";
private static final String OP_STOP = "STOP";
@@ -66,6 +66,14 @@ public class HawkbitMcpToolProvider {
private static final String OP_RETRY = "RETRY";
private static final String OP_TRIGGER_NEXT_GROUP = "TRIGGER_NEXT_GROUP";
+ private static final String SOFTWARE_MODULES = "softwareModules";
+ private static final String DISTRIBUTION_SETS = "distributionSets";
+ private static final String TARGETS = "targets";
+ private static final String TARGET_FILTERS = "targetFilters";
+
+ private static final String BODY_IS_REQUIRED_FOR_UPDATE_OPERATION = "body is required for UPDATE operation";
+ private static final String BODY_IS_REQUIRED_FOR_CREATE_OPERATION = "body is required for CREATE operation";
+
private final HawkbitClient hawkbitClient;
private final Tenant dummyTenant;
private final HawkbitMcpProperties properties;
@@ -199,13 +207,14 @@ public class HawkbitMcpToolProvider {
"{\"type\":\"Create\",\"body\":{\"controllerId\":\"id\",\"name\":\"name\"}}, " +
"{\"type\":\"Update\",\"controllerId\":\"id\",\"body\":{...}}, " +
"{\"type\":\"Delete\",\"controllerId\":\"id\"}")
+ @SuppressWarnings("java:S3776") // not too complex
public OperationResponse