Skip to main content
Glama

get_fund_holdings

Read-only

Returns per-security holdings from SEC Form N-PORT primary documents — one row per investment-or-security line in a mutual fund / ETF / closed-end fund's monthly portfolio report. Use this when the user asks about: which funds hold a specific stock or bond, a fund's complete portfolio composition, fund-level derivative exposure (swaps, options, futures), repo positions, concentration by issuer, or to compose 'which ETFs added X this month' / 'which funds shorted Y' style queries. Source: parsed from each NportFiling's primary_doc.xml. asset_cat is SEC's own code, and these twenty are the only ones the data holds — EC common equity; EP preferred equity; DBT debt, Treasuries included; LON loan; ABS-MBS asset-backed, mortgage; ABS-O asset-backed, other; ABS-CBDO asset-backed, CDO/CBO; ABS-APCP asset-backed commercial paper; SN structured note; STIV short-term investment vehicle, money-market and liquidity pools; RA repurchase and reverse-repurchase agreement; RE real estate; COMM commodity; DE equity derivative; DIR interest-rate derivative; DFE foreign-exchange derivative; DCR credit derivative; DCO commodity derivative; DO other derivative; OTHER other. Anything else is refused with this list. Useful filter combos: ticker='NVDA' all funds holding NVDA cusip='037833100' AAPL by CUSIP (more reliable than ticker for N-PORT) is_derivative=true, filer_name='BlackRock' the BlackRock FAMILY's derivative book — a name is a substring, and this one spans five trusts. filer_cik picks one of them. derivative_type='swap' every swap position in the universe asset_cat='RA' repo and reverse-repo exposure payoff_profile='Short' short positions only min_pct_of_portfolio=5 concentrated positions (>=5% of NAV) filer_cik='0000884394' one fund's complete portfolio counterparty='Morgan Stanley' every fund's exposure to one dealer min_notional=10000000 derivatives with >=$10M of EXPOSURE (not fair value — see min_notional) derivative_type='swap', expiration_until='2026-12-31' swaps rolling off before year-end maturity_since='2026-01-01', maturity_until='2026-12-31' bonds maturing this year Each holding ties to its parent NportFiling via filing_id. Read the parent for fund metadata (file_date, file_number, amendment flag); read the holding for security-level detail. is_derivative + derivative_type distinguish structured derivative rows from straight equity/debt holdings. DERIVATIVE + DEBT TERMS are extracted and filterable (2026-08-09). Derivatives carry deriv_notional_amount, deriv_counterparty_name/_lei, deriv_expiration_date, deriv_unrealized_appreciation, and the leg-level detail — put/call, written/purchased, strike, share count and delta for options; swap flag and upfront payment/receipt for swaps; both currency legs for forwards. Debt rows carry debt_maturity_date, coupon kind, annualized rate, default, arrears and paid-in-kind flags. USE min_notional, NOT min_value_usd, TO SIZE A DERIVATIVE. Fair value and exposure differ by orders of magnitude: a real interest-rate swap here shows value_usd -49,184 against a notional of 6,795,000. Ranking derivatives by value_usd understates them by ~100x. BACKFILL IN PROGRESS: these fields are populated on filings re-extracted since 2026-08-09 and are absent (null) on the rest until it completes. A null term on an older filing means not-yet-extracted, NOT absent from the source — do not read it as 'this swap has no counterparty'. The parent filing's primary_document_url always has the authoritative detail. COVERAGE: holdings begin with N-PORT filings FILED 2024-06-01. Most filings from then on have holdings rows, but not all: some are still metadata-only in get_nport_filings (not yet extracted — about 4% as of September 2026). Filings before 2024-06-01 are outside this coverage. For a filing with no holdings here, follow primary_document_url in get_nport_filings. An empty result for a filing means not-extracted, not an empty fund.

Input Schema

NameRequiredDescriptionDefault
isinNoExact ISIN if filer included it in the identifiers block.
nameNoCase-insensitive substring against the holding issuer name (e.g., 'Apple', 'Treasury', 'Goldman Sachs'). A name of 1-2 characters (e.g. 'GE', '3M') matches as a whole word within the newest 20,000 holdings by period_ending only, and the answer says so; cusip, ticker or isin search the full history.
cusipNoExact 9-character CUSIP. Most reliable identifier for equity and debt holdings in N-PORT.
limitNoMaximum records to return. Default 50, max 500.
sinceNoISO date (YYYY-MM-DD). Only holdings whose period_ending >= this date.
untilNoISO date (YYYY-MM-DD). Only holdings whose period_ending <= this date.
tickerNoExact ticker symbol if filer included it in the identifiers block (less common than CUSIP).
countryNoISO-2 country code of the holding (e.g., 'US', 'GB', 'JP').
sort_byNoDefault: value_usd.
asset_catNoSEC's asset-category code, case-insensitive. The data holds exactly these: EC common equity; EP preferred equity; DBT debt, Treasuries included; LON loan; ABS-MBS asset-backed, mortgage; ABS-O asset-backed, other; ABS-CBDO asset-backed, CDO/CBO; ABS-APCP asset-backed commercial paper; SN structured note; STIV short-term investment vehicle, money-market and liquidity pools; RA repurchase and reverse-repurchase agreement; RE real estate; COMM commodity; DE equity derivative; DIR interest-rate derivative; DFE foreign-exchange derivative; DCR credit derivative; DCO commodity derivative; DO other derivative; OTHER other. An unknown code is refused with the list rather than searched for — Treasuries are DBT, money-market positions are STIV, and a repurchase agreement is RA.
filer_cikNoFund trust CIK (10-digit, padded with leading zeros). Returns the trust's holdings across all reporting months. This is the precise form of filer_name: one trust, rather than a name substring that can match a whole family of them.
filing_idNoEDGAR accession number — returns all holdings from one specific N-PORT filing (one fund-month).
filer_nameNoCase-insensitive substring against fund trust name (e.g., 'iShares', 'Vanguard', 'SPDR'). ⚠ A name substring matches a FAMILY, not a fund: 'BlackRock' matches at least five separate trusts (0000893818, 0000844779, 0001761055, 0000355916, 0001804196) and 300,000+ holdings rows, so it asks for the whole family's book and reads far more than a caller usually wants. filer_cik is the precise form — one trust. To narrow a name search instead, add period_ending.
sort_orderNoDefault: desc (largest / most recent first).
counterpartyNoCase-insensitive substring against the derivative counterparty (the dealer or clearing house on the other side). Answers exposure-concentration questions — e.g. counterparty='Morgan Stanley' across funds. Cleared derivatives name an exchange or clearing house (CME, Chicago Board of Trade) rather than a bank. Note the source writes the literal 'N/A' where no counterparty is disclosed, and that value is preserved rather than nulled.
min_notionalNoMinimum derivative NOTIONAL amount in the contract's currency. This is EXPOSURE, not fair value, and for derivatives the two differ by orders of magnitude — a real interest-rate swap in this dataset carries value_usd -49,184 against a notional of 6,795,000. Use min_notional (not min_value_usd) to ask 'how big is the bet'; use min_value_usd to ask 'how much is the position worth today'. Rows with no notional are excluded by any positive floor: options carry share count + strike instead and legitimately have none.
is_derivativeNoTrue returns only derivative rows (asset_cat starting with 'D'). False returns only non-derivative rows. Omit for both.
min_value_usdNoMinimum fair value in USD. Use to focus on large positions only.
period_endingNoReporting month-end (YYYY-MM-DD). Restricts results to one reporting period.
maturity_sinceNoISO date (YYYY-MM-DD). Only debt holdings maturing on or after this date. Applies to the 33.6% of rows that are bond-like; pair with maturity_until to build a maturity ladder.
maturity_untilNoISO date (YYYY-MM-DD). Only debt holdings maturing on or before this date.
payoff_profileNoFilter to long or short positions per N-PORT payoffProfile field.
derivative_typeNoStructural derivative type, derived from which `<derivativeInfo>` child element is present in the filing.
expiration_sinceNoISO date (YYYY-MM-DD). Only derivatives expiring on or after this date. Normalized across contract types — futures expDate, option expDt, swap terminationDt, forward settlementDt all populate it, and deriv_category tells you which. Rows whose value is not a real date (the source writes 'N/A') are excluded from the window rather than compared.
expiration_untilNoISO date (YYYY-MM-DD). Only derivatives expiring on or before this date. Pair with expiration_since for a rollover window.
min_pct_of_portfolioNoMinimum percentage of fund net assets (0-100 scale). Use to focus on concentrated positions.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / name / description
      Previous value: -"Case-insensitive substring against the holding issuer name (e.g., 'Apple', 'Treasury', 'Goldman Sachs')."New value: +"Case-insensitive substring against the holding issuer name (e.g., 'Apple', 'Treasury', 'Goldman Sachs'). A name of 1-2 characters (e.g. 'GE', '3M') matches as a whole word within the newest 20,000 holdings by period_ending only, and the answer says so; cusip, ticker or isin search the full history."
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only/non-destructive/open-world, yet the description adds substantial non-obvious behavior: a 4% not-yet-extracted rate, a 2024-06-01 coverage floor, and the critical semantic that an empty result means 'not extracted', not 'empty fund'. It also discloses the in-progress backfill where null terms mean not-yet-extracted rather than absent, and the preserved literal 'N/A' counterparty value.

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

Conciseness3/5

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

It is front-loaded correctly (purpose, then when-to-use, then filters, then caveats), and the length is defensible for 26 parameters. However, it duplicates the full twenty-code asset_cat list verbatim from the schema and repeats the min_notional/fair-value explanation that already appears in the parameter description, so several sentences do not earn their place.

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 26-parameter, zero-required tool with no output schema, the description covers the return grain (one row per holding line), coverage window, extraction lag, empty-result interpretation, and the parent-child relationship needed to assemble a full answer. Nothing an agent needs to call or interpret it correctly appears to be 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 100%, so the baseline is 3, but the description earns above that by adding interpretation the schema cannot: the min_notional vs min_value_usd distinction (exposure vs fair value, with a -49,184 vs 6,795,000 example) and the filer_name-vs-filer_cik family-vs-trust warning. The remaining gaps are the verbatim restatement of the asset_cat enumeration already in the schema.

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 specific verb+resource ('Returns per-security holdings from SEC Form N-PORT primary documents') and immediately scopes it ('one row per investment-or-security line in a mutual fund / ETF / closed-end fund's monthly portfolio report'). It explicitly separates itself from the sibling get_nport_filings by stating that holdings tie to a parent filing via filing_id and that the parent carries fund metadata while the holding carries security-level detail.

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?

Gives an explicit 'Use this when the user asks about:' list (which funds hold a stock, portfolio composition, derivative exposure, repo, issuer concentration, ETF-flow style queries) and then a concrete set of worked filter combinations. It also states the sibling routing rule ('For a filing with no holdings here, follow primary_document_url in get_nport_filings'), covering both when-to-use and when-to-look-elsewhere.

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