github JerBouma/FinanceDatabase 2.5.0
FinanceDatabase 2.5.0

4 hours ago

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-setup adds 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 as select(), plus search_instruments (find a symbol by ticker, name or ISIN), show_options and search_categories. Responses are compact and paginated, and invalid filter values come back with suggestions.
  • Self-hosting: financedatabase-mcp --transport streamable-http or the included Docker setup, with /health and, when FD_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_options went from about 8 seconds to 0.1 seconds, and select is faster too. Results are still pandas DataFrames with to_toolkit(); pass as_pandas=False to get a Polars DataFrame instead.
  • Typed Parquet files. The published data now also comes as Parquet, with delisted stored 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, plus numpy and requests, 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_delisted hides 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/A next to BRK-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.

Don't miss a new FinanceDatabase release

NewReleases is sending notifications on new releases.