The biggest update since the 2.0 release: a faster package built on Polars and a database that has been cleaned, verified and filled in almost everywhere. The API is unchanged, so existing code keeps working; only the minimum Python version moves to 3.11.
The Finance Database MCP Server
This release introduces an MCP server that gives any AI assistant supporting the Model Context Protocol direct access to all 300,000+ symbols. Ask in plain English for, say, every large cap semiconductor company in Europe, the fixed income ETFs of an issuer or the listings behind an ISIN, and the assistant queries the database for you. No API key is needed.
- Hosted: connect to
https://financedatabase.jeroenbouma.com/mcp; nothing to install and no sign-in. - Local:
uvx --from "financedatabase[mcp]" financedatabase-mcp-setupadds the server to Claude Desktop, Claude Code, VS Code, Cursor, Gemini CLI or Windsurf. The Claude Desktop bundle (financedatabase.mcpb) is attached to this release. - Tools: one per asset class (
equities,etfs,funds,indices,currencies,cryptos,moneymarkets) with the same filters asselect(), plussearch_instruments(find a symbol by ticker, name or ISIN),show_optionsandsearch_categories. Responses are compact and paginated, and invalid filter values come back with suggestions. - Self-hosting:
financedatabase-mcp --transport streamable-httpor the included Docker setup, with/healthand, whenFD_MCP_ANALYTICS=1, anonymous usage totals at/stats.
See the MCP Server section of the README for every client.
Package
- Faster, lazily evaluated queries with Polars. The database is downloaded once into a local cache (checked for updates at most once a day) and queried lazily, so creating a class is instant and filters only read what they need.
show_optionswent from about 8 seconds to 0.1 seconds, andselectis faster too. Results are still pandas DataFrames withto_toolkit(); passas_pandas=Falseto get a Polars DataFrame instead. - Typed Parquet files. The published data now also comes as Parquet, with
delistedstored as a real boolean, so nothing has to be converted after loading. The bz2 CSV files are still published unchanged, so older versions of the package keep working. - The ticker
NA(Nano Labs) is no longer read as a missing value. - Restructured internally into helpers, models and controllers, the same layout as the Finance Toolkit. Public classes and methods are unchanged.
- Requirements: Python 3.11 or newer (3.11 to 3.14 are supported),
financetoolkit>=2.2.1,polars>=2.0,pandas>=3.0, plusnumpyandrequests, which were already used but are now declared. The PyPI page now links to the homepage and repository.
Database
Comparing the published data of 2.4.0 with 2.5.0 (live listings, so delisted ones excluded):
| 2.4.0 | 2.5.0 | |
|---|---|---|
| Equities with an ISIN | 26% | 78% |
| Equities with a FIGI | 43% | 80% |
| Equities with a sector / industry | 62% / 41% | 95% / 88% |
| Equities with a website / headquarters city | 39% / 41% | 86% / 86% |
| Equities with a market cap tier | 44% | 88% |
| Equities with a description | 60% | 95% |
| ETFs | 36,483 | 44,429 |
| ETFs with an ISIN | 22% | 37% |
| ETFs / funds with a fund family | 75% / 64% | 84% / 72% |
Added. Close to 15,000 equity listings that were missing, taken from official exchange symbol directories and confirmed on OpenFIGI: among others 1,135 Shanghai and Shenzhen listings, 935 on the Bombay Stock Exchange, 748 in Taiwan (including TSMC), 578 in London, 468 in Korea, 362 in Warsaw, about 500 each from the Middle East, Europe and Asia-Pacific, Nasdaq First North, new NSE and ASX listings and US OTC lines. About 8,000 ETFs were added (US and international, including UCITS listings), plus open-ended funds and Bitcoin pairs for the cryptocurrencies. New listings come in with their company description, address, website, market cap tier and a GICS-style classification, and the weekly update now also reads the official exchange directories.
Corrected.
- Every equity and ETF ISIN was verified on OpenFIGI. ISINs, CUSIPs and FIGIs that belonged to another company, share class or exchange were cleared or replaced, for example local listings that carried their foreign parent's or ADR's identity, such as Infosys, Siemens India and Oracle Japan.
- Hundreds of renamed companies now carry their current name and description on all their listings, for example Avolta (formerly Dufry), Clariane (Korian), CMB.Tech (Euronav) and PDD Holdings (Pinduoduo).
- Tickers that were replaced by a new ticker, or that no longer trade anywhere, are flagged as delisted. That's about 17,000 equities, kept for reference;
exclude_delistedhides them. - Market cap tiers were refreshed with current market caps, and secondary listings use the tier of the company's home listing.
- Websites, descriptions and classifications that belonged to a different company were fixed.
- All-caps and truncated exchange names such as "SIEMENS AG NA O.N." are written as proper company names.
- ETFs are categorised with one documented system based on their holdings (see CONTRIBUTING.md). 168 airport, port and toll-road operators are classified as Transportation Infrastructure.
- Postcodes follow each country's format, damaged characters are repaired, and every classification is checked against the GICS tree in the test suite.
Moved. Listings are in the asset class the rest of the database uses for them: exchange-traded products and funds filed as equities moved to the ETF and fund files (Leverage Shares ETCs, Gold Bullion Securities, Danish investment funds), and REITs and other companies filed as ETFs moved to equities.
Removed.
- About 35,500 empty equity records without a name or any other information, most of them on Euronext.
- About 15,500 instruments that are not stocks: certificates, turbos, covered warrants, structured notes and dated bonds, for example Vienna and German bank certificates and Korean warrants.
- About 10,900 empty index records and 158 empty money market records.
- Duplicate listings written in two notations (for example
BRK/Anext toBRK-A).
Maintenance
- The weekly update adds new tickers from official exchange directories and stops re-adding share classes written with a slash.
- Pull requests now run the GICS check and an identifier validation, and the tests compare the package against the data in the pull request itself.