Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Institutional Holdings (by issuer)

get_institutional_holdings
Read-onlyIdempotent

Returns top-N institutional holders of a US public company at a specific period_end (by default the latest period whose 45-day 13F filing window has closed), with aggregate institutional shares, total market value, holder count, and HHI concentration (sum of squared share-of-total percentages) over EVERY common-stock 13F holder of that period, not only the returned top-N rows. Sourced from Form 13F-HR via the by-issuer partition. Institutional tier only. A newer quarter still inside its filing window is incomplete: it is skipped by default (named in newer_period_in_filing_window) and flagged by filing_window_open when requested explicitly. staleness_warning fires when the latest data is older than 90 days.

Input Schema

NameRequiredDescriptionDefault
top_nNoMaximum holders to return, ranked by market_value_usd. Default 25, max 200.
tickerYesStock ticker symbol of the issuer — or a CIK (SEC identifier).
as_of_dateNoPoint-in-time cutoff (YYYY-MM-DD): only 13F filings ACCEPTED by SEC on or before this date are considered, applied BEFORE the latest period is resolved. A 13F/A amendment or late filing accepted after this date is excluded (zero look-ahead) — use this for survivorship-free backtests. Omit for the latest knowable book.
period_endNoQuarter-end of the 13F reporting period (YYYY-MM-DD). Omit to use the latest period available. This is a REPORTING period, NOT a point-in-time cutoff — use as_of_date for that.
lineage_detailNoPer-row provenance envelope. compact / full / off.compact
include_supersededNoDefault false: 13F-HR rows replaced by a later 13F-HR/A are hidden once the amendment is knowable (as of as_of_date when given), so an original and its amendment are never both counted. Set true to include the superseded originals.

Output Schema

NameRequiredDescriptionDefault
cikYes
rowsYes
_metaYesProvenance envelope — data lineage for every MCP response
tickerYes
aggregateYes
as_of_dateYesThe point-in-time cutoff actually applied (echo of the as_of_date input). Null when no PIT cut was requested — never confuse this with the reporting period_end.
period_endYesThe 13F REPORTING period the rows belong to — NOT a point-in-time cutoff.
company_nameYes
data_age_daysYes
holders_countYes
filing_deadlineNoLast on-time 13F filing day for period_end (45 days after quarter end, past a weekend).
metrics_displayNototal_institutional_shares, total_market_value_usd and hhi_concentration rendered for prose ('3.18B shares', '$808.01B', '399.67'). QUOTE THESE VERBATIM.
hhi_concentrationYes
staleness_warningYes
filing_window_openNoTrue when period_end is still inside its 13F filing window (through filing_deadline): managers that have not filed yet are missing, so totals, HHI and ranks are incomplete.
total_market_value_usdYes
options_positions_countYesOption positions (put_call set) excluded from totals/HHI/rows. rows[] are common-stock 13F holdings only.
total_institutional_sharesYes
newer_period_in_filing_windowNoA newer period with early filings that was skipped because its filing window is still open. Pass it as period_end to read that partial book.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / properties / aggregate / properties / basis / description
      Previous value: -"How the aggregates were scoped, e.g. 'top_25_holders'"New value: +"How the aggregates were scoped: 'all_13f_holders_in_period'"
    • changedOutput schema / properties / aggregate / properties / is_partial / description
      Previous value: -"True when the top-N cap was hit, so the totals understate the issuer's true book"New value: +"Whether the totals were cut by top_n. Always false: total_institutional_shares, total_market_value_usd and hhi_concentration cover every holder in the period; only rows[] is capped."
    • addedOutput schema / properties / filing_deadline
      Added value: +{
      +  "description": "Last on-time 13F filing day for period_end (45 days after quarter end, past a weekend).",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / filing_window_open
      Added value: +{
      +  "description": "True when period_end is still inside its 13F filing window (through filing_deadline): managers that have not filed yet are missing, so totals, HHI and ranks are incomplete.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / metrics_display
      Added value: +{
      +  "additionalProperties": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "description": "total_institutional_shares, total_market_value_usd and hhi_concentration rendered for prose ('3.18B shares', '$808.01B', '399.67'). QUOTE THESE VERBATIM.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / newer_period_in_filing_window
      Added value: +{
      +  "description": "A newer period with early filings that was skipped because its filing window is still open. Pass it as period_end to read that partial book.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / rows / items / properties / metrics_display
      Added value: +{
      +  "$ref": "#/properties/metrics_display",
      +  "description": "This holder's shares and market value rendered for prose. QUOTE THESE VERBATIM."
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."New value: +"payg_charge = real pay-per-call charge (a card or MPP payment through agent-pay). payg_rate_card = indicative price, not billed."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed."New value: +"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / billed / description
      Previous value: -"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free."New value: +"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value only: no charge was made for this call (it was within your plan)."
  4. Changed1 schema field changed
    • addedInput schema / properties / include_superseded
      Added value: +{
      +  "default": false,
      +  "description": "Default false: 13F-HR rows replaced by a later 13F-HR/A are hidden once the amendment is knowable (as of as_of_date when given), so an original and its amendment are never both counted. Set true to include the superseded originals.",
      +  "type": "boolean"
      +}
  5. Added
  6. Removed
  7. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / fundamentals_as_of / description
      Previous value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to."New value: +"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."
  8. Changed2 schema fields changed
    • changedInput schema / properties / ticker / description
      Previous value: -"Stock ticker symbol of the issuer."New value: +"Stock ticker symbol of the issuer — or a CIK (SEC identifier)."
    • changedInput schema / properties / ticker / pattern
      Previous value: -"^[A-Za-z.\\-]+$"New value: +"^[A-Za-z0-9.\\-]+$"
  9. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / fundamentals_as_of
      Added value: +{
      +  "description": "ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / price_as_of
      Added value: +{
      +  "description": "ISO timestamp when the price surfaces were last refreshed.",
      +  "type": "string"
      +}
  10. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / cost_usd
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.",
      +  "properties": {
      +    "amount_usd": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "basis": {
      +      "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.",
      +      "enum": [
      +        "payg_charge",
      +        "payg_rate_card"
      +      ],
      +      "type": "string"
      +    },
      +    "billed": {
      +      "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "amount_usd",
      +    "billed",
      +    "basis"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / _meta / properties / latency_ms
      Added value: +{
      +  "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  11. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / pit_safe / description
      Added value: +"true iff a zero-look-ahead point-in-time cut was applied to every returned figure"
  12. Changed7 schema fields changed
    • addedInput schema / properties / as_of_date
      Added value: +{
      +  "description": "Point-in-time cutoff (YYYY-MM-DD): only 13F filings ACCEPTED by SEC on or before this date are considered, applied BEFORE the latest period is resolved. A 13F/A amendment or late filing accepted after this date is excluded (zero look-ahead) — use this for survivorship-free backtests. Omit for the latest knowable book.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • changedInput schema / properties / period_end / description
      Previous value: -"Quarter-end of the 13F reporting period (YYYY-MM-DD). Omit to use the latest period available."New value: +"Quarter-end of the 13F reporting period (YYYY-MM-DD). Omit to use the latest period available. This is a REPORTING period, NOT a point-in-time cutoff — use as_of_date for that."
    • addedOutput schema / properties / aggregate
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "basis": {
      +      "description": "How the aggregates were scoped, e.g. 'top_25_holders'",
      +      "type": "string"
      +    },
      +    "covers_holders": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "has_incomplete_rows": {
      +      "description": "True when ≥1 included holder reported a null shares/market_value — the totals sum only known values and UNDERSTATE the true figure (missing ≠ zero).",
      +      "type": "boolean"
      +    },
      +    "is_partial": {
      +      "description": "True when the top-N cap was hit, so the totals understate the issuer's true book",
      +      "type": "boolean"
      +    },
      +    "note": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "basis",
      +    "is_partial",
      +    "has_incomplete_rows",
      +    "covers_holders",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / as_of_date
      Added value: +{
      +  "description": "The point-in-time cutoff actually applied (echo of the as_of_date input). Null when no PIT cut was requested — never confuse this with the reporting period_end.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / options_positions_count
      Added value: +{
      +  "description": "Option positions (put_call set) excluded from totals/HHI/rows. rows[] are common-stock 13F holdings only.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / period_end / description
      Added value: +"The 13F REPORTING period the rows belong to — NOT a point-in-time cutoff."
    • changedOutput schema / required
      Previous value: -[
      -  "_meta",
      -  "ticker",
      -  "cik",
      -  "company_name",
      -  "period_end",
      -  "data_age_days",
      -  "staleness_warning",
      -  "total_institutional_shares",
      -  "total_market_value_usd",
      -  "hhi_concentration",
      -  "holders_count",
      -  "rows"
      -]New value: +[
      +  "_meta",
      +  "ticker",
      +  "cik",
      +  "company_name",
      +  "period_end",
      +  "as_of_date",
      +  "data_age_days",
      +  "staleness_warning",
      +  "total_institutional_shares",
      +  "total_market_value_usd",
      +  "hhi_concentration",
      +  "holders_count",
      +  "options_positions_count",
      +  "aggregate",
      +  "rows"
      +]
  13. Added

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: discloses that HHI is computed over EVERY common-stock 13F holder (not just returned rows), that a 45-day filing window governs period resolution, that in-window quarters are skipped/flagged, and that staleness_warning fires past 90 days. This is exactly the non-obvious operating context an agent would otherwise misread.

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 with the core return statement and dense throughout; nearly every clause carries signal (HHI basis, default period, skip flag, staleness). It runs long as one paragraph with nested parentheticals, which slightly hurts scannability, but nothing is filler.

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?

With an output schema present, return-field explanation is unnecessary, and the description still names key output signals (newer_period_in_filing_window, filing_window_open, staleness_warning), so an agent knows what to expect. Combined with source, tier, and default-period behavior, nothing essential to correct invocation is missing.

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

Parameters3/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 top_n ranking, as_of_date zero-look-ahead semantics, and period_end as reporting-period-not-cutoff. The description reinforces the default-period (45-day window) resolution but otherwise adds little parameter-level detail beyond the schema, warranting the baseline 3.

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

Purpose4/5

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

States a specific verb and resource (top-N institutional holders of a US public company), names the exact source (Form 13F-HR by-issuer partition), and scopes to 'Institutional tier only', which implicitly separates it from block/de minimis holders. However, it never names get_top_holders or get_blockholders, so an agent comparing the near-identical sibling get_top_holders gets no explicit differentiation.

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

Usage Guidelines3/5

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

Useful behavioral guidance is embedded (default period is the latest closed 45-day window; a newer in-window quarter is skipped and surfaced in newer_period_in_filing_window), but it never tells the agent when to choose this over a sibling like get_top_holders or get_blockholders. Usage is implied by scope rather than stated as an if/then rule.

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.