Skip to main content
Glama
datavidence

datavidence-financials

Official
README.md
# Datavidence Financials — MCP Server

<!-- mcp-name: ai.datavidence/datavidence-financials -->

**Normalized US-GAAP financial statements for every SEC XBRL filer — point-in-time, as originally reported — as MCP tools for your AI agent (or a plain REST API).**

[![PyPI](https://img.shields.io/pypi/v/datavidence-financials.svg)](https://pypi.org/project/datavidence-financials/)
[![Python versions](https://img.shields.io/pypi/pyversions/datavidence-financials.svg)](https://pypi.org/project/datavidence-financials/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![MCP registry](https://img.shields.io/badge/MCP%20registry-ai.datavidence%2Fdatavidence--financials-6f42c1.svg)](https://registry.modelcontextprotocol.io)
[![smithery badge](https://smithery.ai/badge/datavidence/datavidence-financials)](https://smithery.ai/servers/datavidence/datavidence-financials)
[![M8ven Score](https://m8ven.ai/badge/mcp/datavidence-financials-18j0pv)](https://m8ven.ai/mcp/datavidence-financials-18j0pv?s=readme)

Language models are good at reasoning about financial statements and bad at *getting* them. SEC EDGAR has the data, but its XBRL is a thicket of inconsistent tags, renamed concepts, and per-filer quirks — so agents either hallucinate the numbers or you spend weeks building a normalization layer. This is that layer: your agent asks for a company's financials and gets a clean, consistent answer — over the **Model Context Protocol**, or as a plain **REST API**.

> ⭐ **If this is useful, please star the repo.** It's a solo, early project, and stars are how other developers find it.

![Claude calls the Datavidence Financials get_revisions tool: Pfizer's FY2019 revenue as filed ($51.75B) and as it reads today ($40.9B), with links to the SEC filings](https://raw.githubusercontent.com/datavidence/datavidence-financials-mcp/main/docs/demo.gif)

This is the open-source, AI-native layer for the [**Datavidence Financials API**](https://financials.datavidence.ai) — a standalone stdio server that forwards over HTTPS to the REST API (bring your own key). The connector is MIT-licensed; the underlying API is a commercial service.

## Try it in 30 seconds (no signup)

Run it with no clone using [uv](https://docs.astral.sh/uv/) — it installs into a throwaway environment:

```bash
FL_API_KEY=sandbox_demo_key uvx datavidence-financials
```

`sandbox_demo_key` returns sample data with **no signup** — good for a first run. Set `FL_API_KEY` to your real key for live SEC data. The server speaks MCP over stdio, so an MCP client (e.g. Claude Desktop, below) launches it.

Or install it as a persistent tool with pipx:

```bash
pipx install datavidence-financials
FL_API_KEY=sandbox_demo_key datavidence-financials
```

## Connect by URL (no install)

Clients that support remote MCP servers (streamable HTTP) can connect without installing anything:

| URL | Key | Data |
| :--- | :--- | :--- |
| `https://mcp.financials.datavidence.ai/mcp` | none | sample (AAPL FY2023) |
| `https://mcp.financials.datavidence.ai/rapidapi/mcp` | your RapidAPI key, as `X-API-Key` or `Authorization: Bearer` | live SEC data, metered by RapidAPI against your plan |

Claude Code:

```bash
claude mcp add --transport http datavidence-financials \
  https://mcp.financials.datavidence.ai/rapidapi/mcp \
  --header "X-API-Key: YOUR_RAPIDAPI_KEY"
```

For the sample data, use the `/mcp` URL and leave out the header.

claude.ai: add `https://mcp.financials.datavidence.ai/mcp` as a custom connector with no sign-in. claude.ai can't send an API key for most accounts yet, so it gets the sample data for now.

## Why it's different

- **Point-in-time, as originally reported.** Pass an `as_of` date and you get the figures as they stood then — no look-ahead bias from later restatements. The thing backtests quietly get burned without.
- **Normalized to one schema.** EDGAR's XBRL tags drift between filers and change over the years. We map them to a single US-GAAP income statement, balance sheet, and cash flow — including the awkward cases (noncontrolling interest, mezzanine/temporary equity, non-calendar fiscal years) — so you never parse a filing.
- **Every SEC XBRL filer.** Coverage is the whole SEC XBRL universe (~2009 to present), fetched and normalized on demand — any CIK with XBRL facts, not a curated subset.
- **Source-linked, too.** Turn on provenance and every value carries its SEC accession, filed date, and a direct EDGAR URL — so the model cites the filing instead of inventing a number.

Honest scope: US-GAAP only (IFRS filers return a clear "unsupported" signal rather than wrong numbers); XBRL-era history (~2009 onward). And when a company reorganizes under a new holding entity, SEC's ticker map points only at the successor CIK — the earlier years stay under the predecessor, so the error tells you and you pass `cik=` directly.

## Tools

- **`get_financials`** — normalized income statement + balance sheet + cash flow
  for one company and fiscal year, from SEC EDGAR XBRL. Supports `as_of`
  (point-in-time, as originally reported), `include_provenance` (per-value SEC
  accession, filed date, and direct EDGAR source URL), and `include_ratios`
  (margins, ROA/ROE, leverage).
- **`get_financials_batch`** — the same, for up to 25 companies in one call
  (comma-separated tickers/CIKs). Per-symbol results; counts as a single quota
  unit, so one bad symbol never fails the batch.
- **`list_filings`** — a company's recent SEC filings (newest first) from the
  EDGAR submissions index; filter by form (e.g. `10-K`). Use it to discover which
  fiscal years are available before calling `get_financials`.
- **`get_revisions`** — how a fiscal year's figures CHANGED across filings: every
  reported value with its filing date, form, SEC accession and EDGAR link, plus
  whether it was restated and by how much. Pfizer's FY2019 revenue was filed at
  $51.75B in 2020 and restated to $40.9B by 2022 — this is how you see that.
- **`search_companies`** — find a ticker and CIK by ticker or company name, for
  when you have "Berkshire" and need `BRK-B`. Use it before the tools above,
  which all require an identifier.
- **`get_usage`** — the key's monthly quota (tier, used, remaining, reset). Free
  to call; consumes no quota.

Errors surface the API's `recovery_action` hint, so agents self-correct.

## Claude Desktop

Add to `claude_desktop_config.json`, then fully quit (Cmd+Q) and reopen Claude
Desktop — the tools appear:

```json
{
  "mcpServers": {
    "datavidence-financials": {
      "command": "uvx",
      "args": ["datavidence-financials"],
      "env": { "FL_API_KEY": "sandbox_demo_key" }
    }
  }
}
```

Then ask, e.g., *"Get AAPL's FY2023 income statement, balance sheet, and cash flow with ratios."* Swap in your real key for live data.

## Codex

Add to `~/.codex/config.toml`, then start `codex` — the tools appear:

```toml
[mcp_servers.datavidence-financials]
command = "uvx"
args = ["datavidence-financials"]
env = { FL_API_KEY = "sandbox_demo_key" }
# uvx downloads the package on first run; allow more than Codex's 10 s default.
startup_timeout_sec = 30
```

Swap in your real key for live data.

Or connect by URL instead (nothing to install; set `DATAVIDENCE_API_KEY` to your RapidAPI key):

```toml
[mcp_servers.datavidence-financials]
url = "https://mcp.financials.datavidence.ai/rapidapi/mcp"
bearer_token_env_var = "DATAVIDENCE_API_KEY"
```

Leave out `bearer_token_env_var` and use `https://mcp.financials.datavidence.ai/mcp` for the sample data.

## Configuration (environment variables)

| Variable | Default | Notes |
| --- | --- | --- |
| `FL_API_KEY` | _(none)_ | Your API key. `sandbox_demo_key` = no-signup trial (sample data). |
| `FL_API_BASE_URL` | `https://api.financials.datavidence.ai` | Point at a marketplace gateway for metered BYOK access. |
| `FL_API_KEY_HEADER` | `X-API-Key` | Header to send the key in (e.g. `X-RapidAPI-Key` for the RapidAPI gateway). |
| `FL_API_TIMEOUT` | `30` | Per-request timeout, in seconds. |

## Getting live data

The demo key returns sample data. For live figures, grab a key on [RapidAPI](https://rapidapi.com/datavidence-ykNLbvGmT/api/datavidence-financials-api): **Free** (1,500 calls/mo), **Pro** ($29 / 50k), **Business** ($99 / 300k). Full feature parity across tiers — they differ only by monthly call volume.

To use your RapidAPI key, set these three variables (in the `env` block of the Claude Desktop config, or the `env` table in Codex's `config.toml`):

```
FL_API_BASE_URL=https://datavidence-financials-api.p.rapidapi.com
FL_API_KEY_HEADER=X-RapidAPI-Key
FL_API_KEY=<your RapidAPI key>
```

Your key is on RapidAPI under your app's **Authorization** page, or in any code snippet on the API's page. Calls are metered by RapidAPI against your plan. With a RapidAPI key, `get_usage` shows your RapidAPI plan and its monthly limit; RapidAPI meters your calls, so check how many you've used in your RapidAPI dashboard.

## Run from source

```bash
pip install -e .
FL_API_KEY=sandbox_demo_key python -m mcp_server.server   # stdio transport
```

## Tests

```bash
pip install -e ".[dev]"
pytest
```

29 tests, no network and no API key needed. They call every tool through the MCP SDK
with the HTTP layer stubbed, check that an API error reaches the model with its recovery
hint, and check that each tool declares all four behaviour hints (read-only,
non-destructive, idempotent, open-world).

## Privacy Policy

The connector runs on your machine, has no telemetry and stores nothing. When a tool is
called it sends two things to the Datavidence Financials API: the tool's arguments (for
example a ticker, a CIK, a fiscal year or a company-name search) and your API key, in a
request header. It does not see your files or the rest of your conversation.

- **Where it goes:** `https://api.financials.datavidence.ai` by default. If you set
  `FL_API_BASE_URL` to the RapidAPI gateway, requests go through RapidAPI, under its own
  privacy policy.
- **What the API records:** for each request, the endpoint, HTTP status, response time,
  timestamp and IP address, tied to a hash of the API key (never the key itself).
- **Retention:** usage logs are kept for 12 months.
- **Sharing:** not sold; shared only with the marketplace gateway you subscribed through and
  the infrastructure provider that hosts the service.
- **Contact:** admin@datavidence.ai

Full policy: https://financials.datavidence.ai/privacy

## Feedback

Found a company where the numbers come back wrong, or a field/tool you need? **[Open an issue](https://github.com/datavidence/datavidence-financials-mcp/issues)** — the normalization edge cases are exactly the feedback that makes this better, and I read every one.

## Links

- **Site & docs:** https://financials.datavidence.ai
- **MCP quickstart:** https://financials.datavidence.ai/mcp
- **MCP registry:** `ai.datavidence/datavidence-financials`
- **PyPI:** https://pypi.org/project/datavidence-financials/
- **Get a key (RapidAPI):** https://rapidapi.com/datavidence-ykNLbvGmT/api/datavidence-financials-api
- **Privacy policy:** https://financials.datavidence.ai/privacy
- **Terms of service:** https://financials.datavidence.ai/terms
- **Security:** see [`SECURITY.md`](SECURITY.md) to report a vulnerability privately.

## License

MIT © 2026 Datavidence LLC — see [LICENSE](LICENSE). The connector is
open-source; the underlying Datavidence Financials API is a commercial service.

TDQS

A4.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: company lookup, filing discovery, single financials, batch financials, restatement history, and quota monitoring. The descriptions explicitly disambiguate the most similar tools, such as get_financials versus get_revisions.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: get_financials, list_filings, get_financials_batch, get_revisions, search_companies, get_usage. The batch variant is clearly a modifier of get_financials rather than a breaking convention.

Tool Count5/5

Six tools is well-scoped for a financial data server. Each tool earns its place: lookup, filing discovery, single retrieval, batch retrieval, revision history, and usage monitoring, with no meaningful redundancy.

Completeness5/5

The toolset covers the full natural workflow: resolve identifiers with search_companies, discover available filings with list_filings, retrieve financials individually or in batch, inspect restatements with get_revisions, and track quota with get_usage. No critical dead ends exist within the stated SEC EDGAR normalized-financials domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues