This release adds new FMP endpoints and recent economic and market data from official sources that need no API key. It also adds scenario and credit inputs, caches external data by default, speeds up many calculations, and fixes a range of calculations and data issues.
New data
- FinancialModelingPrep:
- Toolkit: executives and compensation, company notes, employee count, shares float, M&A, stock splits, insider statistics, stock grades, ETF holdings, information and weightings, and earnings call transcripts. Stock news now covers crypto and forex.
- Discovery: market-wide earnings calendar, 8-K filings and latest insider trades.
- Economics: economic calendar and market risk premium (optional key).
- No API key needed:
- Monthly inflation, CPI and unemployment; quarterly GDP growth.
- Daily policy, overnight and long-term rates.
- Government yield curves for nine economies, plus every EU member's 10-year yield.
- FRED no longer required for the mortgage rate, industrial production, the recession indicator, real yields and breakevens. FRED is still used when a key is set.
- Credit:
- The Treasury's HQM corporate curve and spreads, and Moody's Aaa/Baa yields.
- The excess bond premium and corporate bond yields by country.
- Rating transition matrices and default rates from ESMA's CEREP database.
- ECB borrowing costs and stress index.
- Insurance and long horizons:
- EIOPA risk-free curves, incl. shocks and the symmetric adjustment.
- Eurostat life tables and Shiller's US stock market data.
- Long-run asset returns 1870–2020 (opt-in, non-commercial licence).
- The Bank of England's UK series from 1086.
- Scenario inputs:
- Real and breakeven inflation curves for the US, UK and Germany, and survey inflation expectations.
- Implied volatility indices (VIX, VSTOXX, MOVE).
- Fed and ESRB stress-test scenarios and DNB pension scenario sets.
- NGFS climate scenarios and the EU carbon price.
- Listed proxies for private markets.
- Global Macro Database: uses the latest quarterly release. IMF projections are excluded by default.
Caching
- On by default: data from external sources is cached in the Toolkit, Economics, Fixed Income, Discovery and Portfolio modules. Each dataset is refreshed on its own schedule, and calculated metrics are never cached.
- Empty answers: an answer that a source has no data is cached too; a failed request is not.
- FMP first: with an FMP key, FMP data takes priority. Yahoo Finance is used when it has the longer history, for example on the Free plan.
Performance
| Before | After | |
|---|---|---|
| EGARCH / GARCH | 186 s / 7.9 s | 13 s / 1.2 s |
| Monte Carlo option prices | 66 s | 2.5 s |
| All option greeks | 5.4 s | 0.15 s |
| All technical indicators | 3.3 s | 0.7 s |
from financetoolkit import Toolkit
| 2.5 s | 0.9 s |
| Reading prices from the cache | 3.8 s | 1.1 s |
Excel files are read with calamine, modules load on first use, and repeated module access is about twice as fast.
Breaking changes
get_real_yield_curveandget_breakeven_inflation_expectationstakecountries=and return (Country, Maturity) columns labelled5Y.- The market risk premium and percentage releases in the economic calendar are now decimals.
- GMDB series end at the last observation;
gmdb_forecasts=Trueon a method includes the projections. - Corrected calculations change some results:
- Drawdowns now count a loss on the first day.
- RSI and CMO start one day later, matching Wilder's definition and TA-Lib.
- Growth from zero is missing instead of infinite.
- Missing values no longer skew beta, VaR/CVaR or the portfolio average.
- External data is cached by default. Opt out with
use_cached_data=FalseorFINANCE_TOOLKIT_CACHE_ENABLED=0. - Requests carrying an API key are no longer retried without certificate verification. Behind a corporate proxy, set
REQUESTS_CA_BUNDLE; the README Q&A explains how.
Fixes
- Data:
- FMP timeouts and server errors are retried per ticker instead of failing the whole request.
- Cached prices survive a provider switch.
- Holidays no longer invent returns or volume.
- CIK and CUSIP keep their leading zeros.
- Yahoo listing dates use the exchange's timezone.
- Calculations:
- WACC is correct for companies without debt, and the Graham Number for loss-making companies.
- Barrier options are priced correctly once the barrier has been crossed.
- Black-Scholes at expiry, bond coupon counts and yields, and binomial tree inputs are handled correctly.
- Consistency:
rounding=0androunding=Nonework everywhere.- One error handler serves all modules, so strict mode now covers Performance and Technicals.
- Other:
- EIOPA shocked curves and the life tables are fixed.
- The enterprise value breakdown and implied volatility work again.
- The economic calendar's order is now deterministic.
- Moved BIS, Fed and NBER endpoints are updated.
- Docstrings: all 553 examples were run and their output tables refreshed.
MCP server
- New methods are added to the existing tools, and an empty result explains why.
- Tool descriptions are no longer cut off.
- Daily rolling performance metrics work.
- A hosted server caches every source except FMP.
- Optional usage statistics at
/statswithFT_MCP_ANALYTICS=1. - The server reports the Finance Toolkit's version to clients.
Dependencies
All new requirements use wide version ranges, so the Finance Toolkit fits alongside other packages without forcing upgrades.
| Change | Package | Why |
|---|---|---|
| Added | python-calamine>=0.3.0
| Reads Excel workbooks up to 10× faster than openpyxl. Used for the large official workbooks, such as the Bank of England, EIOPA and ESRB files. Not installed on Python 3.15 until wheels are published there; openpyxl reads the files instead. |
| Added | xlrd>=2.0
| Reads the older .xls workbooks some official sources still publish, when calamine is not available or cannot read a file.
|
| Declared | numpy>=1.26, scipy>=1.10
| Already used throughout, but until now they were only installed because other packages depended on them. They are now listed explicitly. |
| Removed | scikit-learn
| Only used for the linear regressions of the factor models (e.g. Fama-French). These now use SciPy's least squares, with the same results, which removes a large dependency. |
Unchanged: pandas>=3.0, requests, yfinance, openpyxl and pyyaml, and the optional econometrics and mcp extras.