CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-embabel-agent--embabel-agent-platform-autoconfigure

Spring Boot auto-configuration platform for Embabel Agent Framework, enabling annotation-driven profile activation and bootstrapping of agent configurations with MCP client support

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

Embabel Agent Platform Auto-Configuration

Spring Boot auto-configuration for the Embabel Agent Framework. Enables automatic setup of agent platforms, tool groups, and Model Context Protocol (MCP) clients with annotation-driven profile activation.

Package: com.embabel.agent:embabel-agent-platform-autoconfigure:0.3.3 Language: Java (Spring Boot)

Quick Start

1. Add Dependency

<dependency>
    <groupId>com.embabel.agent</groupId>
    <artifactId>embabel-agent-platform-autoconfigure</artifactId>
    <version>0.3.3</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Add Spring AI model provider (required) -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

2. Configure Model Provider

# application.properties
spring.ai.openai.api-key=your-api-key
spring.ai.openai.chat.options.model=gpt-4

3. Enable Auto-Configuration

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import com.embabel.agent.autoconfigure.platform.AgentPlatformAutoConfiguration;

@SpringBootApplication
@ImportAutoConfiguration(AgentPlatformAutoConfiguration.class)
public class AgentApplication {
    public static void main(String[] args) {
        SpringApplication.run(AgentApplication.class, args);
    }
}

4. Optional: Configure Logging Theme

embabel.agent.logging.personality=starwars

Prerequisites

Required: Spring Boot Web, Spring AI Model Provider (OpenAI/Anthropic/Ollama/etc.), Java 17+

Core Capabilities

Auto-Configuration

Automatically bootstraps:

  • Agent Platform Configuration
  • Tool Groups Configuration
  • MCP Client with resilient initialization
  • Component scanning for agent packages
@AutoConfiguration
@ImportAutoConfiguration({QuiteMcpClientAutoConfiguration.class})
@Import({CommonPlatformPropertiesLoader.class, ScanConfiguration.class,
         AgentPlatformConfiguration.class, ToolGroupsConfiguration.class})
public class AgentPlatformAutoConfiguration {
    // Automatically discovered by Spring Boot
}

What gets scanned: com.embabel.agent.{api,core,experimental,prompt,spi,test,tools,web}

MCP Client Support

Provides synchronous/asynchronous MCP clients with error resilience preventing startup failures.

@AutoConfiguration
@ConditionalOnClass(McpSchema.class)
@ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = "enabled",
                       havingValue = "true", matchIfMissing = true)
public class QuiteMcpClientAutoConfiguration extends McpClientAutoConfiguration {

    @Bean
    @ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = "type",
                           havingValue = "SYNC", matchIfMissing = true)
    List<McpSyncClient> mcpSyncClients(...);

    @Bean
    @ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = "type",
                           havingValue = "ASYNC")
    List<McpAsyncClient> mcpAsyncClients(...);
}

Key feature: Failed MCP client initialization is logged but doesn't prevent application startup.

Configuration Properties

// Logging theme
@ConfigurationProperties(prefix = "embabel.agent.logging")
record LoggingPersonalityProperties(String personality) {}

// MCP client (from Spring AI)
class McpClientCommonProperties {
    boolean enabled;              // Default: true
    String type;                  // SYNC or ASYNC, default: SYNC
    String name;                  // Client name
    String version;               // Client version
    Duration requestTimeout;      // Request timeout
    boolean initialized;          // Auto-initialize, default: true
}

Common Tasks

Task: Setup with Auto-Discovery

Let Spring Boot auto-discover the configuration:

@SpringBootApplication
public class MyAgentApp {
    public static void main(String[] args) {
        SpringApplication.run(MyAgentApp.class, args);
    }
}

application.properties:

spring.ai.openai.api-key=sk-...
embabel.agent.logging.personality=starwars

Task: Configure MCP Client

spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.type=SYNC
spring.ai.mcp.client.name=my-agent
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.request-timeout=10s
spring.ai.mcp.client.initialized=true

Task: Use MCP Clients

import io.modelcontextprotocol.client.McpSyncClient;
import org.springframework.beans.factory.annotation.Autowired;

@Service
public class MyService {
    @Autowired
    private List<McpSyncClient> mcpClients;

    public void useClient() {
        if (!mcpClients.isEmpty()) {
            McpSyncClient client = mcpClients.get(0);
            // Use client...
        }
    }
}

Task: Disable Auto-Configuration

@SpringBootApplication(exclude = {AgentPlatformAutoConfiguration.class})
public class MyApp { }

Or via properties:

spring.autoconfigure.exclude=\
  com.embabel.agent.autoconfigure.platform.AgentPlatformAutoConfiguration

Task: Disable MCP Clients

spring.ai.mcp.client.enabled=false

Task: Use Async MCP Clients

spring.ai.mcp.client.type=ASYNC
import io.modelcontextprotocol.client.McpAsyncClient;
import reactor.core.publisher.Mono;

@Service
public class MyReactiveService {
    @Autowired
    private List<McpAsyncClient> mcpAsyncClients;

    public Mono<Void> useClientAsync() {
        if (!mcpAsyncClients.isEmpty()) {
            McpAsyncClient client = mcpAsyncClients.get(0);
            // Use reactive client...
        }
        return Mono.empty();
    }
}

Task: Configure Logging Theme

# Choose one theme
embabel.agent.logging.personality=starwars
embabel.agent.logging.personality=severance
embabel.agent.logging.personality=colossus
embabel.agent.logging.personality=hitchhiker
embabel.agent.logging.personality=montypython

Access in code:

@Value("${embabel.agent.logging.personality:}")
private String theme;

Task: Profile-Specific Configuration

# application.yml
spring:
  profiles:
    active: dev

---
spring:
  config:
    activate:
      on-profile: dev
embabel:
  agent:
    logging:
      personality: starwars

---
spring:
  config:
    activate:
      on-profile: prod
embabel:
  agent:
    logging:
      personality: ""

Configuration Reference

Property: embabel.agent.logging.personality

Type: String Default: "" (no theme) Values: starwars, severance, colossus, hitchhiker, montypython Purpose: Sets logging theme personality

Property: spring.ai.mcp.client.enabled

Type: boolean Default: true Purpose: Enable/disable MCP client auto-configuration

Property: spring.ai.mcp.client.type

Type: String Default: SYNC Values: SYNC, ASYNC Purpose: Choose sync or async MCP clients Bean: List<McpSyncClient> or List<McpAsyncClient>

Property: spring.ai.mcp.client.name

Type: String Purpose: Client name for MCP protocol identification

Property: spring.ai.mcp.client.version

Type: String Purpose: Client version for MCP protocol identification

Property: spring.ai.mcp.client.request-timeout

Type: Duration Format: 5s, 30s, 1m Purpose: Timeout for MCP requests

Property: spring.ai.mcp.client.initialized

Type: boolean Default: true Purpose: Auto-initialize clients on creation Note: When false, must call client.initialize() manually

API Reference

Core classes and their signatures:

// Main auto-configuration
@AutoConfiguration
public class AgentPlatformAutoConfiguration {
    // Imports: QuiteMcpClientAutoConfiguration, ScanConfiguration,
    //          AgentPlatformConfiguration, ToolGroupsConfiguration
}

// Component scanning
@Configuration
@ComponentScan(basePackages = {"com.embabel.agent.*"})
@ConfigurationPropertiesScan(basePackages = {"com.embabel.agent.*"})
public class ScanConfiguration {
}

// MCP client auto-configuration
@AutoConfiguration
@ConditionalOnClass(McpSchema.class)
@ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = "enabled",
                       havingValue = "true", matchIfMissing = true)
public class QuiteMcpClientAutoConfiguration extends McpClientAutoConfiguration {

    List<McpSyncClient> mcpSyncClients(
        McpSyncClientConfigurer configurer,
        McpClientCommonProperties properties,
        ObjectProvider<List<NamedClientMcpTransport>> transports,
        ObjectProvider<ClientMcpSyncHandlersRegistry> handlers
    );

    List<McpAsyncClient> mcpAsyncClients(
        McpAsyncClientConfigurer configurer,
        McpClientCommonProperties properties,
        ObjectProvider<List<NamedClientMcpTransport>> transports,
        ObjectProvider<ClientMcpAsyncHandlersRegistry> handlers
    );
}

// Auto-configuration filter
public class AgentPlatformAutoConfigurationFilter
    implements AutoConfigurationImportFilter {

    boolean[] match(String[] autoConfigurationClasses,
                    AutoConfigurationMetadata metadata);
    // Excludes: org.springframework.ai.mcp.client.common.autoconfigure.McpClientAutoConfiguration
}

// Environment post-processor
public class EnvironmentPostProcessor
    implements org.springframework.boot.env.EnvironmentPostProcessor,
               org.springframework.core.Ordered {

    String LOGGING_THEME_PROPERTY = "embabel.agent.logging.personality";

    void postProcessEnvironment(ConfigurableEnvironment environment,
                                SpringApplication application);

    int getOrder(); // Returns Ordered.HIGHEST_PRECEDENCE
}

// Configuration properties
@ConfigurationProperties(prefix = "embabel.agent.logging")
record LoggingPersonalityProperties(String personality) {}

class McpClientCommonProperties {
    boolean enabled;
    String type;
    String name;
    String version;
    Duration requestTimeout;
    boolean initialized;
}

// MCP client types
interface McpSyncClient {
    void initialize();
}

interface McpAsyncClient {
    Mono<Void> initialize();
}

Deprecated Features

@EnableAgents Annotation (Deprecated since 0.3.1)

Old approach:

@SpringBootApplication
@EnableAgents(
    loggingTheme = LoggingThemes.STAR_WARS,
    mcpServers = {"filesystem"}
)
public class OldApp { }

New approach:

@SpringBootApplication
@ImportAutoConfiguration(AgentPlatformAutoConfiguration.class)
public class NewApp { }
embabel.agent.logging.personality=starwars

McpServers Utility Class (Deprecated since 0.3.1)

Use Spring AI MCP client properties instead.

Spring Boot Integration

Auto-Discovery

  • META-INF/spring/.../AutoConfiguration.imports - AgentPlatformAutoConfiguration
  • META-INF/spring.factories - EnvironmentPostProcessor, AutoConfigurationImportFilter

Init Order: Filter → Transports → MCP Clients → Platform → Scanning

Component Scanning

Packages: com.embabel.agent.{api,core,experimental,prompt,spi,test,tools,web}

Error Handling

MCP Client Initialization Failures

Behavior: Failed MCP client initialization is logged but doesn't prevent application startup.

Logging:

ERROR c.e.a.a.p.QuiteMcpClientAutoConfiguration -
Failed to initialize MCP Sync Client: my-client - Application startup will continue

Result:

  • Successfully initialized clients added to List<McpSyncClient> bean
  • Failed clients excluded
  • Application continues starting

To troubleshoot:

  1. Check MCP server availability
  2. Verify transport configuration
  3. Check network connectivity
  4. Validate authentication/credentials

Supported Model Providers

  • OpenAI, Anthropic, Ollama, Azure OpenAI, AWS Bedrock, Google Vertex AI, Hugging Face
  • See Spring AI documentation for provider-specific configuration

Further Documentation

API Reference

  • Annotations - Annotation-based configuration
  • Auto-Configuration - Auto-configuration details
  • Environment Post Processor - Environment processing
  • MCP Client - MCP client API
  • Properties - Configuration properties reference

Setup Guides

Reference

Additional Resources

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/com.embabel.agent/embabel-agent-platform-autoconfigure@0.3.x
Publish Source
CLI
Badge
tessl/maven-com-embabel-agent--embabel-agent-platform-autoconfigure badge