finance-data-mcp / src /config.py
dlrklc's picture
Initial commit: Gradio MCP app for real-time financial data
7169bc5
"""
Configuration module for Financial Market Data MCP Server.
Handles environment variables, logging, and cache configuration.
"""
import os
import logging
from dotenv import load_dotenv
from cachetools import TTLCache
# Load environment variables from .env file
load_dotenv()
# ============================================================================
# LOGGING CONFIGURATION
# ============================================================================
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# ============================================================================
# SECURITY SETTINGS
# ============================================================================
RATE_LIMIT_CALLS = int(os.getenv('RATE_LIMIT_CALLS', '20')) # Max calls per minute
RATE_LIMIT_PERIOD = int(os.getenv('RATE_LIMIT_PERIOD', '60')) # In seconds
MAX_TICKERS_PER_REQUEST = int(os.getenv('MAX_TICKERS_PER_REQUEST', '5'))
ALLOWED_TICKER_PATTERN = r'^[A-Z]{1,5}$' # 1-5 uppercase letters
# ============================================================================
# PERFORMANCE SETTINGS
# ============================================================================
CACHE_TTL = int(os.getenv('CACHE_TTL', '60')) # Cache TTL in seconds
CACHE_MAXSIZE = int(os.getenv('CACHE_MAXSIZE', '200')) # Max cache entries
quote_cache = TTLCache(maxsize=CACHE_MAXSIZE, ttl=CACHE_TTL)
# ============================================================================
# VALIDATION CONSTANTS
# ============================================================================
ALLOWED_PERIODS = ["1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max"]
ALLOWED_INTERVALS = ["1m", "2m", "5m", "15m", "30m", "60m", "90m", "1h", "1d", "5d", "1wk", "1mo", "3mo"]
ALLOWED_METRICS = ["performance", "valuation", "volatility"]