Skip to main content
Glama
JerBouma

Finance Toolkit

volatility

Read-onlyIdempotent

Calculate Bollinger Bands, Keltner/Donchian Channels, True Range, ATR, Supertrend, and a cone directly from price data—no separate price fetch needed.

Instructions

Volatility technical indicators (Bollinger Bands, Keltner Channels, Donchian Channels, True Range, Average True Range, Supertrend, volatility cone). Applied to price data automatically — no need to fetch prices first. Each indicator needs its window of history before it produces values, so the first periods after start_date can be empty and quarterly or yearly periods with long windows can be empty on short histories; start earlier to warm up. Requires tickers='AAPL' — use comma-separated values for multiple tickers.

Input Schema

NameRequiredDescriptionDefault
lagNoNumber of periods to lag when computing growth rates.
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.
growthNoReturn period-over-period growth rates instead of absolute values.
periodNoObservation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method).daily
windowNoThe number of periods the indicator looks back over, e.g. 14 or 20. Leave unset to use the default of the indicator you selected. Defaults are 14 for get_average_true_range, get_bollinger_bands; 20 for get_donchian_channels, get_keltner_channels; 10 for get_supertrend.
tickersNoComma-separated ticker symbols, e.g. 'AAPL,MSFT,GOOGL'.
windowsNoThe rolling windows (in periods) to calculate realized volatility for.
end_dateNoEnd of the date range in YYYY-MM-DD format.2026-10-27
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.
atr_windowNoNumber of periods for ATR calculation.
multiplierNoMultiplier applied to the Average True Range to determine how far the bands sit from the median price.
start_dateNoStart of the date range in YYYY-MM-DD format.2021-10-28
num_std_devNoNumber of standard deviations for the bands.
standardizeNoReturn the Z-Score (standard score) instead of the raw values, i.e. how many standard deviations each value is from the mean of its own series. When combined with growth=True, the growth values are standardized instead of the raw values.
close_columnNoThe column name for closing prices in the historical data.Adj Close
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.
atr_multiplierNoMultiplier for ATR to determine channel width.
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. Changed6 schema fields changedv2.3.0
    • changedInput schema / properties / atr_multiplier / type
      Previous value: -"integer"New value: +"number"
    • changedInput schema / properties / atr_window / default
      Previous value: -14New value: +10
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-10-14"New value: +"2026-10-27"
    • changedInput schema / properties / num_std_dev / type
      Previous value: -"integer"New value: +"number"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-10-15"New value: +"2021-10-28"
    • changedInput schema / properties / window / description
      Previous value: -"The number of periods the indicator looks back over, e.g. 14 or 20. Leave unset to use the default of the indicator you selected. Defaults are 14 for get_average_true_range, get_bollinger_bands, get_keltner_channels; 10 for get_supertrend; 20 for get_donchian_channels."New value: +"The number of periods the indicator looks back over, e.g. 14 or 20. Leave unset to use the default of the indicator you selected. Defaults are 14 for get_average_true_range, get_bollinger_bands; 20 for get_donchian_channels, get_keltner_channels; 10 for get_supertrend."
  2. Changed35 schema fields changedv2.2.3
    • changedInput schema / properties / atr_multiplier / description
      Previous value: -"Value for atr_multiplier."New value: +"Multiplier for ATR to determine channel width."
    • removedInput schema / properties / atr_multiplier / title
      Removed value: -"Atr Multiplier"
    • changedInput schema / properties / atr_window / description
      Previous value: -"Value for atr_window."New value: +"Number of periods for ATR calculation."
    • removedInput schema / properties / atr_window / title
      Removed value: -"Atr Window"
    • removedInput schema / properties / benchmark_ticker / title
      Removed value: -"Benchmark Ticker"
    • changedInput schema / properties / close_column / description
      Previous value: -"Value for close_column."New value: +"The column name for closing prices in the historical data."
    • removedInput schema / properties / close_column / title
      Removed value: -"Close Column"
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-10-02"New value: +"2026-10-14"
    • removedInput schema / properties / end_date / title
      Removed value: -"End Date"
    • removedInput schema / properties / growth / title
      Removed value: -"Growth"
    • changedInput schema / properties / indicator / description
      Previous value: -"Name of the specific metric to calculate, e.g. 'get_asset_turnover_ratio'. Required — omitting it returns the list of available indicators."New value: +"Name 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."
    • removedInput schema / properties / indicator / title
      Removed value: -"Indicator"
    • addedInput schema / properties / lag / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "items": {
      +      "type": "integer"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / lag / title
      Removed value: -"Lag"
    • removedInput schema / properties / lag / type
      Removed value: -"integer"
    • addedInput schema / properties / limit
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The 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."
      +}
    • changedInput schema / properties / multiplier / description
      Previous value: -"Value for multiplier."New value: +"Multiplier applied to the Average True Range to determine how far the bands sit from the median price."
    • removedInput schema / properties / multiplier / title
      Removed value: -"Multiplier"
    • changedInput schema / properties / num_std_dev / description
      Previous value: -"Value for num_std_dev."New value: +"Number of standard deviations for the bands."
    • removedInput schema / properties / num_std_dev / title
      Removed value: -"Num Std Dev"
    • changedInput schema / properties / period / description
      Previous value: -"Observation frequency, e.g. 'monthly', 'quarterly', or 'annual'."New value: +"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method)."
    • removedInput schema / properties / period / title
      Removed value: -"Period"
    • removedInput schema / properties / quarterly / title
      Removed value: -"Quarterly"
    • removedInput schema / properties / show_columns / title
      Removed value: -"Show Columns"
    • removedInput schema / properties / standardize / title
      Removed value: -"Standardize"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-10-03"New value: +"2021-10-15"
    • removedInput schema / properties / start_date / title
      Removed value: -"Start Date"
    • addedInput schema / properties / tickers / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / tickers / title
      Removed value: -"Tickers"
    • removedInput schema / properties / tickers / type
      Removed value: -"string"
    • changedInput schema / properties / window / description
      Previous value: -"Value for window. Leave unset to use the default of the indicator you selected. Defaults are 14 for get_average_true_range, get_bollinger_bands, get_keltner_channels; 10 for get_supertrend; 20 for get_donchian_channels."New value: +"The number of periods the indicator looks back over, e.g. 14 or 20. Leave unset to use the default of the indicator you selected. Defaults are 14 for get_average_true_range, get_bollinger_bands, get_keltner_channels; 10 for get_supertrend; 20 for get_donchian_channels."
    • removedInput schema / properties / window / title
      Removed value: -"Window"
    • changedInput schema / properties / windows / description
      Previous value: -"Value for windows."New value: +"The rolling windows (in periods) to calculate realized volatility for."
    • removedInput schema / properties / windows / title
      Removed value: -"Windows"
    • removedInput schema / title
      Removed value: -"volatilityArguments"
  3. Changed2 schema fields changedv2.2.1
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-08-19"New value: +"2026-10-02"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-08-20"New value: +"2021-10-03"
  4. Changed9 schema fields changedv2.2.0
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-14"New value: +"2026-08-19"
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_bollinger_bands",
      -  "get_true_range",
      -  "get_average_true_range",
      -  "get_keltner_channels",
      -  "get_donchian_channels"
      -]New value: +[
      +  "get_bollinger_bands",
      +  "get_true_range",
      +  "get_average_true_range",
      +  "get_supertrend",
      +  "get_keltner_channels",
      +  "get_donchian_channels",
      +  "get_volatility_cone"
      +]
    • addedInput schema / properties / multiplier
      Added value: +{
      +  "default": 3,
      +  "description": "Value for multiplier.",
      +  "title": "Multiplier",
      +  "type": "number"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-15"New value: +"2021-08-20"
    • addedInput schema / properties / window / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / window / default
      Previous value: -14New value: +null
    • changedInput schema / properties / window / description
      Previous value: -"Value for window."New value: +"Value for window. Leave unset to use the default of the indicator you selected. Defaults are 14 for get_average_true_range, get_bollinger_bands, get_keltner_channels; 10 for get_supertrend; 20 for get_donchian_channels."
    • removedInput schema / properties / window / type
      Removed value: -"integer"
    • addedInput schema / properties / windows
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for windows.",
      +  "title": "Windows"
      +}
  5. Changed4 schema fields changed
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-09"New value: +"2026-07-14"
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_bollinger_bands",
      -  "get_true_range",
      -  "get_average_true_range",
      -  "get_keltner_channels"
      -]New value: +[
      +  "get_bollinger_bands",
      +  "get_true_range",
      +  "get_average_true_range",
      +  "get_keltner_channels",
      +  "get_donchian_channels"
      +]
    • addedInput schema / properties / standardize
      Added value: +{
      +  "default": false,
      +  "description": "Return the Z-Score (standard score) instead of the raw values, i.e. how many standard deviations each value is from the mean of its own series. When combined with growth=True, the growth values are standardized instead of the raw values.",
      +  "title": "Standardize",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-10"New value: +"2021-07-15"
  6. Changed2 schema fields changedv2.1.4
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-27"New value: +"2026-07-09"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-28"New value: +"2021-07-10"
  7. Changed2 schema fields changedv2.1.3
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-23"New value: +"2026-06-27"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-24"New value: +"2021-06-28"
  8. Changed4 schema fields changedv0.1.2
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-22"New value: +"2026-06-23"
    • removedInput schema / properties / rounding
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "integer"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Number of decimal places to round results to.",
      -  "title": "Rounding"
      -}
    • addedInput schema / properties / show_columns
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Comma-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.",
      +  "title": "Show Columns"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-23"New value: +"2021-06-24"
  9. Addedv0.1.1

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and open-world behavior, so the description adds value by disclosing the warm-up edge case: leading periods can be empty, and quarterly/annual periods with long windows can be empty on short histories. That is a real behavioral trait an agent would otherwise misread as a failure; return format is covered by the output schema.

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

Conciseness5/5

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

Four sentences, front-loaded with the indicator list, then the automatic-data-fetch note, then the warm-up caveat, then the ticker requirement. Each sentence carries distinct, actionable information with no repetition of the schema.

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

Completeness4/5

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

For a 19-parameter, output-schema-backed tool with full annotation coverage, the description covers the two things structure doesn't: automatic price retrieval and history warm-up. It is slightly thin on the ticker requirement's conflict with the schema default, but overall sufficient to call the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3 and all 19 parameters are already documented. The description adds one genuinely useful fact — tickers must be supplied despite the schema marking it optional — but says nothing about which of window/atr_window/multiplier/num_std_dev applies to which indicator, leaving that 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 names the specific indicator family (Bollinger Bands, Keltner, Donchian, True Range, ATR, Supertrend, volatility cone) and states the resource is price data applied automatically. It does not explicitly distinguish itself from siblings like momentum or risk, which also compute indicator-style metrics, so an agent can't fully route between them from this text alone.

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

Usage Guidelines3/5

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

It gives a useful workflow hint — prices are fetched automatically and history must be warmed up by starting earlier — which implies when to call it. But it never states when to prefer this over the momentum or risk siblings, nor any exclusions or prerequisites beyond the ticker requirement.

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