Skip to main content
Glama
surplus96

PM-MCP (Portfolio Management MCP Server)

by surplus96
config.py2.8 kB
import os from dotenv import load_dotenv load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") LLM_PROVIDER = os.getenv("LLM_PROVIDER", "openai") ALPHA_VANTAGE_API_KEY = os.getenv("ALPHA_VANTAGE_API_KEY") FINNHUB_API_KEY = os.getenv("FINNHUB_API_KEY") PERPLEXITY_API_KEY = os.getenv("PERPLEXITY_API_KEY") SEC_EDGAR_USER_AGENT = os.getenv("SEC_EDGAR_USER_AGENT", "") OBSIDIAN_VAULT_PATH = os.getenv("OBSIDIAN_VAULT_PATH", "./obsidian_vault") DATA_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data')) RAW_PATH = os.path.join(DATA_ROOT, 'raw') INTERIM_PATH = os.path.join(DATA_ROOT, 'interim') PROCESSED_PATH = os.path.join(DATA_ROOT, 'processed') CACHE_PATH = os.path.join(DATA_ROOT, 'cache') # ---- Visualization presets & defaults ---- PRESENT_PRESET = os.getenv("PRESENT_PRESET", "modern").lower() _PRESETS = { "modern": { "THEME_CHART_DAYS": 180, "PORTFOLIO_HISTORY_DAYS": 60, "YSCALE": "linear", "MA_WINDOWS": (20, 50), "COLORS": ["#2563eb", "#16a34a", "#f59e0b", "#ef4444", "#8b5cf6"], "NEWS_MAX": 7, "FILINGS_MAX": 7, "MPL_STYLE": "seaborn-v0_8", } } _p = _PRESETS.get(PRESENT_PRESET, _PRESETS["modern"]) PRESENT_THEME_CHART_DAYS = int(os.getenv("PRESENT_THEME_CHART_DAYS", str(_p["THEME_CHART_DAYS"]))) PRESENT_PORTFOLIO_HISTORY_DAYS = int(os.getenv("PRESENT_PORTFOLIO_HISTORY_DAYS", str(_p["PORTFOLIO_HISTORY_DAYS"]))) PRESENT_YSCALE = os.getenv("PRESENT_YSCALE", _p["YSCALE"]) # linear|log PRESENT_MA_WINDOWS = tuple( int(x) for x in os.getenv("PRESENT_MA_WINDOWS", ",".join(map(str, _p["MA_WINDOWS"]))).split(',') if x.strip() ) PRESENT_COLORS = [ x.strip() for x in os.getenv("PRESENT_COLORS", ",".join(_p["COLORS"])) .split(',') if x.strip() ] PRESENT_NEWS_MAX = int(os.getenv("PRESENT_NEWS_MAX", str(_p["NEWS_MAX"]))) PRESENT_FILINGS_MAX = int(os.getenv("PRESENT_FILINGS_MAX", str(_p["FILINGS_MAX"]))) PRESENT_MPL_STYLE = os.getenv("PRESENT_MPL_STYLE", _p["MPL_STYLE"]) # matplotlib style name # Image output directory (writeable) IMAGE_OUTPUT_DIR = os.getenv("IMAGE_OUTPUT_DIR", "/tmp/pm-mcp-images") os.makedirs(IMAGE_OUTPUT_DIR, exist_ok=True) # ---- Scoring controls ---- SCORE_WEIGHTS = os.getenv("SCORE_WEIGHTS", "growth=0.25,profitability=0.25,valuation=0.25,quality=0.25") SCORE_SECTOR_NEUTRAL = os.getenv("SCORE_SECTOR_NEUTRAL", "false").lower() in ("1","true","yes") SECTOR_FACTOR_WEIGHTS = os.getenv("SECTOR_FACTOR_WEIGHTS") # JSON 문자열(섹터별 팩터 가중) EVENT_WEIGHTS_PATH = os.getenv("EVENT_WEIGHTS_PATH", os.path.join(os.path.dirname(__file__), "data", "event_weights.json")) os.makedirs(RAW_PATH, exist_ok=True) os.makedirs(INTERIM_PATH, exist_ok=True) os.makedirs(PROCESSED_PATH, exist_ok=True) os.makedirs(CACHE_PATH, exist_ok=True)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/surplus96/PM-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server