Available as MCP tool:
etf_holdings — call directly from Claude / Cursor / any MCP client. See MCP Server for the 60-second setup.What it does for your agent
etf_holdings returns the latest or as-of regulatory disclosure holdings for a single US-listed ETF — full position list (subject to limit), each row normalized to a common EtfHolding shape with ticker / cusip / isin / sedol identifiers, weight, market_value, shares, and sector / country / asset_type. Rows are sorted by weight descending.
Use it when the agent needs the actual position table — to compute concentration (Top-10 weight, HHI), overlap between two ETFs (call twice and diff by CUSIP / ISIN), or to build a thematic basket from an ETF’s underlying. For ETF basic info, top-N summary, and exposure breakdowns, prefer the lighter etf_lookup which is free.
This endpoint has one documented exception to the platform’s “the action runs, you pay” billing rule: an unsupported ticker is treated as a free coverage check, not a holdings retrieval. Covered tickers return rows and cost 1 credit; tickers outside coverage return 200 OK with coverage_status="unsupported", empty holdings, and 0 credits. This is a specific sanctioned carve-out for ETF Holdings — it is not a general “no data = free” rule elsewhere on the platform. Pass as_of=YYYY-MM-DD for the latest snapshot with as_of_date <= as_of; cross-ETF overlap is still computed client-side.
Response
EtfHoldingsResult
required
number
1 for full / partial / stale returns. 0 when coverage_status="unsupported".number
Account credits remaining.
200 OK · etf_holdings (supported)
200 OK · etf_holdings (unsupported)
Credit rule
Core rule: checking whether a ticker is covered is free; only a resolved holdings retrieval charges 1 credit. This free-when-unsupported behaviour is a documented, sanctioned exception scoped to ETF Holdings — every other endpoint charges as soon as the action runs, even when the result is empty.
Notes
Current limitations
Direct invocation
HTTP / SDK examples
HTTP / SDK examples
Full parameter reference
etf_holdings — request parameters
etf_holdings — request parameters
string
required
US-listed ETF ticker (e.g.
SPY, QQQ, VTI, SOXX, ARKK). Case-insensitive; the server uppercases and trims. Tickers outside coverage return 200 OK with coverage_status="unsupported" and creditsUsed=0.integer
default:50
Maximum number of holdings rows to return, sorted by
weight descending. Default 50. Max 500. For broad-market ETFs (e.g. VTI), the full underlying list will exceed the maximum; cursor-based pagination is on the roadmap.string
Optional period date in
YYYY-MM-DD format. Returns the latest holdings snapshot with as_of_date <= as_of; omit it for the latest available snapshot.Related
ETF Lookup
Fund identity, SEC mapping, top holdings summary, and exposure breakdowns — free.
Equity Historical Prices
ETF OHLCV history lives on the equity daily-bar endpoint.
MCP Server setup
Connect Claude / Cursor / any harness in 60 seconds.