Configuration

All environment variables and how the server loads them.

Table of contents

  1. Overview
  2. Environment Variables
    1. Azure Authentication
    2. Server Settings
    3. Rate Limiting
    4. Docker & Monitoring
    5. Security
  3. Validation
  4. Reloading Configuration
  5. Example .env File

Overview

Configuration is managed by the ServerConfig dataclass in config.py. It reads environment variables at startup via python-dotenv (from a .env file) and os.getenv() with defaults.

A global singleton config is created at import time and used throughout the application.


Environment Variables

Azure Authentication

Variable Default Description
AZURE_SUBSCRIPTION_ID Default subscription ID. Can also be set via set_subscription tool at runtime.
AZURE_TENANT_ID Azure AD tenant ID (for Service Principal auth)
AZURE_CLIENT_ID Service Principal application/client ID
AZURE_CLIENT_SECRET Service Principal secret
AZURE_DEFAULT_LOCATION eastus Default Azure region for new resources

If AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID are all set, the server uses Service Principal authentication. Otherwise, it falls back to Azure CLI / Managed Identity.

Server Settings

Variable Default Description
LOG_LEVEL INFO Logging verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL
LOG_FORMAT %(asctime)s - %(name)s - %(levelname)s - %(message)s Python logging format string
API_TIMEOUT 30 HTTP request timeout in seconds
API_RETRY_ATTEMPTS 3 Number of retry attempts for API calls
API_RETRY_DELAY 1 Delay between retries in seconds
DEBUG false Enable debug mode (verbose error messages)

Rate Limiting

Variable Default Description
RATE_LIMIT_ENABLED true Enable/disable rate limiting
RATE_LIMIT_REQUESTS_PER_MINUTE 60 Maximum requests per minute per key
RATE_LIMIT_BURST_SIZE 10 Burst allowance above the per-minute rate

Docker & Monitoring

Variable Default Description
DOCKER_TIMEOUT 30 Timeout for Docker CLI commands in seconds
MONITORING_INTERVAL 60 Default interval for monitoring checks in seconds

Security

Variable Default Description
SECRET_KEY default-secret-key-change-in-production Application secret key
ALLOWED_HOSTS localhost,127.0.0.1 Comma-separated allowed hostnames

Validation

ServerConfig.validate() checks for common misconfigurations and returns a list of error strings:

Check Condition
Log level Must be one of DEBUG, INFO, WARNING, ERROR, CRITICAL
Timeouts api_timeout, docker_timeout, monitoring_interval must be > 0
Rate limits rate_limit_requests_per_minute, rate_limit_burst_size must be > 0
Service Principal If any of client_id / client_secret / tenant_id is set, all must be set
Subscription AZURE_SUBSCRIPTION_ID is required (warning)

Reloading Configuration

To pick up changed environment variables without restarting:

from azops_mcp.config import reload_config

new_config = reload_config()

This creates a fresh ServerConfig instance and replaces the global config singleton.


Example .env File

# Minimal — uses az login credentials
AZURE_SUBSCRIPTION_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

# Optional: Service Principal
# AZURE_TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# AZURE_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# AZURE_CLIENT_SECRET=your-secret

# Defaults
AZURE_DEFAULT_LOCATION=eastus
LOG_LEVEL=INFO
API_TIMEOUT=30
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_MINUTE=60
DEBUG=false