Skip to main content
Glama
JerBouma

Finance Toolkit

etf

Read-onlyIdempotent

Analyze exchange-traded funds and other funds to retrieve holdings, profiles, sector and country weightings, tracking metrics, concentration, overlap, and liquidity by ticker.

Instructions

Analysis of ETFs and other funds. Requires tickers='VOO' — use comma-separated values for several funds; tickers that are not an ETF or fund return no data. get_holdings: the 25 largest holdings of each fund by weight (shares, weight and market value) unless limit= asks for more, limit=-10 for the smallest; the holdings carry no sector or country, so use get_sector_weightings and get_country_weightings for those breakdowns, or the Finance Database server to classify the holdings. get_information: everything published about each fund, including its identifiers, description and website. get_profile: name, issuer, asset class, domicile, inception date, expense ratio, assets under management, NAV, latest price, premium/discount to NAV (the close of the NAV's own date against the NAV; empty for a NAV that is not current unless stale_nav=true), holdings count and average (dollar) volume. get_tracking: tracking difference (annualized return gap, about minus the expense ratio for an index fund), tracking error, correlation, beta and R Squared against benchmark_ticker (set it to the fund's index or another fund of the same index, e.g. benchmark_ticker='SPY' for VOO); yearly=true gives the gap per calendar year. get_concentration: number of holdings, largest holding, top 10 weight, Herfindahl-Hirschman index and effective number of holdings. get_overlap: the overlap of every pair of funds (sum of the smaller weight over shared holdings). get_look_through_valuation: weighted (harmonic) P/E, P/B, P/S and P/FCF, dividend yield and net margin of the largest holdings (holdings=25) with the coverage. get_liquidity: average volume and dollar volume, dollar volume to assets and the price impact per $100 million traded (Amihud).

Input Schema

NameRequiredDescriptionDefault
limitNoThe rows to return, like head and tail: 5 for the first five, -5 for the last five (the most recent of a time series). A table with its periods as columns (financial statements, ratios) keeps its first or last periods instead. For ETF holdings the largest (or, negative, the smallest) by weight, and for a list (e.g. news or a screener) its length. Leave unset to use the default of the indicator you selected. Defaults are 25 for get_holdings.
periodNoObservation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method).daily
yearlyNoWhether to return the tracking difference per year.
tickersNoComma-separated ticker symbols, e.g. 'AAPL,MSFT,GOOGL'.
end_dateNoEnd of the date range in YYYY-MM-DD format.2026-10-27
holdingsNoThe number of largest holdings to value per fund.
indicatorYesName of the specific metric to calculate, one of the listed values. Required — search_metrics finds the indicator (and its tool) for a metric by name.
quarterlyNoReturn quarterly data instead of annual when True.
stale_navNoWhether to give the premium for a NAV that is not current, comparing it with the nearest close available.
start_dateNoStart of the date range in YYYY-MM-DD format.2021-10-28
show_columnsNoComma-separated names to filter the output. For historical data use the key names visible in any response record (e.g. 'Close,Volume,Return'). For financial statements use the 'metric' field values from the response (e.g. 'Revenue,Net Income,EBITDA'). Call the tool once without this parameter to see all available names, then repeat with show_columns to reduce response size and token usage.
benchmark_tickerNoTicker used as the market benchmark, e.g. 'SPY' or '^GSPC'.SPY

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv2.3.0

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent, and the description adds substantial beyond-schema behavior: holdings default to the 25 largest, negative limit returns the smallest, non-fund tickers return no data, premium/discount is computed against the NAV's own date close and is empty for stale NAVs unless stale_nav=true, and look-through valuation reports coverage. These are exactly the edge cases an agent would otherwise mis-handle.

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

Conciseness4/5

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

It is long, but the length is justified by ten distinct indicators and the text is front-loaded with the required tickers rule before the per-indicator detail. The single dense paragraph with inline colon-delimited labels is harder to scan than a bulleted breakdown would be, which is the only real cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% parameter coverage, the description's remaining burden is domain semantics, and it covers every listed indicator plus the tricky behaviors (stale NAVs, negative limits, benchmark choice, coverage reporting). An agent has everything needed to select an indicator and call it correctly.

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

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the floor, and the description earns more: it explains limit semantics in domain terms (limit=-10 gives the smallest holdings), tells the agent to set benchmark_ticker to the fund's index or a same-index fund with a concrete example (SPY for VOO), and clarifies yearly=true yields per-calendar-year tracking difference. The remaining parameters (period, show_columns, start_date) are left entirely to the schema.

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

Purpose4/5

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

The description states the resource (ETFs and other funds) and enumerates ten concrete analyses via the indicator enum, each with a one-line definition, so an agent knows exactly what the tool yields. It does not, however, differentiate itself from sibling tools such as 'overlap' and 'liquidity', which appear to overlap with its own get_overlap/get_liquidity indicators.

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

Usage Guidelines4/5

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

It gives a concrete usage constraint ("Requires tickers='VOO'", non-ETF tickers return no data) and routes sub-needs elsewhere: get_sector_weightings/get_country_weightings for sector/country, the Finance Database server for classification, and search_metrics for finding an indicator. It never states when to prefer the etf tool over the standalone 'overlap' or 'liquidity' siblings, so tool-level selection still requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.