Skip to main content
Glama

get_institutional_holdings

Read-only

Returns SEC Form 13F holdings: the quarterly long-equity positions of every institutional investment manager that files a 13F ($100M+ in 13(f) securities), whole books, every quarter since 2013-06-30. Each record is one (fund, security, quarter). Use this when the user asks which institutions hold a stock, what a fund owns, how a position changed quarter over quarter, or about "whale" activity in a name. Freshness: 13Fs are due 45 days after quarter end. Every 13F on EDGAR's daily list is normally loaded within a day of filing, deadline days included, and some sooner (EDGAR is also checked every 4 hours) (loaded_from "edgar"). Quarters covered by SEC's quarterly 13F data sets come from them (loaded_from "sec_dataset"). 13F does NOT include short positions, cash, most options, or non-US-listed equities. position_change ('new', 'increased', 'decreased', 'closed', 'unchanged') is measured against the same fund's whole prior-quarter book. Amendments are applied as filed: a RESTATEMENT replaces the report; a NEW HOLDINGS amendment adds to it, and a security it lists again is shown once at the sum, with combined_accessions naming every filing in it. form is '13F-HR' or '13F-HR/A'; amendment_type is 'RESTATEMENT', 'NEW HOLDINGS', or null. issuer_name is the security's registered name where known, otherwise the name 13F filers report for it. A ticker query follows the security (its CUSIP) across a ticker change, so older quarters are included (query.resolved_cusips lists the CUSIPs matched); on those older rows the ticker shown may be the security's current one. Values are US dollars. Filings before 2023 reported thousands and are multiplied by 1000. A filing that used the other unit is corrected once market prices confirm it (units_corrected true; value_as_filed holds the filed number). Where a filing's values could not be confirmed against market prices, market_value is null, value_as_filed holds the number as filed, units_note says why, and the row is left out of value sorts and min_value. A filing whose share counts do not line up with the fund's neighbouring filings is left out of shares_held sorts. On a fund's answer, coverage_warning says when a sort leaves filings out and which sort lists them; a security's or a quarter's holders ranked by value or shares simply omit such filings. portfolio_weight_pct is the position's share of the fund's total reported value that quarter. verification_status VERIFIED means the filing matches its own declared row count and, within rounding of up to $1 a row (filings before 2023, $1,000 a row, when they reported thousands), its total value: a consistency check, not a price check. Older filings may still read INSUFFICIENT_DATA on a gap this small until they are re-checked. INSUFFICIENT_DATA means that check failed or could not run, the values look filed in the wrong unit (a 2023+ filing in thousands, or a pre-2023 filing in dollars) but could not be confirmed, or the filing's values or share counts do not line up with market prices or the fund's neighbouring filings. Where such a filing's rows still show a market_value or shares_held, those numbers are as filed and unconfirmed. Give at least one filter that narrows the search: a fund (fund_cik or fund_name), a security (ticker or cusip), or a quarter. With no filter at all, the answer is the latest complete quarter (query.quarter says which). sort_by shares_held or shares_change_pct needs a quarter plus a fund or a security; position_change needs a fund or a security. Otherwise the call answers FILTER_REQUIRED and names the filter to add.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "get_institutional_holdings"
  }
}

Input Schema

NameRequiredDescriptionDefault
cusipNoAlternative to ticker — 9-character SEC CUSIP identifier. Useful when a security has multiple share classes with different tickers.
limitNoMaximum records to return. Default 50, max 500.
cursorNoPass the `next_cursor` from the previous response VERBATIM to fetch the next page. Keep every other filter and the sort identical while paging. Omit to start from the top. A quarter of 13F filings runs to far more than 500 rows, so a complete picture requires paging.
tickerNoFilter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive. Follows the security across a ticker change.
quarterNoPeriod end, YYYY-MM-DD (e.g. '2026-03-31'). With a fund or security and no quarter, every quarter is returned; with no filter at all, the latest complete quarter.
sort_byNoField used for ordering. Default: market_value (largest positions first). shares_held and shares_change_pct need a quarter plus a fund or security.
fund_cikNoSEC CIK of the fund (10-digit, padded). Preferred over fund_name when known. Berkshire Hathaway = '0001067983'.
fund_nameNoFull or partial fund name, at least 3 characters; case-insensitive, and it matches every name the manager has filed under (query.resolved_fund_ciks lists the managers). A name matching more than 20 managers answers FILTER_REQUIRED; use fund_cik. Examples: 'Berkshire', 'Bridgewater', 'Citadel'.
min_valueNoFilter to positions with market_value >= this amount (USD). Use to focus on large positions.
sort_orderNoDefault: desc (largest first).
position_changeNoFilter to position-change type. Common queries: 'increased' for funds adding to a position, 'closed' for funds that exited.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / fund_name / description
      Previous value: -"Full or partial fund name; case-insensitive substring match. Examples: 'Berkshire', 'Bridgewater', 'Citadel'. A name of 1-2 characters matches as a whole word within the newest 20,000 holdings by filing date only, and the answer says so; fund_cik searches the full history."New value: +"Full or partial fund name, at least 3 characters; case-insensitive, and it matches every name the manager has filed under (query.resolved_fund_ciks lists the managers). A name matching more than 20 managers answers FILTER_REQUIRED; use fund_cik. Examples: 'Berkshire', 'Bridgewater', 'Citadel'."
    • changedInput schema / properties / quarter / description
      Previous value: -"Period ending date in YYYY-MM-DD form (e.g. '2026-03-31'). Defaults to all quarters available in the database."New value: +"Period end, YYYY-MM-DD (e.g. '2026-03-31'). With a fund or security and no quarter, every quarter is returned; with no filter at all, the latest complete quarter."
    • changedInput schema / properties / sort_by / description
      Previous value: -"Field used for ordering. Default: market_value (largest positions first)."New value: +"Field used for ordering. Default: market_value (largest positions first). shares_held and shares_change_pct need a quarter plus a fund or security."
    • changedInput schema / properties / ticker / description
      Previous value: -"Filter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive."New value: +"Filter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive. Follows the security across a ticker change."
  2. Changed1 schema field changed
    • changedInput schema / properties / fund_name / description
      Previous value: -"Full or partial fund name; case-insensitive substring match. Examples: 'Berkshire', 'Bridgewater', 'Citadel'."New value: +"Full or partial fund name; case-insensitive substring match. Examples: 'Berkshire', 'Bridgewater', 'Citadel'. A name of 1-2 characters matches as a whole word within the newest 20,000 holdings by filing date only, and the answer says so; fund_cik searches the full history."
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Placeholder

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?

Placeholder

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?

Placeholder

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?

Placeholder

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?

States a specific verb and resource ('Returns SEC Form 13F holdings'), defines the population (every institutional manager with $100M+ in 13(f) securities), the record grain ('one (fund, security, quarter)'), and the historical span. The 'Use this when the user asks which institutions hold a stock, what a fund owns, how a position changed' sentence pins the intended questions, which distinguishes it from fund-level or insider-holdings tools.

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?

Explicit when-to-use scenarios, explicit exclusions (

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.

Resources