Files
hawkbit/hawkbit-mcp
Avgustin Marinov 1be473b22c [#2845] Bump Spring boot to 4.x (#2941)
Notes:
1. (!) Eclipselink shall be migrated to 5.0 (in 4.0.8 there are incompatible classes, e.g EJBQueryImpl doesn't implement some newer methods). In the moment is with beta (5.0.0-B12) - JUST for testing!
2. (!) Ethlo plugin doesn't work with Eclipselink 5.0, it builds with Eclipselink 4.0.8 (could be a problem)
3. Dependencies - new starters, test starters changes, some dependencies refactoring
4. Auto-configs split - package changes, some properties classes changes
5. Spring nullable org.springframework.lang.Nullable/NonNull are depecated and replaced with jspcify -> org.jspecify.annotations.Nullable/NonNull (NullMarked)
6. Lombok config - adding lombok.addNullAnnotations=jspecify - to do not mess annotations
7. Distributed lock table changes - SP_LOCK table db migration
8. Spring Retry replaced with Spring Core Retry - does repace retry in hawkbit
9. Specifications -> added Update/Delete(/Predicate) Specifications and JpaSpecificationExecutor changed
10. HawkbitBaseRepositoryFactoryBean modified to register properly
11. Jackson - 2 -> 3, package migrations, finals are not deserialized by default(enable finals deserialization, consider make non-final), too ‘smart’ tries to set complex objects instead of using non args constructor (-> @JsonIgnore), some other default configs made

Signed-off-by: Avgustin Marinov <Avgustin.Marinov@bosch.com>
2026-04-14 11:31:41 +03:00
..
2026-02-05 16:06:50 +02:00

hawkBit MCP Server

A standalone Model Context Protocol (MCP) server that provides AI assistants with tools to interact with Eclipse hawkBit for IoT device software update management.

Building

From the project root directory:

mvn clean package -pl hawkbit-mcp -am -DskipTests

The JAR will be created at: hawkbit-mcp/target/hawkbit-mcp-server-0-SNAPSHOT.jar

Configuration

The MCP server supports two transport modes:

Mode Use Case Authentication
HTTP/SSE Remote access, multi-user Per-request via Authorization header
STDIO Local CLI tools (e.g., Claude Code) Environment variables

HTTP Transport

Use HTTP transport when running the server as a standalone service:

{
  "mcpServers": {
    "hawkbit-mcp": {
      "type": "http",
      "url": "http://localhost:8081/mcp",
      "headers": {
        "Authorization": "Basic <BASE64_ENCODED_CREDENTIALS>"
      }
    }
  }
}

Start the server separately:

java -jar hawkbit-mcp-server-0-SNAPSHOT.jar \
  --hawkbit.mcp.mgmt-url=<HAWKBIT_URL>

Generating Base64 credentials:

# Linux/Mac
echo -n "<USERNAME>:<PASSWORD>" | base64

# PowerShell
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("<USERNAME>:<PASSWORD>"))

STDIO Transport

Use STDIO transport for direct integration:

{
  "mcpServers": {
    "hawkbit-mcp": {
      "command": "java",
      "args": [
        "-Dspring.ai.mcp.server.stdio=true",
        "-Dspring.main.web-application-type=none",
        "-jar",
        "/path/to/hawkbit-mcp-server-0-SNAPSHOT.jar"
      ],
      "env": {
        "HAWKBIT_URL": "<HAWKBIT_URL>",
        "HAWKBIT_USERNAME": "<USERNAME>",
        "HAWKBIT_PASSWORD": "<PASSWORD>"
      }
    }
  }
}

Configuration Properties

Property Environment Variable Description Default
hawkbit.mcp.mgmt-url HAWKBIT_URL hawkBit Management API URL http://localhost:8080
hawkbit.mcp.username HAWKBIT_USERNAME Username for STDIO mode -
hawkbit.mcp.password HAWKBIT_PASSWORD Password for STDIO mode -
hawkbit.mcp.validation.enabled - Validate credentials against hawkBit true
hawkbit.mcp.validation.cache-ttl - Cache TTL for auth validation 600s

Operation Controls

You can enable/disable specific operations globally or per-entity:

# Global: disable all deletes
hawkbit.mcp.operations.delete-enabled=false

# Per-entity: allow delete for targets only
hawkbit.mcp.operations.targets.delete-enabled=true

# Disable rollout lifecycle operations
hawkbit.mcp.operations.rollouts.start-enabled=false
hawkbit.mcp.operations.rollouts.approve-enabled=false