Skip to main content
Glama

Secedgar Fetch Frames

secedgar_fetch_frames
Read-onlyIdempotent

Fetch SEC XBRL frames for one concept × one period across all reporting companies. Inline response returns a page of the ranked companies — start at the top or pass offset/next_offset to walk further down the ranking; the full frames response (all reporters) is materialized as df_ when a canvas is available — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query. Accepts friendly names like "revenue" or "assets" (discover via secedgar_search_concepts) or raw XBRL tags. One call hits one XBRL tag — when a friendly name maps to multiple same-meaning tags, the response's unqueried_tags lists the others; call again per tag and UNION/COALESCE in SQL with an analysis-specific priority (e.g. SalesRevenueGoodsNet is goods-only). The response's related_tags separately flags alternate-DEFINITION tags a meaningful share of filers use as their primary line (e.g. cash incl. restricted cash, equity incl. noncontrolling interest) — a whole-universe screen on the base tag silently omits those filers; query them separately, but do not blindly union (the semantics differ). Response includes value_distribution and period_end_range to flag XBRL scale-factor anomalies and fiscal-year mixing. SEC publishes frames for us-gaap and dei tags only, and taxonomy picks which of the two a raw tag is read from (dei for cover-page tags such as EntityCommonStockSharesOutstanding); a friendly name keeps its own mapped taxonomy. There are no ifrs-full frames, so IFRS (20-F) filers are absent from every frame; read them per company with secedgar_get_financials or secedgar_compare_companies under taxonomy ifrs-full.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoSort direction. "desc" for highest values first (typical for revenue, assets). "asc" for lowest values.desc
unitNoUnit of measure. Use "USD-per-shares" (or equivalently "USD/shares") for EPS, "shares" for share counts, "pure" for ratios. Ignored when concept resolves to a friendly name with a known unit.USD
limitNoNumber of companies to return.
offsetNoRank to start the page at, 0-based, over the sorted frame. Pass the next_offset from the previous response to read the next page — the ranked list is fetched whole and sliced, so paging is stable and gap-free. An offset at or past total_companies returns an empty page.
periodYesCalendar period. Use duration periods (no I suffix) for income/cash-flow items: "CY2023" (full year), "CY2024Q2" (single quarter). Use instant periods (I suffix) for balance-sheet items: "CY2023Q4I" (snapshot at Q4 close).
conceptYesFinancial concept — same friendly names as secedgar_get_financials (e.g., "revenue", "assets", "eps_basic") or raw XBRL tag.
taxonomyNoFrames namespace a raw XBRL tag is read from: us-gaap for financial-statement tags, dei for cover-page entity tags such as EntityCommonStockSharesOutstanding. SEC publishes frames for no other taxonomy. A friendly name keeps its own mapped taxonomy (shares_outstanding reads dei) unless dei is passed, which reads its tags from dei instead — the same rule as secedgar_get_financials.us-gaap

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe limit cap applied.
dataNoRanked companies for this metric.
unitNoUnit of measure, in dashed form (e.g., "USD-per-shares").
errorNoPresent when the call failed. Absent on success.
labelNoHuman-readable concept label.
shownNoNumber of companies shown inline.
noticeNoGuidance when the requested offset lands past the end of the ranked list.
offsetNoRank the returned page starts at, 0-based.
periodNoCalendar period the data was fetched for, echoed from input.
caveatsNoCompleteness warnings, else empty: quarterly frames (CY####Q#) omit fiscal-Q4 filers; annual NetIncomeLoss rows may be proxy pay-versus-performance figures; an annual frame still open or in its 10-K window may hold 10-Q trailing-twelve-month figures; top rows may be split or scale artifacts.
conceptNoXBRL tag the data was actually fetched against (after resolving any friendly name).
datasetNoDataframe of the full frame, every reporter. Absent when canvas is unavailable or staging failed.
taxonomyNoFrames namespace the tag was read from (us-gaap or dei); a friendly name mapped to dei reads dei.
truncatedNoTrue when the inline data[] was capped by limit.
next_offsetNoOffset for the next page down the ranking. Absent on the last page.
related_tagsNoAlternate-definition tags many filers use as their primary line (e.g., cash including restricted cash); those filers are absent from data. Fetch each separately; never blindly UNION, since definitions differ. Empty when none is known.
unqueried_tagsNoSame-meaning mapped tags this call did not query (e.g., SalesRevenueNet for revenue); their filers are absent from data, so fetch each and UNION/COALESCE in SQL. Empty for raw tags and single-tag concepts.
total_companiesNoTotal companies reporting this metric for this period.
period_end_rangeNoRange of period_end dates; filers report on their own fiscal years, so "CY2023" can span 2023-01-31 to 2024-12-31, mixing fiscal periods.
value_distributionNoDistribution across the full frame; max_to_p95_ratio is the outlier signal.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • changedOutput schema / properties / caveats / description
      Previous value: -"Data-completeness warnings specific to this query. Populated for duration periods 'CY####Q[1-4]', where SEC XBRL omits filers' fiscal Q4 (reported only as the 10-K residual) — affected filers are silently absent from the frame. Populated for annual ('CY####') NetIncomeLoss frames, where a filer's row can be its proxy statement's pay-versus-performance figure rather than the 10-K's. Populated for an annual frame whose calendar year is still open or inside its 10-K filing window, where a filer's row can be a trailing-twelve-month figure from a 10-Q rather than a fiscal year. Also flags a value distribution whose top rows look like split or scale-factor artifacts. Otherwise empty."New value: +"Completeness warnings, else empty: quarterly frames (CY####Q#) omit fiscal-Q4 filers; annual NetIncomeLoss rows may be proxy pay-versus-performance figures; an annual frame still open or in its 10-K window may hold 10-Q trailing-twelve-month figures; top rows may be split or scale artifacts."
    • changedOutput schema / properties / data / items / properties / location / description
      Previous value: -"Business location (state or country). Absent when SEC has no location for this filer."New value: +"Business location (state or country). Absent when SEC has none."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe handle holding the full frames response. Absent when canvas is unavailable or materialization failed."New value: +"Dataframe of the full frame, every reporter. Absent when canvas is unavailable or staging failed."
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) for secedgar_dataframe_describe, then secedgar_dataframe_query."
    • changedOutput schema / properties / next_offset / description
      Previous value: -"Offset to pass on the next call to continue down the ranking. Absent on the last page (no companies remain past this one)."New value: +"Offset for the next page down the ranking. Absent on the last page."
    • changedOutput schema / properties / offset / description
      Previous value: -"Rank the returned page starts at, 0-based — the effective offset applied."New value: +"Rank the returned page starts at, 0-based."
    • changedOutput schema / properties / period_end_range / description
      Previous value: -"Range of period_end dates across the frame. SEC normalizes to calendar periods but filers report against their own fiscal year-ends, so a \"CY2023\" duration frame can contain period_ends from 2023-01-31 (January-FY filers like Walmart) to 2024-12-31 (calendar-FY filers reported late). Wide ranges mean cross-comparison mixes fiscal periods."New value: +"Range of period_end dates; filers report on their own fiscal years, so \"CY2023\" can span 2023-01-31 to 2024-12-31, mixing fiscal periods."
    • changedOutput schema / properties / related_tags / description
      Previous value: -"Alternate-DEFINITION XBRL tags (distinct from same-meaning `unqueried_tags`) that a meaningful share of filers use as their primary line for this metric — e.g. `cash` filers reporting `CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents` (incl. restricted cash), `equity` filers reporting `StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest` (incl. noncontrolling interest). These filers are NOT in `data` or the dataframe, so a whole-universe screen on the base tag silently under-counts. To recover them, run a separate fetch_frames against the alternate tag — do NOT blindly UNION (definitions differ; you would mix or double-count). Empty when the concept has no known high-coverage alternate."New value: +"Alternate-definition tags many filers use as their primary line (e.g., cash including restricted cash); those filers are absent from data. Fetch each separately; never blindly UNION, since definitions differ. Empty when none is known."
    • changedOutput schema / properties / related_tags / items / properties / tag / description
      Previous value: -"Alternate XBRL tag a meaningful share of filers report this metric under instead."New value: +"Alternate XBRL tag those filers report under."
    • changedOutput schema / properties / taxonomy / description
      Previous value: -"Frames namespace the tag was read from (us-gaap or dei) — a friendly name mapped to dei reads dei under the us-gaap default."New value: +"Frames namespace the tag was read from (us-gaap or dei); a friendly name mapped to dei reads dei."
    • changedOutput schema / properties / unit / description
      Previous value: -"Unit of measure used for the lookup (always normalized to dashed form, e.g. \"USD-per-shares\")."New value: +"Unit of measure, in dashed form (e.g., \"USD-per-shares\")."
    • changedOutput schema / properties / unqueried_tags / description
      Previous value: -"Other same-meaning XBRL tags in the friendly-name mapping that this call did NOT query (historical/variant spellings of the same metric). Empty for raw tags or single-tag concepts — for alternate-DEFINITION tags some filers use instead, see `related_tags`. For \"revenue\" this typically lists `Revenues`, `SalesRevenueNet`, `SalesRevenueGoodsNet` — filers reporting under legacy variants are absent from `data`; call again per tag and UNION/COALESCE in SQL to recover them."New value: +"Same-meaning mapped tags this call did not query (e.g., SalesRevenueNet for revenue); their filers are absent from data, so fetch each and UNION/COALESCE in SQL. Empty for raw tags and single-tag concepts."
    • changedOutput schema / properties / value_distribution / description
      Previous value: -"Distribution stats across the full frame, computed during materialization. Use `max_to_p95_ratio` as the primary outlier signal — it catches scale-factor anomalies even when median is 0 or negative."New value: +"Distribution across the full frame; max_to_p95_ratio is the outlier signal."
    • changedOutput schema / properties / value_distribution / properties / max_to_p95_ratio / description
      Previous value: -"Maximum value divided by 95th percentile. Robust to zero/negative bulk (unlike median-based ratios — many frames have median = 0 or negative, e.g. EPS with many loss-making filers). Typical heavy-tail frames sit in the 10–50× range (mega-caps over the rest); ratios above ~200× usually indicate a filer-side XBRL scale-factor error (wrong `decimals` attribute) — verify the topmost row(s) in `data` before trusting absolute rankings."New value: +"Max divided by p95. Heavy-tail frames sit near 10–50×; above ~200× usually means a filer-side scale-factor error, so check the top rows of data before trusting rankings."
  2. Changed5 schema fields changed
    • addedInput schema / properties / taxonomy
      Added value: +{
      +  "default": "us-gaap",
      +  "description": "Frames namespace a raw XBRL tag is read from: us-gaap for financial-statement tags, dei for cover-page entity tags such as EntityCommonStockSharesOutstanding. SEC publishes frames for no other taxonomy. A friendly name keeps its own mapped taxonomy (shares_outstanding reads dei) unless dei is passed, which reads its tags from dei instead — the same rule as secedgar_get_financials.",
      +  "enum": [
      +    "us-gaap",
      +    "dei"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "concept",
      -      "period",
      -      "unit",
      -      "label",
      -      "total_companies",
      -      "offset",
      -      "data",
      -      "unqueried_tags",
      -      "related_tags",
      -      "value_distribution",
      -      "period_end_range",
      -      "caveats"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "concept",
      +      "taxonomy",
      +      "period",
      +      "unit",
      +      "label",
      +      "total_companies",
      +      "offset",
      +      "data",
      +      "unqueried_tags",
      +      "related_tags",
      +      "value_distribution",
      +      "period_end_range",
      +      "caveats"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • changedOutput schema / properties / caveats / description
      Previous value: -"Data-completeness warnings specific to this query. Currently populated for duration periods 'CY####Q[1-4]', where SEC XBRL omits filers' fiscal Q4 (reported only as the 10-K residual) — affected filers are silently absent from the frame. Empty for annual ('CY####') and instant ('CY####Q#I') periods, where the underlying facts exist and the frame is complete."New value: +"Data-completeness warnings specific to this query. Populated for duration periods 'CY####Q[1-4]', where SEC XBRL omits filers' fiscal Q4 (reported only as the 10-K residual) — affected filers are silently absent from the frame. Populated for annual ('CY####') NetIncomeLoss frames, where a filer's row can be its proxy statement's pay-versus-performance figure rather than the 10-K's. Populated for an annual frame whose calendar year is still open or inside its 10-K filing window, where a filer's row can be a trailing-twelve-month figure from a 10-Q rather than a fiscal year. Also flags a value distribution whose top rows look like split or scale-factor artifacts. Otherwise empty."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `unknown_concept`: The concept input does not match a friendly name and SEC frames returned no data. `no_data`: Concept resolves but no companies report this metric for the requested period and unit. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `unknown_concept`: The concept input is neither a supported friendly name nor shaped like an XBRL tag, so no request is sent. `no_data`: Concept resolves but no companies report this metric for the requested period and unit. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / taxonomy
      Added value: +{
      +  "description": "Frames namespace the tag was read from (us-gaap or dei) — a friendly name mapped to dei reads dei under the us-gaap default.",
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `unknown_concept`: The concept input does not match a friendly name and SEC frames returned no data `no_data`: Concept resolves but no companies report this metric for the requested period and unit Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `unknown_concept`: The concept input does not match a friendly name and SEC frames returned no data. `no_data`: Concept resolves but no companies report this metric for the requested period and unit. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "unknown_concept",
      -  "no_data"
      -]New value: +[
      +  "unknown_concept",
      +  "no_data",
      +  "rate_limited"
      +]
  4. Changed1 schema field changed
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."
  5. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "concept",
      +      "period",
      +      "unit",
      +      "label",
      +      "total_companies",
      +      "offset",
      +      "data",
      +      "unqueried_tags",
      +      "related_tags",
      +      "value_distribution",
      +      "period_end_range",
      +      "caveats"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `unknown_concept`: The concept input does not match a friendly name and SEC frames returned no data `no_data`: Concept resolves but no companies report this metric for the requested period and unit Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "unknown_concept",
      +            "no_data"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "concept",
      -  "period",
      -  "unit",
      -  "label",
      -  "total_companies",
      -  "offset",
      -  "data",
      -  "unqueried_tags",
      -  "related_tags",
      -  "value_distribution",
      -  "period_end_range",
      -  "caveats"
      -]
  6. Changed5 schema fields changed
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Rank to start the page at, 0-based, over the sorted frame. Pass the next_offset from the previous response to read the next page — the ranked list is fetched whole and sliced, so paging is stable and gap-free. An offset at or past total_companies returns an empty page.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / next_offset
      Added value: +{
      +  "description": "Offset to pass on the next call to continue down the ranking. Absent on the last page (no companies remain past this one).",
      +  "type": "number"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when the requested offset lands past the end of the ranked list.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / offset
      Added value: +{
      +  "description": "Rank the returned page starts at, 0-based — the effective offset applied.",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "concept",
      -  "period",
      -  "unit",
      -  "label",
      -  "total_companies",
      -  "data",
      -  "unqueried_tags",
      -  "related_tags",
      -  "value_distribution",
      -  "period_end_range",
      -  "caveats"
      -]New value: +[
      +  "concept",
      +  "period",
      +  "unit",
      +  "label",
      +  "total_companies",
      +  "offset",
      +  "data",
      +  "unqueried_tags",
      +  "related_tags",
      +  "value_distribution",
      +  "period_end_range",
      +  "caveats"
      +]
  7. Changed3 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The limit cap applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of companies shown inline.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when the inline data[] was capped by limit.",
      +  "type": "boolean"
      +}
  8. Changed3 schema fields changed
    • addedOutput schema / properties / related_tags
      Added value: +{
      +  "description": "Alternate-DEFINITION XBRL tags (distinct from same-meaning `unqueried_tags`) that a meaningful share of filers use as their primary line for this metric — e.g. `cash` filers reporting `CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents` (incl. restricted cash), `equity` filers reporting `StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest` (incl. noncontrolling interest). These filers are NOT in `data` or the dataframe, so a whole-universe screen on the base tag silently under-counts. To recover them, run a separate fetch_frames against the alternate tag — do NOT blindly UNION (definitions differ; you would mix or double-count). Empty when the concept has no known high-coverage alternate.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One alternate-definition tag and the reason it differs.",
      +    "properties": {
      +      "note": {
      +        "description": "How this tag differs in definition from the queried tag.",
      +        "type": "string"
      +      },
      +      "tag": {
      +        "description": "Alternate XBRL tag a meaningful share of filers report this metric under instead.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tag",
      +      "note"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / unqueried_tags / description
      Previous value: -"Other XBRL tags in the same friendly-name mapping that this call did NOT query. Empty for raw tags or single-tag concepts. For \"revenue\" this typically lists `Revenues`, `SalesRevenueNet`, `SalesRevenueGoodsNet` — filers reporting under legacy variants are absent from `data`; call again per tag and UNION/COALESCE in SQL to recover them."New value: +"Other same-meaning XBRL tags in the friendly-name mapping that this call did NOT query (historical/variant spellings of the same metric). Empty for raw tags or single-tag concepts — for alternate-DEFINITION tags some filers use instead, see `related_tags`. For \"revenue\" this typically lists `Revenues`, `SalesRevenueNet`, `SalesRevenueGoodsNet` — filers reporting under legacy variants are absent from `data`; call again per tag and UNION/COALESCE in SQL to recover them."
    • changedOutput schema / required
      Previous value: -[
      -  "concept",
      -  "period",
      -  "unit",
      -  "label",
      -  "total_companies",
      -  "data",
      -  "unqueried_tags",
      -  "value_distribution",
      -  "period_end_range",
      -  "caveats"
      -]New value: +[
      +  "concept",
      +  "period",
      +  "unit",
      +  "label",
      +  "total_companies",
      +  "data",
      +  "unqueried_tags",
      +  "related_tags",
      +  "value_distribution",
      +  "period_end_range",
      +  "caveats"
      +]
  9. Changed1 schema field changed
    • addedInput schema / properties / period / pattern
      Added value: +"^CY\\d{4}(Q[1-4]I?)?$"
  10. Changed2 schema fields changed
    • addedInput schema / properties / concept / minLength
      Added value: +1
    • addedInput schema / properties / period / minLength
      Added value: +1
  11. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent, yet the description goes well beyond: pagination is stable and gap-free because the whole ranked list is fetched and sliced, a df_<id> is materialized when a canvas exists, and the response carries unqueried_tags, related_tags, value_distribution and period_end_range signaling tag-mapping, scale-factor and fiscal-year hazards. This is unusually rich behavioral disclosure.

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?

Front-loaded and dense with useful content, but very long; the 'one call hits one tag / union per tag' idea is stated and restated. Every sentence mostly earns its place, so only a mild deduction for length and slight redundancy.

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

Completeness5/5

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

For a complex cross-company XBRL tool with an output schema (so return values need no restating), the description covers the concept/period model, paging, tag-alternates, taxonomy limits and IFRS gaps. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3. The description adds concept-level semantics the schema cannot (one call hits one XBRL tag, unqueried_tags lists same-meaning alternates, taxonomy handling for friendly names vs raw tags), which meaningfully raises it above baseline.

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?

Opens with a precise verb+resource+scope: 'Fetch SEC XBRL frames for one concept × one period across all reporting companies.' This clearly distinguishes it from per-company siblings like secedgar_get_financials and secedgar_compare_companies, which it explicitly names.

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

Usage Guidelines5/5

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

Explicitly routes the agent: friendly names discoverable via secedgar_search_concepts, dataframe materialization inspected with secedgar_dataframe_describe then secedgar_dataframe_query, and IFRS filers must instead use secedgar_get_financials or secedgar_compare_companies. It also gives when-not guidance (don't blindly union related_tags; query separately).

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.