Skip to main content
Glama
datavidence

datavidence-financials

Official

Datavidence Financials — MCP Server

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 Python versions License: MIT MCP registry

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

This is the open-source, AI-native layer for the Datavidence Financials API — 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 — it installs into a throwaway environment:

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:

pipx install datavidence-financials
FL_API_KEY=sandbox_demo_key datavidence-financials

Related MCP server: Aegis Gov SEC Filings MCP

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:

{
  "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.

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: Free (1,500 calls/mo), Pro ($29 / 50k), Business ($99 / 300k). Full feature parity across tiers — they differ only by monthly call volume.

For a metered marketplace channel, point FL_API_BASE_URL at the gateway endpoint and set FL_API_KEY / FL_API_KEY_HEADER to the gateway's key/header (BYOK), so calls are metered by the marketplace rather than hitting the origin directly.

Run from source

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

Feedback

Found a company where the numbers come back wrong, or a field/tool you need? Open an issue — the normalization edge cases are exactly the feedback that makes this better, and I read every one.

License

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

Available Tools

6 tools
get_financialsGet financial statementsA
Read-onlyIdempotent

Retrieve normalized US-GAAP financial statements (income statement, balance sheet, cash flow) for one company and fiscal year, from SEC EDGAR XBRL.

Identify the company by ticker OR cik. Use as_of (ISO YYYY-MM-DD) to get the figures as originally reported on that date — no look-ahead bias — for backtests. Set include_provenance=true to attach, for every value, the SEC accession, filed date, and a direct EDGAR source URL for citation. Set include_ratios=true for margins, ROA/ROE, and leverage derived from the same statements. Returns the normalized data object.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoSEC Central Index Key, e.g. "0000320193". Give this or `ticker`.
yearYesFiscal year, e.g. 2023.
as_ofNoISO date YYYY-MM-DD. Return figures as originally reported on that date (no look-ahead). Omit for the latest reported figures.
tickerNoStock ticker, e.g. "AAPL". Give this or `cik`.
include_ratiosNoAdd margins, ROA/ROE and leverage computed from the same statements.
include_provenanceNoAttach the SEC accession, filed date and EDGAR URL behind every value.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable behavioral context beyond those: 'no look-ahead bias' for as_of, the exact provenance details (accession, filed date, URL), and the fact that ratios are 'derived from the same statements'. This gives agents a deeper understanding of the tool's behavior without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph that front-loads the core purpose before diving into parameter guidance. It covers all necessary details in about four sentences without redundancy. It is concise for a tool with six parameters, though slightly longer than minimal; still, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (6 parameters, no output schema) and the annotations covering safety, the description is quite complete. It explains the return object type ('normalized data object') and lists the included statements (income statement, balance sheet, cash flow), which gives agents a sense of the output structure. It doesn't detail every possible return field, but with no output schema, this is acceptable. The absence of error conditions or rate limits is a minor gap, but not critical for a read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds significant meaning beyond the schema: it clarifies that ticker and cik are alternatives ('OR'), explains as_of as 'no look-ahead bias' for backtests, and specifies what include_provenance attaches (SEC accession, filed date, EDGAR URL). These enrich the parameter semantics beyond the schema's brief descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Retrieve'), a clear resource ('normalized US-GAAP financial statements'), and a precise scope ('for one company and fiscal year'). This clearly distinguishes it from siblings like get_financials_batch (which implies batch/multiple) and get_revisions (which implies changes over time). The mention of SEC EDGAR XBRL adds a definitive source context, leaving no ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual guidance: as_of is recommended for backtests (explicit use case) and include_provenance for citation. It also states 'Identify the company by ticker OR cik', clarifying the identifier options. However, it does not explicitly mention when to use alternatives like get_financials_batch or get_revisions, though the single-company/year scope implies those. The lack of explicit exclusions keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_financials_batchGet financial statements for many companiesA
Read-onlyIdempotent

Retrieve normalized US-GAAP financials for MANY companies in one call — use this to compare peers or scan a set for a single fiscal year.

Pass companies as comma-separated tickers (e.g. "AAPL,MSFT,GOOGL") and/or ciks; up to 25 symbols total, all for the same year. as_of, include_provenance, and include_ratios behave as in get_financials and apply to every symbol. Each company returns its own result — either data or an error with a recovery hint — so one bad symbol never fails the batch. The whole call counts as a SINGLE request against your monthly quota, so prefer it over many get_financials calls when you need several companies.

ParametersJSON Schema
NameRequiredDescriptionDefault
ciksNoComma-separated SEC CIKs (25 symbols max, with `tickers`).
yearYesFiscal year, e.g. 2023.
as_ofNoISO date YYYY-MM-DD. Return figures as originally reported on that date (no look-ahead). Omit for the latest reported figures.
tickersNoComma-separated tickers, e.g. "AAPL,MSFT,GOOGL" (25 symbols max, with `ciks`).
include_ratiosNoAdd margins, ROA/ROE and leverage computed from the same statements.
include_provenanceNoAttach the SEC accession, filed date and EDGAR URL behind every value.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already show read-only, open-world, and idempotent behaviortin less detail. The description adds significant behavioral context: per-company data-or-error responses with recovery hints, batch failure isolation, no-look-ahead as_of semantics, and single-request quota accounting. This exceeds what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it leads with the primary purpose, then covers input constraints, parameter behavior, error handling, and quota implications in a logical order. Every sentence contributes actionable information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch tool with no output schema, the description covers the key operational aspects: input format, limits, shared year constraint, per-symbol error handling, and quota implications. It also routes to get_financials for single-company needs. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters are documented in the schema. The description adds value by explaining aggregate semantics not visible in the schema: the combined 25-symbol limit across tickers and ciks, all symbols sharing one year, and that shared parameters behave identically to get_financials.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Retrieve normalized US-GAAP financials for MANY companies in one call.' It clearly distinguishes itself from the sibling get_financials by emphasizing batch retrieval and peer comparison/scans.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use the tool: 'compare peers or scan a set for a single fiscal year,' and directly names the alternative get_financials while giving a concrete condition ('prefer it over many get_financials calls when you need several companies').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_revisionsGet restatement historyA
Read-onlyIdempotent

Show how a company's reported figures for a fiscal year CHANGED across filings — as originally reported, then each restatement.

A company re-reports every fiscal year as a comparative in later filings, and when a number changes, that is a restatement. This returns the full series for each metric: every reported value with the date it was filed, the form (10-K/10-Q), the SEC accession and a direct EDGAR link, plus whether it was restated and by how much.

Use it to answer "has this been restated?", to show a figure's history, or to explain why a backtest on today's data would not match what an investor could have known at the time. Identify the company by ticker OR cik; narrow with metrics (comma-separated, e.g. "total_revenue,net_income") or omit for all. get_financials returns the LATEST reported figure; its as_of parameter returns the value as known on a date; this shows the whole series at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoSEC Central Index Key, e.g. "0000320193". Give this or `ticker`.
yearYesFiscal year, e.g. 2023.
tickerNoStock ticker, e.g. "AAPL". Give this or `cik`.
metricsNoComma-separated metric names, e.g. "total_revenue,net_income". Omit for all.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond readOnly/idempotent annotations by detailing the exact returned content: every reported value with filing date, form, SEC accession, EDGAR link, restated flag, and magnitude. It also explains the restatement concept, which helps the agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core behavior, then returned fields, then use cases and parameters. Every sentence carries unique information, including the sibling contrast.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description enumerates the returned fields and fully covers parameter behavior. It addresses the closest alternative tool and typical use cases, so an agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents ticker/cik and metrics. The description reinforces the ticker-OR-cik requirement and provides a metrics example, but adds no substantive semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-resource pair: show how reported figures for a fiscal year changed across filings. It distinguishes itself from the closest sibling, get_financials, by contrasting the whole series with the latest figure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use it: answering whether a figure was restated, showing a figure's history, and explaining backtest mismatches. It also names the alternative (get_financials and its as_of parameter) and explains why this tool is chosen instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageCheck API usageA
Read-onlyIdempotent

Report the calling API key's current monthly quota: tier, monthly limit, requests used and remaining this billing month, and when it resets.

Free to call — it does NOT consume quota. Check it before a large batch or a long run so you can pace requests and avoid a hard rate-limit (429).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety and idempotency. The description adds that it does not consume quota, which is a valuable behavioral detail beyond the annotations. However, it doesn't describe the exact format of the response (e.g., whether it's JSON, field names), relying on the output schema, which is not provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the key information (what it reports and that it's free), then adds usage guidance. No wasted words, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with strong annotations, the description is nearly complete. It explains the return content and the non-consuming nature. The only minor gap is the lack of an explicit mention of the response format, but since there's no output schema and the tool is simple, this is a small omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description correctly focuses on what the tool returns and its side effects. With no parameters to describe, the description fully covers the input semantics, making it complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports the calling API key's monthly quota details (tier, limit, usage, reset), which is specific and distinct from siblings like get_financials or list_filings. It uses a clear verb ('report') and resource ('calling API key's current monthly quota'), making it unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it is free to call and does not consume quota, and it recommends checking it before large batches to avoid rate limits. This provides clear context for when to use it, though it doesn't mention alternatives—but given this is a unique monitoring tool, that's acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filingsList SEC filingsA
Read-onlyIdempotent

List a company's recent SEC filings (newest first) from the EDGAR submissions index — a lean company header plus filing rows.

Identify the company by ticker OR cik. Optionally filter by form (e.g. "10-K", prefix-matched so it includes amendments like "10-K/A") and cap the number of rows with limit (1-100). Use this to discover which fiscal years or filings are available before calling get_financials.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoSEC Central Index Key, e.g. "0000320193". Give this or `ticker`.
formNoForm type filter, prefix-matched, e.g. "10-K" (includes 10-K/A).
limitNoMaximum rows to return (1-100).
tickerNoStock ticker, e.g. "AAPL". Give this or `cik`.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable behavioral context: newest-first ordering, prefix-matching for form types (e.g., includes 10-K/A), and output shape (a lean company header plus filing rows).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, action-first, and includes all key details (identification, filters, limit, order, use case) without filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter filtered list tool with no output schema, the description explains input, filtering, ordering, and intended use before get_financials. It stops short of listing specific filing row fields, but the mention of discovering fiscal years/filings gives sufficient context for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description repeats the ticker-or-cik relationship and prefix-matching behavior already present in the schema, adding minimal new semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), resource (SEC filings from the EDGAR submissions index), and order (newest first). It also names the sibling get_financials as the follow-up, clearly distinguishing this tool's role as a discovery step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to discover which fiscal years or filings are available before calling get_financials,' providing a concrete use case and naming the alternative for actual financial data. The ticker-or-CIK identification and filter options further clarify when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesSearch companiesA
Read-onlyIdempotent

Find a company's ticker and CIK by ticker or company name.

Use this FIRST whenever you have a company name but not its ticker or CIK — every other tool needs one of those. Searches SEC's master list: "berkshire" returns BRK-B with its CIK, "mobil" returns XOM.

Ranked so the obvious answer wins (an exact ticker beats a company whose name merely contains the text). limit caps the number of matches (1-25).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matches to return (1-25).
queryYesCompany name or ticker, e.g. "berkshire" or "XOM".

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful behavioral context beyond the annotations: it searches SEC's master list, ranks exact ticker matches above name-contains matches, and caps results via limit. This is meaningful but not exhaustive (e.g., no mention of response structure or error cases).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, each earning its place: purpose, usage mandate, source/examples, and ranking/limit behavior. The structure front-loads the key instruction and uses line breaks to separate distinct ideas without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter, read-only tool with no output schema, the description covers what, when, how, and expected output examples. It even explains ranking behavior and limit constraints, so an agent has everything needed to invoke it correctly and interpret results at a practical level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds functional meaning beyond the schema: query accepts either a name or ticker with real examples ('berkshire' returns BRK-B), and limit's purpose is reinforced ('caps the number of matches'). This elevates the parameter understanding beyond the basic schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: finds a company's ticker and CIK by ticker or company name. It clearly positions itself as the prerequisite lookup tool that other sibling tools implicitly depend on, distinguishing it from get_financials, list_filings, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Use this FIRST whenever you have a company name but not its ticker or CIK' and notes 'every other tool needs one of those.' This gives an unambiguous when-to-use rule and implies when-not-to-use (when identifiers are already known), with concrete examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • Changedget_financials6 fields changed
      • addedInput schema / properties / as_of / description
        Added value: +"ISO date YYYY-MM-DD. Return figures as originally reported on that date (no look-ahead). Omit for the latest reported figures."
      • addedInput schema / properties / cik / description
        Added value: +"SEC Central Index Key, e.g. \"0000320193\". Give this or `ticker`."
      • addedInput schema / properties / include_provenance / description
        Added value: +"Attach the SEC accession, filed date and EDGAR URL behind every value."
      • addedInput schema / properties / include_ratios / description
        Added value: +"Add margins, ROA/ROE and leverage computed from the same statements."
      • addedInput schema / properties / ticker / description
        Added value: +"Stock ticker, e.g. \"AAPL\". Give this or `cik`."
      • addedInput schema / properties / year / description
        Added value: +"Fiscal year, e.g. 2023."
    • Changedget_financials_batch6 fields changed
      • addedInput schema / properties / as_of / description
        Added value: +"ISO date YYYY-MM-DD. Return figures as originally reported on that date (no look-ahead). Omit for the latest reported figures."
      • addedInput schema / properties / ciks / description
        Added value: +"Comma-separated SEC CIKs (25 symbols max, with `tickers`)."
      • addedInput schema / properties / include_provenance / description
        Added value: +"Attach the SEC accession, filed date and EDGAR URL behind every value."
      • addedInput schema / properties / include_ratios / description
        Added value: +"Add margins, ROA/ROE and leverage computed from the same statements."
      • addedInput schema / properties / tickers / description
        Added value: +"Comma-separated tickers, e.g. \"AAPL,MSFT,GOOGL\" (25 symbols max, with `ciks`)."
      • addedInput schema / properties / year / description
        Added value: +"Fiscal year, e.g. 2023."
    • Changedget_revisions4 fields changed
      • addedInput schema / properties / cik / description
        Added value: +"SEC Central Index Key, e.g. \"0000320193\". Give this or `ticker`."
      • addedInput schema / properties / metrics / description
        Added value: +"Comma-separated metric names, e.g. \"total_revenue,net_income\". Omit for all."
      • addedInput schema / properties / ticker / description
        Added value: +"Stock ticker, e.g. \"AAPL\". Give this or `cik`."
      • addedInput schema / properties / year / description
        Added value: +"Fiscal year, e.g. 2023."
    • Changedlist_filings4 fields changed
      • addedInput schema / properties / cik / description
        Added value: +"SEC Central Index Key, e.g. \"0000320193\". Give this or `ticker`."
      • addedInput schema / properties / form / description
        Added value: +"Form type filter, prefix-matched, e.g. \"10-K\" (includes 10-K/A)."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum rows to return (1-100)."
      • addedInput schema / properties / ticker / description
        Added value: +"Stock ticker, e.g. \"AAPL\". Give this or `cik`."
    • Changedsearch_companies2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum matches to return (1-25)."
      • addedInput schema / properties / query / description
        Added value: +"Company name or ticker, e.g. \"berkshire\" or \"XOM\"."
  2. 2 tool updates
    • Addedget_revisions
    • Addedsearch_companies
  3. 4 tool updatesv0.1.2
    • First observedget_financials
    • First observedget_financials_batch
    • First observedget_usage
    • First observedlist_filings

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

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides access to SEC EDGAR financial data, enabling AI agents to fetch company filings, financial metrics, and narrative sections. It supports natural-language metric searching and extracts structured data from 10-K, 10-Q, and 8-K reports.
    6
    169 PyPI
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Query SEC EDGAR for company filings, financial data, and executive disclosures. Search by company name or ticker, retrieve 10-K/10-Q/8-K filings, and extract structured financials — backed by the official SEC EDGAR API, built for AI agents.
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Give your AI agent live SEC EDGAR data: company financials, insider trades, 8-K events, 13F holdings, and the raw filings stream — all normalized to clean JSON, every number traceable back to its sec.gov source filing.
    MIT