Skip to main content
Glama
fiale-plus

tradingview-mcp-server

by fiale-plus

NPM Version NPM Downloads Test Status License MCP

Unofficial MCP server and CLI for TradingView's market screener API — stocks, forex, crypto & ETFs.

AI-powered investment research for patient, systematic investors.

Two modes, one package: Use as an MCP server with Claude, or as a standalone CLI tool that pipes to jq, csvtool, or any Unix workflow.

TradingView MCP Server


Table of Contents


Related MCP server: J-SQUAD TradingView MCP Combined

Demo

Features

  • Dual mode: MCP + CLI — use as an MCP server with Claude or as a standalone tradingview-cli command

  • 100+ screener fields including Piotroski F-Score, Altman Z-Score, Graham Number, analyst consensus, and dividend growth streaks

  • 18 filter operators including crosses_above / crosses_below for golden cross detection

  • 14 pre-built strategies covering value, growth, quality, GARP, deep value, breakouts, compounders, and macro monitoring

  • Symbol discovery — search for TradingView symbols by name, ticker, or description via search_symbols

  • Technical analysis — TradingView-style buy/sell/neutral summaries and multi-timeframe TA ranking via get_ta_summary and rank_by_ta

  • Market metadata — discover available screener fields per market via get_market_metainfo

  • 9 investor workflow commands — from /due-diligence to /macro-dashboard — built on top of the MCP tools

  • Multi-asset coverage — stocks, ETFs, forex, and crypto with asset-specific field discovery via list_fields

  • Smart caching and rate limiting — configurable TTL and requests-per-minute to keep usage responsible


Installation

npm install -g tradingview-mcp-server

Option 2: Clone Repository (includes demo commands)

git clone https://github.com/fiale-plus/tradingview-mcp-server.git
cd tradingview-mcp-server
npm install

# Quick setup — creates project-level MCP config
./local-setup.sh          # Linux/Mac
local-setup.bat           # Windows

# Restart Claude Code and try: /market-regime or /run-screener

CLI Usage

After installing the package, the tradingview-cli command is available globally:

# List all pre-built screening strategies
tradingview-cli presets

# Screen stocks using a preset
tradingview-cli screen stocks --preset quality_stocks --limit 10

# Or load a strict versioned JSON preset file
tradingview-cli screen stocks --preset-file ./my-preset.json --limit 10

# Screen with custom filters
tradingview-cli screen stocks --filters '[{"field":"price_earnings_ttm","operator":"less","value":15}]'

# Look up specific symbols (indexes, stocks)
tradingview-cli lookup NASDAQ:AAPL TVC:SPX NYSE:MSFT

# Discover available screening fields
tradingview-cli fields --asset-type stock --category fundamental

# Search for a symbol
tradingview-cli search apple --exchange NASDAQ

# Get market metadata
tradingview-cli metainfo america --fields name,close,market_cap_basic

# Technical analysis summary
tradingview-cli ta NASDAQ:AAPL NASDAQ:NVDA

# Rank symbols by TA score
tradingview-cli rank-ta NASDAQ:AAPL NASDAQ:MSFT NASDAQ:NVDA --timeframes 60,1D --weights '{"1D":3}'

Output Formats

# JSON (default) — pipe to jq
tradingview-cli screen stocks --preset value_stocks | jq '.stocks[].name'

# CSV — pipe to file or csvtool
tradingview-cli screen stocks --preset value_stocks -f csv > results.csv

# Table — human-readable terminal output
tradingview-cli screen stocks --preset value_stocks -f table

CLI Commands

Command

Description

screen stocks [opts]

Screen stocks by fundamental/technical criteria

screen forex [opts]

Screen forex pairs

screen crypto [opts]

Screen cryptocurrencies

screen etf [opts]

Screen ETFs

lookup <symbols...>

Look up specific symbols by ticker

search <query> [opts]

Search for symbols by name, ticker, or description

metainfo <market> [opts]

Get metadata about a market screener

ta <symbols...> [opts]

Get technical analysis summary for symbols

rank-ta <symbols...> [opts]

Rank symbols by weighted TA scores

fields [opts]

List available screening fields

preset <name>

Get a preset strategy's details

presets

List all available presets

Screen Options

Flag

Description

--filters <json>

Filter array as JSON string

--preset <name>

Load a built-in preset (exclusive with --preset-file)

--preset-file <path>

Load a strict schemaVersion: 1 JSON preset file (exclusive with --preset)

--markets <market>

Market to screen (repeatable, stocks/etf only)

--sort-by <field>

Sort by field

--sort-order <asc|desc>

Sort direction

--limit <n>

Max results (1-200, default 20)

--columns <col>

Columns to include (repeatable)

-f, --format <fmt>

Output: json, csv, or table


Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json on Mac:

{
  "mcpServers": {
    "tradingview": {
      "command": "npx",
      "args": ["-y", "tradingview-mcp-server"]
    }
  }
}

Claude Code

Create .mcp.json in your project root:

{
  "mcpServers": {
    "tradingview": {
      "command": "npx",
      "args": ["-y", "tradingview-mcp-server"]
    }
  }
}

Enable in .claude/settings.local.json:

{
  "enableAllProjectMcpServers": true
}

Environment Variables

Variable

Default

Description

CACHE_TTL_SECONDS

300

How long to cache API responses. Valid range: 0 (disabled) to 3600 seconds

RATE_LIMIT_RPM

10

Maximum API requests per minute. Valid range: 1 to 60

Invalid values fail before the MCP server starts. These limits protect TradingView's public endpoints; they do not provide a TradingView quota or guarantee availability.

Upstream limitations

This package is an unofficial client of TradingView's public scanner and symbol-search endpoints. The endpoints are unauthenticated, can change or reject traffic without notice, and may return delayed or incomplete market data. The server does not provide historical data, brokerage execution, alerts, or a TradingView data entitlement.


MCP Tools

The MCP server exposes twelve tools to any compatible MCP client. The Claude Code commands listed later are repository-local workflows built on top of these tools; they are not additional MCP tools.

Tool

Description

Key Parameters

screen_stocks

Screen stocks by fundamental and technical criteria

filters, markets, sort_by, limit, columns

screen_forex

Screen forex pairs by technical criteria

filters, sort_by, limit

screen_crypto

Screen cryptocurrencies by market and technical criteria

filters, sort_by, limit

screen_etf

Screen ETFs by performance and technical criteria

filters, markets, sort_by, limit

lookup_symbols

Direct lookup by ticker — required for indexes like TVC:SPX

symbols (up to 100), columns

list_fields

Discover available fields for any asset type

asset_type (stock, forex, crypto, etf), category

search_symbols

Search for symbols by name, ticker, or description

query, exchange, asset_type, limit

get_market_metainfo

Get metadata about a market screener and available fields

market, fields, mode (summary/raw)

get_ta_summary

TradingView-style technical analysis summary (buy/sell/neutral)

symbols, timeframes, include_components

rank_by_ta

Rank symbols by weighted TA scores across timeframes

symbols, timeframes, weights

get_preset

Retrieve a pre-configured screening strategy by key

preset_name

list_presets

List all available preset strategies with descriptions

Filter Structure

All screening tools accept filters in this shape:

{ "field": "return_on_equity", "operator": "greater", "value": 15 }
{ "field": "RSI", "operator": "in_range", "value": [40, 65] }
{ "field": "SMA50", "operator": "crosses_above", "value": "SMA200" }
{ "field": "exchange", "operator": "in_range", "value": ["NASDAQ", "NYSE"] }

Cross-field comparison (second example above) enables golden cross / death cross detection without needing a value on the right-hand side.

Symbol Discovery

Use search_symbols to find exact TradingView identifiers before screening:

// Search for Apple
{ "query": "apple" }

// Narrow by exchange and type
{ "query": "bitcoin", "exchange": "BINANCE", "asset_type": "crypto" }

Returns normalized symbols with exchange, type, and currency.

Market Metainfo

Use get_market_metainfo to discover available fields for a market:

// All fields for US stocks
{ "market": "america" }

// Specific fields only
{ "market": "america", "fields": ["name", "close", "market_cap_basic"] }

// Raw passthrough for debugging
{ "market": "america", "mode": "raw" }

Technical Analysis Summary

Use get_ta_summary for TradingView-style buy/sell/neutral labels:

// Single symbol, default timeframes (60m, 4H, 1D, 1W)
{ "symbols": ["NASDAQ:AAPL"] }

// Multiple symbols with custom timeframes
{ "symbols": ["NASDAQ:AAPL", "NASDAQ:NVDA"], "timeframes": ["60", "240", "1D", "1W"] }

Returns labels (strong_buy, buy, neutral, sell, strong_sell) plus raw scores based on oscillators and moving averages.

TA Ranking

Use rank_by_ta to compare symbols by weighted technical alignment:

// Equal-weight ranking
{ "symbols": ["NASDAQ:AAPL", "NASDAQ:MSFT", "NASDAQ:NVDA"] }

// Weight daily timeframe 3x more
{ "symbols": ["NASDAQ:AAPL", "NASDAQ:MSFT"], "weights": { "1D": 3, "1W": 2 } }

Returns ranked list with per-timeframe breakdown, weighted average score, and structured metadata. See Response metadata and partial results below.

Response metadata and partial results

Screening, lookup, search, market metainfo, and TA/ranking responses include a metadata object:

{
  "retrieved_at": "2026-08-16T00:00:00.000Z",
  "source": "https://scanner.tradingview.com/global/scan",
  "cache_hit": false,
  "requested_count": 20,
  "returned_count": 18,
  "missing_symbols": []
}
  • retrieved_at is the source-data retrieval time; cache hits preserve it so callers can assess data age.

  • source identifies the public endpoint used.

  • cache_hit distinguishes an in-memory response from a new upstream request.

  • requested_count and returned_count describe the requested items or limit and rows returned; consult unavailable_symbols and excluded_symbols for usable TA coverage.

  • missing_symbols lists requested symbols absent from an upstream response. TA responses may also include unavailable_symbols when symbols exist but have no usable score.

  • rank_by_ta additionally returns excluded_symbols with missing_symbol or unavailable_ta reasons. Missing data is never converted into a neutral score.

list_fields, get_preset, and list_presets return their documented collections without this metadata wrapper. Raw metainfo mode preserves the upstream payload under raw rather than normalizing it.


Screening Fields

Use list_fields to browse fields. Pass asset_type to get tailored lists for each asset class.

Stocks (104 fields in the built-in stock catalog)

Valuation price_earnings_ttm, price_book_fq, price_sales_current, enterprise_value_current, enterprise_value_ebitda_ttm, enterprise_value_to_ebit_ttm, price_earnings_growth_ttm (PEG), ebitda

Profitability & Returns return_on_equity, return_on_assets, return_on_invested_capital_fq, gross_margin_ttm, operating_margin_ttm, net_margin_ttm, after_tax_margin, pre_tax_margin_ttm, free_cash_flow_margin_ttm

Growth total_revenue_yoy_growth_ttm, earnings_per_share_diluted_yoy_growth_ttm, revenue_per_share_ttm, total_revenue, net_income, earnings_per_share_diluted_ttm

Balance Sheet debt_to_equity, total_debt, total_assets, current_ratio, free_cash_flow_ttm, free_cash_flow_fq

Dividends dividend_yield_recent, dividends_yield_current, dividend_payout_ratio_ttm, continuous_dividend_payout_years, dps_yoy_growth_ttm

Composite Scores (unique differentiators)

Field

Description

piotroski_f_score_ttm

0–9 financial strength composite. Score ≥7 = strong, ≤2 = weak

altman_z_score_ttm

Bankruptcy predictor. >2.99 = safe, 1.81–2.99 = grey zone, <1.81 = distress

graham_numbers_ttm

Intrinsic value = sqrt(22.5 × EPS × BVPS). Price below = undervalued

Analyst Data Recommend.All (composite −1 to +1), analyst_recommendations_buy, analyst_recommendations_sell, analyst_recommendations_neutral, price_target_average, price_target_high, price_target_low

Technical RSI, SMA50, SMA200, EMA10, VWAP, ATR, ADX, Volatility.M, beta_1_year, beta_3_year, beta_5_year, Recommend.MA, Recommend.Other

Performance & Price Levels close, change, volume, average_volume_90d_calc, average_volume_30d_calc, relative_volume_10d_calc, Perf.5D, Perf.W, Perf.1M, Perf.3M, Perf.6M, Perf.Y, Perf.YTD, Perf.3Y, Perf.5Y, Perf.10Y, Perf.All, price_52_week_high, price_52_week_low, all_time_high, all_time_low, High.All

Metadata sector, industry, exchange, market, is_primary, indexes, fundamental_currency_code, earnings_release_next_trading_date_fq

ETFs

expense_ratio, shares_outstanding, dividends_yield_current, close, volume, Perf.W through Perf.Y, RSI, ATR

Crypto

close, change, volume, market_cap_basic, RSI, ATR, Volatility.M, Perf.W through Perf.Y

Forex

close, change, volume, RSI, ATR, ADX, Volatility.D, SMA50, SMA200, Perf.W through Perf.3M


Pre-built Strategies

Retrieve any preset with get_preset or browse all with list_presets.

Key

Name

Style

What It Screens For

quality_stocks

Quality Stocks (Conservative)

Quality

ROE >12%, low debt, low volatility, golden cross

value_stocks

Value Stocks

Value

P/E <15, P/B <1.5, ROE >10%

dividend_stocks

Dividend Stocks

Income

Yield >3%, large cap, D/E <1.0

momentum_stocks

Momentum Stocks

Momentum

RSI 50–70, golden cross, 1M performance >5%

growth_stocks

Growth Stocks

Growth

ROE >20%, operating margin >15%

quality_growth_screener

Quality Growth Screener

Quality + Growth

16 filters: ROE, margins, revenue growth, technicals, exchange filter

quality_compounder

Quality Compounders (Munger/Buffett)

Compounder

Gross margin >40%, ROIC >15%, FCF margin >15%, growing revenue

garp

GARP (Growth at Reasonable Price)

GARP

PEG <2, ROE >15%, revenue growth >10%

deep_value

Deep Value (Contrarian)

Deep Value

P/E <10, P/B <1.5, positive FCF

breakout_scanner

Breakout Scanner

Momentum

Near 52-week high, golden cross, RSI 50–75, above-average volume

earnings_momentum

Earnings Momentum

Earnings

EPS growth YoY >20%, revenue growth >10%, RSI 45–70

dividend_growth

Dividend Growth (Compounding Income)

Dividend Growth

Yield 1–6%, payout ratio <70%, positive FCF, consecutive years paying

macro_assets

Macro Asset Monitor

Macro

VIX, DXY, 10Y yield, Gold, WTI Oil, Bitcoin — direct symbol lookup

market_indexes

Global Market Indexes

Market Regime

13 global indexes (US, Europe, Asia, Nordic) with ATH and performance data

Versioned preset files

The CLI also accepts a strict, portable JSON preset:

tradingview-cli screen stocks --preset-file ./presets/quality.json --limit 20

The file must use schemaVersion: 1, include non-empty name and description, and define exactly one of filters or symbols. Optional keys are markets, sort_by, sort_order, limit (1–200), and columns; unknown keys, invalid operators, and invalid value shapes are rejected. --preset and --preset-file cannot be combined. Files are limited to 1 MiB. The CLI prints the file basename and SHA-256 to stderr after a successful load.

{
  "schemaVersion": 1,
  "name": "Quality with a tighter range",
  "description": "A reproducible quality screen",
  "filters": [
    { "field": "return_on_equity", "operator": "greater", "value": 15 }
  ],
  "markets": ["america"],
  "sort_by": "market_cap_basic",
  "sort_order": "desc",
  "limit": 20,
  "columns": ["name", "close", "return_on_equity"]
}

Investor Commands

The repository ships with 9 ready-to-use Claude Code commands in .claude/commands/. Clone the repo and run ./local-setup.sh to activate them.

Command

Usage

What It Does

/market-regime

/market-regime

Analyzes Nasdaq, OMX Stockholm 30, and Nikkei 225 vs ATH. Shows drawdown, RSI, and bull/correction/bear regime status

/run-screener

/run-screener

Interactive wizard to pick a preset strategy, run it, display a compact table, and save results to CSV

/due-diligence

/due-diligence AAPL

Structured due diligence report: valuation, quality, growth, balance sheet, dividends, technicals, performance, and checklist assessment

/compare-peers

/compare-peers AAPL MSFT GOOGL

Side-by-side comparison of 2–5 stocks across valuation, quality, growth, and momentum with category rankings

/sector-rotation

/sector-rotation

Screens top stocks in all 11 GICS sectors, calculates average performance, assigns Accelerating/Decelerating signals, and recommends a preset

/smart-screen

/smart-screen

Determines current market regime (bull/correction/bear) from SPX, then auto-selects and runs the most appropriate preset

/macro-dashboard

/macro-dashboard

Multi-asset snapshot: US and global indexes, VIX, DXY, 10Y yield, Gold, Oil, BTC with auto-interpreted macro signals

/portfolio-risk

/portfolio-risk AAPL MSFT JPM XOM

Portfolio concentration risk, sector breakdown, beta analysis, and diversification recommendations

/investment-thesis

/investment-thesis NVDA

Data-driven investment thesis with bull/bear case, key metrics table, technical setup, entry/exit framework, and monitoring checklist


Operators

All screening tools support the following operators in filter conditions:

Operator

Description

Example

greater

Field > value

return_on_equity > 15

less

Field < value

price_earnings_ttm < 20

greater_or_equal

Field >= value

close >= 10

less_or_equal

Field <= value

Volatility.M <= 3

equal

Exact match

sector = "Technology"

not_equal

Not equal

exchange != "OTC"

in_range

Value within [min, max] or in a list

RSI in [45, 65] or exchange in ["NASDAQ", "NYSE"]

not_in_range

Value outside range or list

RSI not_in [70, 100]

crosses

Field crosses the reference (either direction)

SMA50 crosses SMA200

crosses_above

Field crosses above the reference

SMA50 crosses_above SMA200 (golden cross)

crosses_below

Field crosses below the reference

SMA50 crosses_below SMA200 (death cross)

match

Text contains substring

name match "tech"

above_percent

Field is N% above a reference field

close above_percent ["SMA200", 5]

below_percent

Field is N% below a reference field

close below_percent ["SMA200", 10]

has

Field contains any listed value

indexes has ["S&P 500"]

has_none_of

Field contains none of the listed values

indexes has_none_of ["S&P 500"]

empty

Field has no value

dividend_yield_recent empty

not_empty

Field has a value

all_time_high not_empty

String fields (sector, exchange, industry, market) use equal for single values and in_range for lists.


Development

npm install          # Install dependencies
npm run build        # Compile TypeScript to dist/
npm test             # Run all tests
npm run test:watch   # Run tests in watch mode
npm run dev          # Run directly with tsx (no build step)

Run a single test file:

npm test -- fields.test.ts

After making changes, restart Claude to reload the MCP server (no hot-reload).

Adding a New Field

  1. Add to STOCK_FIELDS in src/tools/fields.ts with name, label, category, type, description

  2. Optionally add to EXTENDED_COLUMNS in src/tools/screen.ts

Adding a New Preset

Add to PRESETS in src/resources/presets.ts with filters, markets, sort_by, sort_order, and optional columns.

Adding a New Tool

  1. Create implementation in src/tools/

  2. Register in ListToolsRequestSchema handler in src/index.ts

  3. Add case in CallToolRequestSchema handler


Disclaimer

This is an unofficial tool. It is not affiliated with, endorsed by, or connected to TradingView. It uses TradingView's public scanner API, which may change without notice. No authentication is required; access level is the same as the TradingView website without login.

Not investment advice. Screening results are for informational and educational purposes only. All investment decisions are your sole responsibility. Past performance does not indicate future results. Consult qualified financial advisors before making investment decisions.

This software is provided "AS IS" under the MIT License, without warranty of any kind.



Smarter screens, not faster trades.

Built with the Model Context Protocol

Available Tools

12 tools
get_market_metainfoA
Read-onlyIdempotent

Get metadata about a TradingView market screener, including available fields and their types. Useful for discovering what fields can be used in screening queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOutput mode: 'summary' for normalized output (default), 'raw' for passthrough.
fieldsNoOptional: specific field names to look up. If omitted, returns all available fields.
marketYesMarket to get metainfo for (e.g., 'america', 'uk', 'germany', 'france')

Output Schema

ParametersJSON Schema
NameRequiredDescription
marketYes
metadataYes
metainfoNo
requested_fieldsNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds the detail that metadata includes field names and types, which is more about content than behavior. No additional behavioral traits like rate limits or auth are disclosed, but the annotation coverage lowers the bar.

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?

The description is two sentences, front-loaded with the primary purpose and followed by a practical use case. Every word earns its place with no redundancy or fluff.

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?

With a full output schema and annotations covering safety and idempotency, the description is sufficiently complete for an agent to select and invoke the tool. It adds useful context about how the metadata relates to screening queries, which is not in the schema.

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 each parameter is well-documented in the schema. The description doesn't add meaningful parameter-level detail beyond the schema, so the baseline of 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 description clearly states the tool gets metadata about a TradingView market screener, including available fields and types. It distinguishes from siblings by specifying 'market screener' context, though it doesn't explicitly contrast with similar tools like list_fields.

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 provides a clear usage scenario: 'Useful for discovering what fields can be used in screening queries.' This gives context for when to use it, but doesn't explicitly exclude alternatives or state when not to use it.

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

get_presetA
Read-onlyIdempotent

Get a pre-configured screening strategy. Returns filter configuration for the strategy.

Available presets:

  • quality_stocks: High-quality low-volatility stocks (conservative)

  • value_stocks: Undervalued stocks with low P/E and P/B

  • dividend_stocks: High dividend yield with consistent payout

  • momentum_stocks: Strong recent performance and technical momentum

  • growth_stocks: High-growth companies with expanding revenue/earnings

  • quality_growth_screener: Comprehensive quality+growth screen with technical filters

  • market_indexes: Global market indexes for regime analysis (use lookup_symbols)

ParametersJSON Schema
NameRequiredDescriptionDefault
preset_nameYesKey of preset to retrieve. See tool description for available keys.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description does not contradict these. It adds useful context by enumerating preset meanings and by drawing the boundary for market_indexes ('use lookup_symbols'), while clearly stating the tool returns filter configuration rather than executing a screen. This is more than a bare repeat of the annotations, though no deeper side-effect/rate-limit/auth notes are provided.

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?

The description is front-loaded with a one-sentence purpose, followed by a scannable bullet list of presets. Each bullet is compact and directly functional—there is no fluff, redundant text, or padding. The length is justified by the need to enumerate the presets.

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?

For a simple single-parameter tool with read-only annotations and an output schema, the description is fully sufficient. It provides the complete set of accepted preset keys, each with descriptive context, and even supplies a cross-reference for the market_indexes edge case. Nothing material is missing for correct invocation.

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

Parameters5/5

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

Schema coverage is 100%, and the schema itself refers to the tool description for available preset keys. The description fully compensates by listing all valid preset_name values and explaining their screening focus, which makes parameter selection straightforward and unambiguous.

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 uses an explicit verb and resource: 'Get a pre-configured screening strategy' and further clarifies the return value ('Returns filter configuration'). The phrase 'pre-configured screening strategy' distinguishes it from screen execution tools like screen_stocks, and the preset list makes the exact scope of the tool obvious.

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

Usage Guidelines3/5

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

Usage context is implied by the listing of available presets and by the note to 'use lookup_symbols' for market_indexes, but there is no explicit explanation of when to use get_preset versus alternatives such as list_presets. The description does not state exclusions or recommend a workflow like 'retrieve a preset, then apply it to screen_stocks.'

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

get_ta_summaryA
Read-onlyIdempotent

Get TradingView-style technical analysis summary for one or more symbols across multiple timeframes. Returns buy/sell/neutral labels and recommendation scores based on oscillators and moving averages.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesArray of ticker symbols (e.g., ['NASDAQ:AAPL', 'NASDAQ:NVDA']). Maximum 50 symbols.
timeframesNoTimeframes for TA analysis. Valid: '1', '3', '5', '15', '30', '45', '60', '120', '180', '240', '1D', '1W', '1M'. Default: ['60', '240', '1D', '1W']
include_componentsNoInclude oscillator and moving average scores breakdown (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
symbolsYes
metadataYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish read-only and idempotent behavior, and the description adds useful context by specifying the return content (labels, scores, oscillator/MA basis) and the multi-symbol/multi-timeframe scope. It does not contradict the annotations.

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 concise, front-loaded sentences with no redundant or promotional language. Every clause adds information about scope, return format, or the basis of the scores.

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?

Given the rich input schema, output schema, and read-only/idempotent annotations, the description is largely complete for a summary API. It omits explicit guidance on when to choose this over rank_by_ta or screen_stocks, but that is more of a usage-guideline gap than a completeness gap.

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?

The input schema already documents all three parameters with defaults, valid values, and maximum symbol count, so the description adds minimal parameter-level detail. Mention of oscillators and moving averages links loosely to include_components but does not exceed the schema's coverage.

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

Purpose4/5

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

The description clearly states the tool returns TradingView-style buy/sell/neutral labels and recommendation scores for one or more symbols across multiple timeframes. It is specific about the resource and output, though it does not explicitly contrast itself with sibling tools like rank_by_ta.

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

Usage Guidelines3/5

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

Usage context is implied: use when you need a technical analysis summary for specified symbols. There is no explicit when-to-use statement, exclusions, or guidance on when to prefer this over alternatives like rank_by_ta or screen_stocks.

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

list_fieldsA
Read-onlyIdempotent

List available fields for filtering and display. Use this to discover what fields you can filter and sort by.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter fields by category. If omitted, returns all categories
asset_typeNoType of asset. Default: 'stock'

Output Schema

ParametersJSON Schema
NameRequiredDescription
fieldsYes
categoryYes
asset_typeYes
field_countYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is clear. The description adds that fields are intended for filtering and display, which is useful context, but it does not add much beyond that. No contradiction with annotations.

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 concise sentences with no filler. The purpose and usage are front-loaded, and every word adds value.

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?

Given the simple two-parameter schema with full descriptions, an output schema, and safe annotations, the description fully covers what an agent needs to understand and invoke 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% with both parameters fully documented via descriptions and enums. The tool description adds no additional semantics beyond what the schema provides, so baseline 3 is appropriate.

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 clearly states the tool lists available fields for filtering and display, distinguishing it from sibling screening and lookup tools. The verb 'List' and resource 'fields' are specific and unambiguous.

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 explicitly says to use this to discover filterable/sortable fields, providing clear when-to-use context. However, it does not mention when not to use or name alternative tools, so it stops short of full guidance.

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

list_presetsA
Read-onlyIdempotent

List all available preset screening strategies. Returns key, name, and description for each preset. Use the key with get_preset.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
presetsYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint and idempotentHint, so the description does not need to reaffirm safety. It adds no behavioral detail beyond what is in the annotations (e.g., pagination or sorting), but the tool is simple and non-destructive, so this is acceptable.

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?

The description is two concise sentences, front-loaded with the purpose. Every sentence adds value: the first defines the operation, the second explains the return and usage.

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?

Given the tool has no parameters)Skip the description fully explains what is returned and how to consume the results. The presence of an output schema covers return details, and the description means the tool is complete for its simple purpose.

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?

The tool takes no parameters, and the schema has none. The description effectively covers the only relevant aspect—what the list contains and how to use the entries. The baseline for 0 params is 4, and the description meets that.

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 clearly states 'List all available preset screening strategies' and specifies what each entry contains (key, name, description). It differentiates from siblings by mentioning the presets and how to use them with get_preset.

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 instructs to use the returned key with get_preset, providing a clear follow-up action. It does not explicitly exclude other contexts, but the guidance is sufficient for a simple enumeration tool.

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

lookup_symbolsA
Read-onlyIdempotent

Look up specific symbols (stocks, indexes, ETFs) by ticker. Use this for direct symbol lookup including market indexes like TVC:SPX, TVC:DJI, OMXSTO:OMXS30 that cannot be found via screening. Returns comprehensive data including ATH, 52-week highs/lows.

ParametersJSON Schema
NameRequiredDescriptionDefault
columnsNoOptional: specific columns to include. Default: name, close, change, volume, market_cap_basic, all_time_high, all_time_low, price_52_week_high, price_52_week_low.
symbolsYesArray of ticker symbols (e.g., ['TVC:SPX', 'NASDAQ:AAPL', 'OMXSTO:OMXS30']). Maximum 100 symbols.

Output Schema

ParametersJSON Schema
NameRequiredDescription
symbolsYes
metadataYes
total_countYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is established. The description adds valuable behavioral context by stating it 'Returns comprehensive data including ATH, 52-week highs/lows,' which is useful for output expectations. No contradictions with annotations.

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: first clearly states purpose, second provides usage guidance and return info. Front-loaded and concise, with zero redundant phrasing. Every sentence serves a distinct purpose.

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

Completeness5/5

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

With only 2 parameters (fully described in schema), an output schema, and strong annotations, the description covers purpose, usage, and return data. It also addresses the indexing edge case, providing enough context for an agent to decide appropriately. Complete for its scope.

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%, with both parameters (symbols and columns) fully described in the schema via descriptions. The description itself adds no parameter-level detail. Baseline of 3 is appropriate since the schema carries the burden.

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 clearly states the action ('Look up specific symbols by ticker') and the resource (stocks, indexes, ETFs). It explicitly distinguishes from screening tools by noting it handles indexes not found via screening, providing context on scope.

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

Usage Guidelines5/5

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

Explicit guidance: 'Use this for direct symbol lookup including market indexes... that cannot be found via screening.' This gives specific when-to-use context and implicitly contrasts with screening tools. Alternative search_symbols is not mentioned, but the direct lookup focus is clear.

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

rank_by_taA
Read-onlyIdempotent

Rank symbols by weighted technical analysis scores across timeframes. Useful for comparing which symbols have the strongest overall TA signals.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesArray of ticker symbols to rank (e.g., ['NASDAQ:AAPL', 'NASDAQ:MSFT', 'NASDAQ:NVDA']). Maximum 50.
weightsNoPer-timeframe weights for ranking. Unspecified timeframes default to weight 1. Example: {"1D": 3, "1W": 2}
timeframesNoTimeframes for TA analysis (default: ['60', '240', '1D', '1W'])

Output Schema

ParametersJSON Schema
NameRequiredDescription
rankedYes
weightsYes
metadataYes
timeframesYes
excluded_symbolsYes
requested_symbolsYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to restate safety. It adds modest value by explaining the weighting/timeframe methodology, but does not disclose additional behavioral traits such as output ordering or limitations beyond what schemas/annotations provide.

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 short, front-loaded sentences deliver the core action and purpose without filler. Every word earns its place, and the structure makes the tool's function immediately clear.

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?

Given the detailed input schema, annotations, and output schema, the description provides sufficient context for an agent to understand the tool's purpose and main usage. The only minor gap is a lack of direct differentiation from sibling screening tools, but this is not a serious omission.

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 input schema already documents all three parameters. The description's mention of 'weighted' and 'across timeframes' reinforces the role of weights and timeframes, but it adds no parameter-specific detail beyond what the schema already provides.

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?

Description uses a specific verb ('Rank') and clearly identifies the resource ('symbols') and the method ('weighted technical analysis scores across timeframes'). It also states the intended comparison use case ('strongest overall TA signals'), which helps distinguish it from sibling screening/lookup tools.

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?

Provides clear context: useful for comparing which symbols have the strongest overall TA signals. It does not explicitly name alternative tools or exclusions, but the stated use case makes it reasonably clear when to use this ranking tool versus the sibling screen/lookup tools.

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

screen_cryptoA
Read-onlyIdempotent

Screen cryptocurrencies based on technical and market criteria. Returns cryptocurrencies matching the specified filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (1-200). Default: 20
columnsNoOptional: specific columns to include in results. If not provided, uses default columns.
filtersNoArray of filter conditions to apply
sort_byNoField to sort results by. Default: 'market_cap_basic'
sort_orderNoSort order. Default: 'desc'

Output Schema

ParametersJSON Schema
NameRequiredDescription
metadataYes
total_countYes
cryptocurrenciesYes

TDQS

A3.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description does not add meaningful behavioral context beyond restating that it screens and returns results. It provides no additional details about default limits, result structure, rate limits, or any side effects, which would have added value on top of the annotations.

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?

The description is a single, front-loaded sentence that immediately communicates the tool's purpose and primary output. Every word earns its place; there is no fluff or redundancy.

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?

Given a rich input schema with examples and a dedicated output schema, the description need not explain mechanics. It correctly identifies the tool's domain and filter-based behavior, which is sufficient context for an agent to select the tool. The only minor gap is the lack of explicit guidance on sorting or default columns, but these are covered in the schema.

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 fully documents parameters like filters, limit, columns, sort_by, and sort_order. The description mentions 'specified filters' but adds no parameter-specific meaning, which matches the baseline of 3 for high schema coverage.

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 uses a specific verb ('Screen') with an explicit resource ('cryptocurrencies') and scope ('technical and market criteria'). It also states the outcome ('Returns cryptocurrencies matching the specified filters'), clearly distinguishing it from sibling tools like screen_stocks and screen_forex by asset class.

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

Usage Guidelines3/5

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

The description clearly implies this tool is for screening cryptocurrency assets, but it does not explicitly state when to use it over alternatives or provide exclusion criteria. It lacks any mention of sibling tools such as screen_stocks or rank_by_ta, so guidance on when-not-to-use is absent.

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

screen_etfA
Read-onlyIdempotent

Screen ETFs (Exchange-Traded Funds) based on performance and technical criteria. Returns ETFs matching the specified filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (1-200). Default: 20
columnsNoOptional: specific columns to include in results. If not provided, uses minimal default columns.
filtersNoArray of filter conditions to apply
marketsNoMarkets to scan. Valid values: america, uk, germany, france, italy, spain, sweden, norway, denmark, finland, brazil, india, japan, hongkong, china, australia, canada, turkey, uae, and 30+ more. Default: ['america']
sort_byNoField to sort results by. Default: 'market_cap_basic'
sort_orderNoSort order. Default: 'desc'

Output Schema

ParametersJSON Schema
NameRequiredDescription
etfsYes
metadataYes
total_countYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety expectations. The description adds only that the tool returns ETFs matching filters, which is basic behavior. No additional behavioral traits (e.g., pagination, rate limits, data ties) are disclosed, but with this tool's simple read-only nature, a 3 is appropriate.

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?

The description is two concise sentences that immediately state the tool's purpose and return behavior. No filler or redundant details; it earns its place.

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?

For a read-only screening tool with a fully documented input schema and an output schema present, the description is complete enough. It conveys the core purpose and result, while the schema covers parameter details and the output schema covers return structure.

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 input schema already documents all parameter meanings and valid values. The description's phrase 'performance and technical criteria' provides a high-level hint but doesn't add details beyond the schema, so the baseline 3 applies.

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 clearly states the tool screens ETFs based on performance and technical criteria and returns matching ETFs. The verb 'Screen' and specific resource 'ETFs' make its purpose unambiguous, and it is naturally distinguished from sibling tools like screen_stocks and screen_forex by the asset class.

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 clearly identifies the context: use when screening ETFs. No explicit when-not or alternative tool references are given, but the ETF-specific scope makes usage obvious. It lacks direct mentions of when to prefer other screen_* tools, so it doesn't reach a 5.

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

screen_forexB
Read-onlyIdempotent

Screen forex pairs based on technical criteria. Returns forex pairs matching the specified filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (1-200). Default: 20
columnsNoOptional: specific columns to include in results. If not provided, uses default columns.
filtersNoArray of filter conditions to apply
sort_byNoField to sort results by. Default: 'volume'
sort_orderNoSort order. Default: 'desc'

Output Schema

ParametersJSON Schema
NameRequiredDescription
pairsYes
metadataYes
total_countYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description's 'Returns forex pairs' aligns with a read-only operation. The description adds minimal behavioral context beyond the annotations, such as the fact that it filters based on criteria, but does not disclose any edge cases like default limits or sorting behavior. No contradiction.

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

Conciseness4/5

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

The description is extremely concise at two sentences with no filler. It is front-loaded with the primary action and result. However, its brevity comes at the cost of missing usage context, so it earns a 4 rather than 5.

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

Completeness2/5

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

This is a complex screening tool with a rich filter schema, multiple operators, and examples in the schema. The description provides only a high-level one-liner and does not orient the agent to the available filter fields, operators, or general workflow. Despite the output schema and annotations, the description is not sufficient for a tool of this complexity.

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%, with detailed parameter descriptions for limit, columns, filters, sort_by, and sort_order. The description adds no extra parameter semantics, but the schema carries the full burden. Baseline 3 is appropriate as the schema is self-explanatory.

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

Purpose4/5

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

The description clearly identifies the tool as a screener for forex pairs using technical criteria. The verb 'screen' and the resource 'forex pairs' make the purpose unambiguous, and it differentiates from sibling tools that screen other asset classes. However, 'technical criteria' is generic and could be more specific about the indicators involved.

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

Usage Guidelines3/5

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

The description implies the tool is used for screening forex pairs, but it does not explicitly state when to use this tool versus alternatives like screen_stocks or screen_crypto. No exclusions or comparison to siblings are provided, leaving the agent to infer the asset class from the name alone.

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

screen_stocksA
Read-onlyIdempotent

Screen stocks based on fundamental and technical criteria. Returns stocks matching the specified filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (1-200). Default: 20
columnsNoOptional: specific columns to include in results. If not provided, uses minimal default columns. Presets may define extended column sets.
filtersNoArray of filter conditions to apply
marketsNoMarkets to scan. Valid values: america, uk, germany, france, italy, spain, sweden, norway, denmark, finland, brazil, india, japan, hongkong, china, australia, canada, turkey, uae, and 30+ more. Default: ['america']
sort_byNoField to sort results by. Default: 'market_cap_basic'
sort_orderNoSort order. Default: 'desc'

Output Schema

ParametersJSON Schema
NameRequiredDescription
stocksYes
metadataYes
total_countYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds minimal behavioral context beyond purpose—it does not mention default behavior when no filters are provided, pagination, or rate limits. No contradiction with annotations exists.

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?

The description is two sentences, front-loaded with the core action, and contains no filler or redundant information. Every word contributes to understanding the tool's purpose.

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?

Given the rich input schema, output schema, and annotations, the description is sufficient as a high-level summary. It could mention default behavior or explicit alternatives, but the structured data carries the necessary detail for a complex screening tool.

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 baseline is 3. The description adds no additional parameter-level meaning beyond what the input schema already provides. The schema itself richly documents filters, operators, markets, sorting, and limits.

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 clearly states the tool's function with a specific verb ('Screen'), a specific resource ('stocks'), and the criteria type ('fundamental and technical criteria'). It also states the outcome ('Returns stocks matching the specified filters'), and the resource 'stocks' distinguishes it from sibling tools like screen_forex, screen_crypto, and screen_etf.

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

Usage Guidelines3/5

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

The description implies usage for stock screening but does not explicitly state when to use this tool versus alternatives such as screen_etf or screen_forex. There are no exclusions, prerequisites, or alternative tool mentions, so guidance is only implicit through the word 'stocks'.

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

search_symbolsA
Read-onlyIdempotent

Search for TradingView symbols by name, ticker, or description. Discover exact symbol identifiers for stocks, forex, crypto, and more. Use this before screening when you need to find the correct symbol format.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (1-50, default: 20)
queryYesSearch query (e.g., 'apple', 'bitcoin', ' ethereum')
startNoOffset for pagination (default: 0)
exchangeNoFilter by exchange (e.g., 'NASDAQ', 'NYSE')
asset_typeNoFilter by asset type

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
queryYes
symbolsYes
metadataYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe, non-mutating behavior is covered. The description adds that this tool 'Discovers exact symbol identifiers' and searches by name/ticker/description, but doesn't elaborate on output shape, rate limits, or search behavior beyond that. This is adequate baseline transparency given the annotations, but not exhaustive.

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

Conciseness4/5

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

The description is three short, front-loaded sentences. The first states the primary action, the second mentions result types, and the third gives usage context. No wasted words exist, though the second sentence is slightly redundant with the asset_type enum. Overall, it's concise and readable.

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?

The description covers the essential use case, references asset types, and tells the user to use it before screening. With an output schema available, the absence of a return-value description is acceptable. The only gap is the failure to differentiate from the similarly named sibling 'lookup_symbols', leaving some ambiguity for an AI agent in edge cases.

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

Parameters3/5

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

Schema coverage is 100% and all parameters already have descriptions in the input schema (query, limit, start, exchange, asset_type). The tool description reinforces the concept of searching by name/ticker/description, but adds no new parameter semantics. Thus it meets the baseline for schema-heavy behavior but doesn't go beyond it.

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

Purpose4/5

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

The description clearly states a specific verb and resource: 'Search for TradingView symbols by name, ticker, or description.' It also frames the purpose relative to screening ('Use this before screening'), which distinguishes it from screen_* siblings. However, it does not differentiate it from the closely named sibling 'lookup_symbols', so it doesn't fully meet the strict 5 criterion.

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 explicit context for when to use this tool: 'Use this before screening when you need to find the correct symbol format.' This clearly signals a discovery/disambiguation role before other operations. It does not explicitly mention alternatives like lookup_symbols, so it lacks the when-not/alternative clarity of a top-tier guideline.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv0.7.0
    • Changedget_market_metainfo2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "market": {
        +      "type": "string"
        +    },
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "metainfo": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "requested_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "market",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedget_preset2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedget_ta_summary2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "symbols": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "symbols",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_fields2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "asset_type": {
        +      "type": "string"
        +    },
        +    "category": {
        +      "type": "string"
        +    },
        +    "field_count": {
        +      "type": "integer"
        +    },
        +    "fields": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "asset_type",
        +    "category",
        +    "field_count",
        +    "fields"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_presets2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "presets": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "presets"
        +  ],
        +  "type": "object"
        +}
    • Changedlookup_symbols2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "symbols": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total_count": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total_count",
        +    "symbols",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedrank_by_ta2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "excluded_symbols": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "ranked": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "requested_symbols": {
        +      "type": "integer"
        +    },
        +    "timeframes": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "weights": {
        +      "additionalProperties": {
        +        "type": "number"
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "requested_symbols",
        +    "timeframes",
        +    "weights",
        +    "ranked",
        +    "excluded_symbols",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedscreen_crypto5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / filters / items / additionalProperties
        Added value: +false
      • changedInput schema / properties / filters / items / properties / value / description
        Previous value: -"Value to compare against. Not required for 'empty' and 'not_empty' operators. Use number, string, or [min, max] array for in_range. For above_percent/below_percent, use [field_name, percent_number] e.g. ['SMA200', 10]."New value: +"Value to compare against. Empty and not_empty omit value. above_percent and below_percent use [field, percent]. has and has_none_of use a non-empty string array."
      • addedInput schema / properties / filters / items / properties / value / oneOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "prefixItems": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      }
        +    ],
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "cryptocurrencies": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "total_count": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total_count",
        +    "cryptocurrencies",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedscreen_etf5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / filters / items / additionalProperties
        Added value: +false
      • changedInput schema / properties / filters / items / properties / value / description
        Previous value: -"Value to compare against. Not required for 'empty' and 'not_empty' operators. Use number, string, or [min, max] array for in_range. For above_percent/below_percent, use [field_name, percent_number] e.g. ['SMA200', 10]."New value: +"Value to compare against. Empty and not_empty omit value. above_percent and below_percent use [field, percent]. has and has_none_of use a non-empty string array."
      • addedInput schema / properties / filters / items / properties / value / oneOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "prefixItems": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      }
        +    ],
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "etfs": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "total_count": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total_count",
        +    "etfs",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedscreen_forex5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / filters / items / additionalProperties
        Added value: +false
      • changedInput schema / properties / filters / items / properties / value / description
        Previous value: -"Value to compare against. Not required for 'empty' and 'not_empty' operators. Use number, string, or [min, max] array for in_range. For above_percent/below_percent, use [field_name, percent_number] e.g. ['SMA200', 10]."New value: +"Value to compare against. Empty and not_empty omit value. above_percent and below_percent use [field, percent]. has and has_none_of use a non-empty string array."
      • addedInput schema / properties / filters / items / properties / value / oneOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "prefixItems": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      }
        +    ],
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "pairs": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total_count": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total_count",
        +    "pairs",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedscreen_stocks5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / filters / items / additionalProperties
        Added value: +false
      • changedInput schema / properties / filters / items / properties / value / description
        Previous value: -"Value to compare against. Not required for 'empty' and 'not_empty' operators. Use number, string, or [min, max] array for in_range. For above_percent/below_percent, use [field_name, percent_number] e.g. ['SMA200', 10] means 10% above/below SMA200. For has/has_none_of, use an array of strings for set-type fields like typespecs."New value: +"Value to compare against. Empty and not_empty omit value. above_percent and below_percent use [field, percent]. has and has_none_of use a non-empty string array."
      • addedInput schema / properties / filters / items / properties / value / oneOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "prefixItems": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "number"
        +      }
        +    ],
        +    "type": "array"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "stocks": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total_count": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total_count",
        +    "stocks",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_symbols2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "count": {
        +      "type": "integer"
        +    },
        +    "metadata": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cache_hit": {
        +          "type": "boolean"
        +        },
        +        "missing_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "requested_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "retrieved_at": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "returned_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "unavailable_symbols": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "retrieved_at",
        +        "source",
        +        "cache_hit",
        +        "requested_count",
        +        "returned_count",
        +        "missing_symbols"
        +      ],
        +      "type": "object"
        +    },
        +    "query": {
        +      "type": "string"
        +    },
        +    "symbols": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "query",
        +    "count",
        +    "symbols",
        +    "metadata"
        +  ],
        +  "type": "object"
        +}
  2. 12 tool updatesv0.0.0-dev
    • First observedget_market_metainfo
    • First observedget_preset
    • First observedget_ta_summary
    • First observedlist_fields
    • First observedlist_presets
    • First observedlookup_symbols
    • First observedrank_by_ta
    • First observedscreen_crypto
    • First observedscreen_etf
    • First observedscreen_forex
    • First observedscreen_stocks
    • First observedsearch_symbols

TDQS

A3.9/5.0
Disambiguation4/5

Most tools are distinct by asset class and action (e.g., screen_stocks, screen_forex, screen_crypto, screen_etf). However, list_fields and get_market_metainfo both expose available fields, and lookup_symbols vs search_symbols overlap in symbol-finding, which may cause misselection without careful reading.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (screen_*, list_*, get_*, lookup_*, search_*, rank_*). The naming is predictable and uniform across the entire set.

Tool Count5/5

With 12 tools, the server is well-scoped for a TradingView screener and TA analysis service. Each tool addresses a clear need, and the count feels appropriate without being bloated or thin.

Completeness4/5

The surface covers core workflows: screening across asset classes, preset discovery, field/metadata exploration, symbol lookup, and TA ranking. Minor gaps exist such as no create/update/delete for custom presets or a unified screening tool across all asset types, but these are not critical for the main purpose.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for screening Indian stocks and mutual funds by wrapping screener.in and Morningstar India, enabling fundamental queries from Claude or Cursor.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    A comprehensive MCP server that integrates TradingView Desktop automation, screener API, Yahoo Finance, IDX/BEI tools, backtesting, news sentiment, trade math, and market sessions. It enables traders to perform technical analysis, backtest strategies, manage positions, and automate TradingView tasks through natural language.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that lets AI assistants interact with TradingView for real-time quotes, historical OHLCV data, screener, alerts, watchlists, news, chart layouts, Pine scripts, and more. Connect it to Claude Desktop, Cursor, or any MCP-compatible client to control TradingView via natural language.
    552
    5
    -
  • A
    license
    B
    quality
    C
    maintenance
    TradingView MCP server — real-time market data, technical indicators, screeners, and backtesting for Claude, ChatGPT, Cursor, Copilot, and any MCP client. Stocks, crypto, forex & futures across global exchanges.
    44
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/fiale-plus/tradingview-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server