Configuration¶
fin-toolkit loads configuration from (in priority order):
- Environment variables
.envfile in the project root./fin-toolkit.yaml(local config)~/.config/fin-toolkit/config.yaml(global config)- Built-in defaults
Config files are NOT merged
First found wins. If ./fin-toolkit.yaml exists, ~/.config/fin-toolkit/config.yaml is ignored (including its API keys).
Environment Variables¶
| Variable | Provider |
|---|---|
GEMINI_API_KEY |
Google Search via Gemini |
PERPLEXITY_API_KEY |
Perplexity |
TAVILY_API_KEY |
Tavily |
BRAVE_API_KEY |
Brave Search |
SERPER_API_KEY |
Serper |
EXA_API_KEY |
Exa |
FMP_API_KEY |
Financial Modeling Prep |
FINANCIAL_DATASETS_API_KEY |
Financial Datasets |
Example fin-toolkit.yaml¶
# API keys (alternative to env vars)
api_keys:
google: "your-gemini-api-key"
brave: "your-brave-api-key"
perplexity: "your-perplexity-api-key"
tavily: "your-tavily-api-key"
serper: "your-serper-api-key"
exa: "your-exa-api-key"
fmp: "your-fmp-api-key"
financialdatasets: "your-financial-datasets-api-key"
data:
primary_provider: yahoo
fallback_providers: [smartlab, moex, financialdatasets, edgar]
search:
providers: [duckduckgo, searxng, google, perplexity, tavily, brave, serper, exa]
searxng_url: http://localhost:8888
gemini_model: gemini-3.1-flash-lite
agents:
active:
- elvis_marlamov
- warren_buffett
- ben_graham
- charlie_munger
- cathie_wood
- peter_lynch
markets:
ru:
provider: moex
tickers: [SBER, GAZP, LKOH, ROSN, GMKN]
# kz market uses dynamic ticker discovery — no need to list tickers
# kz:
# provider: kase
# tickers: [] # auto-fetched via KASE API
# Override default rate limits per provider (optional)
rate_limits:
yahoo:
requests_per_minute: 5
max_concurrent: 2
smartlab:
requests_per_minute: 5
max_concurrent: 2
moex:
requests_per_minute: 10
max_concurrent: 3
kase:
requests_per_minute: 2
max_concurrent: 1
stockanalysis:
requests_per_minute: 5
max_concurrent: 2