from contextvars import ContextVar from pathlib import Path from pydantic import Field from pydantic_settings import BaseSettings from pydantic_settings import SettingsConfigDict DEFAULT_ENV_FILE = Path(".env").resolve() _REPO_ROOT = Path(__file__).resolve().parents[3] class Settings(BaseSettings): """Runtime settings for the HTTP MCP and docs server.""" model_config = SettingsConfigDict( env_file=DEFAULT_ENV_FILE, env_prefix="PERSONAL_MCP_", extra="ignore", ) host: str = "127.0.0.1" port: int = 8000 debug: bool = False log_level: str = "info" docs_route: str = "/docs" mcp_route: str = "/mcp" site_dir: Path = Field(default=_REPO_ROOT / "site") _settings: ContextVar[Settings | None] = ContextVar("settings", default=None) def get_settings() -> Settings: settings = _settings.get() if settings is None: settings = Settings() _settings.set(settings) return settings