Skip to main content
Glama

Server Details

AI crypto signals, whale positions, 19 technical indicators, derivatives, screener and backtests

Ownership verified
Status
Healthy
Uptime
98.2% over 62 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
target1m/traderspy-mcp
GitHub Stars
2
Server Listing
TraderSpy MCP

TDQS

A3.8/5.0

Scored across 17 tools

Disambiguation4/5

Most tools are clearly separated by resource and action, but get_top_traders and get_elite_leaderboard both return ranked smart-money traders across exchanges and could be confused. get_market_stats and get_positions also have some overlap around positions and performance, though the descriptions help distinguish them.

Naming Consistency5/5

All tool names use consistent snake_case and follow a predictable verb_noun pattern, dominated by get_*, with screen_symbols and backtest_condition as clear action-oriented exceptions. No camelCase or mixed conventions appear.

Tool Count4/5

17 tools is slightly above the ideal 3–15 range but reasonable for a broad trading-intelligence server covering market data, technical analysis, smart money, AI signals, and screening. Each tool appears to serve a distinct purpose rather than bloating the surface.

Completeness4/5

The surface covers core read-only workflows well: market data, indicators, screening, event backtesting, derivatives, smart-money positions and trader profiles, and AI signals with list/detail/stats views. Minor gaps exist, such as no historical derivatives/liquidation series or order-book/liquidity tooling, but these are workable around.

Available Tools

17 tools
backtest_conditionA
Read-onlyIdempotent
Inspect

What happened AFTER a condition in the past, on one symbol and timeframe — "how did BTC do after RSI dropped below 30 on 4h", "is a golden cross on ETH daily actually bullish", "what usually follows a −5% day on SOL". Runs an event study over the whole stored tape (up to 1000 candles: ~41 days on 1h, ~166 days on 4h, ~3 years on 1d): occurrences, average / median forward return, win rate, average best and worst excursion per horizon, the unconditional baseline over the same tape and the EDGE the condition adds over it, the last five episodes, and whether the condition is active on the latest bar. Same condition vocabulary as screen_symbols. Quote the edge and the sample size together — a 3-sample stat is an anecdote.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTrading pair, e.g. BTCUSDT (a bare "BTC" is read as its USDT perpetual)
horizonsNoBars ahead to measure returns over (≤ 4). Default per interval ≈ 4h / 1d / 3d: 1h → [4, 24, 72], 4h → [6, 18, 42], 1d → [1, 3, 7].
intervalNoCandle timeframe4h
conditionsYesUp to 3 conditions, AND-ed. Examples: RSI oversold = {"metric":"rsi","op":"lt","value":30}; above the 200 EMA = {"metric":"priceVsEma","op":"gt","value":0,"period":200}; golden cross = {"metric":"emaSpread","op":"crossAbove","value":0,"period":50,"period2":200}; MACD bullish cross = {"metric":"macdHistogram","op":"crossAbove","value":0}; dumped 5% in a day = {"metric":"changePct","op":"lt","value":-5,"period":24}.

Output Schema

ParametersJSON Schema
NameRequiredDescription
toNo
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
urlNoThe coin's chart on traderspy.app
barsNoCandles the study ran on (the whole stored tape)
fromNo
recentNoNewest episodes first: { openTime, barsAgo, price, returnsPct { "<bars>": pct } }
symbolNo
horizonsNoPer look-ahead: { bars, samples, avgReturnPct, medianReturnPct, winRatePct, avgMaxUpPct, avgMaxDownPct, bestPct, worstPct, baselineAvgReturnPct, edgePct } — edge = avg − unconditional baseline
intervalNo
warningsNo
activeNowNoConditions hold on the latest closed bar
conditionsNo
occurrencesNoEpisodes — the FIRST bar of each run where the conditions held
horizonHoursNo
coverageHoursNo
currentValuesNoLatest value of every metric involved
evaluableBarsNo
lastOccurrenceNo{ openTime, barsAgo, price }

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true/idempotent, so safety is covered; the description goes well beyond by disclosing the data tape limit (up to 1000 candles, with the concrete ~41d/166d/3y implication per interval) and the statistical caveat that a 3-sample stat is an anecdote. That is exactly the operational context an agent needs before quoting results.

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?

Opening sentence is strongly front-loaded with purpose and examples, and the closing instruction to quote edge alongside sample size is high-value. It is a dense single block rather than a leaky one, though the enumeration of return statistics overlaps with the output schema and could be trimmed.

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 4-parameter analytics tool with a full output schema and read-only annotations, the definition still covers the things structured fields cannot convey: the stored tape length per interval, the AND-ed multi-condition model, metrics in their own units, and the sample-size caveat. Nothing needed to invoke or interpret it correctly is missing.

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% — periods, defaults, enum semantics and the condition examples are all already documented in the schema. The description adds only the cross-reference that the condition vocabulary matches screen_symbols, which is mildly useful but does not deepen parameter meaning, 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 states a specific verb+resource (event-study backtest of a condition on one symbol/timeframe) and immediately anchors it with three concrete example questions. It also positions itself against the sibling screen_symbols by noting the shared condition vocabulary, so an agent can tell the two apart without opening either schema.

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

Usage Guidelines4/5

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

The 'what happened AFTER a condition in the past' framing plus the three example questions make the intended use case unambiguous. However, it never states when to avoid this tool (e.g. conditions with too few occurrences) or explicitly names screen_symbols as the alternative for the forward-looking counterpart, so the guidance is clear but not exhaustive.

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

get_candlesB
Read-onlyIdempotent
Inspect

Get OHLCV (Open, High, Low, Close, Volume) candle data for a crypto futures symbol. Useful for charting, price history, and technical analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of candles to return
symbolYesTrading pair symbol, e.g. BTCUSDT
intervalNoCandle interval/timeframe1h

Output Schema

ParametersJSON Schema
NameRequiredDescription
symbolNo
candlesNoOldest first
intervalNo

TDQS

B3.4/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without prose. The description adds no behavioral context beyond that — nothing about default interval/limit behavior, result ordering, or what happens when limit exceeds the maximum of 500 — so it contributes little beyond the structured fields.

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, no filler: the resource and its expansion come first, then the use cases. Every clause earns its place and nothing is buried.

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 an output schema present, a fully described parameter set, and complete annotations, the description only needs to establish purpose, which it does. The one small gap is that it gives no hint of sibling routing for related price or indicator queries, but nothing required to call the tool correctly is missing.

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 symbol, interval (enum with defaults), and limit (1–500, default 100) all documented inline, so the baseline of 3 applies. The description adds nothing about symbol format or interval semantics that the schema does not already carry.

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 states a specific verb and resource — retrieve OHLCV candle data for a crypto futures symbol — and spells out what OHLCV means, so an agent knows exactly what kind of payload to expect. It is clearly distinct in kind from siblings like get_price or get_technical_indicators, though it never explicitly names them to reinforce the boundary.

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

Usage Guidelines3/5

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

It offers implicit usage context ('charting, price history, and technical analysis') but gives no when-to-use versus when-not rules and does not point to get_price or get_technical_indicators as alternatives for related needs. An agent can infer a use case but must decide on its own when this beats a sibling.

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

get_derivativesA
Read-onlyIdempotent
Inspect

Funding rate, open interest and positioning for Binance USDⓈ-M perpetual futures — the derivatives questions candles cannot answer: is funding high (who is paying whom, annualized), is open interest building or unwinding (24h/4h change, and the OI×price regime: new longs, short covering, new shorts, long liquidation), and which way accounts lean (top-trader long/short by position, all-account ratio, taker buy/sell flow). Each symbol carries plain-language notes — quote those. Up to 5 symbols per call; data is 60s fresh.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesUp to 5 Binance USDⓈ-M futures symbols, e.g. ["BTCUSDT", "ETHUSDT"]. A bare base asset ("BTC") is read as its USDT perpetual.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne entry per symbol: { symbol, markPrice, indexPrice, premiumPct, funding { rate, ratePct, annualizedPct, nextFundingTime, minutesToNextFunding, avg24hPct, avg3dPct, label }, openInterest { contracts, valueUsd, change4hPct, change24hPct, priceChange24hPct, regime }, positioning { globalLongShortRatio, globalLongPct, topTraderLongShortRatio, topTraderLongPct, takerBuySellRatio, label }, notes[], url (the coin chart) } — or { symbol, error, message } when the symbol is not a Binance USDⓈ-M futures pair
countNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds genuinely new operational context: a 60-second data freshness window and a hard batching ceiling of 5 symbols per call. It also instructs the agent to quote the plain-language per-symbol notes, which is behavioral guidance the annotations cannot supply. It does not detail auth or rate-limit behavior, keeping it just below the top.

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?

Front-loaded with the resource and scope, then the differentiating question-set. Dense but every clause earns its place; only the closing 'up to 5 symbols per call' is redundant with the schema.

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

Completeness4/5

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

An output schema exists, so return values needn't be spelled out, yet the description still explains the OI×price regime taxonomy and the top-trader/taker-flow breakdown, which materially helps interpretation. Combined with the freshness and batching facts, an agent has everything needed to call it correctly; the only mild gap is unstated alternatives.

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%, and the schema already documents the symbols array (max 5) and the bare-base-asset fallback ('BTC' → USDT perpetual). The description's 'up to 5 symbols per call' merely restates maxItems, adding no new syntax or format meaning, 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?

States a precise verb and resource — funding rate, open interest, and positioning for Binance USDⓈ-M perpetual futures — and explicitly carves out its territory against a named sibling ('the derivatives questions candles cannot answer'), so an agent can route between get_derivatives and get_candles without reading either schema.

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

Usage Guidelines4/5

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

The framing 'the derivatives questions candles cannot answer' plus the enumerated use cases (is funding high, is OI building or unwinding, which way accounts lean) tells the agent when this tool is the right pick. It stops short of naming the other alternatives (get_market_stats, get_technical_indicators) or stating exclusions, so it is clear context rather than explicit when/when-not routing.

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

get_elite_leaderboardA
Read-onlyIdempotent
Inspect

Use this when the user specifically asks for the elite leaderboard by SmartScore across exchanges.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyNo
titleNo
sourceNo
leadersNoRanked traders with score, scoreBreakdown, metrics, rationale[], tier and url (the trader page)
summaryNoCoverage of the run: traders scored, trades counted
lastRunAtNo
updatedAtNo
algorithmDetailsNoHow each scoring component is weighted
algorithmVersionNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety and idempotency profile is fully covered structurally. The description contributes almost nothing beyond that — only the scoring metric (SmartScore) and cross-exchange scope, with no mention of freshness, ranking size, or refresh behavior.

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?

A single short sentence with the usage condition front-loaded and no filler. It is efficient, though it spends its only sentence on routing rather than stating what the tool does outright.

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

Completeness3/5

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

With an output schema present, return values need not be described, and zero parameters keep the call surface trivial. However, the description never defines what makes the leaderboard 'elite' or what entities it ranks, so an agent must open the output schema to resolve ambiguity about scope and contents.

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 input schema has zero parameters, so there is no parameter semantics burden; the baseline for a no-arg tool is 4. The description appropriately adds no parameter discussion.

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

Purpose4/5

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

The description names a specific resource (the elite leaderboard) and its ranking basis (SmartScore across exchanges), so the agent knows what will be returned. It does not distinguish this tool from related siblings such as get_top_traders or get_signals, leaving overlap unresolved.

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

Usage Guidelines3/5

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

It gives an explicit trigger — 'when the user specifically asks for the elite leaderboard' — which implies the tool is user-driven rather than proactive. Beyond that trigger, it names no alternative, no exclusion, and no conditions under which a different leaderboard/trader tool should be chosen instead.

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

get_exchangesA
Read-onlyIdempotent
Inspect

Use this when the user asks which exchanges are currently available in TraderSpy smart-money tracking.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoTracked exchanges and whether each is currently enabled

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description's only additional context is the TraderSpy smart-money scope, which is modest added value rather than behavioral disclosure about auth, limits, or freshness.

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?

One sentence, front-loaded with the usage trigger, with no redundant restatement of the tool name or title. Every clause earns its place.

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 an output schema present, the description need not describe return values, and the rich annotations cover safety. For a zero-param read tool the trigger-plus-scope statement is nearly sufficient, though it could note what the exchange list is used for downstream.

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 zero parameters, so there is nothing for the description to clarify; the baseline for a parameterless tool applies. The description correctly makes no claims about arguments it does not have.

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?

States the resource precisely ('which exchanges are currently available in TraderSpy smart-money tracking'), so an agent knows this returns the set of tracked exchanges. It does not explicitly contrast with the similar-sounding sibling get_tracked_symbols, but the domain qualifier 'smart-money tracking' is enough to distinguish scope.

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 a clear user-intent trigger ('when the user asks which exchanges are currently available'), which is a usable routing rule. It stops short of naming alternatives or when-not-to-use conditions, so it falls below the explicit-alternatives bar.

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

get_market_statsA
Read-onlyIdempotent
Inspect

Use this when the user asks for aggregate market stats (positions, PNL, win rate), optionally scoped by source and period.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime period for closed position stats
sourceNoExchange filterall

Output Schema

ParametersJSON Schema
NameRequiredDescription
avgRoiNo
periodNo
winRateNoPercentage of closed positions in profit; null when none closed
byExchangeNoPer-exchange { totalPositions, openPositions }, keyed by exchange
realizedPnlNo
openPositionsNo
closedInPeriodNo
totalPositionsNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and non-open-world, so the safety profile is covered. The description only adds that the stats are 'aggregate' and scope-able, with no detail on what aggregation window or entity the figures cover, so it adds modest value.

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?

A single tight sentence with the trigger front-loaded and the scope qualifier trailing. No wasted clauses, though the framing as a user-question trigger is slightly indirect.

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 an output schema present, return values need not be explained, and annotations carry the safety profile. The description is adequate for a 2-parameter, zero-required read tool, though it could say more about what 'aggregate' spans.

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% with both parameters documented and enumerated. The description's note that results are 'optionally scoped by source and period' restates optionality already visible in the schema, adding little beyond the baseline.

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?

States a specific verb+resource (aggregate market stats) and enumerates the concrete contents (positions, PNL, win rate). It does not differentiate from the close sibling get_signal_stats, so an agent must still infer which 'stats' tool applies.

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?

Gives a clear triggering condition ('when the user asks for aggregate market stats') with concrete examples of the metrics. However, it names no alternative or exclusion, so the agent gets no routing guidance against siblings like get_signal_stats or get_positions.

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

get_positionsA
Read-onlyIdempotent
Inspect

Use this when the user asks for current or historical smart-money positions, optionally filtered by status, source, or symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of positions to return
offsetNoOffset for pagination
sourceNoExchange filterall
statusNoPosition status filterall
symbolNoFilter by trading pair, e.g. BTC, ETHUSDT

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoThe page on traderspy.app that lists these positions: the coin's holders, or the live feed
dataNoSmart money positions across the tracked exchanges
paginationNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds the filtering capabilities but says nothing about pagination behavior, default limits, or result ordering — gaps the annotations don't fill.

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?

A single well-formed sentence with the usage cue front-loaded and no filler. It is appropriately sized for a simple read tool, though it stops short of the crispness of an ideal one-liner.

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, complete parameter descriptions, and annotations covering the safety profile, the description only needs to establish purpose and trigger. It does that, though the lack of any sibling disambiguation leaves a small 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?

Schema description coverage is 100%, so every parameter including the enums and the symbol format example is already documented inline. The description only echoes the filterable fields (status, source, symbol) without adding format or default guidance beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

The description names a specific resource (smart-money positions) and scope (current or historical), which is clearer than a generic 'get positions'. It does not, however, distinguish itself from nearby siblings like get_trader_position_history or get_top_traders, so an agent must infer the boundary.

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 phrase 'Use this when the user asks for...' gives an explicit triggering context, which is better than most definitions. It offers no exclusions or alternative tools for adjacent needs (e.g., per-trader history), leaving the agent to infer when another tool is more appropriate.

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

get_priceA
Read-onlyIdempotent
Inspect

Get real-time price data for one or more crypto futures symbols. Returns current price, 24h high/low, volume, and 24h price change percentage.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesList of symbols to get prices for, e.g. ["BTCUSDT", "ETHUSDT"]

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds that it returns a live snapshot for one or more symbols, but says nothing about latency, rate limits, staleness, or behavior when a symbol is unknown. 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 sentences, both front-loaded and information-dense: the first gives scope, the second enumerates the returned fields. Nothing is padded or redundant.

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 rich annotations and an output schema present, the description needs only scope and payload summary, which it provides. It is essentially complete for a simple read tool, missing only sibling differentiation and any rate/limit caveat.

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 the single 'symbols' parameter is fully documented in the schema with an example and min/maxItems. The description's phrase 'one or more crypto futures symbols' only restates the array nature, adding no format, naming-convention, or batching guidance beyond the schema. Baseline 3 applies.

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?

States a specific verb and resource: 'Get real-time price data for one or more crypto futures symbols', plus the payload contents. This is clearly distinguishable from a generic fetch, but it never names or contrasts with siblings like get_candles (historical) or get_market_stats (aggregate), so an agent must infer the boundary from the word 'real-time' alone.

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

Usage Guidelines3/5

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

Usage is only implied: 'real-time price data' suggests a live snapshot rather than historical series, which is a weak signal against get_candles. There is no explicit when-to-use, when-not-to-use, or named alternative, and no note on batching limits or appropriate call frequency.

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

get_signal_detailsA
Read-onlyIdempotent
Inspect

Use this when the user needs full details for one AI signal by ID, including review and resolution data.

ParametersJSON Schema
NameRequiredDescriptionDefault
signalIdYesThe ID of the signal to retrieve

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoSignal id — pass to get_signal_details
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
urlNoThis signal's page on traderspy.app: chart, levels and outcome
coinNo
priceNoPrice when the signal triggered
actionNobuy or sell
historyNo
targetsNoTake-profit and stop levels: { label, type, pct }
aiReviewNo
createdAtNo
howToReadNoHow the outcome was judged, in one sentence
livePriceNoCurrent price, so the model can judge whether the signal still stands
timeframeNoChart timeframe the preset evaluated, e.g. 4h
importanceNohigh | medium | low
strategyNameNoPreset that produced the signal
signalStrengthNoweak | moderate | strong | very_strong
indicatorValuesNoIndicator readings at trigger time
resolutionStatusNopending | stop | tp1_hit | tp2_hit | tp3_hit | profit_locked | expired
triggeredConditionsNo

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, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds that the payload includes 'review and resolution data', which is useful context beyond the annotations, but it does not cover error cases, permissions, or lookup-miss behavior.

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?

One front-loaded sentence beginning with 'Use this when...' with no redundant or filler content. Every clause earns its place.

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?

An output schema exists, so return values need not be described, and the single parameter is fully covered by the schema. The description is sufficient for correct invocation, though it could note the list-vs-detail choice more explicitly given the many sibling tools.

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% and there is a single required 'signalId' parameter whose type and meaning are fully documented in the schema. The description adds no format or sourcing detail beyond what the schema already provides, so the baseline of 3 applies.

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?

States a specific verb and resource: retrieves full details for a single AI signal by ID, and the phrase 'one AI signal' implicitly distinguishes it from the sibling list tool get_signals. It does not name a sibling explicitly, so it falls just short of the top score.

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?

'Use this when the user needs full details for one AI signal by ID' gives a clear triggering condition tied to a single-ID lookup. It offers no explicit when-not guidance or named alternatives (e.g., get_signals for lists), so it is clear but not exhaustive.

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

get_signalsA
Read-onlyIdempotent
Inspect

Use this when the user asks for recent public AI crypto trading signals, optionally filtered by coin, importance, strategy (the preset that produced them, by name) or pagination. When the user names a count ("last 5 signals"), pass it as limit — the card view renders exactly what was fetched, so over-fetching shows more cards than the user asked for.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoFilter by coin symbol, e.g. BTC, ETH
skipNoOffset for pagination
limitNoNumber of signals to return
strategyNoFilter by the AI strategy (preset) that produced the signal — part of its name, words in order, case-insensitive, e.g. "ATR Squeeze" or "Triple Oversold". get_signal_stats (period 7d) lists the strategies that fired recently with their names; a filter that matches nothing answers with the closest names.
importanceNoFilter by signal importanceall

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
dataNoSignals, newest first
warningNoSet when a strategy filter could not be applied or matched nothing (with the closest preset names)
paginationNo

TDQS

A4.1/5.0
Behavior4/5

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

With annotations already covering read-only, idempotent, non-destructive and closed-world behavior, the description earns credit by adding a non-obvious rendering trait: the card view shows exactly what was fetched, so over-fetching surfaces extra cards. It does not address rate limits or default result size (schema does), but the UI-side effect is genuine value beyond structured fields.

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, no filler. The activation condition is front-loaded and the higher-stakes subtlety (over-fetching in the card view) is placed immediately after the parameter it governs.

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?

An output schema exists, so return values need no explanation, and all five parameters are documented in-schema. The description covers triggering, filters, and the count-handling quirk, leaving only minor gaps such as pagination interaction with `skip`.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description goes beyond by explaining that `strategy` matches a preset name (words in order) and by prescribing the `limit` semantics for explicit user counts. That said, it repeats some schema content rather than adding syntax for `coin` or `importance`.

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?

States a specific verb and resource ('recent public AI crypto trading signals') and enumerates the filterable dimensions, so an agent can distinguish it from singular-lookup siblings like get_signal_details or aggregate siblings like get_signal_stats. It stops short of explicitly naming what it is not, so it does not reach the sibling-exclusion standard of a 5.

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

Usage Guidelines4/5

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

Opens with an explicit trigger ('Use this when the user asks for recent public AI crypto trading signals') and gives concrete guidance for the count case ('last 5 signals' → pass as `limit`). It offers no when-not conditions, but the usage context is clear and actionable.

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

get_signal_statsA
Read-onlyIdempotent
Inspect

Use this when the user asks for aggregate AI signal performance statistics over a specific period — overall, or for one strategy (preset) by name. The answer also breaks the period down per strategy (byStrategy), which is how to learn the strategy names for get_signals.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoTime period for statistics24h
strategyNoOnly the signals of one AI strategy (preset), matched by part of its name, case-insensitive.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoThe signal feed on traderspy.app, every signal listed with its outcome
totalNoSignals published in the period
pendingNoStill open at the end of the period
stoppedNo
warningNoSet when a strategy filter could not be applied or matched nothing (with the closest preset names)
winRateNotargetHits / resolved, as a percentage; null when nothing resolved
strategyNoThe strategy filter that was applied, if any
highCountNoHigh-importance signals
howToReadNoHow an outcome is judged and what winRate counts; quote it when the user asks how the statistics work
byStrategyNoThe same counts per strategy (preset) that fired in the period, most signals first
targetHitsNoSignals that reached a take-profit or locked profit

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add context. It does: the response includes a per-strategy breakdown (byStrategy), and that breakdown can be exploited to discover valid strategy names for get_signals — genuinely useful behavior not conveyed by annotations or schema.

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

Conciseness5/5

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

Two sentences with no filler, front-loading the trigger condition before the secondary routing tip. Every clause earns its place, including the pointer to get_signals.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, and annotations cover the safety profile. With full schema coverage plus an explicit use trigger and a sibling routing tip, an agent has everything needed to select and invoke this tool correctly.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are documented in the schema (including the partial, case-insensitive strategy matching and the period enum), so the schema carries the parameter burden. The description restates that filtering can be overall or by strategy name but adds no syntax or format detail beyond the schema — 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?

States a specific verb and resource ('aggregate AI signal performance statistics') plus the scoping options (overall or one strategy by name), which cleanly separates it from the sibling get_signals that returns raw signals. The cross-reference to get_signals for strategy names further disambiguates the pair.

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?

Opens with an explicit triggering condition ('Use this when the user asks for aggregate AI signal performance statistics over a specific period'), which is strong when-to-use guidance. It implies but never states the inverse exclusion (e.g. don't use this to fetch individual signals), so it falls short of a full when/when-not/alternatives statement.

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

get_technical_indicatorsA
Read-onlyIdempotent
Inspect

Technical analysis for a crypto futures symbol. 19 indicators: RSI, MACD, EMA, SMA, Bollinger Bands, ATR, ADX (+DI/−DI), Stochastic, OBV (with price divergence), VWAP, CCI, MFI, Williams %R, ROC, SuperTrend, Ichimoku, Keltner Channels, classic pivot points and swing support/resistance levels. Every indicator returns its current value, the previous bar, a rising/falling/flat direction, a short series history and — where it applies — zones and crossovers. EMA/SMA accept several periods at once (default 20/50/200); every period is overridable via periods. Pass intervals (up to 3) to get 1h/4h/1d in ONE call with a multi-timeframe confluence verdict. Each timeframe also carries a summary (bias, trend, momentum, volatility, volume, plain-language notes) computed from a fixed indicator set — quote its notes rather than the raw score. For several coins pass symbols (up to 3) instead of one call per coin: ONE call and one quota unit, one entry per symbol in data.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNoTrading pair symbol, e.g. BTCUSDT. For several pairs pass `symbols` instead.
historyNoPrior values returned per indicator as `series` (oldest → newest, length history + 1). 0 = latest only.
periodsNoOptional period overrides, e.g. {"ema":[9,21,55,200],"rsi":7}
symbolsNoUp to 3 trading pairs in ONE call (one quota unit), e.g. ["BTCUSDT","ETHUSDT","SOLUSDT"]. The response then carries one entry per symbol in `data`, each shaped like the single-symbol response.
intervalNoCandle timeframe. Ignored when `intervals` is given.1h
intervalsNoUp to 3 timeframes in ONE call (one quota unit), e.g. ["1h","4h","1d"]. The response then carries per-timeframe results plus a `confluence` verdict.
indicatorsNoIndicators to compute. `levels` = swing support/resistance from price structure, `pivots` = classic floor pivots from the previous day.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
urlNoThe coin's chart on traderspy.app (a single-symbol answer; each `data` entry carries its own)
dataNoPresent when `symbols` was passed, and then the only place the results are: one entry per symbol, in the requested order, each exactly the single-symbol response above ({ symbol, interval, price, candles, indicators + summary or timeframes + confluence, settings, warnings }) — or { symbol, error: "no_data", message } when no candles are stored for it.
countNoEntries in `data`
priceNoLatest close on the primary timeframe, or null when no candles are stored
symbolNo
candlesNoClosed candles the primary timeframe was computed on
summaryNoSingle-timeframe call only: bias, score, trend, momentum, volatility, volume, notes[]. Omitted when `timeframes` is present.
intervalNoPrimary timeframe (the first requested one)
settingsNoEcho of what was computed: indicators, history, resolved periods
warningsNo
confluenceNoMulti-timeframe agreement: { aligned, bias, byInterval }
indicatorsNoSingle-timeframe call only: requested indicators keyed by name. Each carries value, previous, direction, series and indicator-specific fields (zone, crossover, stack, levels…); { value: null, reason: "insufficient_data" } when the tape is too short. Omitted when `timeframes` is present — read them there.
timeframesNoPresent when several intervals were requested: one { interval, price, candles, indicators, summary } per timeframe, in the requested order. The top-level indicators/summary are omitted in that case.
lastCandleOpenTimeNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds genuinely non-obvious context on top: quota-unit consumption ('ONE call and one quota unit'), the multi-timeframe `confluence` verdict, per-indicator return shape (current value, prior bar, direction, series, zones, crossovers), and the caveat that the `summary` is derived from a fixed indicator set whose notes should be quoted over the score.

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?

Front-loaded with purpose, then capability, then batching/efficiency guidance, so an agent can stop reading early. The 19-indicator enumeration is somewhat redundant with the `indicators` enum and lengthens the block, but it aids capability discovery without opening the schema.

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 7-parameter, nested-schema tool with an output schema present, the description covers everything an agent needs: what is computed, how to batch symbols and timeframes, quota implications, and how to interpret the summary. Return-value structure is delegated appropriately to the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the 3 baseline applies, but the description adds real semantics beyond it: which indicators accept multiple periods at once (EMA/SMA, default 20/50/200), that every period is overridable via `periods`, and the batching behavior of `intervals`/`symbols` (up to 3 each, one quota unit, per-symbol/per-timeframe entries in `data`).

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?

Opens with a specific verb+resource ('Technical analysis for a crypto futures symbol') and immediately enumerates the 19 computed indicators, which cleanly separates it from siblings like get_candles (raw OHLC) and get_signals (trade signals). An agent can tell what this returns without opening the schema.

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

Usage Guidelines4/5

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

Gives strong operational guidance: use `symbols` instead of one call per coin, use `intervals` instead of separate calls, and quote the `summary` notes rather than the raw score. It never explicitly routes the agent against tool-level siblings (get_candles, get_signals), so it stops short of the explicit when/when-not/alternatives bar for a 5.

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

get_top_tradersA
Read-onlyIdempotent
Inspect

Use this when the user wants ranked smart-money traders across supported exchanges with sorting and filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of traders to return
orderNoSort directionDESC
sortByNoSort metric (defaults to ranking type)
sourceNoExchange to filter byall
timeRangeNoPerformance time range30D
rankingTypeNoRanking snapshot typeROI

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoRanked traders: source, topTraderId, traderName, roi, pnl, winRate, smartScore, rank, rankings[], url (the trader page)

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description reinforces the read/ranking nature but adds no extra behavioral detail (e.g., what 'smart-money' means or how ranking snapshots differ). A 3 fits given the lower bar with annotations present.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity leaves the minimal gaps noted elsewhere.

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?

An output schema exists and the schema documents all parameters, so the description needn't explain return values. For a read-only ranking tool with full schema and annotation coverage, the description is nearly sufficient, missing only sibling differentiation.

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 every parameter (limit, order, sortBy, source, timeRange, rankingType) is already documented in the schema. The description adds only that filtering and sorting exist, without new semantics. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb ('get') and resource ('top traders') scoped to 'ranked smart-money traders across supported exchanges with sorting and filtering.' This is clear, though it doesn't explicitly differentiate from the sibling get_elite_leaderboard, which likely serves a similar ranked-trader purpose.

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 phrase 'Use this when the user wants ranked smart-money traders' gives a trigger context, but provides no exclusions or alternatives. With a closely related sibling like get_elite_leaderboard available, an agent gets no guidance on when to prefer one over the other.

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

get_tracked_symbolsA
Read-onlyIdempotent
Inspect

List all crypto futures symbols currently tracked by TraderSpy with real-time candle data available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
symbolsNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and determinism profile is covered. The description adds that these are symbols tracked by TraderSpy 'with real-time candle data available', which usefully constrains the result set. It does not, however, describe return format or why some symbols are tracked versus not.

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?

A single front-loaded sentence with no filler; the tracked-symbol scope and the real-time-data qualifier both earn their place and arrive immediately.

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 no parameters and an output schema present, the description need not explain return values, and the safety profile is covered by annotations. It is essentially complete for a simple list tool, though a note on what 'tracked' means or how many symbols to expect would add polish.

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 zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond the scope of the listing, and it does not need to compensate for any schema gaps.

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?

States a specific verb ('List') and a well-scoped resource ('crypto futures symbols currently tracked by TraderSpy'), which is distinct from siblings like screen_symbols, get_candles, and get_price. It does not, however, explicitly name or contrast with any sibling tool, so the agent must infer the boundary.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as screen_symbols or get_exchanges. The purpose implies discovery of available symbols, but nothing tells the agent when this call is preferable to another.

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

get_trader_position_historyB
Read-onlyIdempotent
Inspect

Use this when the user asks for closed trade history of a specific trader.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoResults per page
sourceNoExchangebinance
traderIdYesThe trader ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
urlNoThe trader's page on traderspy.app: positions, history and Follow
dataNoClosed positions, most recently closed first
paginationNo

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds almost nothing beyond that: no note about pagination behavior, the source/exchange dimension, result volume, or rate limits, and the 'closed' qualifier merely restates the purpose rather than disclosing new behavior.

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?

A single front-loaded sentence with zero filler and the trigger condition stated first. It is terse rather than padded, though the terseness is what leaves the other dimensions under-served.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the schema documents all params. Still, for a paged history tool the description gives no hint about pagination, source selection, or how it differs from get_positions, leaving a modest gap for an agent deciding between siblings.

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 four documented params including a source enum, so the schema carries the parameter burden. The description adds no syntax, default, or filtering guidance beyond the schema, which is the baseline-3 case.

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?

States a specific verb and resource ('closed trade history') scoped to 'a specific trader', which distinguishes it from siblings like get_positions (open positions) and get_trader_profile. It does not name a sibling explicitly, but the resource phrasing is specific enough to route correctly.

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 trigger is explicit: 'Use this when the user asks for closed trade history of a specific trader.' That is a clear context for invocation. No when-not conditions or named alternatives are given, so it falls short of a 5.

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

get_trader_profileA
Read-onlyIdempotent
Inspect

Use this when the user needs one trader profile, including metrics and latest positions.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoExchange the trader is onbinance
traderIdYesThe trader ID
timeRangeNoPerformance time range30D
rankingTypeNoRanking snapshot typeROI

Output Schema

ParametersJSON Schema
NameRequiredDescription
aumNo
mddNoMaximum drawdown
pnlNo
roiNo
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
urlNoThe trader's page on traderspy.app: positions, history and Follow
rankNo
sourceNo
winRateNo
avatarUrlNo
positionsNoCurrently tracked positions
timeRangeNo
smartScoreNo
traderNameNo
rankingTypeNo
topTraderIdNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description usefully adds that the response bundles metrics with latest positions, but says nothing about whether the profile is live or snapshot-based, or about default-driven behavior for timeRange/rankingType.

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?

A single front-loaded sentence with no filler, and the trigger condition comes first. It is arguably too terse for a tool with four parameters and an output schema, but nothing in it is wasteful.

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 an output schema present, the description need not explain return values, and annotations cover safety; it correctly focuses on the trigger and payload. The remaining gap is routing guidance among the many sibling retrieval tools, which leaves the definition slightly thin but functional.

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 clear descriptions and enums for source, timeRange and rankingType, so the schema carries the parameter burden. The description adds no syntax, defaults or interaction notes beyond what the schema already says, so baseline 3 applies.

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?

States a specific verb and resource ('one trader profile') plus the payload contents ('metrics and latest positions'), which separates it from list-style siblings like get_top_traders and get_positions. It stops short of naming those siblings explicitly, so differentiation is inferable rather than stated.

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?

'Use this when the user needs one trader profile' gives a positive usage condition but no exclusions or alternatives. An agent must infer for itself when to prefer get_trader_position_history or get_top_traders over this tool.

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

screen_symbolsA
Read-onlyIdempotent
Inspect

Screen MANY crypto futures symbols at once on one timeframe — "which coins are oversold on 4h", "what is above its 200 EMA with rising volume", "show me squeezes". Give up to 3 AND-ed conditions from a fixed metric list (RSI, stochastic, CCI, MFI, Williams %R, ADX, ROC, MACD histogram, ATR%, volume ratio, Bollinger %B / width, price vs EMA, EMA spread, SuperTrend, change %, price) with lt / gt / crossAbove / crossBelow. Scans the most-traded symbols by 24h volume (default 50, max 100) or an explicit list; every row carries the metric values plus bias, trend, RSI, ADX, ATR% and 24h change. With NO conditions and explicit symbols it is a side-by-side comparison table ("compare BTC, ETH, SOL"). ONE quota unit however many symbols — always prefer this over calling get_technical_indicators in a loop.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows to return
sortByNovolume (24h quote volume), change24h, or metric (the first condition's metric). Default: metric when conditions are given, else volume.
symbolsNoExplicit symbols to scan (≤ 100, e.g. ["BTC","ETH","SOL"]). Omit to scan the most-traded symbols instead. With no `conditions`, every listed symbol is returned as a comparison table.
intervalNoCandle timeframe to evaluate on4h
universeNoHow many of the most-traded symbols (by 24h volume) to scan when `symbols` is omitted (max 100)
sortOrderNodesc
conditionsNoUp to 3 conditions, AND-ed. Examples: RSI oversold = {"metric":"rsi","op":"lt","value":30}; above the 200 EMA = {"metric":"priceVsEma","op":"gt","value":0,"period":200}; golden cross = {"metric":"emaSpread","op":"crossAbove","value":0,"period":50,"period2":200}; MACD bullish cross = {"metric":"macdHistogram","op":"crossAbove","value":0}; dumped 5% in a day = {"metric":"changePct","op":"lt","value":-5,"period":24}.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipNoRare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to
sortByNo
matchedNoSymbols satisfying every condition (all scanned symbols when no conditions)
resultsNoOne row per matching symbol: { symbol, price, change24hPct, volume24hUsd, values { "<metric label>": value }, bias, trend, rsi14, adx14, atrPct, volumeRatio, squeeze }
intervalNo
returnedNo
universeNo{ source: top_by_volume | explicit, requested, scanned, missing[] }
warningsNo
sortOrderNo
conditionsNoHuman-readable conditions, e.g. "RSI(14) < 30"

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive safety. The description adds valuable behavioral context beyond that: scanning defaults (most-traded by 24h volume, default 50, max 100) and the quota cost advantage ('ONE quota unit however many symbols'). It does not detail pagination or rate limits beyond quota, hence 4.

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?

Front-loads purpose and example queries, then layers condition details, scanning behavior, and quota advantage. It is dense but appropriately sized for a complex screening tool, though a few sentences partly duplicate schema information (metric list, operators).

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 output schema exists and annotations cover safety, the description provides enough context for correct invocation: purpose, use cases, condition limits, default scanning universe, comparison mode, and quota advantage. Minor schema details like limit and sort defaults are left to the structured fields, which is appropriate.

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 86%, so the schema already documents parameters thoroughly, including defaults, enums, and examples. The description's metric list and operator summary largely restate schema content, though it usefully groups the fixed metric list and reiterates the three-condition limit.

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

Purpose5/5

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

States a specific verb (screen) and resource (crypto futures symbols) with clear scope (many symbols at once, one timeframe). Distinguishes itself from sibling get_technical_indicators by explicitly recommending itself for multi-symbol screening.

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?

Provides concrete example queries and explicitly says to prefer this tool over calling get_technical_indicators in a loop. Also clarifies the no-conditions + explicit-symbols comparison-table use case.

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.

  1. 2 tool updates
    • Changedbacktest_condition1 field changed
      • changedInput schema / properties / conditions / items / properties / metric / description
        Previous value: -"Metric. Defaults in brackets. rsi(14): RSI, 0–100; stochastic(14,3): Slow stochastic %K (period, %D smoothing), 0–100; cci(20): Commodity Channel Index; mfi(14): Money Flow Index, 0–100; williamsR(14): Williams %R, −100–0; adx(14): Average Directional Index; roc(12): Rate of change in %; macdHistogram(12,26): MACD histogram (fast, slow; signal 9); atrPct(14): ATR as % of price; volumeRatio(20): Bar volume ÷ average of the previous N bars; bbPercentB(20): Position inside Bollinger (20, 2): 0 = lower band, 1 = upper band; bbWidthPct(20): Bollinger band width as % of the middle band; priceVsEma(50): % distance of close from EMA(period); > 0 = above; emaSpread(50,200): % of EMA(period) over EMA(period2); crossAbove 0 = golden cross; supertrend(10): +1 in an up-trend, −1 in a down-trend (ATR period, multiplier 3); changePct(24): % change of close over the last N bars; price: Close price"New value: +"Metric. Defaults in brackets. rsi(14): RSI, 0–100; stochastic(14,3): Stochastic %K (period; raw %K, the line TradingView draws with 14,1,3), 0–100; cci(20): Commodity Channel Index; mfi(14): Money Flow Index, 0–100; williamsR(14): Williams %R, −100–0; adx(14): Average Directional Index; roc(12): Rate of change in %; macdHistogram(12,26): MACD histogram (fast, slow; signal 9); atrPct(14): ATR as % of price; volumeRatio(20): Bar volume ÷ average of the previous N bars; bbPercentB(20): Position inside Bollinger (20, 2): 0 = lower band, 1 = upper band; bbWidthPct(20): Bollinger band width as % of the middle band; priceVsEma(50): % distance of close from EMA(period); > 0 = above; emaSpread(50,200): % of EMA(period) over EMA(period2); crossAbove 0 = golden cross; supertrend(10): +1 in an up-trend, −1 in a down-trend (ATR period, multiplier 3); changePct(24): % change of close over the last N bars; price: Close price"
    • Changedscreen_symbols1 field changed
      • changedInput schema / properties / conditions / items / properties / metric / description
        Previous value: -"Metric. Defaults in brackets. rsi(14): RSI, 0–100; stochastic(14,3): Slow stochastic %K (period, %D smoothing), 0–100; cci(20): Commodity Channel Index; mfi(14): Money Flow Index, 0–100; williamsR(14): Williams %R, −100–0; adx(14): Average Directional Index; roc(12): Rate of change in %; macdHistogram(12,26): MACD histogram (fast, slow; signal 9); atrPct(14): ATR as % of price; volumeRatio(20): Bar volume ÷ average of the previous N bars; bbPercentB(20): Position inside Bollinger (20, 2): 0 = lower band, 1 = upper band; bbWidthPct(20): Bollinger band width as % of the middle band; priceVsEma(50): % distance of close from EMA(period); > 0 = above; emaSpread(50,200): % of EMA(period) over EMA(period2); crossAbove 0 = golden cross; supertrend(10): +1 in an up-trend, −1 in a down-trend (ATR period, multiplier 3); changePct(24): % change of close over the last N bars; price: Close price"New value: +"Metric. Defaults in brackets. rsi(14): RSI, 0–100; stochastic(14,3): Stochastic %K (period; raw %K, the line TradingView draws with 14,1,3), 0–100; cci(20): Commodity Channel Index; mfi(14): Money Flow Index, 0–100; williamsR(14): Williams %R, −100–0; adx(14): Average Directional Index; roc(12): Rate of change in %; macdHistogram(12,26): MACD histogram (fast, slow; signal 9); atrPct(14): ATR as % of price; volumeRatio(20): Bar volume ÷ average of the previous N bars; bbPercentB(20): Position inside Bollinger (20, 2): 0 = lower band, 1 = upper band; bbWidthPct(20): Bollinger band width as % of the middle band; priceVsEma(50): % distance of close from EMA(period); > 0 = above; emaSpread(50,200): % of EMA(period) over EMA(period2); crossAbove 0 = golden cross; supertrend(10): +1 in an up-trend, −1 in a down-trend (ATR period, multiplier 3); changePct(24): % change of close over the last N bars; price: Close price"
  2. 17 tool updates
    • Changedbacktest_condition3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "The coin's chart on traderspy.app",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_candles1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_derivatives2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / data / description
        Previous value: -"One entry per symbol: { symbol, markPrice, indexPrice, premiumPct, funding { rate, ratePct, annualizedPct, nextFundingTime, minutesToNextFunding, avg24hPct, avg3dPct, label }, openInterest { contracts, valueUsd, change4hPct, change24hPct, priceChange24hPct, regime }, positioning { globalLongShortRatio, globalLongPct, topTraderLongShortRatio, topTraderLongPct, takerBuySellRatio, label }, notes[] } — or { symbol, error, message } when the symbol is not a Binance USDⓈ-M futures pair"New value: +"One entry per symbol: { symbol, markPrice, indexPrice, premiumPct, funding { rate, ratePct, annualizedPct, nextFundingTime, minutesToNextFunding, avg24hPct, avg3dPct, label }, openInterest { contracts, valueUsd, change4hPct, change24hPct, priceChange24hPct, regime }, positioning { globalLongShortRatio, globalLongPct, topTraderLongShortRatio, topTraderLongPct, takerBuySellRatio, label }, notes[], url (the coin chart) } — or { symbol, error, message } when the symbol is not a Binance USDⓈ-M futures pair"
    • Changedget_elite_leaderboard2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / leaders / description
        Previous value: -"Ranked traders with score, scoreBreakdown, metrics, rationale[] and tier"New value: +"Ranked traders with score, scoreBreakdown, metrics, rationale[], tier and url (the trader page)"
    • Changedget_exchanges1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_market_stats1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_positions3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "allOf": [
        -        {
        -          "additionalProperties": true,
        -          "properties": {
        -            "closePrice": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "closeTime": {
        -              "anyOf": [
        -                {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "number"
        -                    },
        -                    {
        -                      "format": "date-time",
        -                      "type": "string"
        -                    }
        -                  ]
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "entryPrice": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "isOpen": {
        -              "type": [
        -                "boolean",
        -                "null"
        -              ]
        -            },
        -            "lastEvent": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "leverage": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "markPrice": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "openTime": {
        -              "anyOf": [
        -                {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "number"
        -                    },
        -                    {
        -                      "format": "date-time",
        -                      "type": "string"
        -                    }
        -                  ]
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            },
        -            "pnl": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "roi": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "side": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "size": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "symbol": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "unrealizedPnl": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": true,
        -          "properties": {
        -            "sortDate": {
        -              "anyOf": [
        -                {
        -                  "anyOf": [
        -                    {
        -                      "type": "string"
        -                    },
        -                    {
        -                      "type": "number"
        -                    },
        -                    {
        -                      "format": "date-time",
        -                      "type": "string"
        -                    }
        -                  ]
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ]
        -            }
        -          },
        -          "type": "object"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "allOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {
        +            "closePrice": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "closeTime": {
        +              "anyOf": [
        +                {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "number"
        +                    },
        +                    {
        +                      "format": "date-time",
        +                      "type": "string"
        +                    }
        +                  ]
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "entryPrice": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "isOpen": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "lastEvent": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "leverage": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "markPrice": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "openTime": {
        +              "anyOf": [
        +                {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "number"
        +                    },
        +                    {
        +                      "format": "date-time",
        +                      "type": "string"
        +                    }
        +                  ]
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "pnl": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "roi": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "side": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "size": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            },
        +            "symbol": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "unrealizedPnl": {
        +              "type": [
        +                "number",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": true,
        +          "properties": {
        +            "sortDate": {
        +              "anyOf": [
        +                {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "number"
        +                    },
        +                    {
        +                      "format": "date-time",
        +                      "type": "string"
        +                    }
        +                  ]
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "traderUrl": {
        +              "description": "The position's trader page on traderspy.app",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "The page on traderspy.app that lists these positions: the coin's holders, or the live feed",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_price2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "change24h": {
        -          "description": "24h change as a percentage",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "high24h": {
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "low24h": {
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "updatedAt": {
        -          "anyOf": [
        -            {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "number"
        -                },
        -                {
        -                  "format": "date-time",
        -                  "type": "string"
        -                }
        -              ]
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "volume24h": {
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "change24h": {
        +          "description": "24h change as a percentage",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "high24h": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "low24h": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "price": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "updatedAt": {
        +          "anyOf": [
        +            {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "format": "date-time",
        +                  "type": "string"
        +                }
        +              ]
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "url": {
        +          "description": "The coin's chart on traderspy.app",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "volume24h": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_signal_details3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "This signal's page on traderspy.app: chart, levels and outcome",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_signal_stats2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "The signal feed on traderspy.app, every signal listed with its outcome",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_signals3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "action": {
        -          "description": "buy or sell",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "coin": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "createdAt": {
        -          "anyOf": [
        -            {
        -              "anyOf": [
        -                {
        -                  "type": "string"
        -                },
        -                {
        -                  "type": "number"
        -                },
        -                {
        -                  "format": "date-time",
        -                  "type": "string"
        -                }
        -              ]
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "id": {
        -          "description": "Signal id — pass to get_signal_details",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "importance": {
        -          "description": "high | medium | low",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "description": "Price when the signal triggered",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "resolutionStatus": {
        -          "description": "pending | stop | tp1_hit | tp2_hit | tp3_hit | profit_locked | expired",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "signalStrength": {
        -          "description": "weak | moderate | strong | very_strong",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "strategyName": {
        -          "description": "Preset that produced the signal",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "targets": {
        -          "anyOf": [
        -            {
        -              "items": {
        -                "additionalProperties": true,
        -                "properties": {},
        -                "type": "object"
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Take-profit and stop levels: { label, type, pct }"
        -        },
        -        "timeframe": {
        -          "description": "Chart timeframe the preset evaluated, e.g. 4h",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "triggeredConditions": {
        -          "anyOf": [
        -            {
        -              "items": {},
        -              "type": "array"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "action": {
        +          "description": "buy or sell",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "coin": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "createdAt": {
        +          "anyOf": [
        +            {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "number"
        +                },
        +                {
        +                  "format": "date-time",
        +                  "type": "string"
        +                }
        +              ]
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "id": {
        +          "description": "Signal id — pass to get_signal_details",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "importance": {
        +          "description": "high | medium | low",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "price": {
        +          "description": "Price when the signal triggered",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "resolutionStatus": {
        +          "description": "pending | stop | tp1_hit | tp2_hit | tp3_hit | profit_locked | expired",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "signalStrength": {
        +          "description": "weak | moderate | strong | very_strong",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "strategyName": {
        +          "description": "Preset that produced the signal",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "targets": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {},
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Take-profit and stop levels: { label, type, pct }"
        +        },
        +        "timeframe": {
        +          "description": "Chart timeframe the preset evaluated, e.g. 4h",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "triggeredConditions": {
        +          "anyOf": [
        +            {
        +              "items": {},
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "url": {
        +          "description": "This signal's page on traderspy.app: chart, levels and outcome",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
    • Changedget_technical_indicators3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "The coin's chart on traderspy.app (a single-symbol answer; each `data` entry carries its own)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_top_traders2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • changedOutput schema / properties / data / description
        Previous value: -"Ranked traders: source, topTraderId, traderName, roi, pnl, winRate, smartScore, rank, rankings[]"New value: +"Ranked traders: source, topTraderId, traderName, roi, pnl, winRate, smartScore, rank, rankings[], url (the trader page)"
    • Changedget_tracked_symbols1 field changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
    • Changedget_trader_position_history3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "The trader's page on traderspy.app: positions, history and Follow",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_trader_profile3 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
      • addedOutput schema / properties / url
        Added value: +{
        +  "description": "The trader's page on traderspy.app: positions, history and Follow",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedscreen_symbols2 fields changed
      • changedOutput schema / additionalProperties
        Previous value: -falseNew value: +true
      • addedOutput schema / properties / tip
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {
        +        "links": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "label": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "url": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "text": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to"
        +}
  3. 2 tool updates
    • Changedget_signal_details2 fields changed
      • changedOutput schema / properties / history / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "currentPrice": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "entryPrice": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "highestPrice": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "lowestPrice": {
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "resolution": {
        -        "anyOf": [
        -          {
        -            "additionalProperties": true,
        -            "properties": {},
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "{ status, price, time } once resolved"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "currentPrice": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "entryPrice": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "highestPrice": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "lowestPrice": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "resolution": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {},
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "{ status, at, price, stopAt? } once resolved: status = the highest take-profit reached before price touched the stop (stop | tp1_hit | tp2_hit | tp3_hit | profit_locked | expired); stopAt = price came back to the stop after that target, the signal ended there"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / howToRead
        Added value: +{
        +  "description": "How the outcome was judged, in one sentence",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_signal_stats1 field changed
      • addedOutput schema / properties / howToRead
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "How an outcome is judged and what winRate counts; quote it when the user asks how the statistics work"
        +}
  4. 1 tool update
    • Changedget_technical_indicators5 fields changed
      • changedInput schema / properties / symbol / description
        Previous value: -"Trading pair symbol, e.g. BTCUSDT"New value: +"Trading pair symbol, e.g. BTCUSDT. For several pairs pass `symbols` instead."
      • addedInput schema / properties / symbols
        Added value: +{
        +  "description": "Up to 3 trading pairs in ONE call (one quota unit), e.g. [\"BTCUSDT\",\"ETHUSDT\",\"SOLUSDT\"]. The response then carries one entry per symbol in `data`, each shaped like the single-symbol response.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "symbol"
        -]
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Entries in `data`",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / data
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Present when `symbols` was passed, and then the only place the results are: one entry per symbol, in the requested order, each exactly the single-symbol response above ({ symbol, interval, price, candles, indicators + summary or timeframes + confluence, settings, warnings }) — or { symbol, error: \"no_data\", message } when no candles are stored for it."
        +}
  5. 2 tool updates
    • Changedget_signal_stats4 fields changed
      • addedInput schema / properties / strategy
        Added value: +{
        +  "description": "Only the signals of one AI strategy (preset), matched by part of its name, case-insensitive.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / byStrategy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "pending": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "stopped": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "strategyName": {
        +            "description": "The preset — pass it to get_signals as `strategy`",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "targetHits": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "total": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "winRate": {
        +            "description": "targetHits / resolved, as a percentage; null when nothing resolved",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The same counts per strategy (preset) that fired in the period, most signals first"
        +}
      • addedOutput schema / properties / strategy
        Added value: +{
        +  "description": "The strategy filter that was applied, if any",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "description": "Set when a strategy filter could not be applied or matched nothing (with the closest preset names)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedget_signals2 fields changed
      • addedInput schema / properties / strategy
        Added value: +{
        +  "description": "Filter by the AI strategy (preset) that produced the signal — part of its name, words in order, case-insensitive, e.g. \"ATR Squeeze\" or \"Triple Oversold\". get_signal_stats (period 7d) lists the strategies that fired recently with their names; a filter that matches nothing answers with the closest names.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / warning
        Added value: +{
        +  "description": "Set when a strategy filter could not be applied or matched nothing (with the closest preset names)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  6. 1 tool update
    • Removedget_my_account
  7. 2 tool updates
    • Addedbacktest_condition
    • Addedscreen_symbols
  8. 1 tool update
    • Addedget_derivatives
  9. 1 tool update
    • Changedget_technical_indicators3 fields changed
      • changedOutput schema / properties / indicators / description
        Previous value: -"Requested indicators keyed by name (primary timeframe). Each carries value, previous, direction, series and indicator-specific fields (zone, crossover, stack, levels…); { value: null, reason: \"insufficient_data\" } when the tape is too short."New value: +"Single-timeframe call only: requested indicators keyed by name. Each carries value, previous, direction, series and indicator-specific fields (zone, crossover, stack, levels…); { value: null, reason: \"insufficient_data\" } when the tape is too short. Omitted when `timeframes` is present — read them there."
      • changedOutput schema / properties / summary / description
        Previous value: -"Interpretation layer: bias, score, trend, momentum, volatility, volume, notes[]"New value: +"Single-timeframe call only: bias, score, trend, momentum, volatility, volume, notes[]. Omitted when `timeframes` is present."
      • changedOutput schema / properties / timeframes / description
        Previous value: -"Present when several intervals were requested: one { interval, price, indicators, summary } per timeframe"New value: +"Present when several intervals were requested: one { interval, price, candles, indicators, summary } per timeframe, in the requested order. The top-level indicators/summary are omitted in that case."
  10. 1 tool update
    • Changedget_technical_indicators17 fields changed
      • addedInput schema / properties / history
        Added value: +{
        +  "default": 5,
        +  "description": "Prior values returned per indicator as `series` (oldest → newest, length history + 1). 0 = latest only.",
        +  "maximum": 20,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / indicators / description
        Previous value: -"Technical indicators to compute"New value: +"Indicators to compute. `levels` = swing support/resistance from price structure, `pivots` = classic floor pivots from the previous day."
      • changedInput schema / properties / indicators / items / enum
        Previous value: -[
        -  "rsi",
        -  "macd",
        -  "ema",
        -  "sma",
        -  "bollinger",
        -  "atr",
        -  "adx",
        -  "stochastic",
        -  "obv",
        -  "vwap",
        -  "cci",
        -  "mfi",
        -  "williamsR"
        -]New value: +[
        +  "rsi",
        +  "macd",
        +  "ema",
        +  "sma",
        +  "bollinger",
        +  "atr",
        +  "adx",
        +  "stochastic",
        +  "obv",
        +  "vwap",
        +  "cci",
        +  "mfi",
        +  "williamsR",
        +  "roc",
        +  "supertrend",
        +  "ichimoku",
        +  "keltner",
        +  "pivots",
        +  "levels"
        +]
      • changedInput schema / properties / indicators / maxItems
        Previous value: -13New value: +19
      • changedInput schema / properties / interval / description
        Previous value: -"Candle interval/timeframe"New value: +"Candle timeframe. Ignored when `intervals` is given."
      • addedInput schema / properties / intervals
        Added value: +{
        +  "description": "Up to 3 timeframes in ONE call (one quota unit), e.g. [\"1h\",\"4h\",\"1d\"]. The response then carries per-timeframe results plus a `confluence` verdict.",
        +  "items": {
        +    "enum": [
        +      "1m",
        +      "5m",
        +      "15m",
        +      "1h",
        +      "4h",
        +      "1d"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / periods
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Optional period overrides, e.g. {\"ema\":[9,21,55,200],\"rsi\":7}",
        +  "properties": {
        +    "adx": {
        +      "description": "ADX period (default 14)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "atr": {
        +      "description": "ATR period (default 14)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "bollinger": {
        +      "description": "Bollinger period (default 20)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "bollingerStdDev": {
        +      "description": "Bollinger std-dev multiplier (default 2)",
        +      "maximum": 5,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    "cci": {
        +      "description": "CCI period (default 20)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "ema": {
        +      "description": "EMA periods, up to 4 (default [20, 50, 200])",
        +      "items": {
        +        "maximum": 500,
        +        "minimum": 2,
        +        "type": "integer"
        +      },
        +      "maxItems": 4,
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    "keltner": {
        +      "description": "Keltner EMA period (default 20)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "keltnerAtr": {
        +      "description": "Keltner ATR period (default 10)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "keltnerMultiplier": {
        +      "description": "Keltner ATR multiplier (default 2)",
        +      "maximum": 10,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    "macdFast": {
        +      "description": "MACD fast EMA (default 12)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "macdSignal": {
        +      "description": "MACD signal EMA (default 9)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "macdSlow": {
        +      "description": "MACD slow EMA (default 26)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "mfi": {
        +      "description": "MFI period (default 14)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "obv": {
        +      "description": "OBV averaging window (default 20)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "roc": {
        +      "description": "Rate-of-change period (default 12)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "rsi": {
        +      "description": "RSI period (default 14)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "sma": {
        +      "description": "SMA periods, up to 4 (default [20, 50, 200])",
        +      "items": {
        +        "maximum": 500,
        +        "minimum": 2,
        +        "type": "integer"
        +      },
        +      "maxItems": 4,
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    "stochastic": {
        +      "description": "Stochastic %K period (default 14)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "stochasticSignal": {
        +      "description": "Stochastic %D smoothing (default 3)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "supertrend": {
        +      "description": "SuperTrend ATR period (default 10)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "supertrendMultiplier": {
        +      "description": "SuperTrend ATR multiplier (default 3)",
        +      "maximum": 10,
        +      "minimum": 0.5,
        +      "type": "number"
        +    },
        +    "vwap": {
        +      "description": "Rolling VWAP window in bars (default 48)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    },
        +    "williamsR": {
        +      "description": "Williams %R period (default 14)",
        +      "maximum": 500,
        +      "minimum": 2,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / candles
        Added value: +{
        +  "description": "Closed candles the primary timeframe was computed on",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / confluence
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Multi-timeframe agreement: { aligned, bias, byInterval }"
        +}
      • changedOutput schema / properties / indicators / description
        Previous value: -"Requested indicators keyed by name; shape differs per indicator"New value: +"Requested indicators keyed by name (primary timeframe). Each carries value, previous, direction, series and indicator-specific fields (zone, crossover, stack, levels…); { value: null, reason: \"insufficient_data\" } when the tape is too short."
      • addedOutput schema / properties / interval / description
        Added value: +"Primary timeframe (the first requested one)"
      • addedOutput schema / properties / lastCandleOpenTime
        Added value: +{
        +  "anyOf": [
        +    {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "format": "date-time",
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / price / description
        Previous value: -"Latest close, or null when no candles are stored"New value: +"Latest close on the primary timeframe, or null when no candles are stored"
      • addedOutput schema / properties / settings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Echo of what was computed: indicators, history, resolved periods"
        +}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Interpretation layer: bias, score, trend, momentum, volatility, volume, notes[]"
        +}
      • addedOutput schema / properties / timeframes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Present when several intervals were requested: one { interval, price, indicators, summary } per timeframe"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
  11. 1 tool update
    • Changedget_my_account1 field changed
      • changedOutput schema / properties / trading / description
        Previous value: -"Whether agent trading is enabled, plus the server-side caps that apply"New value: +"Connector capabilities: read-only. States that this connector cannot place orders or withdraw, and where the user trades instead"
  12. 15 tool updates
    • First observedget_candles
    • First observedget_elite_leaderboard
    • First observedget_exchanges
    • First observedget_market_stats
    • First observedget_my_account
    • First observedget_positions
    • First observedget_price
    • First observedget_signal_details
    • First observedget_signal_stats
    • First observedget_signals
    • First observedget_technical_indicators
    • First observedget_top_traders
    • First observedget_tracked_symbols
    • First observedget_trader_position_history
    • First observedget_trader_profile

Publisher details

Operator
TraderSpy · Publisher source
Operator website
https://traderspy.app
Vendor relationship
First-party
Trust center
Not available
Restrictions
A free TraderSpy account is required; the personal key is generated at traderspy.app/mcp and can be passed as a bearer token or embedded in the connector URL. Daily tool-call quota: 5 on the free tier, 100 on Pro. No admin approval, no custom OAuth app to register, and no regional restrictions. Every tool is read-only, so the credential cannot place orders or move funds.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides cryptocurrency trading signals, market analysis, and portfolio management capabilities across 15+ exchanges with AI-enhanced technical analysis, arbitrage detection, and risk assessment tools.
    2
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    AI-powered crypto signal intelligence for 20 assets (BTC, ETH, SOL, etc). 6 scoring dimensions: whale activity, technical analysis, derivatives flow, narrative strength, sentiment, market structure. Market regime detection (TRENDING/RANGING), portfolio optimization, and accuracy tracking. 9 read-only MCP tools. Free via MCP, $0.001 USDC via x402 on Base for REST API.
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.