"""Configuration settings for Turbify Store MCP Server."""
import os
from pydantic_settings import BaseSettings
from pydantic import Field
class TurbifyStoreConfig(BaseSettings):
"""Turbify Store API configuration."""
# Required settings
store_id: str = Field(
default_factory=lambda: os.getenv("TURBIFY_STORE_ID", ""),
description="Turbify Store ID"
)
contract_token: str = Field(
default_factory=lambda: os.getenv("TURBIFY_CONTRACT_TOKEN", ""),
description="Turbify Store Contract Token"
)
# API settings
api_base_url: str = Field(
default="https://catalog.store.turbifyapis.io/V1/",
description="Base URL template for Turbify Store API"
)
api_version: str = Field(
default="1.0",
description="API version to use"
)
# Rate limiting and performance
max_items_per_call: int = Field(
default=100,
description="Maximum items per API call (Turbify limit)"
)
request_timeout: int = Field(
default=30,
description="API request timeout in seconds"
)
max_retries: int = Field(
default=3,
description="Maximum number of retry attempts"
)
backoff_factor: float = Field(
default=1.0,
description="Backoff factor for retries"
)
# Search defaults
default_search_limit: int = Field(
default=100,
description="Default limit for search results"
)
max_search_limit: int = Field(
default=1000,
description="Maximum search result limit (Turbify constraint)"
)
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
case_sensitive = False
@property
def api_base(self) -> str:
"""Get the formatted API base URL."""
return self.api_base_url.format(store_id=self.store_id)
@property
def is_configured(self) -> bool:
"""Check if required configuration is present."""
return bool(self.store_id and self.contract_token)
def validate_config(self) -> None:
"""Validate configuration and raise if invalid."""
if not self.store_id:
raise ValueError("TURBIFY_STORE_ID is required")
if not self.contract_token:
raise ValueError("TURBIFY_CONTRACT_TOKEN is required")
if self.contract_token in ["your_contract_token", "your_store_id"]:
raise ValueError("Please set actual values for TURBIFY_STORE_ID and TURBIFY_CONTRACT_TOKEN")
# Global configuration instance
config = TurbifyStoreConfig()
def get_config() -> TurbifyStoreConfig:
"""Get the global configuration instance."""
return config
def validate_environment() -> None:
"""Validate that all required environment variables are set."""
config.validate_config()