Source code for polymarket_mcp.settings

"""Environment-backed application settings for the Polymarket MCP package.

Purpose:
    Centralize configuration for the Polymarket MCP package using
    ``pydantic-settings`` so values can be provided through environment
    variables without custom parsing code.

Design:
    Settings are cached through :func:`load_settings` and loaded from the
    ``POLYMARKET_MCP_`` environment namespace.

Attributes:
    AppSettings:
        Root settings model.
    load_settings:
        Cached settings loader.
"""

from __future__ import annotations

from functools import lru_cache

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


[docs] class AppSettings(BaseSettings): """Typed application settings. Args: gamma_base_url: Base URL for the Gamma API. data_base_url: Base URL for the Data API. clob_base_url: Base URL for the CLOB API. request_timeout_seconds: Per-request timeout. enable_resources_as_tools: Whether to expose resources as generated tools. user_agent: Optional shared user-agent string for outbound requests. Returns: AppSettings: Validated settings object. Raises: ValueError: If any field fails validation. Examples: >>> settings = AppSettings() >>> settings.gamma_base_url 'https://gamma-api.polymarket.com' """ model_config = SettingsConfigDict( env_prefix="POLYMARKET_MCP_", env_file=".env", env_file_encoding="utf-8", extra="forbid", ) gamma_base_url: str = "https://gamma-api.polymarket.com" data_base_url: str = "https://data-api.polymarket.com" clob_base_url: str = "https://clob.polymarket.com" request_timeout_seconds: float = Field(default=20.0, gt=0) enable_resources_as_tools: bool = True user_agent: str = "polymarket-mcp/0.1.3"
[docs] @lru_cache(maxsize=1) def load_settings() -> AppSettings: """Load and cache application settings. Args: None. Returns: AppSettings: Cached settings object. Raises: None. Examples: >>> settings = load_settings() >>> settings.enable_resources_as_tools in {True, False} True """ return AppSettings()