"""Configuration loading for the SonarQube MCP server."""
from __future__ import annotations
import logging
import os
from dataclasses import dataclass
logger = logging.getLogger(__name__)
DEFAULT_SONARQUBE_URL = "http://localhost:9000"
DEFAULT_REQUEST_TIMEOUT_SEC = 30.0
@dataclass(frozen=True)
class SonarQubeSettings:
"""Runtime settings used by all tools."""
sonarqube_url: str
sonarqube_token: str
request_timeout_sec: float
def _float_env(name: str, default: float) -> float:
value = os.getenv(name)
if not value:
return default
try:
return float(value)
except ValueError:
logger.warning(
"Invalid value for %s: %r — falling back to %s", name, value, default
)
return default
def load_settings() -> SonarQubeSettings:
"""Load settings from environment variables."""
url = (os.getenv("SONARQUBE_URL") or DEFAULT_SONARQUBE_URL).rstrip("/")
token = os.getenv("SONARQUBE_TOKEN") or ""
if not token:
logger.warning(
"SONARQUBE_TOKEN is not set — requests will be unauthenticated"
)
return SonarQubeSettings(
sonarqube_url=url,
sonarqube_token=token,
request_timeout_sec=_float_env(
"SONARQUBE_REQUEST_TIMEOUT_SEC", DEFAULT_REQUEST_TIMEOUT_SEC
),
)