Skip to main content
Glama

Get stock or ETF performance and risk

get_security_metrics
Read-onlyIdempotent

Use this when the user asks how a single US stock or ETF has performed or how risky it is: YTD, 1-year and 5-year annualized returns, max drawdown, volatility, Sharpe, Sortino, beta, alpha and dividend yield, with a 1Y/5Y chart. End-of-day data for US large and mid caps, major foreign stocks and US ETFs. Not for intraday quotes, news, earnings, fundamentals or price targets.

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": {
      "ticker": "<ticker>"
    },
    "name": "get_security_metrics"
  }
}

Input Schema

NameRequiredDescriptionDefault
tickerYesUS ticker symbol, e.g. AAPL, VOO or BRK.B

Output Schema

NameRequiredDescriptionDefault
urlYes
asOfYesMarket date (YYYY-MM-DD) of the latest close behind every number
securityYes
comparisonsYesPopular Redstone comparisons for this ticker

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedOutput schema / properties / security / properties / dividendYieldPct
      Added value: +{
      +  "description": "Trailing 12-month dividend yield: dividends that went ex in the past year over the latest close. 0 pays none; null when unknown (paid in another currency)",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / security / properties / statsSince / description
      Previous value: -"YYYY-MM-DD, set only when there is less than a year of history: the 1Y figures (return, drawdown, Sharpe, Sortino, beta, alpha) then run from this first close, and so does the YTD return if it falls this year. Screens on those metrics leave such securities out"New value: +"YYYY-MM-DD, set only when there is less than a year of history: the 1Y figures (return, drawdown, volatility, Sharpe, Sortino, beta, alpha, yield) then run from this first close, and so does the YTD return if it falls this year. Screens on those metrics leave such securities out"
    • addedOutput schema / properties / security / properties / volatility1yPct
      Added value: +{
      +  "description": "Annualized standard deviation of daily returns over the past year",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / security / required
      Previous value: -[
      -  "return1dPct",
      -  "returnYtdPct",
      -  "return1yPct",
      -  "return5yAnnualizedPct",
      -  "maxDrawdown1yPct",
      -  "sharpe1y",
      -  "sortino1y",
      -  "beta1y",
      -  "alpha1yPct",
      -  "statsSince",
      -  "ticker",
      -  "name",
      -  "type",
      -  "sector",
      -  "price",
      -  "url"
      -]New value: +[
      +  "return1dPct",
      +  "returnYtdPct",
      +  "return1yPct",
      +  "return5yAnnualizedPct",
      +  "maxDrawdown1yPct",
      +  "sharpe1y",
      +  "sortino1y",
      +  "beta1y",
      +  "alpha1yPct",
      +  "volatility1yPct",
      +  "dividendYieldPct",
      +  "statsSince",
      +  "ticker",
      +  "name",
      +  "type",
      +  "sector",
      +  "price",
      +  "url"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / security / properties / statsSince
      Added value: +{
      +  "description": "YYYY-MM-DD, set only when there is less than a year of history: the 1Y figures (return, drawdown, Sharpe, Sortino, beta, alpha) then run from this first close, and so does the YTD return if it falls this year. Screens on those metrics leave such securities out",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / security / required
      Previous value: -[
      -  "return1dPct",
      -  "returnYtdPct",
      -  "return1yPct",
      -  "return5yAnnualizedPct",
      -  "maxDrawdown1yPct",
      -  "sharpe1y",
      -  "sortino1y",
      -  "beta1y",
      -  "alpha1yPct",
      -  "ticker",
      -  "name",
      -  "type",
      -  "sector",
      -  "price",
      -  "url"
      -]New value: +[
      +  "return1dPct",
      +  "returnYtdPct",
      +  "return1yPct",
      +  "return5yAnnualizedPct",
      +  "maxDrawdown1yPct",
      +  "sharpe1y",
      +  "sortino1y",
      +  "beta1y",
      +  "alpha1yPct",
      +  "statsSince",
      +  "ticker",
      +  "name",
      +  "type",
      +  "sector",
      +  "price",
      +  "url"
      +]
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: data is end-of-day (not intraday) and coverage is limited to US large/mid caps, major foreign stocks and US ETFs. It doesn't mention latency, pagination, or what happens for an uncovered ticker, which keeps it below a 5.

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?

Two sentences, both front-loaded: the trigger first, the metric payload second, the exclusions last. The dense metric list is functional specification rather than filler, and nothing repeats the schema or annotations.

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

Completeness5/5

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

An output schema exists, so return shape is handled elsewhere; the description still usefully previews the metric set and the 1Y/5Y chart. Combined with the coverage universe and exclusions, an agent has everything needed to decide to call this and to pass a valid ticker.

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% for the single ticker parameter, including examples (AAPL, VOO, BRK.B), so the baseline is 3. The description adds only indirect value by implying the universe of valid symbols (US large/mid caps, major foreign stocks, US ETFs) rather than saying anything new about ticker syntax or format.

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

Purpose5/5

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

The description names a concrete verb-and-resource pair ('how a single US stock or ETF has performed or how risky it is') and enumerates the exact metrics returned (returns, drawdown, volatility, Sharpe, Sortino, beta, alpha, dividend yield). The word 'single' distinguishes it from compare_securities without the agent needing to open either schema.

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

Usage Guidelines4/5

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

It gives an explicit trigger ('Use this when the user asks how a single US stock or ETF has performed or how risky it is') and explicit exclusions ('Not for intraday quotes, news, earnings, fundamentals or price targets'). What's missing is naming the sibling to route to instead — compare_securities or screen_securities — for multi-ticker or screening use cases, so the agent must infer the alternative.

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.

Resources