Skip to main content
Glama

Screen stocks and ETFs by performance and risk

screen_securities
Read-onlyIdempotent

Use this when the user wants a ranked list of US stocks or ETFs by a performance, risk or dividend yield metric, optionally within a sector or ETF category (e.g. "lowest volatility dividend ETFs", "highest yielding bond ETFs", "highest Sharpe tech stocks this year", "energy stocks with the smallest drawdown"). Covers about 2,900 US-listed stocks and about 1,200 US ETFs, end-of-day. Not for fundamentals (P/E, revenue), news or buy recommendations.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "screen_securities"
  }
}

Input Schema

NameRequiredDescriptionDefault
typeNoLimit to stocks, ETFs, or bothall
limitNo
orderNodesc
sectorNoCase-insensitive match on a stock's GICS sector (e.g. Information Technology, Health Care, Energy, Financials) or an ETF's category (e.g. Dividend, Bonds, Treasury, Large Cap Growth, Emerging Markets, Gold)
sortByNoMetric to rank by. For lowest risk, sort volatility1yPct ascending, maxDrawdown1yPct descending (closest to 0) or beta1y ascendingreturn1yPct
filtersNoOptional bounds in each metric's own units, e.g. {metric: 'beta1y', max: 1}. maxDrawdown1yPct is negative, so a drawdown smaller than 20% is {metric: 'maxDrawdown1yPct', min: -20}

Output Schema

NameRequiredDescriptionDefault
urlYesRedstone screener with every column and filter
asOfYesMarket date (YYYY-MM-DD) of the latest close behind every number
resultsYes
totalMatchesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedInput schema / properties / filters / items / properties / metric / enum
      Previous value: -[
      -  "return1dPct",
      -  "returnYtdPct",
      -  "return1yPct",
      -  "return5yAnnualizedPct",
      -  "maxDrawdown1yPct",
      -  "sharpe1y",
      -  "sortino1y",
      -  "beta1y",
      -  "alpha1yPct"
      -]New value: +[
      +  "return1dPct",
      +  "returnYtdPct",
      +  "return1yPct",
      +  "return5yAnnualizedPct",
      +  "maxDrawdown1yPct",
      +  "sharpe1y",
      +  "sortino1y",
      +  "beta1y",
      +  "alpha1yPct",
      +  "volatility1yPct",
      +  "dividendYieldPct"
      +]
    • changedInput schema / properties / sortBy / description
      Previous value: -"Metric to rank by. For lowest risk, sort maxDrawdown1yPct descending (closest to 0) or beta1y ascending"New value: +"Metric to rank by. For lowest risk, sort volatility1yPct ascending, maxDrawdown1yPct descending (closest to 0) or beta1y ascending"
    • changedInput schema / properties / sortBy / enum
      Previous value: -[
      -  "return1dPct",
      -  "returnYtdPct",
      -  "return1yPct",
      -  "return5yAnnualizedPct",
      -  "maxDrawdown1yPct",
      -  "sharpe1y",
      -  "sortino1y",
      -  "beta1y",
      -  "alpha1yPct"
      -]New value: +[
      +  "return1dPct",
      +  "returnYtdPct",
      +  "return1yPct",
      +  "return5yAnnualizedPct",
      +  "maxDrawdown1yPct",
      +  "sharpe1y",
      +  "sortino1y",
      +  "beta1y",
      +  "alpha1yPct",
      +  "volatility1yPct",
      +  "dividendYieldPct"
      +]
    • addedOutput schema / properties / results / items / 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 / results / items / 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 / results / items / properties / volatility1yPct
      Added value: +{
      +  "description": "Annualized standard deviation of daily returns over the past year",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / 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 / results / items / 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 / results / items / 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.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description's added value is the universe size (~2,900 stocks / ~1,200 ETFs) and the end-of-day data cadence, both genuinely useful for deciding whether results will satisfy a request. It does not mention the 25-row cap or latency, but the cap is in the schema.

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

Conciseness5/5

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

Two sentences, tightly packed: usage trigger first, then universe scope, then exclusion. Nothing is repeated from schema or annotations, and the illustrative examples double as disambiguation rather than filler.

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-value explanation is unnecessary; the description instead supplies exactly the missing context an agent needs — universe size, data freshness, and hard exclusions. For a 6-parameter, zero-required read tool, nothing material is left ambiguous.

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

Parameters4/5

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

Schema coverage is 67% and the undocumented parameters (limit, order) are low-risk defaults. The description earns extra credit by mapping natural-language intent onto sortBy semantics — 'lowest volatility dividend ETFs', 'smallest drawdown', 'highest Sharpe tech stocks' — showing how sector + sortBy + order compose, which the schema alone does not spell out.

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?

States a specific verb+resource: a ranked list of US stocks or ETFs by a performance, risk, or dividend metric. It bounds the universe (~2,900 stocks, ~1,200 ETFs, end-of-day) and explicitly excludes fundamentals, news, and recommendations, which distinguishes it sharply from get_security_metrics and compare_securities.

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 opening 'Use this when the user wants a ranked list...' plus the four quoted natural-language phrasings make the triggering condition concrete, and 'Not for fundamentals (P/E, revenue), news or buy recommendations' is an explicit exclusion. It stops short of naming sibling tools as alternatives, so routing decisions rely on inference from the exclusion rather than a direct pointer.

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