Skip to main content
Glama

BotSpot: AI Trading, Backtests and Bots

Control the person’s live chart

live_chart

Create and edit interactive price and indicator charts on the BotSpot Charts page, with historical windows or live updates. action="create_chart" opens a chart with its source, symbol, bar size, historical window and requested indicators; use the returned chartId. "add_overlay" and "remove_overlay" manage broker account-value comparisons and backtest-fill markers. Leave chartId empty to use the chart they looked at last. action="list" lists charts, "get" reads symbol, indicators (instanceId) and drawings (drawingId). "list_sources" lists the person’s brokers and free crypto feeds, and "search_symbols" finds stocks, funds, crypto, futures, crypto perpetuals and prediction market contracts by ticker or name with the sources that can read each (no broker needed to search); a symbol its source lacks is refused, naming the source. "set_symbol" changes symbol, exchange or bar size (any whole number with m, h, d or w, like 37m or 3h). "add_indicator", "update_indicator", "remove_indicator" manage indicators by key and version (charts stay on their version). "draw", "update_drawing", "remove_drawing", "clear_drawings" manage lines, trendlines, rays, rectangles, markers, text, Fibonacci and long or short position tools anchored to time (epoch ms) and price, including their look, lock, hide and stacking order; to clone a drawing, draw a copy from its saved fields, and to lock or hide several or all drawings, send update_drawing drawingIds with locked or visible. "set_appearance" changes the bar type (chartType: candles, bars, line, area, heikin_ashi, renko and the rest), background, grid and candle colors; for example a purple gradient background is mode "gradient" with two purple hex colors. "describe_drawings" returns the bar at the arrowhead and the separate range after it. Report open from head.bar.o, high from head.bar.h, low from head.bar.l and close from head.bar.c; afterHead.firstOpen is the next bar, not the arrowhead bar. "summarize" returns the chart’s own numbers over a window (lookbackDays, from, to): price change, high and low, and each indicator line’s latest value and crosses. Answer chart questions from it, not from web searches.

Set "action" to choose the operation. Only send the fields listed for that action.

action="list": List the person’s live charts

No other fields required. Lists the person’s live charts on the BotSpot Charts page, most recently viewed first.

action="get": Read a live chart

No other fields required. Reads the symbol, timeframe, indicators (with instanceIds) and drawings (with drawingIds) of a live chart.

action="set_symbol": Change the chart symbol

No other fields required. Changes the symbol, exchange or bar size of the person’s open chart. The chart page updates live.

action="add_indicator": Add an indicator to the chart

Required fields: key. Adds an indicator to the open chart. The chart page updates live with the new indicator.

action="update_indicator": Change indicator settings

Required fields: instanceId. Changes an indicator’s settings on the open chart.

action="remove_indicator": Remove an indicator

Required fields: instanceId. Removes one indicator from the open chart.

action="draw": Draw on the chart

Required fields: type, points. Draws a horizontal line, trendline, ray, rectangle, marker, text label, Fibonacci, long position or short position on the open chart, anchored to time and price, with its look in style and a position tool’s sizing in position. The chart page updates live.

action="update_drawing": Move or relabel a drawing

No other fields required. Changes one drawing on the open chart: its points, text, look (style), position sizing, lock, visibility or stacking order (moveTo). Lock, unlock, hide or show several drawings in one call with drawingIds.

action="remove_drawing": Remove a drawing

Required fields: drawingId. Removes one drawing from the open chart.

action="clear_drawings": Clear all drawings

No other fields required. Removes every drawing from the open chart.

action="create_chart": Create a live chart

Required fields: symbol. Creates a live chart with optional indicators and attaches it to this conversation. Returns chartId. Data comes from the person’s own connected broker (sourceKind broker, the default), for stocks, ETFs, options, futures and whatever else it provides, or from a free public crypto feed (ccxt_public). When no particular broker is required, omit brokerCredentialId so the server can find the first compatible connection with bars before saving; sourceSelection in the result says which broker it used and what it passed over. Call the source by that broker name, not by the name the person saved a connection under. With no broker it returns a connect_broker action: tell the person in one plain sentence that they need a broker to get this data, and give them the link. Use for price charts with built-in or saved custom indicators, e.g. NVDA daily with a 200 bar sma.

action="list_sources": List where chart data can come from

No other fields required. Lists the person’s connected brokers, with the asset classes each one offers, and the free public crypto feeds. Use the current results to choose a compatible chart source automatically. Multiple sources do not require a user choice; do not invent provider rankings or unreturned history limits.

action="search_symbols": Search for a symbol to chart

No other fields required. Finds stocks, funds, crypto, futures, crypto perpetuals and prediction market contracts by ticker or name, with no broker needed: pass query, and chip to narrow it. Each result lists its sources for this person, the connected brokers and free crypto feeds that can read it. needsBroker means they must connect a broker first (connectUrl) before charting it. To confirm a symbol on one source instead, pass exchangeId for a public crypto feed or brokerCredentialId for a connected broker: a feed or a listed broker returns what it lists, any other broker confirms one exact ticker (match=exact_ticker). Empty there means that source does not have it; never put a symbol on a source that lacks it.

action="describe_drawings": Read facts about chart drawings

No other fields required. Returns plain facts about the drawings on a chart, computed from the chart’s real bars: the bar at each point, the bars a drawing spans, closes above and below a line or box with times and prices, crossings, Fibonacci level prices, touches and distance from the latest close, measurements, a long or short position’s entry, target, stop, reward to risk and which level was reached, and what an arrow points at and what happened after. Use it to answer questions about what the person drew.

action="add_overlay": Add an overlay to the chart

Required fields: kind. Adds another ticker, an account value line or backtest buy and sell markers on top of the chart. The data is loaded right away; if it cannot load, nothing is added and the reason is returned.

action="remove_overlay": Remove an overlay

Required fields: overlayId. Removes one overlay from the chart.

action="summarize": Read the numbers on a chart

No other fields required. Returns facts computed from the chart’s own bars and indicator lines over a window (for example lookbackDays 365): first and last close, percent change, high and low with dates, and for every indicator line its latest value, whether price is above or below it, how far, and when price last crossed it. Use this to answer questions about a chart instead of searching the web.

action="set_appearance": Change how the chart looks

No other fields required. Sets the chart bar type (chartType, e.g. heikin_ashi, line, renko), background, grid and candle colors. Only what is sent changes. Pick real hex colors for what the person describes: "make the background a purple gradient" means background {mode:"gradient", color:"#2e1065", color2:"#7c3aed", angle:90}; "hide the grid" means grid {vertical:false, horizontal:false}. The chart page updates live.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "action": "<action>"
    },
    "name": "live_chart"
  }
}

Input Schema

NameRequiredDescriptionDefault
toNoWindow end date (YYYY-MM-DD). Defaults to the last bar. Used with action="summarize".
keyNoIndicator key, e.g. "rsi", "ema", "macd", "bbands", "wavetrend". For a saved custom indicator use the chartKey that indicators(action="create") returned. Used with action="add_indicator". Required for action="add_indicator".
chipNoNarrow a search to one kind of market. Leave empty for all. Used with action="search_symbols".
fromNoWindow start date (YYYY-MM-DD). Overrides lookbackDays. Used with action="summarize".
gridNoUsed with action="set_appearance".
kindNosymbol: compare another ticker on this chart. account_value: an account value line from a bot (deploymentId), a strategy with exactly one bot (strategyId) or a broker account (accountId). backtest_fills: buy and sell markers from a backtest (backtestId). Used with action="add_overlay". Required for action="add_overlay".
textNoLabel shown on the drawing. Used with action="draw", action="update_drawing".
typeNohorizontal_line, vertical_line, marker and text take 1 point; trendline, ray, rectangle, fibonacci and measurement take 2; arrow takes 2 (tail first, then head); long_position and short_position take 3: entry (t is the left edge), target and stop (t is the right edge). Fibonacci 0 is at the second anchor, 1 at the first; reverse swaps that. Used with action="draw". Required for action="draw".
assetNobroker charts: leave empty for a stock or ETF. Otherwise the asset class and terms, e.g. {"assetType":"option","expiration":"2026-12-18","strike":200,"right":"call"}, {"assetType":"future","expiration":"2026-12-18","exchange":"CME"} or {"assetType":"index"}. Used with action="set_symbol", action="create_chart", action="search_symbols", action="add_overlay".
colorNoCSS color, e.g. "#22c55e". Used with action="draw", action="update_drawing", action="add_overlay".
queryNoA ticker or name, e.g. "SPY", "BTC" or "apple". Used with action="search_symbols".
styleNoaction="update_indicator": Chart settings. Replaces the saved settings, so send everything to keep; {} restores the defaults. | action="draw", action="update_drawing": How the drawing looks. Only the fields sent change. Used with action="update_indicator", action="draw", action="update_drawing".
titleNoOptional chart title. Update a setting-specific title when the requested symbol, outcome or timeframe change would make it misleading. Omit to keep the chosen title. Used with action="set_symbol", action="create_chart".
actionYesWhich operation to run: "list", "get", "set_symbol", "add_indicator", "update_indicator", "remove_indicator", "draw", "update_drawing", "remove_drawing", "clear_drawings", "create_chart", "list_sources", "search_symbols", "describe_drawings", "add_overlay", "remove_overlay", "summarize", "set_appearance". See the tool description for each one.
inputsNoIndicator settings by name, e.g. {"length": 14}. Omitted settings use the indicator defaults. Used with action="add_indicator", action="update_indicator".
lockedNoUsed with action="draw", action="update_drawing".
moveToNoMove in the stacking order. Later drawings paint on top. Used with action="update_drawing".
pointsNoUsed with action="draw", action="update_drawing". Required for action="draw".
symbolNoaction="set_symbol": Ticker for a broker chart (e.g. "NVDA", "SPY"), or a CCXT unified symbol for ccxt_public (e.g. "BTC/USDT:USDT"). Leave empty to keep it, for example when only the bar size changes. | action="create_chart": Ticker, e.g. "NVDA" or "SPY" (broker), or "BTC/USDT:USDT" (ccxt_public). | action="add_overlay": kind=symbol: the ticker to compare, e.g. "SPY". Used with action="set_symbol", action="create_chart", action="add_overlay". Required for action="create_chart".
chartIdNoChart id from live_chart(action="list"). Leave empty to use the chart the person looked at last. Used with action="get", action="set_symbol", action="add_indicator", action="update_indicator", action="remove_indicator", action="draw", action="update_drawing", action="remove_drawing", action="clear_drawings", action="describe_drawings", action="add_overlay", action="remove_overlay", action="summarize", action="set_appearance".
upColorNoHex color of rising candles. Used with action="set_appearance".
versionNoaction="add_indicator": Indicator version. Charts stay on this version. | action="update_indicator": Move to another version only when the person asks. Used with action="add_indicator", action="update_indicator".
visibleNoUsed with action="draw", action="update_drawing".
positionNolong_position and short_position: the sizing inputs. Used with action="draw", action="update_drawing".
accountIdNoSaved broker connection id. Used with action="add_overlay".
chartTypeNoBar type, saved on the chart: bars, candles, hollow_candles, volume_candles, line, line_markers, step_line, area, hlc_area, baseline, columns, high_low, heikin_ashi, renko, line_break, kagi, point_figure or range. "Switch to Heikin Ashi" is chartType "heikin_ashi"; "a line chart" is "line". Used with action="set_appearance".
downColorNoHex color of falling candles. Used with action="set_appearance".
drawingIdNoaction="update_drawing": The drawing to change. Use drawingIds instead for several. | action="describe_drawings": One drawing; leave empty for every drawing. Used with action="update_drawing", action="remove_drawing", action="describe_drawings". Required for action="remove_drawing".
fibonacciNoUsed with action="draw", action="update_drawing".
normalizeNoRebase the series to 100 at its first value so it can be compared. Used with action="add_overlay".
overlayIdNoUsed with action="remove_overlay". Required for action="remove_overlay".
timeframeNoBar size: any whole number with m, h, d or w, like 1m, 37m, 45m, 3h, 2d or 2w. Sizes a source has no bar for are built from smaller real bars. A new chart defaults to 1d. Used with action="set_symbol", action="create_chart".
backgroundNoUsed with action="set_appearance".
backtestIdNoUsed with action="add_overlay".
drawingIdsNoSeveral drawings at once, only with locked and/or visible: "lock my drawings" is every drawingId from get with locked true; "hide my drawings" is visible false. Used with action="update_drawing".
exchangeIdNoaction="set_symbol": Lowercase exchange id, e.g. "phemex". Leave empty to keep it. | action="create_chart": Lowercase exchange id, required for ccxt_public, e.g. "phemex". | action="search_symbols": A public crypto feed from live_chart(action="list_sources"). Used with action="set_symbol", action="create_chart", action="search_symbols", action="add_overlay".
indicatorsNoIndicators to add right away, e.g. [{"key":"sma","inputs":{"length":200}}]. Used with action="create_chart".
instanceIdNoinstanceId from live_chart(action="get"). Used with action="update_indicator", action="remove_indicator". Required for action="update_indicator", action="remove_indicator".
sourceKindNoWhere prices come from: "broker" reads the person’s own connected broker, for stocks, ETFs, options, futures and anything else it provides; "ccxt_public" is a free public crypto exchange feed (needs exchangeId). There is no other source. Used with action="set_symbol", action="search_symbols", action="add_overlay", action="create_chart".
strategyIdNoUsed with action="add_overlay".
deploymentIdNoUsed with action="add_overlay".
lookbackDaysNoaction="set_symbol", action="create_chart": Visible calendar days of history, e.g. 365 for a year or about 3652 for ten years. Fetches native history with indicator warm-up, within the existing 5000-bar worker limit. Read summarize for actual provider coverage. Omit to preserve the current window; null restores the default. | action="summarize": Window to summarize, counted back from the last bar, e.g. 365 for the last year. Used with action="set_symbol", action="create_chart", action="summarize".
brokerCredentialIdNoaction="set_symbol", action="add_overlay": A saved broker connection from live_chart(action="list_sources"). Use the exact connection when the person names one or the instrument was resolved on that connection. | action="create_chart": For a new chart with no named source, omit this field to let BotSpot choose automatically from owned connections that return bars for the requested instrument and interval. Pass the exact saved id when the person names a connection or when the instrument was resolved on that specific connection. | action="search_symbols": A connected broker from live_chart(action="list_sources"). Used with action="set_symbol", action="add_overlay", action="create_chart", action="search_symbols".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / style / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "inputsInStatusLine": {
      -        "description": "Show the inputs in the legend row.",
      -        "type": "boolean"
      -      },
      -      "labelsOnPriceScale": {
      -        "description": "Tag each line on the price scale.",
      -        "type": "boolean"
      -      },
      -      "outputs": {
      -        "additionalProperties": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "color": {
      -              "description": "Hex color, e.g. \"#22c55e\".",
      -              "type": "string"
      -            },
      -            "lineWidth": {
      -              "type": "number"
      -            },
      -            "visible": {
      -              "type": "boolean"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "description": "By output id (from the indicator description): show it, its color and width.",
      -        "type": "object"
      -      },
      -      "precision": {
      -        "description": "Decimals shown, 0 to 8. Leave out for the default.",
      -        "type": "integer"
      -      },
      -      "valuesInStatusLine": {
      -        "description": "Show the values in the legend row.",
      -        "type": "boolean"
      -      },
      -      "visibility": {
      -        "additionalProperties": false,
      -        "description": "Bar sizes the indicator shows on, per unit (minutes 1-59, hours 1-24, days 1-366, weeks 1-52). A unit left out always shows.",
      -        "properties": {
      -          "days": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          },
      -          "hours": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          },
      -          "minutes": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          },
      -          "weeks": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          }
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "alwaysShowStats": {
      -        "type": "boolean"
      -      },
      -      "arrowEnd": {
      -        "type": "boolean"
      -      },
      -      "arrowStart": {
      -        "type": "boolean"
      -      },
      -      "bold": {
      -        "type": "boolean"
      -      },
      -      "color": {
      -        "type": "string"
      -      },
      -      "compactStats": {
      -        "type": "boolean"
      -      },
      -      "dash": {
      -        "enum": [
      -          "solid",
      -          "dashed",
      -          "dotted"
      -        ],
      -        "type": "string"
      -      },
      -      "extendLeft": {
      -        "type": "boolean"
      -      },
      -      "extendRight": {
      -        "type": "boolean"
      -      },
      -      "fillColor": {
      -        "description": "Hex color, e.g. \"#22c55e\".",
      -        "type": "string"
      -      },
      -      "fillOpacity": {
      -        "description": "0 to 1.",
      -        "type": "number"
      -      },
      -      "fontSize": {
      -        "description": "8 to 40.",
      -        "type": "number"
      -      },
      -      "italic": {
      -        "type": "boolean"
      -      },
      -      "lineWidth": {
      -        "type": "number"
      -      },
      -      "showLabels": {
      -        "type": "boolean"
      -      },
      -      "showPriceLabels": {
      -        "type": "boolean"
      -      },
      -      "stats": {
      -        "description": "Position tools: stats to show, at most 12.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "stopColor": {
      -        "description": "Position tools: the loss zone color.",
      -        "type": "string"
      -      },
      -      "targetColor": {
      -        "description": "Position tools: the profit zone color.",
      -        "type": "string"
      -      },
      -      "textColor": {
      -        "type": "string"
      -      },
      -      "visibility": {
      -        "additionalProperties": false,
      -        "description": "Bar sizes the drawing shows on, per unit. A unit left out always shows.",
      -        "properties": {
      -          "days": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          },
      -          "hours": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          },
      -          "minutes": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          },
      -          "weeks": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "enabled": {
      -                "type": "boolean"
      -              },
      -              "max": {
      -                "type": "integer"
      -              },
      -              "min": {
      -                "type": "integer"
      -              }
      -            },
      -            "required": [
      -              "enabled",
      -              "min",
      -              "max"
      -            ],
      -            "type": "object"
      -          }
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "inputsInStatusLine": {
      +        "description": "Show the inputs in the legend row.",
      +        "type": "boolean"
      +      },
      +      "labelsOnPriceScale": {
      +        "description": "Tag each line on the price scale.",
      +        "type": "boolean"
      +      },
      +      "outputs": {
      +        "additionalProperties": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "color": {
      +              "description": "Hex color, e.g. \"#22c55e\".",
      +              "type": "string"
      +            },
      +            "dash": {
      +              "enum": [
      +                "solid",
      +                "dashed",
      +                "dotted"
      +              ],
      +              "type": "string"
      +            },
      +            "lineWidth": {
      +              "type": "number"
      +            },
      +            "visible": {
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "description": "By output id (from the indicator description): show it, its color, width and line style.",
      +        "type": "object"
      +      },
      +      "precision": {
      +        "description": "Decimals shown, 0 to 8. Leave out for the default.",
      +        "type": "integer"
      +      },
      +      "valuesInStatusLine": {
      +        "description": "Show the values in the legend row.",
      +        "type": "boolean"
      +      },
      +      "visibility": {
      +        "additionalProperties": false,
      +        "description": "Bar sizes the indicator shows on, per unit (minutes 1-59, hours 1-24, days 1-366, weeks 1-52). A unit left out always shows.",
      +        "properties": {
      +          "days": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "hours": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "minutes": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "weeks": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alwaysShowStats": {
      +        "type": "boolean"
      +      },
      +      "arrowEnd": {
      +        "type": "boolean"
      +      },
      +      "arrowStart": {
      +        "type": "boolean"
      +      },
      +      "bold": {
      +        "type": "boolean"
      +      },
      +      "color": {
      +        "type": "string"
      +      },
      +      "compactStats": {
      +        "type": "boolean"
      +      },
      +      "dash": {
      +        "enum": [
      +          "solid",
      +          "dashed",
      +          "dotted"
      +        ],
      +        "type": "string"
      +      },
      +      "extendLeft": {
      +        "type": "boolean"
      +      },
      +      "extendRight": {
      +        "type": "boolean"
      +      },
      +      "fillColor": {
      +        "description": "Hex color, e.g. \"#22c55e\".",
      +        "type": "string"
      +      },
      +      "fillOpacity": {
      +        "description": "0 to 1.",
      +        "type": "number"
      +      },
      +      "fontSize": {
      +        "description": "8 to 40.",
      +        "type": "number"
      +      },
      +      "italic": {
      +        "type": "boolean"
      +      },
      +      "lineWidth": {
      +        "type": "number"
      +      },
      +      "showLabels": {
      +        "type": "boolean"
      +      },
      +      "showPriceLabels": {
      +        "type": "boolean"
      +      },
      +      "stats": {
      +        "description": "Position tools: stats to show, at most 12.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "stopColor": {
      +        "description": "Position tools: the loss zone color.",
      +        "type": "string"
      +      },
      +      "targetColor": {
      +        "description": "Position tools: the profit zone color.",
      +        "type": "string"
      +      },
      +      "textColor": {
      +        "type": "string"
      +      },
      +      "visibility": {
      +        "additionalProperties": false,
      +        "description": "Bar sizes the drawing shows on, per unit. A unit left out always shows.",
      +        "properties": {
      +          "days": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "hours": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "minutes": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "weeks": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
  2. Changed3 schema fields changed
    • addedInput schema / properties / chartType
      Added value: +{
      +  "description": "Bar type, saved on the chart: bars, candles, hollow_candles, volume_candles, line, line_markers, step_line, area, hlc_area, baseline, columns, high_low, heikin_ashi, renko, line_break, kagi, point_figure or range. \"Switch to Heikin Ashi\" is chartType \"heikin_ashi\"; \"a line chart\" is \"line\". Used with action=\"set_appearance\".",
      +  "enum": [
      +    "bars",
      +    "candles",
      +    "hollow_candles",
      +    "volume_candles",
      +    "line",
      +    "line_markers",
      +    "step_line",
      +    "area",
      +    "hlc_area",
      +    "baseline",
      +    "columns",
      +    "high_low",
      +    "heikin_ashi",
      +    "renko",
      +    "line_break",
      +    "kagi",
      +    "point_figure",
      +    "range"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / drawingId / description
      Previous value: -"One drawing; leave empty for every drawing. Used with action=\"update_drawing\", action=\"remove_drawing\", action=\"describe_drawings\". Required for action=\"update_drawing\", action=\"remove_drawing\"."New value: +"action=\"update_drawing\": The drawing to change. Use drawingIds instead for several. | action=\"describe_drawings\": One drawing; leave empty for every drawing. Used with action=\"update_drawing\", action=\"remove_drawing\", action=\"describe_drawings\". Required for action=\"remove_drawing\"."
    • addedInput schema / properties / drawingIds
      Added value: +{
      +  "description": "Several drawings at once, only with locked and/or visible: \"lock my drawings\" is every drawingId from get with locked true; \"hide my drawings\" is visible false. Used with action=\"update_drawing\".",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 200,
      +  "minItems": 1,
      +  "type": "array"
      +}
  3. Changed25 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"Which operation to run: \"list\", \"get\", \"set_symbol\", \"add_indicator\", \"update_indicator\", \"remove_indicator\", \"draw\", \"update_drawing\", \"remove_drawing\", \"clear_drawings\", \"create_chart\", \"list_sources\", \"search_symbols\", \"describe_drawings\", \"add_overlay\", \"remove_overlay\", \"summarize\". See the tool description for each one."New value: +"Which operation to run: \"list\", \"get\", \"set_symbol\", \"add_indicator\", \"update_indicator\", \"remove_indicator\", \"draw\", \"update_drawing\", \"remove_drawing\", \"clear_drawings\", \"create_chart\", \"list_sources\", \"search_symbols\", \"describe_drawings\", \"add_overlay\", \"remove_overlay\", \"summarize\", \"set_appearance\". See the tool description for each one."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "get",
      -  "set_symbol",
      -  "add_indicator",
      -  "update_indicator",
      -  "remove_indicator",
      -  "draw",
      -  "update_drawing",
      -  "remove_drawing",
      -  "clear_drawings",
      -  "create_chart",
      -  "list_sources",
      -  "search_symbols",
      -  "describe_drawings",
      -  "add_overlay",
      -  "remove_overlay",
      -  "summarize"
      -]New value: +[
      +  "list",
      +  "get",
      +  "set_symbol",
      +  "add_indicator",
      +  "update_indicator",
      +  "remove_indicator",
      +  "draw",
      +  "update_drawing",
      +  "remove_drawing",
      +  "clear_drawings",
      +  "create_chart",
      +  "list_sources",
      +  "search_symbols",
      +  "describe_drawings",
      +  "add_overlay",
      +  "remove_overlay",
      +  "summarize",
      +  "set_appearance"
      +]
    • addedInput schema / properties / background
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Used with action=\"set_appearance\".",
      +  "properties": {
      +    "angle": {
      +      "description": "Gradient only: 0 to 360 degrees.",
      +      "type": "number"
      +    },
      +    "color": {
      +      "description": "Hex color, e.g. \"#2e1065\".",
      +      "type": "string"
      +    },
      +    "color2": {
      +      "description": "Gradient only: the second hex color.",
      +      "type": "string"
      +    },
      +    "mode": {
      +      "enum": [
      +        "solid",
      +        "gradient"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "mode",
      +    "color"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / brokerCredentialId / description
      Previous value: -"action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\": broker charts: the saved connection to read, from live_chart(action=\"list_sources\"). For several eligible sources, choose automatically using current asset support and observed symbol/history coverage; use the first compatible result to break ties. Honor a named source or the existing chart. Never ask the person to choose merely because several qualify. Leave empty only for a sole working connection. | action=\"search_symbols\": A connected broker from live_chart(action=\"list_sources\"). Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\", action=\"search_symbols\"."New value: +"action=\"set_symbol\", action=\"add_overlay\": A saved broker connection from live_chart(action=\"list_sources\"). Use the exact connection when the person names one or the instrument was resolved on that connection. | action=\"create_chart\": For a new chart with no named source, omit this field to let BotSpot choose automatically from owned connections that return bars for the requested instrument and interval. Pass the exact saved id when the person names a connection or when the instrument was resolved on that specific connection. | action=\"search_symbols\": A connected broker from live_chart(action=\"list_sources\"). Used with action=\"set_symbol\", action=\"add_overlay\", action=\"create_chart\", action=\"search_symbols\"."
    • changedInput schema / properties / chartId / description
      Previous value: -"Chart id from live_chart(action=\"list\"). Leave empty to use the chart the person looked at last. Used with action=\"get\", action=\"set_symbol\", action=\"add_indicator\", action=\"update_indicator\", action=\"remove_indicator\", action=\"draw\", action=\"update_drawing\", action=\"remove_drawing\", action=\"clear_drawings\", action=\"describe_drawings\", action=\"add_overlay\", action=\"remove_overlay\", action=\"summarize\"."New value: +"Chart id from live_chart(action=\"list\"). Leave empty to use the chart the person looked at last. Used with action=\"get\", action=\"set_symbol\", action=\"add_indicator\", action=\"update_indicator\", action=\"remove_indicator\", action=\"draw\", action=\"update_drawing\", action=\"remove_drawing\", action=\"clear_drawings\", action=\"describe_drawings\", action=\"add_overlay\", action=\"remove_overlay\", action=\"summarize\", action=\"set_appearance\"."
    • changedInput schema / properties / chip / enum
      Previous value: -[
      -  "all",
      -  "stocks",
      -  "funds",
      -  "crypto"
      -]New value: +[
      +  "all",
      +  "stocks",
      +  "funds",
      +  "crypto",
      +  "futures",
      +  "perpetuals",
      +  "prediction"
      +]
    • addedInput schema / properties / downColor
      Added value: +{
      +  "description": "Hex color of falling candles. Used with action=\"set_appearance\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / fibonacci
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Used with action=\"draw\", action=\"update_drawing\".",
      +  "properties": {
      +    "extendLeft": {
      +      "type": "boolean"
      +    },
      +    "extendRight": {
      +      "type": "boolean"
      +    },
      +    "fillBands": {
      +      "type": "boolean"
      +    },
      +    "levelColors": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "description": "Color by level, e.g. {\"0.618\":\"#22c55e\"}.",
      +      "type": "object"
      +    },
      +    "levels": {
      +      "items": {
      +        "type": "number"
      +      },
      +      "maxItems": 24,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "reverse": {
      +      "type": "boolean"
      +    },
      +    "showLevels": {
      +      "type": "boolean"
      +    },
      +    "showPrices": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "levels"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / grid
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Used with action=\"set_appearance\".",
      +  "properties": {
      +    "horizontal": {
      +      "type": "boolean"
      +    },
      +    "vertical": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "vertical",
      +    "horizontal"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / locked
      Added value: +{
      +  "description": "Used with action=\"draw\", action=\"update_drawing\".",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / moveTo
      Added value: +{
      +  "description": "Move in the stacking order. Later drawings paint on top. Used with action=\"update_drawing\".",
      +  "enum": [
      +    "front",
      +    "forward",
      +    "backward",
      +    "back"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / points / maxItems
      Previous value: -2New value: +3
    • addedInput schema / properties / position
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "long_position and short_position: the sizing inputs. Used with action=\"draw\", action=\"update_drawing\".",
      +  "properties": {
      +    "accountSize": {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "leverage": {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "lotSize": {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "qtyPrecision": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "risk": {
      +      "description": "Amount at risk, in riskUnit.",
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "riskUnit": {
      +      "enum": [
      +        "percent",
      +        "money"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • removedInput schema / properties / style / additionalProperties
      Removed value: -false
    • addedInput schema / properties / style / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "inputsInStatusLine": {
      +        "description": "Show the inputs in the legend row.",
      +        "type": "boolean"
      +      },
      +      "labelsOnPriceScale": {
      +        "description": "Tag each line on the price scale.",
      +        "type": "boolean"
      +      },
      +      "outputs": {
      +        "additionalProperties": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "color": {
      +              "description": "Hex color, e.g. \"#22c55e\".",
      +              "type": "string"
      +            },
      +            "lineWidth": {
      +              "type": "number"
      +            },
      +            "visible": {
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "description": "By output id (from the indicator description): show it, its color and width.",
      +        "type": "object"
      +      },
      +      "precision": {
      +        "description": "Decimals shown, 0 to 8. Leave out for the default.",
      +        "type": "integer"
      +      },
      +      "valuesInStatusLine": {
      +        "description": "Show the values in the legend row.",
      +        "type": "boolean"
      +      },
      +      "visibility": {
      +        "additionalProperties": false,
      +        "description": "Bar sizes the indicator shows on, per unit (minutes 1-59, hours 1-24, days 1-366, weeks 1-52). A unit left out always shows.",
      +        "properties": {
      +          "days": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "hours": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "minutes": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "weeks": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alwaysShowStats": {
      +        "type": "boolean"
      +      },
      +      "arrowEnd": {
      +        "type": "boolean"
      +      },
      +      "arrowStart": {
      +        "type": "boolean"
      +      },
      +      "bold": {
      +        "type": "boolean"
      +      },
      +      "color": {
      +        "type": "string"
      +      },
      +      "compactStats": {
      +        "type": "boolean"
      +      },
      +      "dash": {
      +        "enum": [
      +          "solid",
      +          "dashed",
      +          "dotted"
      +        ],
      +        "type": "string"
      +      },
      +      "extendLeft": {
      +        "type": "boolean"
      +      },
      +      "extendRight": {
      +        "type": "boolean"
      +      },
      +      "fillColor": {
      +        "description": "Hex color, e.g. \"#22c55e\".",
      +        "type": "string"
      +      },
      +      "fillOpacity": {
      +        "description": "0 to 1.",
      +        "type": "number"
      +      },
      +      "fontSize": {
      +        "description": "8 to 40.",
      +        "type": "number"
      +      },
      +      "italic": {
      +        "type": "boolean"
      +      },
      +      "lineWidth": {
      +        "type": "number"
      +      },
      +      "showLabels": {
      +        "type": "boolean"
      +      },
      +      "showPriceLabels": {
      +        "type": "boolean"
      +      },
      +      "stats": {
      +        "description": "Position tools: stats to show, at most 12.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "stopColor": {
      +        "description": "Position tools: the loss zone color.",
      +        "type": "string"
      +      },
      +      "targetColor": {
      +        "description": "Position tools: the profit zone color.",
      +        "type": "string"
      +      },
      +      "textColor": {
      +        "type": "string"
      +      },
      +      "visibility": {
      +        "additionalProperties": false,
      +        "description": "Bar sizes the drawing shows on, per unit. A unit left out always shows.",
      +        "properties": {
      +          "days": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "hours": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "minutes": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          },
      +          "weeks": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "enabled": {
      +                "type": "boolean"
      +              },
      +              "max": {
      +                "type": "integer"
      +              },
      +              "min": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "enabled",
      +              "min",
      +              "max"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / style / description
      Previous value: -"Chart settings. Replaces the saved settings, so send everything to keep; {} restores the defaults. Used with action=\"update_indicator\"."New value: +"action=\"update_indicator\": Chart settings. Replaces the saved settings, so send everything to keep; {} restores the defaults. | action=\"draw\", action=\"update_drawing\": How the drawing looks. Only the fields sent change. Used with action=\"update_indicator\", action=\"draw\", action=\"update_drawing\"."
    • removedInput schema / properties / style / properties
      Removed value: -{
      -  "inputsInStatusLine": {
      -    "description": "Show the inputs in the legend row.",
      -    "type": "boolean"
      -  },
      -  "labelsOnPriceScale": {
      -    "description": "Tag each line on the price scale.",
      -    "type": "boolean"
      -  },
      -  "outputs": {
      -    "additionalProperties": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "color": {
      -          "description": "Hex color, e.g. \"#22c55e\".",
      -          "type": "string"
      -        },
      -        "lineWidth": {
      -          "type": "number"
      -        },
      -        "visible": {
      -          "type": "boolean"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "description": "By output id (from the indicator description): show it, its color and width.",
      -    "type": "object"
      -  },
      -  "precision": {
      -    "description": "Decimals shown, 0 to 8. Leave out for the default.",
      -    "type": "integer"
      -  },
      -  "valuesInStatusLine": {
      -    "description": "Show the values in the legend row.",
      -    "type": "boolean"
      -  },
      -  "visibility": {
      -    "additionalProperties": false,
      -    "description": "Bar sizes the indicator shows on, per unit (minutes 1-59, hours 1-24, days 1-366, weeks 1-52). A unit left out always shows.",
      -    "properties": {
      -      "days": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "enabled": {
      -            "type": "boolean"
      -          },
      -          "max": {
      -            "type": "integer"
      -          },
      -          "min": {
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "enabled",
      -          "min",
      -          "max"
      -        ],
      -        "type": "object"
      -      },
      -      "hours": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "enabled": {
      -            "type": "boolean"
      -          },
      -          "max": {
      -            "type": "integer"
      -          },
      -          "min": {
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "enabled",
      -          "min",
      -          "max"
      -        ],
      -        "type": "object"
      -      },
      -      "minutes": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "enabled": {
      -            "type": "boolean"
      -          },
      -          "max": {
      -            "type": "integer"
      -          },
      -          "min": {
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "enabled",
      -          "min",
      -          "max"
      -        ],
      -        "type": "object"
      -      },
      -      "weeks": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "enabled": {
      -            "type": "boolean"
      -          },
      -          "max": {
      -            "type": "integer"
      -          },
      -          "min": {
      -            "type": "integer"
      -          }
      -        },
      -        "required": [
      -          "enabled",
      -          "min",
      -          "max"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "type": "object"
      -  }
      -}
    • removedInput schema / properties / style / type
      Removed value: -"object"
    • changedInput schema / properties / timeframe / description
      Previous value: -"action=\"set_symbol\": Bar size. Leave empty to keep it. | action=\"create_chart\": Bar size. Used with action=\"set_symbol\", action=\"create_chart\"."New value: +"Bar size: any whole number with m, h, d or w, like 1m, 37m, 45m, 3h, 2d or 2w. Sizes a source has no bar for are built from smaller real bars. A new chart defaults to 1d. Used with action=\"set_symbol\", action=\"create_chart\"."
    • removedInput schema / properties / timeframe / enum
      Removed value: -[
      -  "1m",
      -  "5m",
      -  "15m",
      -  "30m",
      -  "1h",
      -  "4h",
      -  "1d",
      -  "1w"
      -]
    • addedInput schema / properties / timeframe / pattern
      Added value: +"^([1-9]\\d{0,2})(m|h|d|w)$"
    • changedInput schema / properties / type / description
      Previous value: -"horizontal_line, marker and text take 1 point; trendline, ray and rectangle take 2; arrow takes 2 (tail first, then head). Used with action=\"draw\". Required for action=\"draw\"."New value: +"horizontal_line, vertical_line, marker and text take 1 point; trendline, ray, rectangle, fibonacci and measurement take 2; arrow takes 2 (tail first, then head); long_position and short_position take 3: entry (t is the left edge), target and stop (t is the right edge). Fibonacci 0 is at the second anchor, 1 at the first; reverse swaps that. Used with action=\"draw\". Required for action=\"draw\"."
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "horizontal_line",
      -  "trendline",
      -  "ray",
      -  "rectangle",
      -  "marker",
      -  "text",
      -  "arrow"
      -]New value: +[
      +  "horizontal_line",
      +  "trendline",
      +  "ray",
      +  "rectangle",
      +  "marker",
      +  "text",
      +  "arrow",
      +  "vertical_line",
      +  "fibonacci",
      +  "measurement",
      +  "long_position",
      +  "short_position"
      +]
    • addedInput schema / properties / upColor
      Added value: +{
      +  "description": "Hex color of rising candles. Used with action=\"set_appearance\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / visible
      Added value: +{
      +  "description": "Used with action=\"draw\", action=\"update_drawing\".",
      +  "type": "boolean"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / brokerCredentialId / description
      Previous value: -"action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\": broker charts: the saved connection to read, from list_broker_credentials. Leave empty when the person has one working connection; with several, ask which one. | action=\"search_symbols\": A connected broker from live_chart(action=\"list_sources\"). Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\", action=\"search_symbols\"."New value: +"action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\": broker charts: the saved connection to read, from live_chart(action=\"list_sources\"). For several eligible sources, choose automatically using current asset support and observed symbol/history coverage; use the first compatible result to break ties. Honor a named source or the existing chart. Never ask the person to choose merely because several qualify. Leave empty only for a sole working connection. | action=\"search_symbols\": A connected broker from live_chart(action=\"list_sources\"). Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\", action=\"search_symbols\"."
    • changedInput schema / properties / sourceKind / description
      Previous value: -"Where prices come from: \"broker\" reads the person’s own connected broker, for stocks, ETFs, options, futures and anything else it provides; \"ccxt_public\" is a free public crypto exchange feed (needs exchangeId). There is no other source. Used with action=\"set_symbol\", action=\"add_overlay\", action=\"create_chart\"."New value: +"Where prices come from: \"broker\" reads the person’s own connected broker, for stocks, ETFs, options, futures and anything else it provides; \"ccxt_public\" is a free public crypto exchange feed (needs exchangeId). There is no other source. Used with action=\"set_symbol\", action=\"search_symbols\", action=\"add_overlay\", action=\"create_chart\"."
  5. Changed17 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"Which operation to run: \"list\", \"get\", \"set_symbol\", \"add_indicator\", \"update_indicator\", \"remove_indicator\", \"draw\", \"update_drawing\", \"remove_drawing\", \"clear_drawings\", \"create_chart\", \"describe_drawings\", \"add_overlay\", \"remove_overlay\", \"summarize\". See the tool description for each one."New value: +"Which operation to run: \"list\", \"get\", \"set_symbol\", \"add_indicator\", \"update_indicator\", \"remove_indicator\", \"draw\", \"update_drawing\", \"remove_drawing\", \"clear_drawings\", \"create_chart\", \"list_sources\", \"search_symbols\", \"describe_drawings\", \"add_overlay\", \"remove_overlay\", \"summarize\". See the tool description for each one."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "get",
      -  "set_symbol",
      -  "add_indicator",
      -  "update_indicator",
      -  "remove_indicator",
      -  "draw",
      -  "update_drawing",
      -  "remove_drawing",
      -  "clear_drawings",
      -  "create_chart",
      -  "describe_drawings",
      -  "add_overlay",
      -  "remove_overlay",
      -  "summarize"
      -]New value: +[
      +  "list",
      +  "get",
      +  "set_symbol",
      +  "add_indicator",
      +  "update_indicator",
      +  "remove_indicator",
      +  "draw",
      +  "update_drawing",
      +  "remove_drawing",
      +  "clear_drawings",
      +  "create_chart",
      +  "list_sources",
      +  "search_symbols",
      +  "describe_drawings",
      +  "add_overlay",
      +  "remove_overlay",
      +  "summarize"
      +]
    • addedInput schema / properties / asset
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "broker charts: leave empty for a stock or ETF. Otherwise the asset class and terms, e.g. {\"assetType\":\"option\",\"expiration\":\"2026-12-18\",\"strike\":200,\"right\":\"call\"}, {\"assetType\":\"future\",\"expiration\":\"2026-12-18\",\"exchange\":\"CME\"} or {\"assetType\":\"index\"}. Used with action=\"set_symbol\", action=\"create_chart\", action=\"search_symbols\", action=\"add_overlay\".",
      +  "properties": {
      +    "assetType": {
      +      "enum": [
      +        "stock",
      +        "option",
      +        "future",
      +        "cont_future",
      +        "crypto_future",
      +        "forex",
      +        "crypto",
      +        "index",
      +        "prediction_contract"
      +      ],
      +      "type": "string"
      +    },
      +    "exchange": {
      +      "description": "For futures, e.g. \"CME\".",
      +      "type": "string"
      +    },
      +    "expiration": {
      +      "description": "YYYY-MM-DD, for options and futures.",
      +      "type": "string"
      +    },
      +    "outcome": {
      +      "description": "Selected prediction-contract outcome, such as yes or no. Keep it with the exact native ticker; a Bitcoin prediction contract is not spot Bitcoin.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "quoteSymbol": {
      +      "description": "For crypto and forex, e.g. \"USD\".",
      +      "type": "string"
      +    },
      +    "right": {
      +      "enum": [
      +        "call",
      +        "put"
      +      ],
      +      "type": "string"
      +    },
      +    "strike": {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "assetType"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / brokerCredentialId
      Added value: +{
      +  "description": "action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\": broker charts: the saved connection to read, from list_broker_credentials. Leave empty when the person has one working connection; with several, ask which one. | action=\"search_symbols\": A connected broker from live_chart(action=\"list_sources\"). Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\", action=\"search_symbols\".",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • addedInput schema / properties / chip
      Added value: +{
      +  "description": "Narrow a search to one kind of market. Leave empty for all. Used with action=\"search_symbols\".",
      +  "enum": [
      +    "all",
      +    "stocks",
      +    "funds",
      +    "crypto"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / exchangeId / description
      Previous value: -"action=\"set_symbol\": Lowercase exchange id, e.g. \"phemex\". Leave empty to keep it. | action=\"create_chart\": Lowercase exchange id, required for ccxt_public, e.g. \"phemex\". Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\"."New value: +"action=\"set_symbol\": Lowercase exchange id, e.g. \"phemex\". Leave empty to keep it. | action=\"create_chart\": Lowercase exchange id, required for ccxt_public, e.g. \"phemex\". | action=\"search_symbols\": A public crypto feed from live_chart(action=\"list_sources\"). Used with action=\"set_symbol\", action=\"create_chart\", action=\"search_symbols\", action=\"add_overlay\"."
    • addedInput schema / properties / lookbackDays / anyOf
      Added value: +[
      +  {
      +    "anyOf": [
      +      {
      +        "exclusiveMinimum": 0,
      +        "type": "integer"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  {
      +    "exclusiveMinimum": 0,
      +    "type": "integer"
      +  }
      +]
    • changedInput schema / properties / lookbackDays / description
      Previous value: -"Window to summarize, counted back from the last bar, e.g. 365 for the last year. Used with action=\"summarize\"."New value: +"action=\"set_symbol\", action=\"create_chart\": Visible calendar days of history, e.g. 365 for a year or about 3652 for ten years. Fetches native history with indicator warm-up, within the existing 5000-bar worker limit. Read summarize for actual provider coverage. Omit to preserve the current window; null restores the default. | action=\"summarize\": Window to summarize, counted back from the last bar, e.g. 365 for the last year. Used with action=\"set_symbol\", action=\"create_chart\", action=\"summarize\"."
    • removedInput schema / properties / lookbackDays / exclusiveMinimum
      Removed value: -0
    • removedInput schema / properties / lookbackDays / maximum
      Removed value: -3650
    • removedInput schema / properties / lookbackDays / type
      Removed value: -"integer"
    • addedInput schema / properties / query
      Added value: +{
      +  "description": "A ticker or name, e.g. \"SPY\", \"BTC\" or \"apple\". Used with action=\"search_symbols\".",
      +  "maxLength": 256,
      +  "type": "string"
      +}
    • changedInput schema / properties / sourceKind / description
      Previous value: -"Where prices come from: \"botspot_data\" for stocks, ETFs and indexes (e.g. NVDA, SPY, ^SPX); \"ccxt_public\" for crypto on a public exchange (needs exchangeId). Used with action=\"set_symbol\", action=\"add_overlay\", action=\"create_chart\"."New value: +"Where prices come from: \"broker\" reads the person’s own connected broker, for stocks, ETFs, options, futures and anything else it provides; \"ccxt_public\" is a free public crypto exchange feed (needs exchangeId). There is no other source. Used with action=\"set_symbol\", action=\"add_overlay\", action=\"create_chart\"."
    • changedInput schema / properties / sourceKind / enum
      Previous value: -[
      -  "ccxt_public",
      -  "botspot_data"
      -]New value: +[
      +  "ccxt_public",
      +  "broker"
      +]
    • addedInput schema / properties / style
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Chart settings. Replaces the saved settings, so send everything to keep; {} restores the defaults. Used with action=\"update_indicator\".",
      +  "properties": {
      +    "inputsInStatusLine": {
      +      "description": "Show the inputs in the legend row.",
      +      "type": "boolean"
      +    },
      +    "labelsOnPriceScale": {
      +      "description": "Tag each line on the price scale.",
      +      "type": "boolean"
      +    },
      +    "outputs": {
      +      "additionalProperties": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "color": {
      +            "description": "Hex color, e.g. \"#22c55e\".",
      +            "type": "string"
      +          },
      +          "lineWidth": {
      +            "type": "number"
      +          },
      +          "visible": {
      +            "type": "boolean"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "description": "By output id (from the indicator description): show it, its color and width.",
      +      "type": "object"
      +    },
      +    "precision": {
      +      "description": "Decimals shown, 0 to 8. Leave out for the default.",
      +      "type": "integer"
      +    },
      +    "valuesInStatusLine": {
      +      "description": "Show the values in the legend row.",
      +      "type": "boolean"
      +    },
      +    "visibility": {
      +      "additionalProperties": false,
      +      "description": "Bar sizes the indicator shows on, per unit (minutes 1-59, hours 1-24, days 1-366, weeks 1-52). A unit left out always shows.",
      +      "properties": {
      +        "days": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "enabled": {
      +              "type": "boolean"
      +            },
      +            "max": {
      +              "type": "integer"
      +            },
      +            "min": {
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "enabled",
      +            "min",
      +            "max"
      +          ],
      +          "type": "object"
      +        },
      +        "hours": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "enabled": {
      +              "type": "boolean"
      +            },
      +            "max": {
      +              "type": "integer"
      +            },
      +            "min": {
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "enabled",
      +            "min",
      +            "max"
      +          ],
      +          "type": "object"
      +        },
      +        "minutes": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "enabled": {
      +              "type": "boolean"
      +            },
      +            "max": {
      +              "type": "integer"
      +            },
      +            "min": {
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "enabled",
      +            "min",
      +            "max"
      +          ],
      +          "type": "object"
      +        },
      +        "weeks": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "enabled": {
      +              "type": "boolean"
      +            },
      +            "max": {
      +              "type": "integer"
      +            },
      +            "min": {
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "enabled",
      +            "min",
      +            "max"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / symbol / description
      Previous value: -"action=\"set_symbol\": Stock, ETF or index ticker for botspot_data (e.g. \"NVDA\", \"SPY\", \"^SPX\"), or a CCXT unified symbol for ccxt_public (e.g. \"BTC/USDT:USDT\"). Leave empty to keep it, for example when only the bar size changes. | action=\"create_chart\": Ticker, e.g. \"NVDA\", \"SPY\", \"^SPX\" (botspot_data) or \"BTC/USDT:USDT\" (ccxt_public). | action=\"add_overlay\": kind=symbol: the ticker to compare, e.g. \"SPY\" or \"^SPX\". Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\". Required for action=\"create_chart\"."New value: +"action=\"set_symbol\": Ticker for a broker chart (e.g. \"NVDA\", \"SPY\"), or a CCXT unified symbol for ccxt_public (e.g. \"BTC/USDT:USDT\"). Leave empty to keep it, for example when only the bar size changes. | action=\"create_chart\": Ticker, e.g. \"NVDA\" or \"SPY\" (broker), or \"BTC/USDT:USDT\" (ccxt_public). | action=\"add_overlay\": kind=symbol: the ticker to compare, e.g. \"SPY\". Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\". Required for action=\"create_chart\"."
    • changedInput schema / properties / title / description
      Previous value: -"Used with action=\"create_chart\"."New value: +"Optional chart title. Update a setting-specific title when the requested symbol, outcome or timeframe change would make it misleading. Omit to keep the chosen title. Used with action=\"set_symbol\", action=\"create_chart\"."
  6. Changed2 schema fields changed
    • changedInput schema / properties / key / description
      Previous value: -"Indicator key, e.g. \"rsi\", \"ema\", \"macd\", \"bbands\", \"wavetrend\". Used with action=\"add_indicator\". Required for action=\"add_indicator\"."New value: +"Indicator key, e.g. \"rsi\", \"ema\", \"macd\", \"bbands\", \"wavetrend\". For a saved custom indicator use the chartKey that indicators(action=\"create\") returned. Used with action=\"add_indicator\". Required for action=\"add_indicator\"."
    • changedInput schema / properties / symbol / description
      Previous value: -"action=\"set_symbol\": Stock, ETF or index ticker for botspot_data (e.g. \"NVDA\", \"SPY\", \"^SPX\"), or a CCXT unified symbol for ccxt_public (e.g. \"BTC/USDT:USDT\"). | action=\"create_chart\": Ticker, e.g. \"NVDA\", \"SPY\", \"^SPX\" (botspot_data) or \"BTC/USDT:USDT\" (ccxt_public). | action=\"add_overlay\": kind=symbol: the ticker to compare, e.g. \"SPY\" or \"^SPX\". Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\". Required for action=\"set_symbol\", action=\"create_chart\"."New value: +"action=\"set_symbol\": Stock, ETF or index ticker for botspot_data (e.g. \"NVDA\", \"SPY\", \"^SPX\"), or a CCXT unified symbol for ccxt_public (e.g. \"BTC/USDT:USDT\"). Leave empty to keep it, for example when only the bar size changes. | action=\"create_chart\": Ticker, e.g. \"NVDA\", \"SPY\", \"^SPX\" (botspot_data) or \"BTC/USDT:USDT\" (ccxt_public). | action=\"add_overlay\": kind=symbol: the ticker to compare, e.g. \"SPY\" or \"^SPX\". Used with action=\"set_symbol\", action=\"create_chart\", action=\"add_overlay\". Required for action=\"create_chart\"."
  7. Changed1 schema field changed
    • changedInput schema / properties / timeframe / enum
      Previous value: -[
      -  "1m",
      -  "1d"
      -]New value: +[
      +  "1m",
      +  "5m",
      +  "15m",
      +  "30m",
      +  "1h",
      +  "4h",
      +  "1d",
      +  "1w"
      +]
  8. Added

TDQS

A4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses side effects (the chart page updates live), result fields (chartId, sourceSelection, needsBroker, connectUrl), and failure behavior (add_overlay adds nothing and returns a reason if data cannot load). It also warns not to put a symbol on a source that lacks it and explains the connect_broker fallback. This is unusually rich behavioral context for a mutation-capable tool.

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

Conciseness3/5

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

The per-action sections provide useful structure for an 18-action tool, but the opening paragraph is a dense wall of text that crams many unrelated operations together. Some phrasing is cryptic, such as the arrowhead and head.bar.o reporting instructions, and much of the content repeats schema descriptions. It is comprehensive but not efficiently front-loaded.

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 43-parameter, 18-action tool with no output schema, the description covers each action, result identifiers, source selection, and the contents returned by summarize and describe_drawings. It is largely complete, though some action return shapes (list, get) and error cases remain only briefly described. The overall coverage is strong enough for an agent 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 description coverage is 100%, so the schema already documents nearly every parameter, including action-specific usage and examples. The description reinforces a few cross-cutting rules such as sending only fields listed for the action and using chartId empty for the last-viewed chart, but most of this duplicates the schema. Baseline 3 is appropriate.

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 opening sentence states a specific verb and resource: create and edit interactive price and indicator charts on the BotSpot Charts page. It distinguishes chart control from adjacent tools by naming indicators(action="create") for saved custom indicators and by framing summarize as the chart-question path. It does not explicitly contrast with sibling chart tools such as get_backtest_chart_series, so a 4 rather than a 5.

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?

The description gives concrete routing guidance: use summarize rather than web searches, call list_sources to pick a compatible source automatically, and use search_symbols without a broker. It also explains when create_chart will return a connect_broker action and how to respond. It does not systematically state when-not-to-use each action or fully separate chart reads from other sibling tools, leaving some inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.