Skip to main content
Glama

Edgar Product Revenue

edgar_product_revenue
Read-onlyIdempotent

PRODUCT-LEVEL or segment-level revenue as STRUCTURED data — e.g. "how much revenue did Keytruda generate", "AAPL revenue by product line". Regular XBRL tools (edgar_company_concept, edgar_company_facts) only expose UNDIMENSIONED totals; a filer's product/segment breakdown is tagged with an XBRL dimension (e.g. a "Keytruda [Member]"), which those APIs cannot see no matter which concept is requested. This tool reads SEC's own standardized "Financial Report" rendering of that dimensional data straight out of the annual or quarterly segment-reporting / revenue-disaggregation note — 10-K and 10-Q for US filers, 20-F for foreign private issuers (Novartis, AstraZeneca, GSK, Sanofi, Novo Nordisk, Takeda) and 40-F for Canadian MJDS filers, resolved automatically and reported back as resolved_form — the same note human analysts read, but pre-parsed into rows. Pass product_filter (case-insensitive substring, matched against the dimension breadcrumb, e.g. "Keytruda") to get just one product/segment instead of the whole table. Every result carries a citation (accession, filing date, exact report + URL it came from). Not every filer discloses product-level revenue in XBRL, and a small fraction use a non-standard table layout this parser can't read — both are reported as an explicit status rather than a silent empty array, with a fallback to edgar_filing_text for the prose note.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cikNoAlias for `ticker_or_cik` — the spelling edgar_company_concept and edgar_company_facts use for the same thing. Takes a ticker or a CIK.
limitNoMax rows to return (1-200, default 100).
tickerNoAlias for `ticker_or_cik` — the spelling edgar_fund_holdings and edgar_ticker_to_cik use for the same thing. Takes a ticker or a CIK.
accessionNoOptional exact accession number (from edgar_company_filings) to read a specific past filing instead of the latest matching form_type.
form_typeNoFiling type to read the note from. Omit it to try 10-K, then 20-F, then 40-F automatically — foreign private issuers (NVS, AZN, GSK, SNY, NVO, TAK) file 20-F and Canadian MJDS filers file 40-F. "10-Q" also works for filers that disaggregate revenue quarterly. The form actually used comes back as `resolved_form`.
ticker_or_cikNoREQUIRED (or one of its aliases `cik` / `ticker`). Ticker (e.g. "MRK") or CIK (e.g. "310158"). Tickers are auto-resolved.
product_filterNoOptional case-insensitive substring to match against the product/segment dimension, e.g. "Keytruda". Omit to get every disaggregated row in the table.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / cik
      Added value: +{
      +  "description": "Alias for `ticker_or_cik` — the spelling edgar_company_concept and edgar_company_facts use for the same thing. Takes a ticker or a CIK.",
      +  "type": "string"
      +}
    • addedInput schema / properties / ticker
      Added value: +{
      +  "description": "Alias for `ticker_or_cik` — the spelling edgar_fund_holdings and edgar_ticker_to_cik use for the same thing. Takes a ticker or a CIK.",
      +  "type": "string"
      +}
    • changedInput schema / properties / ticker_or_cik / description
      Previous value: -"Ticker (e.g. \"MRK\") or CIK (e.g. \"310158\"). Tickers are auto-resolved."New value: +"REQUIRED (or one of its aliases `cik` / `ticker`). Ticker (e.g. \"MRK\") or CIK (e.g. \"310158\"). Tickers are auto-resolved."
    • changedInput schema / required
      Previous value: -[
      -  "ticker_or_cik"
      -]New value: +[]
  2. Changed2 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "product_filter": "Keytruda",
      -    "ticker_or_cik": "MRK"
      -  }
      -]New value: +[
      +  {
      +    "product_filter": "Keytruda",
      +    "ticker_or_cik": "MRK"
      +  },
      +  {
      +    "product_filter": "Entresto",
      +    "ticker_or_cik": "NVS"
      +  }
      +]
    • changedInput schema / properties / form_type / description
      Previous value: -"Filing type to read the note from (default \"10-K\"). \"10-Q\" also works for filers that disaggregate revenue quarterly."New value: +"Filing type to read the note from. Omit it to try 10-K, then 20-F, then 40-F automatically — foreign private issuers (NVS, AZN, GSK, SNY, NVO, TAK) file 20-F and Canadian MJDS filers file 40-F. \"10-Q\" also works for filers that disaggregate revenue quarterly. The form actually used comes back as `resolved_form`."
  3. Added

TDQS

A4.6/5.0
Behavior4/5

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 valuable behavioral context beyond annotations: it discloses that not every filer discloses product-level revenue in XBRL, that a small fraction use a non-standard table layout the parser can't read, and that both cases are reported as an explicit status rather than a silent empty array. It also explains the automatic form resolution and the resolved_form output field. This is strong behavioral transparency, though it doesn't detail rate limits or exact error statuses.

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

Conciseness4/5

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

The description is dense but well-organized, front-loading the core purpose and differentiation before diving into parameters and edge cases. Every sentence earns its place: the first sentence states the purpose, the second differentiates from siblings, the third explains the data source, the fourth covers filtering, the fifth covers citations, and the sixth covers failure modes. It's longer than ideal but the length is justified by the tool's complexity and the need to distinguish it from closely related siblings.

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

Completeness5/5

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

For a tool with 7 parameters, no output schema, and significant complexity around XBRL dimensions and form types, the description is remarkably complete. It covers what the tool returns (structured rows with citations), how to filter, which form types are supported, how resolution works, what the resolved_form field means, and what happens in failure cases. The only minor gap is not describing the exact output row structure, but the description's mention of 'pre-parsed into rows' and 'citation (accession, filing date, exact report + URL)' provides sufficient context for an agent to understand the return shape.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds value by explaining the semantics of product_filter (case-insensitive substring matched against the dimension breadcrumb), the form_type fallback order, and the alias relationships between ticker_or_cik, cik, and ticker. It also clarifies that ticker_or_cik is effectively required despite the schema listing 0 required parameters. This goes beyond the schema's individual field descriptions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'PRODUCT-LEVEL or segment-level revenue as STRUCTURED data' and immediately gives concrete example queries ('how much revenue did Keytruda generate', 'AAPL revenue by product line'). It explicitly distinguishes itself from sibling tools edgar_company_concept and edgar_company_facts by explaining that those tools only expose undimensioned totals while this one reads dimensional XBRL data. This is a clear, specific purpose that an agent can act on.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool vs alternatives: 'Regular XBRL tools (edgar_company_concept, edgar_company_facts) only expose UNDIMENSIONED totals... which those APIs cannot see no matter which concept is requested.' It also names the fallback tool (edgar_filing_text) for cases where the parser can't read the table. It explains form-type resolution (10-K, 20-F, 40-F, 10-Q) and the product_filter behavior. This is exemplary usage guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.