TickerFacts
Server Details
SEC EDGAR fundamentals as agent tools: look up or screen US public companies. Free, no key, CC0.
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Most tools target clearly distinct resources/actions (search vs screen vs fundamentals vs county/economic context). Minor overlap exists between get_fundamentals and get_cashflow_inputs (both return company financials) and between search_companies and screen_companies (both find companies), but descriptions clarify the boundaries well.
All names use consistent snake_case with a predictable verb_noun pattern (get_*, search_*, screen_*, send_*). The batch variant get_fundamentals_batch is a clear, conventional extension. No mixed conventions.
10 tools is well-scoped for a company/economic data provider. Each tool earns its place, with the batch endpoint being a legitimate convenience variant rather than filler.
Good coverage of the research domain: discovery (search/screen), fundamentals (single/batch), DCF cashflow inputs, company research/evidence, and macro/county context. Minor gap: no explicit historical time-series or period-comparison endpoint, and search/screen lack profile-detail depth, but core workflows are covered.
Available Tools
10 toolsget_cashflow_inputsCash-flow inputsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | US ticker symbol, e.g. AAPL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only, idempotent, non-destructive nature, and the description adds meaningful behavior beyond that: values are matched on period end, duration, and currency before grouping, and only raw observations are returned. This gives an agent a realistic sense of data provenance and processing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded: core content comes first, grouping behavior follows, and the disclaimer is kept at the end. Every sentence adds useful information, though the disclaimer is somewhat generic and could be considered boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does a good job naming the returned fields, data provenance details, grouping behavior, and what is intentionally excluded. It does not specify the exact response shape, ordering, or whether all available history is returned, but with a single ticker parameter and robust annotations it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the only parameter, ticker, as a 'US ticker symbol, e.g. AAPL,' so the description does not need to add much. The description reinforces the US scope but provides no extra semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific resource (dated per-period cash-flow inputs) and enumerates the included metrics (operating cash flow, capex, net income, shares outstanding), so an agent can understand the tool's focus. It does not explicitly name or differentiate from sibling tools like get_fundamentals, so it loses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool returns, including exclusions like 'no discount rate, no terminal assumption, no fair value and no price target,' but it never says when to prefer this tool over siblings such as get_fundamentals or get_company_research. There is no when-to-use, when-not-to-use, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_evidenceReviewed filing passagesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | US ticker symbol, e.g. AAPL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only, idempotent, non-destructive annotations, the description discloses meaningful behavioral traits: selective coverage, whitespace normalization in quotes, and lack of automatic reconciliation of financial histories. These are exactly the kinds of caveats an agent needs to 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first defines the core capability and return contents, the second warns about selective coverage, and the third clarifies data normalization caveats. It is dense but not bloated, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with no output schema, the description is largely complete: it explains what is returned, the coverage limitations, and key interpretation caveats. A minor gap is that it does not describe the exact response structure, but the simple nature of the call and the rich caveats keep this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single required parameter 'ticker.' The description adds no additional parameter-level detail, but none is needed because the schema fully documents the parameter. This meets the baseline for a fully schema-documented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Read' and the resource: short, verified primary-source passages for reviewed company events. It also lists the included metadata (source URLs, section labels, dates, hashes, predecessor links), which clearly distinguishes it from sibling research or fundamentals tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives important usage context: coverage is selective, and absence of passages means 'unreviewed,' not 'no events.' This helps an agent avoid misinterpreting empty results. It does not explicitly name alternatives, but the context is clear enough for a single-parameter evidence-retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_researchCompany filings and insidersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | US ticker symbol, e.g. AAPL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly=true, idempotent=true, and destructive=false. The description adds value by disclosing data provenance details (source licenses, explicit coverage dates) and by stating the data is not a live trading feed or investment signal, which helps prevent misuse. It stops short of describing return shape or pagination, but for a safe read-only tool this is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence listing the main content categories, followed by brief caveats. It is economical and contains no filler, though the comma-separated list is somewhat dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with strong annotations, the description covers the data scope, provenance, freshness caveat, and intended use. There is no output schema, but the description's content list gives an agent a reasonable expectation of what will be returned. It could be more complete if it named sibling alternatives, but that gap is captured in usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the only parameter, 'ticker', including a US ticker example. The description does not add parameter-specific semantics, but with 100% schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and enumerates concrete content categories: company filings, quarterly insider transaction disclosures, aliases, headquarters, legal-entity relationships, source licenses, and coverage dates. It does not explicitly contrast itself with sibling tools like get_company_evidence, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides contextual boundaries: it is not a live trading feed and is intended for research/education only, not as financial advice or an investment signal. However, it gives no explicit guidance on when to choose this tool over nearby alternatives such as get_company_evidence or get_fundamentals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_county_contextCounty economyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| county | Yes | County FIPS code (e.g. 48453) or name with state (e.g. "Travis, Texas"). An ambiguous name returns a candidate list rather than a guess. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, and the description adds valuable behavioral caveats: published 90% margins of error, missing/suppressed values are not zero, resident vs. workplace populations must not be combined, and the data is place-level rather than company-level. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the data inventory, followed by important caveats. Each sentence contributes useful information, though the set of disclaimers makes it slightly denser than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating data sources, variables, margins of error, national reference rows, and caveats. It does not specify the exact response shape, but for a single-parameter read-only lookup it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the FIPS code/name format, examples, and ambiguous-name candidate-list behavior. The description mentions lookup by FIPS/name but adds no parameter-level meaning beyond the schema, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is highly specific: it names exact datasets (Census ACS, BLS QCEW), the variables covered, the geographic scope (one US county), and the lookup key format. It also distinguishes itself from company-level tools by explicitly stating it describes a place, not company exposure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear use context: county-level research/education, and explicit when-not guidance: do not combine resident and workplace populations, and do not use this for company operating or revenue exposure. It stops short of a 5 because it does not name sibling alternatives such as get_economic_context or get_company_research.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_economic_contextTreasury and BLS seriesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | First observation date: YYYY, YYYY-MM or YYYY-MM-DD; default one year before the newest observation | |
| series | No | Comma-separated series ids, e.g. treasury_10y,CUUR0000SA0 (CPI-U); omitted means all. An unknown id returns the list of ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by clarifying the time window (last year by default) and the behavior of unknown series ids (returns list of ids), which is useful context beyond annotations. However, it doesn't disclose potential rate limits or data freshness specifics, but the annotations carry the main safety burden, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence front-loads what the tool returns and the data frequency, while the second clarifies the default time range and the usage restriction. Every clause earns its place, and it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's relatively simple interface (two optional parameters, no output schema), the description is complete enough for an agent to call it correctly. It covers the main behavior (time range default), the parameter semantics (implied), and the data content. It lacks explicit handling of edge cases like invalid since formats, but that is minor for a read-only, idempotent tool. A 4 is justified because it does more than the bare minimum but isn't exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters (since and series) with formats and defaults. The description adds some context (e.g., default time window, comma-separated ids) but does not significantly enhance beyond the schema. It could have explained the series id format or examples, but the baseline of 3 is correct since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns selected government Treasury yields and BLS series, with clear scope (daily vs monthly) and data types. It distinguishes itself from siblings like get_county_context by naming the data sources (Treasury, BLS) and the research/education purpose, so an agent can identify it as the macroeconomic data tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when Treasury or BLS data is needed, and explicitly notes the 'research and education only' constraint, which guides appropriate use. It does not explicitly name alternative tools, but the sibling list and the specificity of the data make the intended use clear. No exclusion guidance is given for when not to use it, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fundamentalsCompany fundamentalsARead-onlyIdempotentInspect
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 _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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | quarterly returns the newest 8 fiscal quarters (or as many as fit) unless quarters is given; annual is the default. | |
| ticker | Yes | US ticker symbol, e.g. AAPL | |
| metrics | No | Comma-separated metric or ratio keys, e.g. revenue,operating_margin,free_cash_flow; omitted means all metrics and ratios. A ratio brings its inputs with it. Metrics: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic. Ratios: gross_margin, operating_margin, net_margin, return_on_equity, liabilities_to_equity, long_term_debt_to_equity, revenue_growth; any metric's year-over-year change as <metric>_growth, e.g. eps_diluted_growth. | |
| periods | No | Newest annual period groups to return; omitted means all available, or the newest that fit in one result (selection.note says so). With quarters and no periods, the newest 1. | |
| quarters | No | Newest fiscal quarters to return in quarterly, newest first (up to 12). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive safety, so the description earns credit for adding substantive behavioral context: TTM and latest_interim inclusion rules, the reporting flag, ratio computation and non-comparability notes, coverage gaps, and dataset SHA-256 / research links. It does disclose limitations (empty history = unavailable not zero; current-CIK history not reconciled across reorganizations) and even includes a compliance disclaimer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and dense, packing many clauses into essentially two sentences; it is front-loaded with scope but the mid-section on quarterly derivation and reporting flags is hard to parse. It is informative but not optimally structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters at 100% schema coverage, no output schema, and rich annotations, the description covers the critical behavioral nuances (TTM, latest_interim, derivations, non-comparability, coverage gaps). It omits return-shape details, but with no output schema that is a minor gap for a read-only data tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: it explains what 'quarterly' returns (newest 8 fiscal quarters unless quarters is given) and how quarter figures may be reported or derived as the difference of two year-to-date figures, and it explains ratio behavior (a ratio brings its inputs). It does not re-explain the metrics/periods parameters, which the schema covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: SEC-derived annual observations for a US public company, retrieved by ticker. It explicitly names the sibling search_companies as the path for name lookup, and distinguishes itself from get_fundamentals_batch (single company vs batch) by implication of the ticker argument.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear conditional guidance: use search_companies to find a ticker by name, and pass quarters or period 'quarterly' for single fiscal quarters. However it never states when to prefer get_fundamentals_batch over this tool, nor when a caller would not want the trailing-twelve-month or latest_interim additions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fundamentals_batchFundamentals for several companiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | quarterly returns the newest 8 fiscal quarters (or as many as fit) unless quarters is given; annual is the default. | |
| metrics | No | Comma-separated metric or ratio keys, e.g. revenue,operating_margin,free_cash_flow; omitted means all metrics and ratios. A ratio brings its inputs with it. Metrics: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic. Ratios: gross_margin, operating_margin, net_margin, return_on_equity, liabilities_to_equity, long_term_debt_to_equity, revenue_growth; any metric's year-over-year change as <metric>_growth, e.g. eps_diluted_growth. | |
| periods | No | Newest annual period groups per issuer; default 1, maximum 20. | |
| tickers | Yes | 1 to 20 comma-separated tickers, e.g. MSFT,GOOGL,AMZN (a list of strings is also accepted) | |
| quarters | No | Newest fiscal quarters to return in quarterly, newest first (up to 12). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world behavior, so the bar is lower. The description still adds real value by disclosing that unknown tickers yield per-entry errors rather than failing the batch, that each result preserves requested/canonical identity and source lineage, and that point-in-time filtering is unsupported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences that lead with the core capability and batch limit before the defaults and caveats. Every clause carries information; no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and five parameters, the description does well by covering batch limits, defaults, per-entry error handling, identity/lineage, and the PIT-filtering gap. Only the response shape remains unspecified, which is a minor omission given the params and error semantics are addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 periods, quarters, metrics and the annual/quarterly enum in detail. The description only reinforces the ticker count and default period behavior, adding no syntax or format detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read), resource (annual fundamentals) and scope (1 to 20 comma-separated tickers in one request), and clarifies the batch nature that separates it from the singular get_fundamentals sibling. It never names that sibling explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Communicates defaults (one newest period per issuer, all metrics when omitted) and a hard limitation ('No historical point-in-time filtering'), which helps an agent know when this tool is appropriate. It gives no explicit when-to-use vs get_fundamentals routing, so usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_companiesScreen companiesBRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Match ticker prefix, company name, industry or sector | |
| sort | No | Sort column; prefix with - for descending. e.g. -revenue (default), net_margin, -return_on_equity, revenue_growth | |
| limit | No | Max results, 1 to 100 (default 25; larger values return 100) | |
| offset | No | Rows to skip, for paging through total (default 0) | |
| sector | No | One of: Agriculture, Mining, Construction, Manufacturing, Transportation & Utilities, Wholesale Trade, Retail Trade, Finance & Real Estate, Services, Public Administration | |
| roe_min | No | Minimum return on equity, percent | |
| currency | No | Reporting currency, default USD; all for name-sorted discovery without monetary filters | |
| exchange | No | Exchange name, e.g. Nasdaq or NYSE | |
| industry | No | Industry substring, e.g. semiconductors | |
| profitable | No | Only companies with positive net income | |
| revenue_max | No | Maximum annual revenue in the selected reporting currency | |
| revenue_min | No | Minimum annual revenue in the selected reporting currency (default USD) | |
| include_stale | No | Include companies whose latest annual report ended more than about 18 months ago (default false: they stopped filing US GAAP annual reports, or are late) | |
| net_income_min | No | Minimum annual net income in the selected reporting currency | |
| net_margin_min | No | Minimum net margin, percent | |
| gross_margin_min | No | Minimum gross margin, percent (e.g. 40) | |
| total_assets_min | No | Minimum total assets in the selected reporting currency | |
| debt_to_equity_max | No | Deprecated alias for liabilities_to_equity_max. Preserves the old total-liabilities definition and returns a warning; cannot be combined with the canonical parameter. | |
| revenue_growth_min | No | Minimum year-over-year revenue growth, percent | |
| operating_margin_min | No | Minimum operating margin, percent | |
| liabilities_to_equity_max | No | Maximum total liabilities / year-end equity. Includes non-debt liabilities. | |
| long_term_debt_to_equity_max | No | Maximum long-term debt including current maturities / year-end equity. Excludes short-term borrowings and leases; not total debt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context about data provenance ('Data traces to SEC EDGAR filings') and a usage disclaimer, plus the behavioral fact that results are ranked and limited. It does not disclose potential data freshness caveats or how 'latest annual period' is determined beyond the include_stale parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core screening purpose in the first sentence, summarizes the return shape in the second, and adds provenance/disclaimer in the third. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 22 parameters and no output schema, the description gives only a minimal return summary ('ranked list of companies with their key figures'). It does not explain what 'key figures' are, how ranking works, or how pagination interacts with the result set. The schema covers parameters, but the description leaves some operational context unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 22 parameters. The description does not add parameter-level meaning beyond what the schema provides, which is acceptable but not additive. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') and resource ('US public companies') and clearly states the screening criteria (fundamentals filters, sector, profitable-only, sorted/limited). It does not explicitly contrast itself with sibling tools like search_companies, so it lacks the sibling differentiation needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as search_companies or get_fundamentals. The description implies a screening use case but provides no exclusions, prerequisites, or alternative routing. The disclaimer about research/education is a restriction, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesFind a companyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most results to return (default 10) | |
| query | Yes | Company name or ticker, e.g. apple, berkshire, or msft |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds non-obvious behaviors: typo forgiveness, best-match-first ordering, inclusion of former ticker-directory companies (listing_status former), and the specific output fields. This goes beyond the structured data and helps the agent predict results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the first states the core function and output fields, the second clarifies inclusion of delisted companies, and the third gives the usage routing. Information is front-loaded and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter lookup tool with no output schema, the description lists every returned field (ticker, CIK, name, exchange, sector/industry, latest annual period end), explains inclusion policy, and states the ordering behavior. This is sufficient for an agent to call it correctly and understand the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions containing examples (e.g., 'apple, berkshire, or msft') and the limit constraints. The description does not add further parameter-level meaning beyond the schema, so it meets the high-coverage baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: 'Find US public companies by name or ticker', details the returned fields, and explicitly positions the tool as the ticker resolver for other tools ('Use it to turn a company name into the ticker the other tools take'). This clearly distinguishes it from the sibling get_* and screen_companies tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use signal: use it to convert a company name into a ticker for downstream tools. It does not name alternative tools or provide when-not-to-use guidance, but for a focused lookup tool this is a clear and sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackTell TickerFacts what you neededAInspect
Report what you needed from TickerFacts and did not get, what looked wrong, what was confusing, or what worked. Call this whenever a tool call fails or a result lacks a figure, period, company or filter your user's task needed; say what the user was trying to accomplish and exactly which fields, periods, companies or filters would have solved it. Also call it once at the end of a session that went well, naming what was useful. Reports are read by the maintainers and drive what gets added; there is no reply channel unless you give a contact. Free-text fields are bounded; nothing is published.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | missing_data: a company, period, metric or filter you needed is not served. wrong_data: a served figure or label looks incorrect (say which and why). confusing_response: the result or error was hard to use. feature_request: a capability that would help. works_well: what was useful. other. | |
| tool | No | The tool or endpoint involved, e.g. get_fundamentals or /api/v1/screen. | |
| agent | No | Your client or agent and version, e.g. "claude-code 2.1" or "acme-research-bot". | |
| ticker | No | The company or companies involved, if any. | |
| contact | No | An email or URL for follow-up, if the person you work for wants one. Optional; not published. | |
| details | No | Anything else: the figure you expected and its source, the workaround you used, how often this comes up. | |
| summary | Yes | One or two sentences: what you needed and what happened. Required. | |
| use_case | No | What your user is trying to accomplish overall (the task, not the call). This is the most useful field. | |
| in_reply_to | No | The id of an earlier report you are continuing (from its reply), when answering the questions it asked. | |
| would_solve_it | No | The exact fields, periods, companies, filters or behaviour that would have solved it. | |
| attempted_arguments | No | The arguments of the call that failed or fell short, as JSON text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses real behavioral facts: reports are read by maintainers, there is no reply channel unless a contact is provided, and nothing is published. It also notes that free-text fields are bounded. This gives the agent an accurate model of the side effects and privacy guarantees, and does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first states purpose, the second gives call triggers, the third adds a session-completion case, and the final two cover consequences and privacy. It is front-loaded with the core reporting verb and remains compact despite covering many operational details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description is complete: it explains what to report, when to report, what content to include, what happens to the report, and whether follow-up is possible. The schema handles the rest, so no critical operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 paraphrases schema-level guidance already present in fields like use_case ('say what the user was trying to accomplish') and would_solve_it ('exactly which fields, periods, companies or filters would have solved it'), but it does not add significant new parameter-level meaning beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Report what you needed from TickerFacts and did not get, what looked wrong, what was confusing, or what worked.' It clearly distinguishes this tool from all data-retrieval siblings by establishing it as the feedback/issue-reporting channel, not a lookup or screening tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit call conditions: 'Call this whenever a tool call fails or a result lacks a figure, period, company or filter your user's task needed.' It also adds a positive trigger: 'call it once at the end of a session that went well.' This is strong when-to-use guidance, with no meaningful alternatives among the sibling tools.
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.
2 tool updates
- Changed
get_fundamentals3 fields changed- added
Input schema / properties / periodAdded value: +{ + "description": "quarterly returns the newest 8 fiscal quarters (or as many as fit) unless quarters is given; annual is the default.", + "enum": [ + "annual", + "quarterly" + ], + "type": "string" +} - changed
Input schema / properties / periods / descriptionPrevious value: -"Newest annual period groups to return; omitted means all available, or the newest that fit in one result (selection.note says so)."New value: +"Newest annual period groups to return; omitted means all available, or the newest that fit in one result (selection.note says so). With quarters and no periods, the newest 1." - added
Input schema / properties / quartersAdded value: +{ + "description": "Newest fiscal quarters to return in quarterly, newest first (up to 12).", + "maximum": 12, + "minimum": 1, + "type": "integer" +}
- Changed
get_fundamentals_batch2 fields changed- added
Input schema / properties / periodAdded value: +{ + "description": "quarterly returns the newest 8 fiscal quarters (or as many as fit) unless quarters is given; annual is the default.", + "enum": [ + "annual", + "quarterly" + ], + "type": "string" +} - added
Input schema / properties / quartersAdded value: +{ + "description": "Newest fiscal quarters to return in quarterly, newest first (up to 12).", + "maximum": 12, + "minimum": 1, + "type": "integer" +}
1 tool update
- Changed
send_feedback1 field changed- added
Input schema / properties / in_reply_toAdded value: +{ + "description": "The id of an earlier report you are continuing (from its reply), when answering the questions it asked.", + "maxLength": 200, + "type": "string" +}
1 tool update
- Added
send_feedback
1 tool update
- Changed
screen_companies4 fields changed- added
Input schema / properties / debt_to_equity_max / deprecatedAdded value: +true - changed
Input schema / properties / debt_to_equity_max / descriptionPrevious value: -"Maximum total-liabilities / year-end-equity ratio (legacy parameter name)"New value: +"Deprecated alias for liabilities_to_equity_max. Preserves the old total-liabilities definition and returns a warning; cannot be combined with the canonical parameter." - added
Input schema / properties / liabilities_to_equity_maxAdded value: +{ + "description": "Maximum total liabilities / year-end equity. Includes non-debt liabilities.", + "type": "number" +} - added
Input schema / properties / long_term_debt_to_equity_maxAdded value: +{ + "description": "Maximum long-term debt including current maturities / year-end equity. Excludes short-term borrowings and leases; not total debt.", + "type": "number" +}
5 tool updates
- Changed
get_economic_context3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / seriesAdded value: +{ + "description": "Comma-separated series ids, e.g. treasury_10y,CUUR0000SA0 (CPI-U); omitted means all. An unknown id returns the list of ids.", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "description": "First observation date: YYYY, YYYY-MM or YYYY-MM-DD; default one year before the newest observation", + "type": "string" +}
- Changed
get_fundamentals2 fields changed- changed
Input schema / properties / metrics / descriptionPrevious value: -"Comma-separated metric keys, e.g. revenue,operating_income,capex,free_cash_flow; omitted means all. Keys: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic."New value: +"Comma-separated metric or ratio keys, e.g. revenue,operating_margin,free_cash_flow; omitted means all metrics and ratios. A ratio brings its inputs with it. Metrics: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic. Ratios: gross_margin, operating_margin, net_margin, return_on_equity, liabilities_to_equity, long_term_debt_to_equity, revenue_growth; any metric's year-over-year change as <metric>_growth, e.g. eps_diluted_growth." - changed
Input schema / properties / periods / descriptionPrevious value: -"Newest annual period groups to return; omitted means all available."New value: +"Newest annual period groups to return; omitted means all available, or the newest that fit in one result (selection.note says so)."
- Changed
get_fundamentals_batch2 fields changed- changed
Input schema / properties / metrics / descriptionPrevious value: -"Comma-separated metric keys, e.g. revenue,operating_income,capex,free_cash_flow; omitted means all. Keys: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic."New value: +"Comma-separated metric or ratio keys, e.g. revenue,operating_margin,free_cash_flow; omitted means all metrics and ratios. A ratio brings its inputs with it. Metrics: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic. Ratios: gross_margin, operating_margin, net_margin, return_on_equity, liabilities_to_equity, long_term_debt_to_equity, revenue_growth; any metric's year-over-year change as <metric>_growth, e.g. eps_diluted_growth." - changed
Input schema / properties / tickers / descriptionPrevious value: -"1 to 20 comma-separated tickers, e.g. MSFT,GOOGL,AMZN"New value: +"1 to 20 comma-separated tickers, e.g. MSFT,GOOGL,AMZN (a list of strings is also accepted)"
- Changed
screen_companies2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / revenue_maxAdded value: +{ + "description": "Maximum annual revenue in the selected reporting currency", + "type": "number" +}
- Added
search_companies
3 tool updates
- Changed
get_fundamentals1 field changed- changed
Input schema / properties / metrics / descriptionPrevious value: -"Comma-separated canonical metric keys, e.g. revenue,operating_income,capex; omitted means all curated metrics."New value: +"Comma-separated metric keys, e.g. revenue,operating_income,capex,free_cash_flow; omitted means all. Keys: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic."
- Changed
get_fundamentals_batch2 fields changed- changed
Input schema / properties / metrics / descriptionPrevious value: -"Comma-separated canonical metric keys, e.g. revenue,operating_income,capex; omitted means all curated metrics."New value: +"Comma-separated metric keys, e.g. revenue,operating_income,capex,free_cash_flow; omitted means all. Keys: revenue, cost_of_revenue, gross_profit, research_and_development, operating_income, depreciation_and_amortization, ebitda (derived), net_income, eps_diluted, total_assets, total_liabilities, long_term_debt, stockholders_equity, cash_and_equivalents, operating_cash_flow, capex, free_cash_flow (derived), share_repurchases, dividends_paid, shares_outstanding, dividends_per_share, weighted_average_diluted_shares, eps_basic." - changed
Input schema / properties / tickers / descriptionPrevious value: -"1–20 comma-separated tickers, e.g. MSFT,GOOGL,AMZN"New value: +"1 to 20 comma-separated tickers, e.g. MSFT,GOOGL,AMZN"
- Changed
screen_companies3 fields changed- added
Input schema / properties / include_staleAdded value: +{ + "description": "Include companies whose latest annual report ended more than about 18 months ago (default false: they stopped filing US GAAP annual reports, or are late)", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results, 1-100 (default 25)"New value: +"Max results, 1 to 100 (default 25; larger values return 100)" - added
Input schema / properties / offsetAdded value: +{ + "description": "Rows to skip, for paging through total (default 0)", + "type": "integer" +}
2 tool updates
- Added
get_cashflow_inputs - Added
get_county_context
3 tool updates
- Added
get_company_evidence - Changed
get_fundamentals3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / metricsAdded value: +{ + "description": "Comma-separated canonical metric keys, e.g. revenue,operating_income,capex; omitted means all curated metrics.", + "type": "string" +} - added
Input schema / properties / periodsAdded value: +{ + "description": "Newest annual period groups to return; omitted means all available.", + "maximum": 20, + "minimum": 1, + "type": "integer" +}
- Added
get_fundamentals_batch
2 tool updates
- Added
get_company_research - Added
get_economic_context
1 tool update
- Changed
screen_companies8 fields changed- added
Input schema / properties / currencyAdded value: +{ + "description": "Reporting currency, default USD; all for name-sorted discovery without monetary filters", + "type": "string" +} - changed
Input schema / properties / debt_to_equity_max / descriptionPrevious value: -"Maximum debt-to-equity ratio"New value: +"Maximum total-liabilities / year-end-equity ratio (legacy parameter name)" - added
Input schema / properties / exchangeAdded value: +{ + "description": "Exchange name, e.g. Nasdaq or NYSE", + "type": "string" +} - added
Input schema / properties / industryAdded value: +{ + "description": "Industry substring, e.g. semiconductors", + "type": "string" +} - changed
Input schema / properties / net_income_min / descriptionPrevious value: -"Minimum annual net income, USD"New value: +"Minimum annual net income in the selected reporting currency" - changed
Input schema / properties / q / descriptionPrevious value: -"Match ticker prefix or company-name substring"New value: +"Match ticker prefix, company name, industry or sector" - changed
Input schema / properties / revenue_min / descriptionPrevious value: -"Minimum annual revenue, USD (e.g. 1000000000 for $1B)"New value: +"Minimum annual revenue in the selected reporting currency (default USD)" - changed
Input schema / properties / total_assets_min / descriptionPrevious value: -"Minimum total assets, USD"New value: +"Minimum total assets in the selected reporting currency"
2 tool updates
- First observed
get_fundamentals - First observed
screen_companies
Related MCP Connectors
SEC EDGAR filings for AI agents: company lookup, filings, financials, insider trades. No keys.
SEC EDGAR filings for AI agents: company lookup, filings, financials, insider trades. No keys.
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
SEC EDGAR financials, benchmarks, screening & Buffett value scans for agents. Pay x402 or API key.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides free SEC filing fundamentals for US public companies, including financial statements, 10-K/10-Q summaries, and 8-K event histories. No API key or signup required.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to research US public company filings, financials, and insider transactions using SEC EDGAR data, with no API keys required. Provides tools for company lookup, recent filings, full-text search, financial facts, and insider activity.MIT
- AlicenseNot gradedqualityBmaintenanceEnables free financial data analysis from SEC EDGAR filings, including company fundamentals, DCF valuation, comparable companies, industry benchmarks, and stock screening, with no API key required.66 npm1Apache 2.0
- AlicenseAqualityBmaintenanceEnables AI agents to query US public company financial data from SEC filings, with tools for resolving tickers, listing filings, retrieving financial concepts, comparing companies, extracting filing sections, and full-text search. It surfaces data ambiguities like tag variations, restatements, and fiscal-year misalignment rather than hiding them.6MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.