The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Ticker Scout listing page.
An agent-native data layer for SEC filings, over the Model Context Protocol. Finished financial statements for public companies, and the filings themselves read and synthesized. The SEC publishes the numbers as data, but it does not publish them as statements. This serves them already assembled, through 97 tools: every statement, every standard line item, every company-specific figure under the name its record uses, every fiscal year and quarter held, every accession number cited, and the 10-K, 10-Q and 8-K narrative by section or by keyword. No API key, no signup, no paywall.
It exposes the data published at tickerscout.ai (https://tickerscout.ai): financial statements, the annual and quarterly reports read and synthesized, and material event histories for S&P 500 companies and major foreign issuers that file with the SEC, all derived from their own filings.
The difference between this and the EDGAR APIs is assembly, not availability. The SEC gives you facts. This gives you statements.
Claude Code
Claude on the web or desktop
Settings, then Connectors, then Add custom connector, and paste the URL.
Cursor, and any client with an mcpServers config
Clients that only speak stdio
The main six tools answer most questions in one call. The other 91 go straight to one thing.
| Question | Call |
|---|---|
| Is a company covered? What is its ticker? | list_companies(query) |
| How much did it earn last quarter? | get_key_figures(ticker) |
| Revenue (or any line item) across every period held | get_revenue(ticker), get_net_income(ticker), ... |
| One specific year or quarter | get_period(ticker, "FY2025"), or any figure tool with period |
| How far back does the data go? | list_periods(ticker) |
| Every figure this company reports, by its own names | list_company_figures(ticker) |
| A company-specific metric | find_figures(ticker, "data center"), then get_figure |
| Compare companies | compare_companies(["NVDA","AMD","AVGO"], "revenue") |
| Segments, products, geography | get_segments, get_revenue_breakdown, get_geographic_revenue |
| Risks, strategy, management's discussion | get_risk_factors, get_business_overview, get_annual_mdna, get_current_quarter |
| What did the company announce? | list_events, get_earnings_releases, get_management_changes, ... |
| Find a topic anywhere in the filings | search_sections(ticker, query), search_text(ticker, query) |
| Which filing did a number come from? | get_figure_source, get_accession_numbers, get_filing |
| Currency, ADR ratio, fiscal calendar, splits | get_currency_conversion, get_adr_details, get_fiscal_calendar, get_stock_splits |
| Not sure? | guide() |
Tickers are case-insensitive, and BRK.B and BRK-B both resolve.
A record is the complete snapshot built when a company filed one 10-Q or 10-K, tagged by fiscal period: FY27Q2 is the record built from NVIDIA's second-quarter fiscal 2027 10-Q, FY26 one built from a 10-K. Each record holds several periods: up to three fiscal years, the latest quarter and its prior-year comparative, year to date and trailing twelve months. Older records hold older quarters, so a company's history is the union of its records, and every record stays published at a permanent dated URL.
Tools that take period search every record automatically. Tools that take record read one snapshot, the latest by default.
| You pass | You get |
|---|---|
| nothing | every period in the latest record |
FY2025, FY25, fiscal 2025, 2025 | that fiscal year (the company's own fiscal year, not the calendar year) |
Q2 FY2027, Q2 2027, FY27Q2, 2027Q2, 2Q27, second quarter 2027 | that quarter |
Q2 | the latest second quarter held |
latest, latest quarter, latest annual | the most recent period of that kind |
ttm, ytd, prior ytd | trailing twelve months, year to date, the prior year's year to date |
annual, quarterly, all | every fiscal year, every quarter, or every period in every record |
2026-07-26 | the period ending on that date |
A period earlier than anything held is not an error. The answer says the data does not go back that far and lists exactly what is held. A period not yet reported says so and gives the next expected filing.
Records are shaped to each business, so the same line item has different names: Apple's revenue is total_net_sales, JPMorgan's is total_net_revenue, Walmart's net income is net_income_attributable_to_walmart. Nothing is relabeled to hide that.
name_in_record (the record's own name), field (its path inside the period) and json_path (its exact address in financials.json, e.g. annual[0].income_statement.total_net_sales).get_figure or get_figure_history exactly as written, and returns exactly that field. Case, spaces and underscores do not matter: Data Center and revenue_by_market_platform.Data Center both work.list_company_figures maps each standard figure to the name this company uses, then lists every remaining figure under its own name.Each line-item tool knows the names a figure goes by across companies and resolves deterministically: first the field the company's own headline uses for it, then a list of known names in order, then a name pattern only when exactly one field matches. Nothing is estimated, derived or summed to fill a gap. Look-alike fields in the same statement come back under related, and a company that reports none of the names gets a plain "not reported" with the closest fields it does have.
| Figure | Tool | Read from, for example |
|---|---|---|
| Revenue | get_revenue | revenue, revenues, total_revenues, total_revenue, +19 more |
| Cost of revenue | get_cost_of_revenue | cost_of_revenue, cost_of_sales, total_cost_of_revenue, cost_of_goods_sold, +10 more |
| Gross profit, gross margin % | get_gross_profit | gross_profit, gross_margin, gross_margin_pct, +3 more |
| Research and development | get_research_and_development | research_and_development, research_and_development_expenses, +7 more |
| Selling, general and administrative | get_sga_expense | selling_general_and_administrative, sales_general_and_administrative, +7 more |
| Total operating expenses | get_operating_expenses | total_operating_expenses, total_costs_and_expenses, total_noninterest_expense, +11 more |
| Operating income | get_operating_income | operating_income, income_from_operations, operating_profit, +4 more |
| Interest expense | get_interest_expense | interest_expense, total_interest_expense, interest_expense_net, interest_and_debt_expense |
| Income before income taxes | get_pretax_income | income_before_income_taxes, earnings_before_income_taxes, +23 more |
| Income tax, effective tax rate | get_income_tax | provision_for_income_taxes, income_tax_expense, effective_tax_rate_pct, +17 more |
| Net income | get_net_income | net_income, net_earnings, net_income_attributable_to_<company>, +8 more |
| Diluted and basic EPS | get_eps | diluted_eps, eps_diluted, basic_eps, +11 more |
| Diluted, basic and outstanding shares | get_share_count | diluted_shares, basic_shares, shares_outstanding, +27 more |
| Depreciation and amortization | get_depreciation_and_amortization | depreciation_and_amortization, depreciation_depletion_and_amortization, +7 more |
| Stock-based compensation | get_stock_based_compensation | stock_based_compensation, share_based_compensation, +4 more |
| Net interest income, noninterest income (banks) | get_net_interest_income | net_interest_income, total_noninterest_income, +7 more |
| Provision for credit losses (banks) | get_credit_loss_provision | provision_for_credit_losses, provision_for_loan_losses, +4 more |
| Cash and cash equivalents | get_cash | cash_and_cash_equivalents, cash_and_equivalents, cash_and_due_from_banks, +5 more |
| Total assets | get_total_assets | total_assets, assets.total_assets |
| Total liabilities | get_total_liabilities | total_liabilities, liabilities.total_liabilities |
| Total, long-term and short-term debt | get_debt | total_debt, long_term_debt, short_term_debt, current_portion_of_long_term_debt, +32 more |
| Shareholders' equity | get_shareholders_equity | total_stockholders_equity, total_shareholders_equity, total_<company>_shareholders_equity, total_equity, +7 more |
| Current assets and liabilities, working capital | get_working_capital | total_current_assets, total_current_liabilities |
| Goodwill and intangibles | get_goodwill_and_intangibles | goodwill, intangible_assets_net, other_intangible_assets_net, +11 more |
| Inventories | get_inventories | inventories, inventory, merchandise_inventories, +4 more |
| Accounts receivable | get_accounts_receivable | accounts_receivable_net, receivables_net, trade_receivables_net, +7 more |
| Accounts payable | get_accounts_payable | accounts_payable, trade_accounts_payable, trade_payables, +3 more |
| Property, plant and equipment | get_property_and_equipment | property_plant_and_equipment_net, property_and_equipment_net, +7 more |
| Retained earnings | get_retained_earnings | retained_earnings, accumulated_deficit, +3 more |
| Operating cash flow | get_operating_cash_flow | operating_cash_flow, net_cash_provided_by_operating_activities, +10 more |
| Capital expenditures | get_capital_expenditures | capex, capital_expenditures, purchases_of_property_and_equipment, +10 more |
| Free cash flow | get_free_cash_flow | free_cash_flow, free_cash_flow_for_the_quarter, +2 more |
| Investing and financing cash flow | get_investing_and_financing_cash_flow | investing_cash_flow, financing_cash_flow, net_cash_used_in_investing_activities, +21 more |
| Dividends paid, dividends per share | get_dividends | dividends_paid, cash_dividends_paid, dividends_per_share, dividends_declared_per_share, +14 more |
| Share repurchases | get_share_repurchases | share_repurchases, repurchases_of_common_stock, purchases_of_treasury_stock, +11 more |
| Acquisitions, net of cash acquired | get_acquisitions | acquisitions_net_of_cash_acquired, +7 more |
list_standard_figures returns the full catalog with every name each figure is read from.
All money is in actual dollars (not thousands, not millions), per-share figures in dollars per share, share counts in actual shares, split-adjusted. Every figure response carries the record's own units statement, so a value is never separated from its scale.
Every value carries the SEC accession number of the filing it came from and, where the filing tags the number, a sec_link that opens the filing at the line printing it. A value with no link was calculated in the record (margins, free cash flow, trailing twelve months, a quarter derived by subtraction) or comes from an earnings release, which the SEC does not tag. Margins this server calculates (get_margins, get_working_capital) are labeled calculated and show their formula and the exact fields used.
| Tool | Arguments | Returns |
|---|---|---|
list_companies | query? | Every covered company with its latest fiscal period, every record held, and its next expected filing. Resolves a company name to a ticker. |
get_company | ticker, record? | Identity and coverage manifest: name, CIK, exchange, state of incorporation, SIC industry, the filings the record is built from with accessions and EDGAR links, every published record, the next filing, and a map of every tool. |
get_key_figures | ticker, record? | Headline figures for the latest period, each with its year-over-year change, exact amount and source accession. |
get_financials | ticker, sections?, record? | The whole financial record, sliceable by top-level section. figure_sources (the sec.gov link for every tagged figure) only on request. |
get_narrative | ticker, section?, record? | The 10-K and 10-Q synthesis. A section index by default; any section by name, or all. |
get_events | ticker, section?, record? | The 8-K digest over roughly the trailing five quarters, in full or one section. |
| Tool | Arguments | Returns |
|---|---|---|
list_periods | ticker | Every fiscal year and quarter held across every record, with dates, length, source form and accession, which records carry each, and the list of records with their permanent URLs. |
get_period | ticker, period, include_sources? | Every statement and table held for one fiscal year or quarter, searching older records; plain "not that far back" or "not reported yet" answers outside the range. |
get_trailing_twelve_months | ticker, record? | The TTM income statement and cash flow with the derivation note saying how it was built. |
get_year_to_date | ticker, record? | The year-to-date block and the prior year's year-to-date comparative. |
get_figure_history | ticker, figure | One figure across every period held, oldest first, annual and quarterly series, with the record each value came from. |
| Tool | Arguments | Returns |
|---|---|---|
get_income_statement | ticker, period? | The income statement in reported order, with per-share blocks. |
get_balance_sheet | ticker, period? | The balance sheet at each period end. |
get_cash_flow_statement | ticker, period? | The cash flow statement, with free cash flow. |
get_segments | ticker, period? | Results by reportable segment as the company reports them. |
get_revenue_breakdown | ticker, period? | Revenue by product, service, end market, platform, channel or category. |
get_geographic_revenue | ticker, period? | Revenue (and assets or income where reported) by country or region. |
get_non_gaap_measures | ticker, period? | Adjusted EPS, adjusted operating income, EBITDA, FFO and other company-defined measures. |
get_operating_metrics | ticker, period? | KPIs outside the statements: users, subscribers, bookings, stores, RevPAR, backlog and the like. |
get_bank_metrics | ticker, period? | CET1 and capital ratios, net interest margin, efficiency ratio, average balances, credit quality. |
get_insurance_metrics | ticker, period? | Premiums, underwriting results, combined ratios, investment income, float, book value. |
get_margins | ticker, period? | Every margin and rate the record stores, plus gross, operating, net and FCF margin calculated and labeled. |
Each takes ticker and period? and returns the figure for every period (or the one named), each value with its record name, JSON path, dates, accession, form and sec.gov link.
get_revenue, get_cost_of_revenue, get_gross_profit, get_research_and_development, get_sga_expense, get_operating_expenses, get_operating_income, get_interest_expense, get_pretax_income, get_income_tax, get_net_income, get_eps, get_share_count, get_depreciation_and_amortization, get_stock_based_compensation, get_net_interest_income, get_credit_loss_provision, get_cash, get_total_assets, get_total_liabilities, get_debt, get_shareholders_equity, get_working_capital, get_goodwill_and_intangibles, get_inventories, get_accounts_receivable, get_accounts_payable, get_property_and_equipment, get_retained_earnings, get_operating_cash_flow, get_capital_expenditures, get_free_cash_flow, get_investing_and_financing_cash_flow, get_dividends, get_share_repurchases, get_acquisitions
| Tool | Arguments | Returns |
|---|---|---|
list_standard_figures | none | The standard figure catalog: definitions, units, the tool for each, and every record name each is read from. |
list_company_figures | ticker, period?, block? | Each standard figure mapped to this company's name for it, then every remaining figure under its own name, with values. |
find_figures | ticker, query, period? | Fields whose names contain the words, e.g. cet1, comparable sales, data center. |
get_figure | ticker, figure, period? | Any figure by its record name, path, standard name or words. A record name returns exactly that field. |
compare_companies | tickers, figure, period? | One standard figure for two to ten companies, each row with its own period, dates and record name. |
| Tool | Arguments | Returns |
|---|---|---|
get_source_filings | ticker, record? | The annual and quarterly reports the record is built from, which filing each period came from, the sec.gov documents the figure links open, and the published files. |
get_accession_numbers | ticker, record? | Every accession cited across statements, narrative and events: form, filing date, EDGAR index URL, and every use. |
get_filing | ticker, accession, record? | One filing: form, date, links, the periods sourced from it, and the full text of every passage citing it. |
get_figure_source | ticker, figure, period? | For each period, the accession, form and sec.gov line printing the figure. |
| Tool | Arguments | Returns |
|---|---|---|
get_reporting_conventions | ticker, record? | Units, currency, business type and template, fiscal-year convention, sign conventions, accounting basis, definitions. |
get_fiscal_calendar | ticker | Fiscal year end, 52/53-week detection, and every period's exact dates and length. |
get_currency_conversion | ticker, record? | Reporting currency and, for a foreign issuer, the policy and each period's average and closing rate with its source. |
get_adr_details | ticker, record? | ADR ratio, per-share basis and the ratio recorded on each period. |
get_stock_splits | ticker, record? | Splits adjusted for, as-reported pre-split values, and notes about splits. |
get_data_notes | ticker, record? | The record's own sourcing notes and period-level notes. |
get_data_gaps | ticker, record? | Uncertainties, statements not reported, and which standard figures the latest periods lack. |
get_headline_summary | ticker, record? | The written summary and Q&A for the latest period, with each metric's field and accession. |
| Tool | Arguments | Returns |
|---|---|---|
get_next_filing | ticker | Predicted next filing date and form, with the latest period and filing dates held. |
list_upcoming_filings | days?, form? | Every covered company expected to file within N days, soonest first. |
get_coverage_summary | none | Company count, update date, forms held, foreign issuers, records per company, URL patterns. |
guide | none | How the tools fit together, the period syntax, units, citations and the full tool map. |
| Tool | Arguments | Returns |
|---|---|---|
get_business_overview | ticker, record? | Item 1, condensed: products, segments, markets, customers, competition, supply chain, regulation. |
get_risk_factors | ticker, record? | Item 1A, condensed and grouped, with changes since the prior filing flagged. |
get_annual_mdna | ticker, record? | Management's discussion and analysis for the latest fiscal year. |
get_current_quarter | ticker, record? | The latest quarterly report's MD&A: results, changes, liquidity, guidance. |
get_subsequent_events | ticker, record? | Developments after the latest period end, dated and sourced. |
get_legal_proceedings | ticker, record? | Every legal and regulatory section, subsection or passage, plus legal items from the 8-K digest. |
get_narrative_outline | ticker, record? | The heading tree of the narrative and events documents. |
get_narrative_subsection | ticker, heading, record? | One subsection by heading, e.g. Liquidity, Guidance, Competition. |
| Tool | Arguments | Returns |
|---|---|---|
list_events | ticker, record? | Every item in the events digest with its date, accessions and first sentence. |
get_earnings_releases | ticker, record? | Quarterly earnings releases and guidance. |
get_management_changes | ticker, record? | Executive and board appointments, departures and successions. |
get_capital_return_events | ticker, record? | Dividend declarations, buyback authorizations, accelerated repurchases. |
get_debt_and_financing_events | ticker, record? | Notes offerings, credit facilities, term loans, commercial paper. |
get_mergers_and_acquisitions | ticker, record? | Acquisitions, mergers, divestitures and spin-offs. |
get_governance_events | ticker, record? | Annual meeting votes, bylaw and charter changes. |
get_restructuring_events | ticker, record? | Restructuring plans, workforce reductions, impairments. |
| Tool | Arguments | Returns |
|---|---|---|
search_sections | ticker, query, documents?, record? | Which sections and subsections mention the query, ranked, with snippets. |
search_text | ticker, query, documents?, limit?, record? | The paragraphs and list items that contain every word, in full. Quote a phrase to match it exactly. |
list_companies.Free to read and cite. Please attribute "Ticker Scout (tickerscout.ai)".
A stateless Cloudflare Worker using createMcpHandler from @modelcontextprotocol/server, speaking streamable HTTP at /mcp.
The server stores no data. Every tool call fetches the corresponding files from https://tickerscout.ai through the Cloudflare edge cache and shapes the response; a question about an older period reads that record's permanent dated URL. There is no database, no snapshot and no fallback copy: if an upstream file cannot be fetched, the tool returns an error naming the URL and the status rather than serving something stale.
npm test covers the pure logic. test/smoke.mjs calls the tools against a running server for a deliberately shape-diverse set of companies (a conventional company, a bank, an insurance conglomerate, a retailer far ahead of the calendar, a foreign issuer) plus negative cases. test/sweep.mjs runs every tool for every covered company in-process, serving the site's files from a local directory, and fails on any error.
MIT. See LICENSE.