tickerinside-mcp
MCP server for US ETF and mutual fund holdings: what a fund holds with dates and sources, which ETFs hold a stock, ETF overlap, portfolio look-through and risk. Free, no API key.
npm · fingerprint fa52e367f2abff7b3d1f6a32 · repository · RSS
What changed
Changed 2026-10-15 11:31 UTC
2 descriptions rewritten.
--- pinned/find_etfs_holding_stock +++ observed/find_etfs_holding_stock { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks which ETFs hold a stock, which ETF holds the most of it, how many ETFs hold it, or whether it is in VOO, SPY, IVV, QQQ, VTI or SCHD. Returns the covered US ETFs that hold it, sorted by the stock's weight in each ETF, largest first, each with its weight, rank, dollars, holdings date and source, plus the count, how many ETFs hold it as their largest position, the ETFs and issuers with the most dollars in it, and one sentence to quote. The list keeps the heaviest holders, so a broad ETF where the stock weighs little can fall outside it; whether the six ETFs above hold it is in every answer for a stock with its own stock file, whatever top is, unless compact is true. ETFs holding it through swaps, futures or options are listed apart, as notional exposure. Not for one stock's weight in another ETF (compare_stocks) or the share ETFs own (get_etf_ownership).", + "description": "Use this when the user asks which ETFs hold a stock, which ETF holds the most of it, how many ETFs hold it, or whether it is in VOO, SPY, IVV, QQQ, VTI or SCHD. Returns the covered US ETFs that hold it, largest weight first, each with its weight, rank, dollars, holdings date and source, plus the count, how many hold it as their largest position, the ETFs and issuers with the most dollars in it, and one sentence to quote. The list keeps the heaviest holders; whether the six ETFs above hold it is in every answer for a stock with its own file, unless compact is true. ETFs holding it through swaps, futures or options are listed apart, as notional exposure. A private company's name in place of a ticker (ANTHROPIC, OPENAI) gives the US funds holding it, each stake and value per share from its SEC filing. Not for one stock's weight in another ETF (compare_stocks) or the share ETFs own (get_etf_ownership).", "inputSchema": { "additionalProperties": false, "properties": {
--- pinned/get_etf_flows +++ observed/get_etf_flows { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks whether ETFs are buying or selling a stock, which stocks ETFs bought or sold the most, or which stocks entered or left an index fund. With a ticker, returns the net change in shares held by the US ETFs read daily from their issuers' files on the latest market close, its value at the files' own prices, the ETFs that added and trimmed, a series over the last 20 closes, index entries and exits and corporate actions; without one, the day's largest net additions and reductions, index events and corporate actions. A change mixes creations and redemptions of the ETFs' own shares with rebalancing; beyond_growth leaves out the first. Mergers, spin-offs, takeovers and splits are no trades: their lines are left out of the sums and the lists. Not for which ETFs hold a stock (find_etfs_holding_stock) or one ETF's changes (get_etf_holdings_changes).", + "description": "Use this when the user asks how much money went into or out of US ETFs or one ETF, whether ETFs are buying or selling a stock, or which stocks entered or left an index fund. Without a ticker, returns the day's ETF inflows and outflows and the largest net additions and reductions of stocks. With an ETF's ticker (QQQ), its net creations and redemptions in dollars on each of the last 20 closes. With a stock's ticker, the net change in shares held by the US ETFs read daily from their issuers' files on the latest market close, its value at the files' own prices, the ETFs that added and trimmed, a 20-close series, index entries and exits and corporate actions. A change mixes creations of the ETFs' own shares with rebalancing; beyond_growth leaves out the first. Mergers, spin-offs and splits are no trades: left out of the sums. Not for which ETFs hold a stock (find_etfs_holding_stock) or one ETF's holdings changes (get_etf_holdings_changes).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "A stock ticker, for example NVDA, or a line listed abroad such as 7203.JP. Leave it out for the day's largest moves.", + "description": "An ETF ticker for its own money flows, for example QQQ, or a stock ticker, for example NVDA, or a line listed abroad such as 7203.JP. Leave it out for the day's flows.", "type": "string" } },
Changed 2026-10-14 11:59 UTC
1 description rewritten.
--- pinned/get_etf_holdings +++ observed/get_etf_holdings { "_meta": { "openai/outputTemplate": "ui://tickerinside/holdings-6ef355b6.html", - "description": "Use this when the user asks what any US ETF holds or its sectors, cost, size, returns and risk. Returns the holdings largest first with their weights, category, sector, mega-cap tech and country weights, expense ratio, assets, top 10 weight, 1, 3 and 5-year returns, volatility, beta and worst fall, with each file's date; most ETFs read from SEC filings have no return or risk figures here. Returns are past, not a forecast. A bond ETF gives its lines by issuer, coupon and maturity, with duration; an ETF read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures lists its shares, and its contracts apart as notional exposure; an option income ETF read as a stock ETF (JEPI, QYLD) lists its stocks, not its options or notes; a trust gives what its filing says it holds; a prospectus-only ETF its objective. Not for comparing ETFs (compare_etfs) or the ETFs holding a stock (find_etfs_holding_stock).", + "description": "Use this when the user asks what a US ETF or mutual fund holds or its sectors, cost, size, returns and risk. Returns the holdings largest first with their weights, category, sector, mega-cap tech and country weights, expense ratio, assets, top 10 weight, 1, 3 and 5-year returns, volatility, beta and worst fall, with each file's date; most ETFs read from SEC filings have no return or risk figures here. Returns are past, not a forecast. A bond ETF gives its lines by issuer, coupon and maturity, with duration; an ETF read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures lists its shares, and its contracts apart as notional exposure; an option income ETF read as a stock ETF (JEPI, QYLD) lists its stocks, not its options or notes; a trust what its filing says it holds; a prospectus-only ETF its objective. Not for comparing ETFs (compare_etfs) or the ETFs holding a stock (find_etfs_holding_stock).", "inputSchema": { "additionalProperties": false, "properties": {
Changed 2026-10-13 14:21 UTC
1 description rewritten, 5 schema or annotation changes with the description left byte-identical, 1 tool added.
--- pinned/compare_etfs +++ observed/compare_etfs { "_meta": { + "openai/outputTemplate": "ui://tickerinside/overlap-46a75c7c.html", "ui": { "resourceUri": "ui://tickerinside/overlap-46a75c7c.html" },
+ tool added: find_diversifying_etfs
--- pinned/get_etf_holdings +++ observed/get_etf_holdings { "_meta": { + "openai/outputTemplate": "ui://tickerinside/holdings-6ef355b6.html", "ui": { - "resourceUri": "ui://tickerinside/holdings-5b5de618.html" + "resourceUri": "ui://tickerinside/holdings-6ef355b6.html" }, - "ui/resourceUri": "ui://tickerinside/holdings-5b5de618.html" + "ui/resourceUri": "ui://tickerinside/holdings-6ef355b6.html" }, "annotations": { "destructiveHint": false,
--- pinned/get_etf_holdings_history +++ observed/get_etf_holdings_history { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks how a US ETF's holdings evolved over time, how often its holdings file changes, or how its overlap with its closest ETFs moved. Returns every archived file date of the ETF with its position count and top 10 weight, each step with the count of lines that entered, exited and changed weight and its turnover measures, and the overlap by weight over those dates with its ten closest ETFs. Kept for the stock ETFs read from their issuers' own files, from each ETF's first archived file: 1 September 2026 at the earliest for the daily files, 31 July 2026 for Vanguard's monthly files; another ETF comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated, not traded. Not for the lines one step added or dropped (get_etf_holdings_changes).", + "description": "Use this when the user asks how a US ETF's holdings evolved over time, what it held in a past year or quarter, how often its holdings file changes, or how its overlap with its closest ETFs moved. For the US ETFs that report their stock holdings to the SEC, returns each quarterly Form N-PORT report since 2019 with its date, filing, position count, top 10 weight and five largest positions, and the address of every position at a date. For the stock ETFs read from their issuers' own files, also returns each archived file date (from 1 September 2026 for the daily files, 31 July 2026 for Vanguard's monthly files) with its position count and top 10 weight, each step's entered, exited and moved counts and turnover, and the overlap by weight with its ten closest ETFs; a step across a change in how the files are read is marked restated. Not for the lines one step added or dropped (get_etf_holdings_changes).", "inputSchema": { "additionalProperties": false, "properties": {
--- pinned/get_etf_overlap_matrix +++ observed/get_etf_overlap_matrix { "_meta": { + "openai/outputTemplate": "ui://tickerinside/overlap-46a75c7c.html", "ui": { "resourceUri": "ui://tickerinside/overlap-46a75c7c.html" },
--- pinned/get_etf_portfolio_lookthrough +++ observed/get_etf_portfolio_lookthrough { "_meta": { + "openai/outputTemplate": "ui://tickerinside/lookthrough-9b33da06.html", "ui": { "resourceUri": "ui://tickerinside/lookthrough-9b33da06.html" },
--- pinned/get_etf_portfolio_risk +++ observed/get_etf_portfolio_risk { "_meta": { + "openai/outputTemplate": "ui://tickerinside/risk-7acef738.html", "ui": { "resourceUri": "ui://tickerinside/risk-7acef738.html" },
Changed 2026-10-12 15:31 UTC
12 descriptions rewritten.
--- pinned/compare_etfs +++ observed/compare_etfs { + "_meta": { + "ui": { + "resourceUri": "ui://tickerinside/overlap-46a75c7c.html" + }, + "ui/resourceUri": "ui://tickerinside/overlap-46a75c7c.html" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "title": "Overlap and risk of two funds" + "title": "Overlap and risk of two ETFs" }, - "description": "Use this when the user names exactly two US ETFs and asks how much they overlap, whether one duplicates the other, or how they differ in cost and risk. Returns the overlap by weight and each fund's share held in common, the largest shared holdings, the correlation of weekly returns over up to three years, and each fund's cost, return, volatility and worst fall (most funds read from SEC filings have no return or risk figures here), with both holdings dates. Two bond funds are compared by issuer overlap, option income stock funds (JEPI, QYLD) by their stocks alone. A fund read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures, a trust or pool (metal, crypto, currency, futures), a multi-asset, sponsor-file or prospectus-only fund, or a bond fund beside a stock fund is not comparable, with the reason. Not for three or more funds (get_etf_overlap_matrix).", + "description": "Use this when the user names exactly two US ETFs and asks how much they overlap, whether one duplicates the other, or how they differ in cost and risk. Returns the overlap by weight and each ETF's share held in common, the largest shared holdings, the correlation of weekly returns over up to three years, and each ETF's cost, return, volatility and worst fall (most ETFs read from SEC filings have no return or risk figures here), with both holdings dates. Two bond ETFs are compared by issuer overlap, option income stock ETFs (JEPI, QYLD) by their stocks alone. An ETF read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures, a trust or pool (metal, crypto, currency, futures), a multi-asset, sponsor-file or prospectus-only ETF, or a bond ETF beside a stock ETF is compared by weekly returns alone, with the reason. Not for three or more ETFs (get_etf_overlap_matrix).", "inputSchema": { "additionalProperties": false, "properties": { - "title": "Overlap and risk of two funds" + "title": "Overlap and risk of two ETFs" }
--- pinned/compare_stocks +++ observed/compare_stocks { "annotations": { "destructiveHint": false, - "title": "Stock comparison and weight in a fund" + "title": "Stock comparison and weight in an ETF" }, - "description": "Use this when the user asks how two US stocks compare on size, valuation, returns, risk or correlation, or what weight and rank one stock has inside one named ETF, for example META in QQQ. For two stocks it returns market cap, P/E and dividend yield from market data, returns, volatility, worst fall, beta, the correlation of weekly returns over up to three years and the covered ETFs holding both. For a stock and a fund it returns whether the fund holds the stock, at what weight and rank among the shares it holds outright, with the date of the fund's holdings; a derivative-based fund's swaps, futures and options are in its profile (get_etf_holdings), not here. A stock is in the data with about two years of US prices, and sooner for a recent listing a covered fund holds. Returns are past, not a forecast. Not for comparing two ETFs (compare_etfs), or a company's business or products.", + "description": "Use this when the user asks how two US stocks compare on size, valuation, returns, risk or correlation, or what weight and rank one stock has inside one named ETF, for example META in QQQ. For two stocks it returns market cap, P/E and dividend yield from market data, returns, volatility, worst fall, beta, the correlation of weekly returns over up to three years and the covered ETFs holding both. For a stock and an ETF it returns whether the ETF holds the stock, at what weight and rank among the shares it holds outright, with the date of the ETF's holdings; a derivative-based ETF's swaps, futures and options are in its profile (get_etf_holdings), not here. A stock is in the data with about two years of US prices, and sooner for a recent listing a covered ETF holds. Returns are past, not a forecast. Not for comparing two ETFs (compare_etfs), or a company's business or products.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "For a stock and a fund.", + "description": "For a stock and an ETF.", "properties": { "holdings_as_of": { "type": [ - "title": "Stock comparison and weight in a fund" + "title": "Stock comparison and weight in an ETF" }
--- pinned/find_etfs_holding_stock +++ observed/find_etfs_holding_stock { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks which ETFs hold a stock, which fund holds the most of it, how many funds hold it, or whether it is in VOO, SPY, IVV, QQQ, VTI or SCHD. Returns the covered US ETFs that hold it, sorted by the stock's weight in each fund, largest first, each with its weight, rank, dollars, holdings date and source, plus the count, how many funds hold it as their largest position, the funds and issuers with the most dollars in it, and one sentence to quote. The list keeps the heaviest holders, so a broad fund where the stock weighs little can fall outside it; whether the six funds above hold it is in every answer for a stock with its own stock file, whatever top is, unless compact is true. Funds holding it through swaps, futures or options are listed apart, as notional exposure. Not for one stock's weight in another fund (compare_stocks) or the share ETFs own (get_etf_ownership).", + "description": "Use this when the user asks which ETFs hold a stock, which ETF holds the most of it, how many ETFs hold it, or whether it is in VOO, SPY, IVV, QQQ, VTI or SCHD. Returns the covered US ETFs that hold it, sorted by the stock's weight in each ETF, largest first, each with its weight, rank, dollars, holdings date and source, plus the count, how many ETFs hold it as their largest position, the ETFs and issuers with the most dollars in it, and one sentence to quote. The list keeps the heaviest holders, so a broad ETF where the stock weighs little can fall outside it; whether the six ETFs above hold it is in every answer for a stock with its own stock file, whatever top is, unless compact is true. ETFs holding it through swaps, futures or options are listed apart, as notional exposure. Not for one stock's weight in another ETF (compare_stocks) or the share ETFs own (get_etf_ownership).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "true for an answer about half the length. It keeps the counts, rank_summary (how many funds hold the stock as their largest or a top 10 position), name_collision (funds whose name contains the company's name) and the sentence to quote. It leaves out top_by_value (the funds holding the most dollars of it), membership (whether VOO, SPY, IVV, QQQ, VTI and SCHD hold it, and its weight in the three largest sector or industry funds that hold it), by_issuer (the issuers holding the most dollars), fee_per_1000 (the yearly cost, in the cheapest funds, of each $1,000 of the stock held through them) and each fund's rank, positions and value.", + "description": "true for an answer about half the length. It keeps the counts, rank_summary (how many ETFs hold the stock as their largest or a top 10 position), name_collision (ETFs whose name contains the company's name) and the sentence to quote. It leaves out top_by_value (the ETFs holding the most dollars of it), membership (whether VOO, SPY, IVV, QQQ, VTI and SCHD hold it, and its weight in the three largest sector or industry ETFs that hold it), by_issuer (the issuers holding the most dollars), fee_per_1000 (the yearly cost, in the cheapest ETFs, of each $1,000 of the stock held through them) and each ETF's rank, positions and value.", "type": "boolean" }, "ticker": { - "description": "The stock's ticker, not the company name, for example NVDA for Nvidia. A line listed outside the US carries its market after a dot, for example 7203.JP (Toyota in Tokyo), SAN.FR (Sanofi in Paris) or 005930.KR (Samsung Electronics); an earlier key without the market, such as 7203, is read as the key it became. A key ending in .PFD is not a market: it is the issuer's preferred shares, a US line apart from the common stock (JPM.PFD, held by preferred stock funds).", + "description": "The stock's ticker, not the company name, for example NVDA for Nvidia. A line listed outside the US carries its market after a dot, for example 7203.JP (Toyota in Tokyo), SAN.FR (Sanofi in Paris) or 005930.KR (Samsung Electronics); an earlier key without the market, such as 7203, is read as the key it became. A key ending in .PFD is not a market: it is the issuer's preferred shares, a US line apart from the common stock (JPM.PFD, held by preferred stock ETFs).", "type": "string" }, "top": { - "description": "How many funds to return, sorted by the stock's weight in each fund, largest first, from 1 to 200; 50 when left out.", + "description": "How many ETFs to return, sorted by the stock's weight in each ETF, largest first, from 1 to 200; 50 when left out.", "maximum": 200, "minimum": 1, "type": "integer" - "description": "The stock's weight in the fund.", + "description": "The stock's weight in the ETF.", "type": [ "number", "null"
--- pinned/get_etf_flows +++ observed/get_etf_flows { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks whether ETFs are buying or selling a stock, which stocks ETFs bought or sold the most, or which stocks entered or left an index fund. With a ticker, returns the net change in shares held by the US ETFs read daily from their issuers' files on the latest market close, its value at the files' own prices, the funds that added and trimmed, a series over the last 20 closes, index entries and exits and corporate actions; without one, the day's largest net additions and reductions, index events and corporate actions. A change mixes creations and redemptions of the funds' own shares with rebalancing; beyond_growth leaves out the first. Mergers, spin-offs, takeovers and splits are no trades: their lines are left out of the sums and the lists. Not for which funds hold a stock (find_etfs_holding_stock) or one fund's changes (get_etf_holdings_changes).", + "description": "Use this when the user asks whether ETFs are buying or selling a stock, which stocks ETFs bought or sold the most, or which stocks entered or left an index fund. With a ticker, returns the net change in shares held by the US ETFs read daily from their issuers' files on the latest market close, its value at the files' own prices, the ETFs that added and trimmed, a series over the last 20 closes, index entries and exits and corporate actions; without one, the day's largest net additions and reductions, index events and corporate actions. A change mixes creations and redemptions of the ETFs' own shares with rebalancing; beyond_growth leaves out the first. Mergers, spin-offs, takeovers and splits are no trades: their lines are left out of the sums and the lists. Not for which ETFs hold a stock (find_etfs_holding_stock) or one ETF's changes (get_etf_holdings_changes).", "inputSchema": { "additionalProperties": false, "properties": {
--- pinned/get_etf_holdings +++ observed/get_etf_holdings { + "_meta": { + "ui": { + "resourceUri": "ui://tickerinside/holdings-5b5de618.html" + }, + "ui/resourceUri": "ui://tickerinside/holdings-5b5de618.html" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "title": "Fund holdings and profile" + "title": "ETF holdings and profile" }, - "description": "Use this when the user asks what any US ETF holds, or its cost, size, returns and risk. Returns the holdings largest first with their weights, the expense ratio, assets, top 10 weight, returns over one, three and five years, volatility, beta and worst fall, with each file's date; most funds read from SEC filings have no return or risk figures here. Returns are past, not a forecast. A bond fund gives its lines by issuer, coupon and maturity, with duration; a fund read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures lists its shares, and its contracts apart as notional exposure; an option income fund read as a stock fund (JEPI, QYLD) lists its stocks, not its options or notes; a trust gives what its filing says it holds; a prospectus-only fund its objective. Not for comparing funds (compare_etfs) or the funds holding a stock (find_etfs_holding_stock).", + "description": "Use this when the user asks what any US ETF holds or its sectors, cost, size, returns and risk. Returns the holdings largest first with their weights, category, sector, mega-cap tech and country weights, expense ratio, assets, top 10 weight, 1, 3 and 5-year returns, volatility, beta and worst fall, with each file's date; most ETFs read from SEC filings have no return or risk figures here. Returns are past, not a forecast. A bond ETF gives its lines by issuer, coupon and maturity, with duration; an ETF read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures lists its shares, and its contracts apart as notional exposure; an option income ETF read as a stock ETF (JEPI, QYLD) lists its stocks, not its options or notes; a trust gives what its filing says it holds; a prospectus-only ETF its objective. Not for comparing ETFs (compare_etfs) or the ETFs holding a stock (find_etfs_holding_stock).", "inputSchema": { "additionalProperties": false, "properties": { + "breakdown": { + "type": "object" + }, + "category": { + "properties": { + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "rule": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, "covered": { "type": "boolean" }, - "title": "Fund holdings and profile" + "title": "ETF holdings and profile" }
--- pinned/get_etf_holdings_changes +++ observed/get_etf_holdings_changes { "annotations": { "destructiveHint": false, - "title": "Fund holdings changes" + "title": "ETF holdings changes" }, - "description": "Use this when the user asks what a US ETF bought, sold, added or dropped, or how the weights of its holdings changed, recently or since a date. Returns, for each step from one issuer file to the next, the lines that entered and exited with their weights and the lines whose weight moved by 0.05 points or more, before and after, which includes price moves and not only trades, with the turnover measures; the latest step when no date is given. Kept for the stock ETFs read from their issuers' own files, daily for most and monthly for Vanguard; another fund comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated and lists no trades. Not for a fund's holdings on one date (get_etf_holdings) or its overlap over time (get_etf_holdings_history).", + "description": "Use this when the user asks what a US ETF bought, sold, added or dropped, or how the weights of its holdings changed, recently or since a date. Returns, for each step from one issuer file to the next, the lines that entered and exited with their weights and the lines whose weight moved by 0.05 points or more, before and after, which includes price moves and not only trades, with the turnover measures; the latest step when no date is given. Kept for the stock ETFs read from their issuers' own files, daily for most and monthly for Vanguard; another ETF comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated and lists no trades. Not for an ETF's holdings on one date (get_etf_holdings) or its overlap over time (get_etf_holdings_history).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Oldest first, the lines of each step largest first.", + "description": "Oldest first; each step's lines largest first.", "items": { "properties": { "date": { - "title": "Fund holdings changes" + "title": "ETF holdings changes" }
--- pinned/get_etf_holdings_history +++ observed/get_etf_holdings_history { "annotations": { "destructiveHint": false, - "title": "Fund holdings history" + "title": "ETF holdings history" }, - "description": "Use this when the user asks how a US ETF's holdings evolved over time, how often its holdings file changes, or how its overlap with its closest funds moved. Returns every archived file date of the fund with its position count and top 10 weight, each step with the count of lines that entered, exited and changed weight and its turnover measures, and the overlap by weight over those dates with its ten closest funds. Kept for the stock ETFs read from their issuers' own files, from each fund's first archived file: 1 September 2026 at the earliest for the daily files, 31 July 2026 for Vanguard's monthly files; another fund comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated, not traded. Not for the lines one step added or dropped (get_etf_holdings_changes).", + "description": "Use this when the user asks how a US ETF's holdings evolved over time, how often its holdings file changes, or how its overlap with its closest ETFs moved. Returns every archived file date of the ETF with its position count and top 10 weight, each step with the count of lines that entered, exited and changed weight and its turnover measures, and the overlap by weight over those dates with its ten closest ETFs. Kept for the stock ETFs read from their issuers' own files, from each ETF's first archived file: 1 September 2026 at the earliest for the daily files, 31 July 2026 for Vanguard's monthly files; another ETF comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated, not traded. Not for the lines one step added or dropped (get_etf_holdings_changes).", "inputSchema": { "additionalProperties": false, "properties": { - "title": "Fund holdings history" + "title": "ETF holdings history" }
--- pinned/get_etf_overlap_matrix +++ observed/get_etf_overlap_matrix { + "_meta": { + "ui": { + "resourceUri": "ui://tickerinside/overlap-46a75c7c.html" + }, + "ui/resourceUri": "ui://tickerinside/overlap-46a75c7c.html" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "title": "Overlap across many funds" + "title": "Overlap across many ETFs" }, - "description": "Use this when the user lists three to thirty US ETFs, often a portfolio, and asks which of them duplicate each other or whether the list is diversified across companies; two give one pair. Returns every pair ranked by overlap by weight, with the share of each fund held in common and the count of companies in both, and the holdings date and source of each fund in those pairs. It measures diversification by the holdings the funds share, not by how their returns move together. Bond funds are paired by issuer overlap and listed apart. Uncovered tickers are named and skipped; commodity, multi-asset, sponsor-file and prospectus-only funds and funds read from SEC filings that are leveraged, inverse, under half in stock or half in swaps and futures are listed as not comparable, each with its reason. Not for the companies underneath (get_etf_portfolio_lookthrough) or how funds move together (get_etf_portfolio_risk).", + "description": "Use this when the user lists three to thirty US ETFs, often a portfolio, and asks which of them duplicate each other or whether the list is diversified across companies; two give one pair. Returns every pair ranked by overlap by weight, with the share of each ETF held in common and the count of companies in both, and the holdings date and source of each ETF in those pairs. It measures diversification by the holdings the ETFs share, not by how their returns move together. Bond ETFs are paired by issuer overlap and listed apart. Uncovered tickers are named and skipped; commodity, multi-asset, sponsor-file and prospectus-only ETFs and ETFs read from SEC filings that are leveraged, inverse, under half in stock or half in swaps and futures are listed as not comparable, each with its reason. Not for the companies underneath (get_etf_portfolio_lookthrough) or how ETFs move together (get_etf_portfolio_risk).", "inputSchema": { "additionalProperties": false, "properties": { - "title": "Overlap across many funds" + "title": "Overlap across many ETFs" }
--- pinned/get_etf_ownership +++ observed/get_etf_ownership { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks how much of a US company ETFs own, or what share of its stock sits in ETFs. Returns a lower bound: at least this percent of the shares outstanding is held by the covered US ETFs, from this many funds, with the shares held, the SEC's count of shares outstanding and its date, the holdings dates, the method, whether the percent is of the whole company or of the ticker's class, and where the figure ranks among the stocks measured. It is a lower bound because ETFs outside the coverage are not counted. A stock without a figure comes back with the reason. Not for the list of funds that hold the stock (find_etfs_holding_stock).", + "description": "Use this when the user asks how much of a US company ETFs own, or what share of its stock sits in ETFs. Returns a lower bound: at least this percent of the shares outstanding is held by the covered US ETFs, from this many ETFs, with the shares held, the SEC's count of shares outstanding and its date, the holdings dates, the method, whether the percent is of the whole company or of the ticker's class, and where the figure ranks among the stocks measured. It is a lower bound because ETFs outside the coverage are not counted. A stock without a figure comes back with the reason. Not for the list of ETFs that hold the stock (find_etfs_holding_stock).", "inputSchema": { "additionalProperties": false, "properties": {
--- pinned/get_etf_portfolio_lookthrough +++ observed/get_etf_portfolio_lookthrough { + "_meta": { + "ui": { + "resourceUri": "ui://tickerinside/lookthrough-9b33da06.html" + }, + "ui/resourceUri": "ui://tickerinside/lookthrough-9b33da06.html" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Use this when the user gives a portfolio of US ETFs and asks which companies they own, how much of one company they hold, or how concentrated it is. Returns the companies underneath, each with its percent of what is looked through, its value when amounts are given and the funds it comes through, plus the company count and top 10 weight; for one company, raise top until it shows, up to 200. It measures diversification by single companies, not by how funds move together. Without amounts, every fund counts equally. Uncovered tickers (US stocks among them), bond, commodity, multi-asset, sponsor-file and prospectus-only funds, and funds read from SEC filings that are leveraged, inverse, under half in stock or half in swaps and futures are named and left out of the percentages and the value. Amounts are not stored. Not for duplicate funds (get_etf_overlap_matrix) or risk (get_etf_portfolio_risk).", + "description": "Use this when the user gives a portfolio of US ETFs and asks which companies they own, how much of one company they hold, or how concentrated it is. Returns the companies underneath, each with its percent of what is looked through, its value when amounts are given and the ETFs it comes through, plus the count of holdings, by ticker, and the top 10 weight; for one company, raise top until it shows, up to 200. It measures diversification by single companies, not by how ETFs move together. Without amounts, every ETF counts equally. Uncovered tickers (US stocks among them), bond, commodity, multi-asset, sponsor-file and prospectus-only ETFs, and ETFs read from SEC filings that are leveraged, inverse, under half in stock or half in swaps and futures are named and left out of the percentages and the value. Amounts are not stored. Not for duplicate ETFs (get_etf_overlap_matrix) or risk (get_etf_portfolio_risk).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "The currency of the amounts, for example USD or EUR. Echoed back with the values; nothing is converted. Left out, the amounts still weigh the funds and the currency reads unstated.", + "description": "The currency of the amounts, for example USD or EUR. Echoed back with the values; nothing is converted. Left out, the amounts still weigh the ETFs and the currency reads unstated.", "type": "string" }, "positions": { - "description": "The funds of the portfolio, 1 to 60, for example [{\"ticker\": \"VOO\", \"amount\": 40000}, {\"ticker\": \"QQQ\", \"amount\": 25000}] with \"currency\": \"USD\" beside it. Give an amount for every position or for none; with none, every fund counts equally.", + "description": "The ETFs of the portfolio, 1 to 60, for example [{\"ticker\": \"VOO\", \"amount\": 40000}, {\"ticker\": \"QQQ\", \"amount\": 25000}] with \"currency\": \"USD\" beside it. Give an amount for every position or for none; with none, every ETF counts equally.", "items": { "additionalProperties": false, "properties": { - "description": "Largest first, value in the currency of the amounts.", + "description": "Largest first; value in the amounts' currency.", "items": { "properties": { "ticker": { + "looked_through_pct": { + "type": [ + "number", + "null" + ] + }, "not_covered": { "items": { "type": "string"
--- pinned/get_etf_portfolio_risk +++ observed/get_etf_portfolio_risk { + "_meta": { + "ui": { + "resourceUri": "ui://tickerinside/risk-7acef738.html" + }, + "ui/resourceUri": "ui://tickerinside/risk-7acef738.html" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Use this when the user gives a portfolio of US ETFs and asks where its risk comes from or how its funds move together. Returns the portfolio's volatility, each position's share of the risk and of the capital, the diversification ratio, independent bets, the beta to the S&P 500, and the correlation and covariance of weekly returns over up to three years. It measures diversification by how the funds move together, not by companies held. Every fund needs a year of weekly prices, which most funds read from SEC filings do not have here. Uncovered tickers are named and skipped. A portfolio with a bond, commodity, multi-asset, sponsor-file or prospectus-only fund, or a fund read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures, comes back without figures, naming each. Past, not a forecast. Not for the companies held (get_etf_portfolio_lookthrough).", + "description": "Use this when the user gives a portfolio of US ETFs and asks where its risk comes from or how its ETFs move together. Returns the portfolio's volatility, each position's share of the risk and of the capital, the diversification ratio, independent bets, the beta to the S&P 500, and the correlation and covariance of weekly returns over up to three years. It measures diversification by how the ETFs move together, not by companies held. Every ETF needs a year of weekly prices, which most ETFs read from SEC filings do not have here. Uncovered tickers are named and skipped. A trust or pool (bitcoin, gold), a bond, multi-asset or leveraged, inverse or other derivative-based ETF counts from its own weekly prices when it has them, named in read_from_prices. Past, not a forecast. Not for the companies held (get_etf_portfolio_lookthrough).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "The currency of the amounts, for example USD or EUR. Echoed back with the values; nothing is converted. Left out, the amounts still weigh the funds and the currency reads unstated.", + "description": "The currency of the amounts, for example USD or EUR. Echoed back with the values; nothing is converted. Left out, the amounts still weigh the ETFs and the currency reads unstated.", "type": "string" }, "positions": { - "description": "The funds of the portfolio, 1 to 60, for example [{\"ticker\": \"VOO\", \"amount\": 40000}, {\"ticker\": \"QQQ\", \"amount\": 25000}] with \"currency\": \"USD\" beside it. Give an amount for every position or for none; with none, every fund counts equally.", + "description": "The ETFs of the portfolio, 1 to 60, for example [{\"ticker\": \"VOO\", \"amount\": 40000}, {\"ticker\": \"QQQ\", \"amount\": 25000}] with \"currency\": \"USD\" beside it. Give an amount for every position or for none; with none, every ETF counts equally.", "items": { "additionalProperties": false, "properties": { - "description": "Of weekly returns, rows in the order of labels.", + "description": "Weekly returns; rows in the order of labels.", "properties": { "labels": { "items": { - "not_looked_through": { - "items": { - "properties": { - "ticker": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "ticker", - "why" - ], - "type": "object" - }, - "type": "array" - }, "positions": { "items": { "properties": { + "read_from_prices": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "ticker", + "why" + ], + "type": "object" + }, + "type": "array" + }, "skipped": { "properties": { "not_covered": {
--- pinned/list_etfs +++ observed/list_etfs { "annotations": { "destructiveHint": false, - "title": "Coverage and fund search" + "title": "Coverage and ETF search" }, - "description": "Use this when the user asks whether a US ETF is covered, wants to find a fund by name or ticker, or asks how many ETFs the data covers and how recent it is. Returns the date of the data and the count of covered funds by source: the issuers' own holdings files, SEC Form N-PORT filings, trusts' filings, sponsors' files and prospectuses, and how many of the US-listed ETFs that is. With query, it returns up to 50 matching funds with their names and sources; without query, it also lists every covered ticker by source unless include_tickers is false, a long answer. Mutual funds, closed-end funds and funds listed outside the US are not covered. Not for a fund's holdings or figures (get_etf_holdings).", + "description": "Use this when the user asks whether a US ETF is covered, wants to find an ETF by name or ticker, or asks how many ETFs the data covers and how recent it is. Returns the date of the data and the count of covered ETFs by source: the issuers' own holdings files, SEC Form N-PORT filings, trusts' filings, sponsors' files and prospectuses, and how many of the US-listed ETFs that is. With query, it returns up to 50 matching ETFs with their names, sources and categories; without query, it also lists every covered ticker by source unless include_tickers is false, a long answer. Mutual funds, closed-end funds and funds listed outside the US are not covered. Not for an ETF's holdings or figures (get_etf_holdings).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "A ticker or words from a fund's name, for example VOO or semiconductor. Case does not matter.", + "description": "A ticker or words from an ETF's name, for example VOO or semiconductor. Case does not matter.", "maxLength": 60, "minLength": 1, "type": "string" - "description": "Only the funds read from the issuers' own files, only the stock ETFs from SEC filings, only the fixed income funds, only the multi-asset funds, only the derivative-based funds, only the trusts and pools, only the funds from their sponsors' files, or only the funds with only a prospectus file.", + "description": "Only the ETFs read from the issuers' own files, only the stock ETFs from SEC filings, only the fixed income ETFs, only the multi-asset ETFs, only the derivative-based ETFs, only the trusts and pools, only the ETFs from their sponsors' files, or only the ETFs with only a prospectus file.", "enum": [ "issuer_files", "sec_nport", + "category": { + "type": [ + "string", + "null" + ] + }, + "category_id": { + "type": [ + "string", + "null" + ] + }, "name": { "type": [ "string", - "title": "Coverage and fund search" + "title": "Coverage and ETF search" }
Changed 2026-10-09 13:26 UTC
1 description rewritten, 11 tools added, 10 tools removed.
+ tool added: compare_etfs
--- pinned/compare_stocks +++ observed/compare_stocks { "annotations": { "destructiveHint": false, - "description": "Use this when the user asks how two US stocks compare on size, valuation, returns, risk or correlation, or what weight and rank one stock has inside one named ETF, for example META in QQQ. For two stocks it returns market cap, P/E and dividend yield from market data, returns, volatility, worst fall, beta, the correlation of weekly returns over up to three years and the covered ETFs holding both. For a stock and a fund it returns whether the fund holds the stock, at what weight and rank among the shares it holds outright, with the date of the fund's holdings; a derivative-based fund's swaps, futures and options are in its profile (fund_profile), not here. A stock is in the data with about two years of US prices, and sooner for a recent listing a covered fund holds. Returns are past, not a forecast. Not for comparing two ETFs (compare_funds), or a company's business or products.", + "description": "Use this when the user asks how two US stocks compare on size, valuation, returns, risk or correlation, or what weight and rank one stock has inside one named ETF, for example META in QQQ. For two stocks it returns market cap, P/E and dividend yield from market data, returns, volatility, worst fall, beta, the correlation of weekly returns over up to three years and the covered ETFs holding both. For a stock and a fund it returns whether the fund holds the stock, at what weight and rank among the shares it holds outright, with the date of the fund's holdings; a derivative-based fund's swaps, futures and options are in its profile (get_etf_holdings), not here. A stock is in the data with about two years of US prices, and sooner for a recent listing a covered fund holds. Returns are past, not a forecast. Not for comparing two ETFs (compare_etfs), or a company's business or products.", "inputSchema": { "additionalProperties": false, "properties": {
+ tool added: find_etfs_holding_stock
+ tool added: get_etf_flows
+ tool added: get_etf_holdings
+ tool added: get_etf_holdings_changes
+ tool added: get_etf_holdings_history
+ tool added: get_etf_overlap_matrix
+ tool added: get_etf_ownership
+ tool added: get_etf_portfolio_lookthrough
+ tool added: get_etf_portfolio_risk
+ tool added: list_etfs
tool removed: compare_funds
tool removed: etf_ownership
tool removed: fund_changes
tool removed: fund_history
tool removed: fund_profile
tool removed: list_funds
tool removed: look_through
tool removed: overlap_matrix
tool removed: risk_decomposition
tool removed: stock_exposure
Changed 2026-10-08 13:39 UTC
11 descriptions rewritten.
--- pinned/compare_funds +++ observed/compare_funds { "annotations": { "destructiveHint": false, - "title": "Compare two US ETFs: overlap and risk" + "title": "Overlap and risk of two funds" }, - "description": "Two covered US ETFs: holdings overlap measured three ways (by weight, and the share of each fund held in common), the largest shared holdings, the correlation and covariance of weekly returns, and the cost, return and risk of each. Two fixed income funds overlap by issuer; another layer's fund is refused, with the reason.", + "description": "Use this when the user names exactly two US ETFs and asks how much they overlap, whether one duplicates the other, or how they differ in cost and risk. Returns the overlap by weight and each fund's share held in common, the largest shared holdings, the correlation of weekly returns over up to three years, and each fund's cost, return, volatility and worst fall (most funds read from SEC filings have no return or risk figures here), with both holdings dates. Two bond funds are compared by issuer overlap, option income stock funds (JEPI, QYLD) by their stocks alone. A fund read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures, a trust or pool (metal, crypto, currency, futures), a multi-asset, sponsor-file or prospectus-only fund, or a bond fund beside a stock fund is not comparable, with the reason. Not for three or more funds (overlap_matrix).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" }, "b": { - "description": "The other US ETF ticker.", + "description": "The other US ETF ticker, for example QQQ.", "type": "string" } }, - "title": "Compare two US ETFs: overlap and risk" + "outputSchema": { + "properties": { + "comparable": { + "type": "boolean" + }, + "correlation_3y": { + "type": [ + "number", + "null" + ] + }, + "covered": { + "type": "boolean" + }, + "funds": { + "additionalProperties": { + "properties": { + "beta_vs_sp500": { + "type": [ + "number", + "null" + ] + }, + "expense_ratio_pct": { + "type": [ + "number", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "return_3y_pct": { + "type": [ + "number", + "null" + ] + }, + "volatility_pct": { + "type": [ + "number", + "null" + ] + }, + "worst_fall_3y_pct": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "type": "object" + }, + "holdings_as_of": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "type": "object" + }, + "holdings_source": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "issuer_overlap": { + "description": "By issuer, in percent.", + "properties": { + "by_weight": { + "type": [ + "number", + "null" + ] + }, + "issuers_in_both": { + "type": [ + "integer", + "null" + ] + }, + "share_of_a": { + "type": [ + "number", + "null" + ] + }, + "share_of_b": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "not_comparable": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "ticker", + "why" + ], + "type": "object" + }, + "type": "array" + }, + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + }, + "overlap": { + "description": "In percent.", + "properties": { + "by_weight": { + "type": [ + "number", + "null" + ] + }, + "companies_in_both": { + "type": [ + "integer", + "null" + ] + }, + "share_of_a": { + "type": [ + "number", + "null" + ] + }, + "share_of_b": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "pair": { + "items": { + "type": "string" + }, + "type": "array" + }, + "prices_as_of": { + "type": [ + "string", + "null" + ] + }, + "source": { + "properties": { + "cite_as": { + "type": "string" + }, + "license": { + "type": "string" + }, + "links": { + "items": { + "properties": { + "api_url": { + "type": "string" + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "page_url", + "api_url" + ], + "type": "object" + }, + "type": "array" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "links", + "license", + "cite_as" + ], + "type": "object" + }, + "weeks_used": { + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + }, + "title": "Overlap and risk of two funds" }
--- pinned/compare_stocks +++ observed/compare_stocks { "annotations": { "destructiveHint": false, - "title": "Compare two US stocks, or a stock and an ETF" + "title": "Stock comparison and weight in a fund" }, - "description": "Two US stocks: market cap, valuation, returns, the covered US ETFs holding both, and with three years of prices their worst fall, volatility, beta and the correlation of their weekly returns. A fund ticker works on one side and returns whether the fund holds the stock, at what weight and rank.", + "description": "Use this when the user asks how two US stocks compare on size, valuation, returns, risk or correlation, or what weight and rank one stock has inside one named ETF, for example META in QQQ. For two stocks it returns market cap, P/E and dividend yield from market data, returns, volatility, worst fall, beta, the correlation of weekly returns over up to three years and the covered ETFs holding both. For a stock and a fund it returns whether the fund holds the stock, at what weight and rank among the shares it holds outright, with the date of the fund's holdings; a derivative-based fund's swaps, futures and options are in its profile (fund_profile), not here. A stock is in the data with about two years of US prices, and sooner for a recent listing a covered fund holds. Returns are past, not a forecast. Not for comparing two ETFs (compare_funds), or a company's business or products.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "A US stock ticker, for example NVDA. An ETF ticker also works.", + "description": "A US stock ticker, for example NVDA. An ETF ticker also works on one side, for example QQQ.", "type": "string" }, "b": { - "description": "The other ticker.", + "description": "The other ticker, for example AMD.", "type": "string" } }, - "title": "Compare two US stocks, or a stock and an ETF" + "outputSchema": { + "patternProperties": { + "^[A-Z0-9.\\-^=/ *&]{1,16}$": { + "properties": { + "beta": { + "description": "Over three years.", + "type": [ + "number", + "null" + ] + }, + "dividend_yield_pct": { + "type": [ + "number", + "null" + ] + }, + "expense_ratio_pct": { + "type": [ + "number", + "null" + ] + }, + "kind": { + "enum": [ + "stock", + "fund" + ], + "type": "string" + }, + "market_cap_bn": { + "type": [ + "number", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "pe": { + "type": [ + "number", + "null" + ] + }, + "return_1y_pct": { + "type": [ + "number", + "null" + ] + }, + "return_3y_pct": { + "type": [ + "number", + "null" + ] + }, + "volatility_pct": { + "type": [ + "number", + "null" + ] + }, + "worst_fall_3y_pct": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "kind" + ], + "type": "object" + } + }, + "properties": { + "correlation_3y": { + "type": [ + "number", + "null" + ] + }, + "covered": { + "type": "boolean" + }, + "funds_holding_both": { + "items": { + "properties": { + "fund": { + "type": "string" + }, + "holdings_as_of": { + "type": [ + "string", + "null" + ] + }, + "weight_a_pct": { + "type": [ + "number", + "null" + ] + }, + "weight_b_pct": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "fund" + ], + "type": "object" + }, + "type": "array" + }, + "funds_holding_both_count": { + "type": [ + "integer", + "null" + ] + }, + "membership": { + "description": "For a stock and a fund.", + "properties": { + "holdings_as_of": { + "type": [ + "string", + "null" + ] + }, + "in_fund": { + "type": "boolean" + }, + "rank": { + "type": [ + "integer", + "null" + ] + }, + "weight_pct": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "in_fund" + ], + "type": "object" + }, + "not_in_data": { + "items": { + "type": "string" + }, + "type": "array" + }, + "pair": { + "items": { + "type": "string" + }, + "type": "array" + }, + "prices_as_of": { + "type": [ + "string", + "null" + ] + }, + "source": { + "properties": { + "api_urls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "license": { + "type": "string" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "license", + "api_urls" + ], + "type": "object" + }, + "weeks_used": { + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + }, + "title": "Stock comparison and weight in a fund" }
--- pinned/etf_ownership +++ observed/etf_ownership { "annotations": { "destructiveHint": false, - "title": "How much of a US stock the covered ETFs own" + "title": "ETF ownership of a stock" }, - "description": "For one US stock, the share of its shares outstanding held by the covered US ETFs, as a lower bound: at least this percent, from this many funds. It gives the shares held, the SEC's count of shares outstanding and its date, the holdings dates and the method. The basis says whether the percent is of the whole company, every class counted, or of the ticker's class alone. Also where the figure ranks by percent among those measured, and the share of the covered US stock ETFs' money in the ten largest US companies they hold, a company without a stock file here included. A stock without a figure comes back with the reason.", + "description": "Use this when the user asks how much of a US company ETFs own, or what share of its stock sits in ETFs. Returns a lower bound: at least this percent of the shares outstanding is held by the covered US ETFs, from this many funds, with the shares held, the SEC's count of shares outstanding and its date, the holdings dates, the method, whether the percent is of the whole company or of the ticker's class, and where the figure ranks among the stocks measured. It is a lower bound because ETFs outside the coverage are not counted. A stock without a figure comes back with the reason. Not for the list of funds that hold the stock (stock_exposure).", "inputSchema": { "additionalProperties": false, "properties": { - "title": "How much of a US stock the covered ETFs own" + "outputSchema": { + "properties": { + "basis": { + "description": "company when every class is counted, class when the ticker's class alone is.", + "type": [ + "string", + "null" + ] + }, + "covered": { + "type": "boolean" + }, + "etf_ownership_pct_at_least": { + "description": "The percent of the shares outstanding held by the covered US ETFs, at least.", + "type": [ + "number", + "null" + ] + }, + "figure": { + "type": "boolean" + }, + "holdings_as_of": { + "properties": { + "newest": { + "type": [ + "string", + "null" + ] + }, + "oldest": { + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "market": { + "properties": { + "rank_by_pct_held": { + "description": "1 for the stock most held by percent.", + "type": [ + "integer", + "null" + ] + }, + "stocks_with_a_figure": { + "type": [ + "integer", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "shares_held_by_covered_etfs": { + "type": [ + "number", + "null" + ] + }, + "shares_outstanding": { + "type": [ + "number", + "null" + ] + }, + "shares_outstanding_as_of": { + "type": [ + "string", + "null" + ] + }, + "source": { + "properties": { + "api_url": { + "type": "string" + }, + "license": { + "type": "string" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "api_url", + "license" + ], + "type": "object" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "figure" + ], + "type": "object" + }, + "title": "ETF ownership of a stock" }
--- pinned/fund_changes +++ observed/fund_changes { "annotations": { "destructiveHint": false, - "title": "What a US ETF added, dropped and reweighted" + "title": "Fund holdings changes" }, - "description": "The changes in one US ETF's holdings from one issuer file to the next: the lines that entered and exited with their weights, largest first, and the lines whose weight moved by 0.05 points or more, before and after. It covers every step since a date, or the latest step when no date is given. Each step names the file it is compared with and gives its turnover measures. Lines held two files earlier are marked as reverted; a step across a change of the keys or of the reading of the file is marked restated and lists no trades.", + "description": "Use this when the user asks what a US ETF bought, sold, added or dropped, or how the weights of its holdings changed, recently or since a date. Returns, for each step from one issuer file to the next, the lines that entered and exited with their weights and the lines whose weight moved by 0.05 points or more, before and after, which includes price moves and not only trades, with the turnover measures; the latest step when no date is given. Kept for the stock ETFs read from their issuers' own files, daily for most and monthly for Vanguard; another fund comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated and lists no trades. Not for a fund's holdings on one date (fund_profile) or its overlap over time (fund_history).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Only the steps to a file dated on or after this date, YYYY-MM-DD.", + "description": "Only the steps to a file dated on or after this date, written YYYY-MM-DD, for example 2026-09-15.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" } }, - "title": "What a US ETF added, dropped and reweighted" + "outputSchema": { + "properties": { + "covered": { + "type": "boolean" + }, + "first_file": { + "type": [ + "string", + "null" + ] + }, + "history": { + "type": "boolean" + }, + "last_file": { + "type": [ + "string", + "null" + ] + }, + "moved_threshold_pp": { + "type": [ + "number", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "source": { + "properties": { + "api_url": { + "type": "string" + }, + "license": { + "type": [ + "string", + "null" + ] + }, + "provider": { + "type": "string" + }, + "terms": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "provider", + "api_url" + ], + "type": "object" + }, + "steps": { + "description": "Oldest first, the lines of each step largest first.", + "items": { + "properties": { + "date": { + "type": [ + "string", + "null" + ] + }, + "entered": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "weight_pct": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "entered_count": { + "type": [ + "integer", + "null" + ] + }, + "exited": { + "items": { + "properties": { + "previous_weight_pct": { + "type": [ + "number", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "exited_count": { + "type": [ + "integer", + "null" + ] + }, + "moved": { + "items": { + "properties": { + "after_pct": { + "type": [ + "number", + "null" + ] + }, + "before_pct": { + "type": [ + "number", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "moved_count": { + "type": [ + "integer", + "null" + ] + }, + "names_turnover_pp": { + "type": [ + "number", + "null" + ] + }, + "previous": { + "type": [ + "string", + "null" + ] + }, + "restated": { + "type": "boolean" + }, + "traded_pp": { + "type": [ + "number", + "null" + ] + }, + "weights_moved_pp": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "ticker": { + "type": "string" + } + }, + "type": "object" + }, + "title": "Fund holdings changes" }
--- pinned/fund_history +++ observed/fund_history { "annotations": { "destructiveHint": false, - "title": "A US ETF's holdings history, file by file" + "title": "Fund holdings history" }, - "description": "One US ETF read from its issuer's own files: every file date the archive holds, with the position count and the top 10 weight. Each step from a file to the next says how many lines entered, exited and moved, the weight of the names that changed and the weight that moved. The share-count turnover follows once enough files carry share counts. It also shows how the fund's overlap by weight with its ten closest funds moved over those dates. Each step names the file it is compared with; a step across a change of the keys or of the reading of the file is marked restated.", + "description": "Use this when the user asks how a US ETF's holdings evolved over time, how often its holdings file changes, or how its overlap with its closest funds moved. Returns every archived file date of the fund with its position count and top 10 weight, each step with the count of lines that entered, exited and changed weight and its turnover measures, and the overlap by weight over those dates with its ten closest funds. Kept for the stock ETFs read from their issuers' own files, from each fund's first archived file: 1 September 2026 at the earliest for the daily files, 31 July 2026 for Vanguard's monthly files; another fund comes back with the reason it has no history. A step across a change in how the files are keyed or read is marked restated, not traded. Not for the lines one step added or dropped (fund_changes).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Only the steps to a file dated on or after this date, YYYY-MM-DD.", + "description": "Only the steps to a file dated on or after this date, written YYYY-MM-DD, for example 2026-09-15.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" }, - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" } }, - "title": "A US ETF's holdings history, file by file" + "outputSchema": { + "properties": { + "cadence": { + "type": [ + "string", + "null" + ] + }, + "covered": { + "type": "boolean" + }, + "file_dates": { + "type": [ + "integer", + "null" + ] + }, + "files": { + "description": "Oldest first.", + "items": { + "properties": { + "holdings_as_of": { + "type": [ + "string", + "null" + ] + }, + "positions": { + "type": [ + "integer", + "null" + ] + }, + "top10_weight_pct": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "first_file": { + "type": [ + "string", + "null" + ] + }, + "history": { + "type": "boolean" + }, + "last_file": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "overlap_by_weight_pct": { + "additionalProperties": { + "description": "[date, percent] pairs, oldest first.", + "items": { + "type": "array" + }, + "type": "array" + }, + "type": "object" + }, + "source": { + "properties": { + "api_url": { + "type": "string" + }, + "license": { + "type": [ + "string", + "null" + ] + }, + "provider": { + "type": "string" + }, + "terms": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "provider", + "api_url" + ], + "type": "object" + }, + "steps": { + "description": "Oldest first.", + "items": { + "properties": { + "date": { + "type": [ + "string", + "null" + ] + }, + "entered": { + "type": [ + "integer", + "null" + ] + }, + "exited": { + "type": [ + "integer", + "null" + ] + }, + "moved": { + "type": [ + "integer", + "null" + ] + }, + "names_turnover_pp": { + "type": [ + "number", + "null" + ] + }, + "previous": { + "type": [ + "string", + "null" + ] + }, + "restated": { + "type": "boolean" + }, + "traded_pp": { + "type": [ + "number", + "null" + ] + }, + "weights_moved_pp": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "ticker": { + "type": "string" + } + }, + "type": "object" + }, + "title": "Fund holdings history" }
--- pinned/fund_profile +++ observed/fund_profile { "annotations": { "destructiveHint": false, - "title": "US ETF holdings and profile" + "title": "Fund holdings and profile" }, - "description": "One US ETF: its holdings with weights, largest first, and its cost, assets, returns over one, three and five years, volatility, beta, worst fall and concentration. Every figure carries the date of the issuer file, SEC filing or prices it came from. A fixed income ETF gives its lines by issuer, coupon, maturity and duration; a derivative-based ETF its contracts as notional exposure, never shares held; a trust or pool, what its filing says it holds.", + "description": "Use this when the user asks what one US ETF holds, or its cost, size, returns and risk. Returns the holdings largest first with their weights, the expense ratio, assets, top 10 weight, returns over one, three and five years, volatility, beta and worst fall, with each file's date; most funds read from SEC filings have no return or risk figures here. Returns are past, not a forecast. A bond fund gives its lines by issuer, coupon and maturity, with duration; a fund read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures lists its shares, and its contracts apart as notional exposure; an option income fund read as a stock fund (JEPI, QYLD) lists its stocks, not its options or notes; a trust gives what its filing says it holds; a prospectus-only fund its objective. Not for comparing funds (compare_funds) or the funds holding a stock (stock_exposure).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "How many of the largest holdings to return. 0 for none.", + "description": "How many of the largest holdings to return, from 0 to 500; 25 when left out. 0 returns the figures without holdings.", "maximum": 500, "minimum": 0, "type": "integer" - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" } }, - "title": "US ETF holdings and profile" + "outputSchema": { + "properties": { + "aum_billions": { + "description": "In billions of US dollars.", + "type": [ + "number", + "null" + ] + }, + "beta_vs_sp500": { + "type": [ + "number", + "null" + ] + }, + "covered": { + "type": "boolean" + }, + "expense_ratio_pct": { + "type": [ + "number", + "null" + ] + }, + "holdings": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "weight_pct": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "ticker", + "weight_pct" + ], + "type": "object" + }, + "type": "array" + }, + "holdings_as_of": { + "type": [ + "string", + "null" + ] + }, + "holdings_source": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + }, + "positions": { + "type": [ + "integer", + "null" + ] + }, + "prices_as_of": { + "type": [ + "string", + "null" + ] + }, + "return_1y_pct": { + "type": [ + "number", + "null" + ] + }, + "return_3y_pct": { + "type": [ + "number", + "null" + ] + }, + "return_5y_pct": { + "type": [ + "number", + "null" + ] + }, + "source": { + "properties": { + "cite_as": { + "type": "string" + }, + "license": { + "type": "string" + }, + "links": { + "items": { + "properties": { + "api_url": { + "type": "string" + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "page_url", + "api_url" + ], + "type": "object" + }, + "type": "array" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "links", + "license", + "cite_as" + ], + "type": "object" + }, + "ticker": { + "type": "string" + }, + "top_10_weight_pct": { + "type": [ + "number", + "null" + ] + }, + "volatility_pct": { + "type": [ + "number", + "null" + ] + }, + "worst_fall_3y_pct": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "title": "Fund holdings and profile" }
--- pinned/list_funds +++ observed/list_funds { "annotations": { "destructiveHint": false, - "title": "List covered US ETFs" + "title": "Coverage and fund search" }, - "description": "The ETFs this server can answer for, with the date of the data and how many of the US-listed ETFs that is. Holdings come from the issuers' own daily files (tickers), from SEC filings (tickers_sec_nport, tickers_bond, tickers_multi_asset, tickers_derivative), from a trust's own filing (tickers_trust) or from a sponsor (tickers_sponsor). With query it returns only the funds whose ticker or name matches; include_tickers false leaves out the lists.", + "description": "Use this when the user asks whether a US ETF is covered, wants to find a fund by name or ticker, or asks how many ETFs the data covers and how recent it is. Returns the date of the data and the count of covered funds by source: the issuers' own holdings files, SEC Form N-PORT filings, trusts' filings, sponsors' files and prospectuses, and how many of the US-listed ETFs that is. With query, it returns up to 50 matching funds with their names and sources; without query, it also lists every covered ticker by source unless include_tickers is false, a long answer. Mutual funds, closed-end funds and funds listed outside the US are not covered. Not for a fund's holdings or figures (fund_profile).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "false leaves out the ticker lists.", + "description": "Whether an answer without query lists every covered ticker, by source, and only those of source when it is given. true or left out adds the lists, a long answer; false returns the counts and dates alone.", "type": "boolean" }, "query": { - "title": "List covered US ETFs" + "outputSchema": { + "properties": { + "as_of": { + "type": [ + "string", + "null" + ] + }, + "funds_by_source": { + "additionalProperties": { + "type": [ + "integer", + "null" + ] + }, + "type": "object" + }, + "funds_covered": { + "type": [ + "integer", + "null" + ] + }, + "issuers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "match_count": { + "type": [ + "integer", + "null" + ] + }, + "matches": { + "items": { + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "source": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "source" + ], + "type": "object" + }, + "type": "array" + }, + "source": { + "properties": { + "api_url": { + "type": "string" + }, + "license": { + "type": "string" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "api_url", + "license" + ], + "type": "object" + }, + "us_listed_etfs": { + "properties": { + "covered": { + "type": [ + "integer", + "null" + ] + }, + "directory_of": { + "type": [ + "string", + "null" + ] + }, + "listed": { + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "funds_covered", + "funds_by_source", + "issuers", + "source" + ], + "type": "object" + }, + "title": "Coverage and fund search" }
--- pinned/look_through +++ observed/look_through { "annotations": { "destructiveHint": false, - "title": "Look through a portfolio of ETFs to its holdings" + "title": "Companies inside a portfolio" }, - "description": "Look through a list of US ETFs to the companies underneath: how much of each company the portfolio holds, in percent and in money when amounts are given, and which funds it comes through. Uncovered funds are listed and left out of the percentages.", + "description": "Use this when the user gives a portfolio of US ETFs and asks which companies they own, how much of one company they hold, or how concentrated it is. Returns the companies underneath, each with its percent of what is looked through, its value when amounts are given and the funds it comes through, plus the company count and top 10 weight; for one company, raise top until it shows, up to 200. It measures diversification by single companies, not by how funds move together. Without amounts, every fund counts equally. Uncovered tickers (US stocks among them), bond, commodity, multi-asset, sponsor-file and prospectus-only funds, and funds read from SEC filings that are leveraged, inverse, under half in stock or half in swaps and futures are named and left out of the percentages and the value. Amounts are not stored. Not for duplicate funds (overlap_matrix) or risk (risk_decomposition).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "The currency of the amounts, for example USD. Echoed back; nothing is converted.", + "description": "The currency of the amounts, for example USD or EUR. Echoed back with the values; nothing is converted. Left out, the amounts still weigh the funds and the currency reads unstated.", "type": "string" }, "positions": { - "description": "The funds in the portfolio. Amounts are optional; with none, every fund counts equally.", + "description": "The funds of the portfolio, 1 to 60, for example [{\"ticker\": \"VOO\", \"amount\": 40000}, {\"ticker\": \"QQQ\", \"amount\": 25000}] with \"currency\": \"USD\" beside it. Give an amount for every position or for none; with none, every fund counts equally.", "items": { "additionalProperties": false, "properties": { - "description": "What this line is worth, in one currency for all lines.", + "description": "What this line is worth, in the same unit on every line, for example 40000. Only the proportions between lines count for the percentages.", "exclusiveMinimum": 0, "type": "number" }, - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" } }, - "description": "How many companies to return.", + "description": "How many companies to return, largest first, from 1 to 200; 25 when left out.", "maximum": 200, "minimum": 1, "type": "integer" - "title": "Look through a portfolio of ETFs to its holdings" + "outputSchema": { + "properties": { + "companies": { + "description": "Largest first, value in the currency of the amounts.", + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "value": { + "type": [ + "number", + "null" + ] + }, + "weight_pct": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "ticker", + "weight_pct" + ], + "type": "object" + }, + "type": "array" + }, + "computed": { + "type": "boolean" + }, + "covered": { + "type": "boolean" + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "distinct_companies": { + "type": [ + "integer", + "null" + ] + }, + "funds": { + "type": [ + "integer", + "null" + ] + }, + "holdings_as_of": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "type": "object" + }, + "holdings_source": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + }, + "not_looked_through": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "ticker", + "why" + ], + "type": "object" + }, + "type": "array" + }, + "portfolio_value": { + "type": [ + "number", + "null" + ] + }, + "priced": { + "type": "boolean" + }, + "prices_as_of": { + "type": [ + "string", + "null" + ] + }, + "skipped": { + "properties": { + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "source": { + "properties": { + "cite_as": { + "type": "string" + }, + "license": { + "type": "string" + }, + "links": { + "items": { + "properties": { + "api_url": { + "type": "string" + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "page_url", + "api_url" + ], + "type": "object" + }, + "type": "array" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "links", + "license", + "cite_as" + ], + "type": "object" + }, + "top_10_weight_pct": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "title": "Companies inside a portfolio" }
--- pinned/overlap_matrix +++ observed/overlap_matrix { "annotations": { "destructiveHint": false, - "title": "ETF overlap across a list of funds" + "title": "Overlap across many funds" }, - "description": "Every pair in a list of 2 to 30 US ETFs, ranked by overlap by weight, to see which funds in a portfolio duplicate each other. Fixed income funds are paired by issuer overlap, listed apart. Uncovered tickers are listed and skipped.", + "description": "Use this when the user lists three to thirty US ETFs, often a portfolio, and asks which of them duplicate each other or whether the list is diversified across companies; two give one pair. Returns every pair ranked by overlap by weight, with the share of each fund held in common and the count of companies in both, and the holdings date and source of each fund in those pairs. It measures diversification by the holdings the funds share, not by how their returns move together. Bond funds are paired by issuer overlap and listed apart. Uncovered tickers are named and skipped; commodity, multi-asset, sponsor-file and prospectus-only funds and funds read from SEC filings that are leveraged, inverse, under half in stock or half in swaps and futures are listed as not comparable, each with its reason. Not for the companies underneath (look_through) or how funds move together (risk_decomposition).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "2 to 30 US ETF tickers.", + "description": "2 to 30 US ETF tickers, for example [\"VOO\", \"QQQ\", \"SCHD\"]: three or more give the matrix, two give one pair.", "items": { - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" }, "maxItems": 30, - "title": "ETF overlap across a list of funds" + "outputSchema": { + "properties": { + "computed": { + "type": "boolean" + }, + "covered": { + "type": "boolean" + }, + "holdings_as_of": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "type": "object" + }, + "holdings_source": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "issuer_overlap_pairs": { + "description": "By issuer, in percent, largest first.", + "items": { + "properties": { + "by_weight": { + "type": [ + "number", + "null" + ] + }, + "issuers_in_both": { + "type": [ + "integer", + "null" + ] + }, + "pair": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "pair", + "by_weight" + ], + "type": "object" + }, + "type": "array" + }, + "not_comparable": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "ticker", + "why" + ], + "type": "object" + }, + "type": "array" + }, + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + }, + "pairs": { + "description": "In percent, largest first.", + "items": { + "properties": { + "by_weight": { + "type": [ + "number", + "null" + ] + }, + "companies_in_both": { + "type": [ + "integer", + "null" + ] + }, + "pair": { + "items": { + "type": "string" + }, + "type": "array" + }, + "share_of_first": { + "type": [ + "number", + "null" + ] + }, + "share_of_second": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "pair", + "by_weight" + ], + "type": "object" + }, + "type": "array" + }, + "prices_as_of": { + "type": [ + "string", + "null" + ] + }, + "skipped": { + "properties": { + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "source": { + "properties": { + "cite_as": { + "type": "string" + }, + "license": { + "type": "string" + }, + "links": { + "items": { + "properties": { + "api_url": { + "type": "string" + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "page_url", + "api_url" + ], + "type": "object" + }, + "type": "array" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "links", + "license", + "cite_as" + ], + "type": "object" + } + }, + "type": "object" + }, + "title": "Overlap across many funds" }
--- pinned/risk_decomposition +++ observed/risk_decomposition { "annotations": { "destructiveHint": false, - "title": "Where an ETF portfolio's risk comes from" + "title": "Portfolio risk breakdown" }, - "description": "For a list of US ETFs: portfolio volatility, each position's share of the risk (Euler decomposition, summing to 100), the diversification ratio, and the correlation and covariance matrices of weekly returns over up to three years.", + "description": "Use this when the user gives a portfolio of US ETFs and asks where its risk comes from or how its funds move together. Returns the portfolio's volatility, each position's share of the risk and of the capital, the diversification ratio, independent bets, the beta to the S&P 500, and the correlation and covariance of weekly returns over up to three years. It measures diversification by how the funds move together, not by companies held. Every fund needs a year of weekly prices, which most funds read from SEC filings do not have here. Uncovered tickers are named and skipped. A portfolio with a bond, commodity, multi-asset, sponsor-file or prospectus-only fund, or a fund read from SEC filings that is leveraged, inverse, under half in stock or half in swaps and futures, comes back without figures, naming each. Past, not a forecast. Not for the companies held (look_through).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "The currency of the amounts, for example USD. Echoed back; nothing is converted.", + "description": "The currency of the amounts, for example USD or EUR. Echoed back with the values; nothing is converted. Left out, the amounts still weigh the funds and the currency reads unstated.", "type": "string" }, "positions": { - "description": "The funds in the portfolio. Amounts are optional; with none, every fund counts equally.", + "description": "The funds of the portfolio, 1 to 60, for example [{\"ticker\": \"VOO\", \"amount\": 40000}, {\"ticker\": \"QQQ\", \"amount\": 25000}] with \"currency\": \"USD\" beside it. Give an amount for every position or for none; with none, every fund counts equally.", "items": { "additionalProperties": false, "properties": { - "description": "What this line is worth, in one currency for all lines.", + "description": "What this line is worth, in the same unit on every line, for example 40000. Only the proportions between lines count for the percentages.", "exclusiveMinimum": 0, "type": "number" }, - "description": "A US ETF ticker, for example VOO. Case does not matter.", + "description": "A US ETF ticker, for example VOO or SCHD. Case does not matter.", "type": "string" } }, - "title": "Where an ETF portfolio's risk comes from" + "outputSchema": { + "properties": { + "beta_vs_sp500_1y": { + "type": [ + "number", + "null" + ] + }, + "beta_vs_sp500_3y": { + "type": [ + "number", + "null" + ] + }, + "computed": { + "type": "boolean" + }, + "correlation": { + "description": "Of weekly returns, rows in the order of labels.", + "properties": { + "labels": { + "items": { + "type": "string" + }, + "type": "array" + }, + "rows": { + "items": { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + "type": "array" + } + }, + "type": "object" + }, + "covered": { + "type": "boolean" + }, + "currency": { + "type": [ + "string", + "null" + ] + }, + "diversification_ratio": { + "type": [ + "number", + "null" + ] + }, + "holdings_as_of": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "type": "object" + }, + "holdings_source": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "independent_bets": { + "type": [ + "number", + "null" + ] + }, + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + }, + "not_looked_through": { + "items": { + "properties": { + "ticker": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "ticker", + "why" + ], + "type": "object" + }, + "type": "array" + }, + "positions": { + "items": { + "properties": { + "share_of_capital_pct": { + "type": [ + "number", + "null" + ] + }, + "share_of_risk_pct": { + "type": [ + "number", + "null" + ] + }, + "ticker": { + "type": "string" + }, + "value": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "ticker", + "share_of_capital_pct", + "share_of_risk_pct" + ], + "type": "object" + }, + "type": "array" + }, + "prices_as_of": { + "type": [ + "string", + "null" + ] + }, + "skipped": { + "properties": { + "not_covered": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "source": { + "properties": { + "cite_as": { + "type": "string" + }, + "license": { + "type": "string" + }, + "links": { + "items": { + "properties": { + "api_url": { + "type": "string" + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "page_url", + "api_url" + ], + "type": "object" + }, + "type": "array" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "links", + "license", + "cite_as" + ], + "type": "object" + }, + "volatility_pct": { + "description": "Annualised.", + "type": [ + "number", + "null" + ] + }, + "weeks_used": { + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + }, + "title": "Portfolio risk breakdown" }
--- pinned/stock_exposure +++ observed/stock_exposure { "annotations": { "destructiveHint": false, - "title": "Which US ETFs hold a stock, and at what weight" + "title": "ETFs that hold a stock" }, - "description": "For one stock, the covered US ETFs that hold it and the weight in each, heaviest first. Each holder carries its holdings date, its source (the issuer's daily file or an SEC filing), the stock's rank in the fund and the dollars held. Returns the largest holders and the total count, how many funds have it as their largest holding, and the funds with the most dollars in it. It also says whether the stock is in VOO, SPY, IVV, QQQ, VTI, SCHD and the largest sector funds. It adds the issuers holding the most, the cheapest exposure per $1,000, funds whose name only shares the company's, and one sentence to quote. Leveraged, inverse and option-income funds that reference the stock through swaps, futures or options are listed apart, as notional exposure, never shares held.", + "description": "Use this when the user asks which ETFs hold a stock, which fund holds the most of it, how many funds hold it, or whether it is in VOO, SPY, IVV, QQQ, VTI or SCHD. Returns the covered US ETFs that hold it, sorted by the stock's weight in each fund, largest first, each with its weight, rank, dollars, holdings date and source, plus the count, how many funds hold it as their largest position, the funds and issuers with the most dollars in it, and one sentence to quote. The list keeps the heaviest holders, so a broad fund where the stock weighs little can fall outside it; whether the six funds above hold it is in every answer for a stock with its own stock file, whatever top is, unless compact is true. Funds holding it through swaps, futures or options are listed apart, as notional exposure. Not for one stock's weight in another fund (compare_stocks) or the share ETFs own (etf_ownership).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "true for the counts, rank_summary, name_collision and the sentence to quote, without top_by_value, membership, by_issuer and fee_per_1000 and without each fund's rank, positions and value: about half the length.", + "description": "true for an answer about half the length. It keeps the counts, rank_summary (how many funds hold the stock as their largest or a top 10 position), name_collision (funds whose name contains the company's name) and the sentence to quote. It leaves out top_by_value (the funds holding the most dollars of it), membership (whether VOO, SPY, IVV, QQQ, VTI and SCHD hold it, and its weight in the three largest sector or industry funds that hold it), by_issuer (the issuers holding the most dollars), fee_per_1000 (the yearly cost, in the cheapest funds, of each $1,000 of the stock held through them) and each fund's rank, positions and value.", "type": "boolean" }, "ticker": { - "description": "A stock ticker, for example NVDA. A line listed outside the US carries its market after a dot, for example 7203.JP (Toyota in Tokyo), SAN.FR (Sanofi in Paris) or 005930.KR (Samsung Electronics); an earlier key without the market, such as 7203, is read as the key it became. A key ending in .PFD is not a market: it is the issuer's preferred shares, a US line apart from the common stock (JPM.PFD, held by preferred stock funds).", + "description": "The stock's ticker, not the company name, for example NVDA for Nvidia. A line listed outside the US carries its market after a dot, for example 7203.JP (Toyota in Tokyo), SAN.FR (Sanofi in Paris) or 005930.KR (Samsung Electronics); an earlier key without the market, such as 7203, is read as the key it became. A key ending in .PFD is not a market: it is the issuer's preferred shares, a US line apart from the common stock (JPM.PFD, held by preferred stock funds).", "type": "string" }, "top": { - "description": "How many funds to return, heaviest first.", + "description": "How many funds to return, sorted by the stock's weight in each fund, largest first, from 1 to 200; 50 when left out.", "maximum": 200, "minimum": 1, "type": "integer" - "title": "Which US ETFs hold a stock, and at what weight" + "outputSchema": { + "properties": { + "answer": { + "description": "One sentence to quote.", + "type": [ + "string", + "null" + ] + }, + "funds_by_source": { + "properties": { + "issuer_files": { + "type": [ + "integer", + "null" + ] + }, + "sec_nport": { + "description": "null when the SEC filings were not searched.", + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + }, + "funds_holding": { + "type": [ + "integer", + "null" + ] + }, + "held": { + "type": "boolean" + }, + "held_by": { + "description": "Largest weight first.", + "items": { + "properties": { + "fund": { + "type": "string" + }, + "holdings_as_of": { + "type": [ + "string", + "null" + ] + }, + "holdings_source": { + "type": "string" + }, + "value_usd_m": { + "type": [ + "number", + "null" + ] + }, + "weight_pct": { + "description": "The stock's weight in the fund.", + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "fund", + "weight_pct" + ], + "type": "object" + }, + "type": "array" + }, + "membership": { + "items": { + "properties": { + "fund": { + "type": "string" + }, + "held": { + "type": "boolean" + }, + "weight": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "rank_summary": { + "properties": { + "top10_in": { + "type": [ + "integer", + "null" + ] + }, + "top_holding_in": { + "type": [ + "integer", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "source": { + "properties": { + "api_url": { + "type": "string" + }, + "cite_as": { + "type": "string" + }, + "license": { + "type": "string" + }, + "page_url": { + "type": [ + "string", + "null" + ] + }, + "provider": { + "type": "string" + } + }, + "required": [ + "provider", + "page_url", + "api_url", + "license", + "cite_as" + ], + "type": "object" + }, + "ticker": { + "type": "string" + } + }, + "required": [ + "ticker", + "funds_holding" + ], + "type": "object" + }, + "title": "ETFs that hold a stock" }
Current tools
Show all 13 tool fingerprints
Watch this server yourself
If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.
npx -y mcp-pin@0.2.3 -- <your tickerinside-mcp command>
Or subscribe to this page's RSS feed to be told when it changes.
Badge
The badge states one fact about time and nothing else. It never claims a server is safe.
[](https://mcp-pin.gautamkhosla.com/servers/7926d7d9b971db44.html)