Developers & AI agents
MCP server for AI agents
TickerFacts speaks the Model Context Protocol, so an agent can call it as a tool. Point your MCP client at this endpoint:
https://tickerfacts.com/mcpOne-click install
Claude (claude.ai and Claude Desktop): add a custom connector and paste the endpoint above. No sign-in is needed.
Claude Code
claude mcp add --transport http tickerfacts https://tickerfacts.com/mcpClaude Desktop, Cursor, and other MCP clients
Add to your MCP config (e.g. claude_desktop_config.json or .cursor/mcp.json):
{
"mcpServers": {
"tickerfacts": { "url": "https://tickerfacts.com/mcp" }
}
}For a client that only supports local (stdio) servers, bridge with mcp-remote:
{
"mcpServers": {
"tickerfacts": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://tickerfacts.com/mcp"]
}
}
}Available tools (9)
get_fundamentals: SEC-derived annual observations with exact dates, units and source filings for a US public company, by ticker symbol (use search_companies to find one by name), plus trailing-twelve-month figures and the latest quarterly balances (latest_interim) when a 10-Q is newer than the annual report. Pass quarters (1 to 12) or period "quarterly" for single fiscal quarters (income, cash flow and balances, each reported or the difference of two reported year-to-date figures, named in derivation); reporting says whether the quarter after the latest report has ended without a report yet. Each year also carries computed ratios (margins, return on equity, leverage, revenue_growth; any metric's change as <metric>_growth) and notes on figures that are not comparable with the year before (a restatement or a stock split between them): do not compute a change across a noted year. Includes coverage gaps, metric definitions, requested/canonical identity, dataset SHA-256 and research links. Empty annual history is unavailable, not zero; current-CIK history is not reconciled across reorganizations. Data traces to SEC EDGAR filings. For research and education only; not financial advice or a recommendation to buy, sell or hold.screen_companies: Find US public companies whose latest annual period fundamentals match filters (minimum revenue, margins, ROE, growth; sector; profitable-only), sorted and limited. Returns a ranked list of companies with their key figures. Data traces to SEC EDGAR filings. For research and education only; not financial advice or a recommendation to buy, sell or hold.get_company_research: Company filings, quarterly insider transaction disclosures, aliases, headquarters and legal-entity relationships, with source licenses and explicit coverage dates. Not a live trading feed. For research and education only; not financial advice or an investment signal.get_economic_context: Selected government Treasury yields (daily) and BLS inflation, employment and wage series (monthly), with observation dates, units and reuse provenance. Returns the last year of observations unless since is given. For research and education only; not financial advice.get_fundamentals_batch: Read annual fundamentals for 1 to 20 comma-separated ticker symbols in one request. Defaults to one newest period per issuer; optional metrics projection. Each result keeps requested/canonical identity and source lineage; unknown tickers produce per-entry errors. No historical point-in-time filtering.get_company_evidence: Read short, verified primary-source passages for reviewed company events, with source URLs, section labels, dates, hashes and predecessor links where reviewed. Selective coverage only: no passages means unreviewed, not no events. Quotes normalize whitespace; financial histories are not automatically reconciled across events.get_county_context: Census ACS resident characteristics (housing costs, income, education, occupation mix) with published 90% margins of error, plus BLS QCEW private-industry jobs, pay and year-over-year growth by NAICS code with a national reference row, for one US county by FIPS code or name. Resident and workplace populations are different and must not be combined into one rate; missing and suppressed values are unavailable, not zero. Describes a place, not any company's operating or revenue exposure. For research and education only; not financial advice.get_cashflow_inputs: Dated per-period cash-flow inputs for a US public company: operating cash flow, capital expenditure, net income and shares outstanding, each with its own period start and end, unit, filing date, SEC accession number and source URL. Values sharing a period end are matched on duration and currency before being grouped. Returns observations only: no discount rate, no terminal assumption, no fair value and no price target. For research and education only; not financial advice or a recommendation to buy, sell or hold.search_companies: Find US public companies by name or ticker, forgiving typos, best match first: ticker, SEC CIK, readable name, exchange, SEC sector and industry, and the end of the latest annual period on file. Includes companies that have left the ticker directory (listing_status former). Use it to turn a company name into the ticker the other tools take.
Example argument for get_fundamentals: { "ticker": "AAPL" }.
Free API key
Anonymous access is fine for trying things out. For real use, a free key moves /mcp and /a2a/v1 from 5 to 10 requests per second, on a budget you do not share with anonymous crawlers.
Send the key as Authorization: Bearer tfk_… (or X-API-Key). Agents can request one too:
curl -X POST https://tickerfacts.com/api/v1/keys -H 'content-type: application/json' -d '{"email":"you@example.com"}'Claude Code with a key:
claude mcp add --transport http tickerfacts https://tickerfacts.com/mcp --header "Authorization: Bearer tfk_…"A2A (Agent2Agent)
Every tool is also an A2A skill with the same id. The Agent Card is at /.well-known/agent-card.json (0.3 clients: /.well-known/agent.json). Send JSON-RPC to https://tickerfacts.com/a2a/v1 with a data part naming the skill:
{"jsonrpc": "2.0", "id": 1, "method": "a2a.SendMessage",
"params": {"message": {"messageId": "1", "role": "ROLE_USER",
"parts": [{"data": {"skill": "get_fundamentals",
"arguments": {"ticker": "AAPL", "periods": 1}}}]}}}Replies are immediate messages with the result as a JSON data part; no tasks are created. There is no language model behind this agent: free text works only for an upper-case ticker, and anything else is answered with the list of skills.
JSON API for code
The same data as JSON, no key required. Typed schemas for every response: OpenAPI 3.1.
GET https://tickerfacts.com/api/v1/companies/AAPLget_fundamentals_batch reads up to 20 comma-separated tickers per call; default one latest annual period per issuer. Each unknown ticker has its own not_found result.
GET https://tickerfacts.com/api/v1/companies?tickers=MSFT,GOOGL,AMZN&periods=3&metrics=revenue,operating_income,capexUse periods=1..20 and comma-separated metric keys to keep responses small. Single-company calls default to full history; through MCP and A2A, a history that would not fit in one 60,000-byte result comes back as its newest years, and selection.note says so. Unsupported query fields fail explicitly. Batch replies are capped at 120,000 bytes (60,000 through MCP and A2A); reduce tickers, periods or metrics if asked. coverage describes all available history; selection describes what this request returned.
Ratios and comparability
Each year carries ratios: gross, operating and net margin, return on equity (percent), liabilities_to_equity and long_term_debt_to_equity (plain ratios) and revenue_growth, computed on the screener's rules. Any metric's year-over-year change is available as <metric>_growth, e.g. eps_diluted_growth. Asking for a ratio in metrics returns its inputs too. A year's notes say when a figure is not comparable with the year before (a restatement or a stock split between them) or why a ratio is null; the metric pages mark the same years n/c.
GET https://tickerfacts.com/api/v1/companies/GE?periods=5&metrics=revenue_growth,operating_marginFinding a ticker
search_companies(query) finds companies by name or ticker, forgiving typos, including companies that have left the ticker directory. An unknown ticker in any tool is answered with the likeliest matches.
GET https://tickerfacts.com/api/v1/search?query=berkshireCitable source passages
get_company_evidence(ticker) returns short source passages with a stable event ID, section, source URL, review date and hashes. It currently covers selected events at MSFT, HON, SPGI, SPCX and XOM, including XOM's predecessor-registry link. No reviewed passages means unreviewed coverage, not an absence of events.
GET https://tickerfacts.com/api/v1/evidence/XOMCash-flow inputs and county context
get_cashflow_inputs(ticker) returns operating cash flow, capex, net income and share count per period, each with its source filing. Observations only: no discount rate, no fair value. Here values are decimal strings, unlike the fundamentals endpoint, where they are JSON numbers.
GET https://tickerfacts.com/api/v1/valuation/MSFTget_county_context(county) takes a FIPS code or a name with its state and returns Census ACS characteristics with 90% margins of error and BLS QCEW private-industry jobs and pay, with a national comparison. An ambiguous name returns candidates instead of a guess.
GET https://tickerfacts.com/api/v1/counties/48453Tell us what you needed
send_feedback(kind, summary, ...) is the one tool that writes: a report of a company, period, metric or filter you needed and did not get, a figure or label that looks wrong, a confusing response, a feature, or what worked. Give the task your user is trying to accomplish and exactly what would have solved it. Agents are asked to call it at every failed call and once at the end of a good session; every report is read, kept for 400 days and never published. Over REST it is a POST.
POST https://tickerfacts.com/api/v1/feedback {"kind": "missing_data", "summary": "...", "use_case": "...", "would_solve_it": "..."}Agent data contract
Company responses include requested_ticker and canonical ticker, dataset_sha256, coverage and metric_definitions. Follow research_url for former names and selected filings; sec_history_url opens the full SEC history.
coverage.status describes available annual observations, not valuation readiness. Missing metrics are absent from this mapping, never assumed zero. History follows the current CIK; reorganizations and predecessor filings require reconciliation. The snapshot contains current elected facts, not a historical point-in-time view.
Read metric_definitions before building a valuation: revenue may be a partial business concept; liabilities are not debt; dated common shares and weighted-average diluted shares have different meanings.
Notes
- Data is derived from public SEC EDGAR filings.
- APIs and MCP return SEC fundamentals. Embedded TradingView charts provide display-only prices on company pages.
- Annual groups use actual period-end dates. Each observation includes its start date, unit, SEC tag and source filing. period_year is a calendar year, not an issuer fiscal-year label.
- Screens default to USD. Select a reporting currency for monetary thresholds; currency=all searches all currencies and sorts by company name.
- ROE uses year-end equity. Use liabilities_to_equity or long_term_debt_to_equity, with matching _max screen filters. Long-term debt excludes short-term borrowings and leases. Generic debt_to_equity requests are ambiguous and return an explanation. The deprecated debt_to_equity_max screen filter preserves its total-liabilities definition and returns a warning.
- For information only. Not investment advice; verify against the primary filings.