Configuration Loader

The configuration loader implements hierarchical configuration loading from multiple sources.

Configuration Loader Class

class rmcp.config.loader.ConfigLoader[source]

Bases: object

Handles loading and merging configuration from multiple sources.

The ConfigLoader implements the hierarchical configuration system for RMCP, automatically discovering and merging configuration from multiple sources in priority order.

Features:
  • Configuration caching for performance

  • Automatic environment variable discovery

  • JSON schema validation

  • Detailed error reporting

  • Type conversion and validation

Usage:

The loader is typically used as a singleton to ensure consistent configuration across the application:

loader = ConfigLoader()
config = loader.load_config()

For custom configuration scenarios:

config = loader.load_config(
    config_file="/custom/path/config.json",
    cli_overrides={"debug": True}
)
__init__()[source]

Initialize the configuration loader.

Creates a new configuration loader with empty cache. The cache will be populated on first load_config() call.

load_config(config_file: str | Path | None = None, overrides: Dict[str, Any] | None = None, validate: bool = True) RMCPConfig[source]

Load configuration from all sources in priority order: 1. Overrides (highest priority) 2. Environment variables 3. Specified config file or auto-discovered files 4. Defaults (lowest priority)

Parameters:
  • config_file (str | Path | None) – Explicit config file path

  • overrides (Dict[str, Any] | None) – Dictionary of override values

  • validate (bool) – Whether to validate against JSON schema

Returns:

Loaded and validated RMCPConfig instance

Return type:

RMCPConfig

The ConfigLoader automatically discovers and merges configuration from:

  1. Command-line arguments (highest priority)

  2. Environment variables (RMCP_* prefix)

  3. User configuration file (~/.rmcp/config.json)

  4. System configuration file (/etc/rmcp/config.json)

  5. Built-in defaults (lowest priority)

Loading Configuration

Basic Usage

from rmcp.config.loader import ConfigLoader

# Load with default discovery
loader = ConfigLoader()
config = loader.load_config()

# Access configuration values
print(f"HTTP server will bind to {config.http.host}:{config.http.port}")
print(f"R timeout: {config.r.timeout} seconds")

Custom Configuration File

# Load from custom file
config = loader.load_config(config_file="/path/to/custom.json")

CLI Overrides

# Load with CLI overrides
config = loader.load_config(
    cli_overrides={
        "debug": True,
        "http": {"host": "0.0.0.0", "port": 9000},
        "r": {"timeout": 300}
    }
)

Environment Variable Discovery

Environment variables are automatically discovered and mapped to configuration keys:

  • RMCP_HTTP_HOSThttp.host

  • RMCP_HTTP_PORThttp.port

  • RMCP_R_TIMEOUTr.timeout

  • RMCP_LOG_LEVELlogging.level

  • RMCP_DEBUGdebug

File Loading and Validation

Configuration files are validated against a JSON schema to ensure:

  • Required fields are present

  • Data types are correct

  • Values are within valid ranges

  • Nested structure matches expected format

Error Handling

exception rmcp.config.loader.ConfigError[source]

Bases: Exception

Configuration-related errors.

Raised when configuration loading, validation, or parsing fails. Provides detailed error messages to help users fix configuration issues.

Configuration errors provide detailed information about:

  • Which configuration source caused the error

  • Specific validation failures

  • Suggestions for fixing the issue

  • Schema validation details

Utility Functions

These utility functions support the configuration loading process with type conversion, nested dictionary merging, and configuration file discovery.