TraderSpy
Server Details
AI crypto signals, whale positions, 19 technical indicators, derivatives, screener and backtests
- 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
Scored across 17 tools
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.
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.
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.
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 toolsbacktest_conditionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Trading pair, e.g. BTCUSDT (a bare "BTC" is read as its USDT perpetual) | |
| horizons | No | Bars ahead to measure returns over (≤ 4). Default per interval ≈ 4h / 1d / 3d: 1h → [4, 24, 72], 4h → [6, 18, 42], 1d → [1, 3, 7]. | |
| interval | No | Candle timeframe | 4h |
| conditions | Yes | Up 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
| Name | Required | Description |
|---|---|---|
| to | No | |
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| url | No | The coin's chart on traderspy.app |
| bars | No | Candles the study ran on (the whole stored tape) |
| from | No | |
| recent | No | Newest episodes first: { openTime, barsAgo, price, returnsPct { "<bars>": pct } } |
| symbol | No | |
| horizons | No | Per look-ahead: { bars, samples, avgReturnPct, medianReturnPct, winRatePct, avgMaxUpPct, avgMaxDownPct, bestPct, worstPct, baselineAvgReturnPct, edgePct } — edge = avg − unconditional baseline |
| interval | No | |
| warnings | No | |
| activeNow | No | Conditions hold on the latest closed bar |
| conditions | No | |
| occurrences | No | Episodes — the FIRST bar of each run where the conditions held |
| horizonHours | No | |
| coverageHours | No | |
| currentValues | No | Latest value of every metric involved |
| evaluableBars | No | |
| lastOccurrence | No | { openTime, barsAgo, price } |
TDQS
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.
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.
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.
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.
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.
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_candlesBRead-onlyIdempotentInspect
Get OHLCV (Open, High, Low, Close, Volume) candle data for a crypto futures symbol. Useful for charting, price history, and technical analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of candles to return | |
| symbol | Yes | Trading pair symbol, e.g. BTCUSDT | |
| interval | No | Candle interval/timeframe | 1h |
Output Schema
| Name | Required | Description |
|---|---|---|
| symbol | No | |
| candles | No | Oldest first |
| interval | No |
TDQS
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.
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.
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.
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.
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.
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_derivativesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | Up to 5 Binance USDⓈ-M futures symbols, e.g. ["BTCUSDT", "ETHUSDT"]. A bare base asset ("BTC") is read as its USDT perpetual. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | 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 |
| count | No |
TDQS
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.
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.
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.
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.
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.
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_leaderboardARead-onlyIdempotentInspect
Use this when the user specifically asks for the elite leaderboard by SmartScore across exchanges.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| title | No | |
| source | No | |
| leaders | No | Ranked traders with score, scoreBreakdown, metrics, rationale[], tier and url (the trader page) |
| summary | No | Coverage of the run: traders scored, trades counted |
| lastRunAt | No | |
| updatedAt | No | |
| algorithmDetails | No | How each scoring component is weighted |
| algorithmVersion | No |
TDQS
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.
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.
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.
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.
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.
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_exchangesARead-onlyIdempotentInspect
Use this when the user asks which exchanges are currently available in TraderSpy smart-money tracking.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Tracked exchanges and whether each is currently enabled |
TDQS
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.
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.
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.
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.
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.
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_statsARead-onlyIdempotentInspect
Use this when the user asks for aggregate market stats (positions, PNL, win rate), optionally scoped by source and period.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time period for closed position stats | |
| source | No | Exchange filter | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| avgRoi | No | |
| period | No | |
| winRate | No | Percentage of closed positions in profit; null when none closed |
| byExchange | No | Per-exchange { totalPositions, openPositions }, keyed by exchange |
| realizedPnl | No | |
| openPositions | No | |
| closedInPeriod | No | |
| totalPositions | No |
TDQS
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.
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.
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.
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.
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.
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_positionsARead-onlyIdempotentInspect
Use this when the user asks for current or historical smart-money positions, optionally filtered by status, source, or symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of positions to return | |
| offset | No | Offset for pagination | |
| source | No | Exchange filter | all |
| status | No | Position status filter | all |
| symbol | No | Filter by trading pair, e.g. BTC, ETHUSDT |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | The page on traderspy.app that lists these positions: the coin's holders, or the live feed |
| data | No | Smart money positions across the tracked exchanges |
| pagination | No |
TDQS
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.
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.
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.
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.
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.
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_priceARead-onlyIdempotentInspect
Get real-time price data for one or more crypto futures symbols. Returns current price, 24h high/low, volume, and 24h price change percentage.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | List of symbols to get prices for, e.g. ["BTCUSDT", "ETHUSDT"] |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No |
TDQS
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.
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.
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.
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.
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.
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_detailsARead-onlyIdempotentInspect
Use this when the user needs full details for one AI signal by ID, including review and resolution data.
| Name | Required | Description | Default |
|---|---|---|---|
| signalId | Yes | The ID of the signal to retrieve |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Signal id — pass to get_signal_details |
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| url | No | This signal's page on traderspy.app: chart, levels and outcome |
| coin | No | |
| price | No | Price when the signal triggered |
| action | No | buy or sell |
| history | No | |
| targets | No | Take-profit and stop levels: { label, type, pct } |
| aiReview | No | |
| createdAt | No | |
| howToRead | No | How the outcome was judged, in one sentence |
| livePrice | No | Current price, so the model can judge whether the signal still stands |
| timeframe | No | Chart timeframe the preset evaluated, e.g. 4h |
| importance | No | high | medium | low |
| strategyName | No | Preset that produced the signal |
| signalStrength | No | weak | moderate | strong | very_strong |
| indicatorValues | No | Indicator readings at trigger time |
| resolutionStatus | No | pending | stop | tp1_hit | tp2_hit | tp3_hit | profit_locked | expired |
| triggeredConditions | No |
TDQS
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.
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.
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.
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.
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.
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_signalsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Filter by coin symbol, e.g. BTC, ETH | |
| skip | No | Offset for pagination | |
| limit | No | Number of signals to return | |
| strategy | No | 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. | |
| importance | No | Filter by signal importance | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| data | No | Signals, newest first |
| warning | No | Set when a strategy filter could not be applied or matched nothing (with the closest preset names) |
| pagination | No |
TDQS
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.
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.
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.
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.
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.
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_statsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Time period for statistics | 24h |
| strategy | No | Only the signals of one AI strategy (preset), matched by part of its name, case-insensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | The signal feed on traderspy.app, every signal listed with its outcome |
| total | No | Signals published in the period |
| pending | No | Still open at the end of the period |
| stopped | No | |
| warning | No | Set when a strategy filter could not be applied or matched nothing (with the closest preset names) |
| winRate | No | targetHits / resolved, as a percentage; null when nothing resolved |
| strategy | No | The strategy filter that was applied, if any |
| highCount | No | High-importance signals |
| howToRead | No | How an outcome is judged and what winRate counts; quote it when the user asks how the statistics work |
| byStrategy | No | The same counts per strategy (preset) that fired in the period, most signals first |
| targetHits | No | Signals that reached a take-profit or locked profit |
TDQS
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.
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.
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.
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.
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.
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_indicatorsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Trading pair symbol, e.g. BTCUSDT. For several pairs pass `symbols` instead. | |
| history | No | Prior values returned per indicator as `series` (oldest → newest, length history + 1). 0 = latest only. | |
| periods | No | Optional period overrides, e.g. {"ema":[9,21,55,200],"rsi":7} | |
| symbols | No | 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. | |
| interval | No | Candle timeframe. Ignored when `intervals` is given. | 1h |
| intervals | No | 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. | |
| indicators | No | Indicators to compute. `levels` = swing support/resistance from price structure, `pivots` = classic floor pivots from the previous day. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| url | No | The coin's chart on traderspy.app (a single-symbol answer; each `data` entry carries its own) |
| data | No | 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. |
| count | No | Entries in `data` |
| price | No | Latest close on the primary timeframe, or null when no candles are stored |
| symbol | No | |
| candles | No | Closed candles the primary timeframe was computed on |
| summary | No | Single-timeframe call only: bias, score, trend, momentum, volatility, volume, notes[]. Omitted when `timeframes` is present. |
| interval | No | Primary timeframe (the first requested one) |
| settings | No | Echo of what was computed: indicators, history, resolved periods |
| warnings | No | |
| confluence | No | Multi-timeframe agreement: { aligned, bias, byInterval } |
| indicators | No | 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. |
| timeframes | No | 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. |
| lastCandleOpenTime | No |
TDQS
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.
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.
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.
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.
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.
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_tradersARead-onlyIdempotentInspect
Use this when the user wants ranked smart-money traders across supported exchanges with sorting and filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of traders to return | |
| order | No | Sort direction | DESC |
| sortBy | No | Sort metric (defaults to ranking type) | |
| source | No | Exchange to filter by | all |
| timeRange | No | Performance time range | 30D |
| rankingType | No | Ranking snapshot type | ROI |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | Ranked traders: source, topTraderId, traderName, roi, pnl, winRate, smartScore, rank, rankings[], url (the trader page) |
TDQS
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.
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.
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.
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.
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.
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_symbolsARead-onlyIdempotentInspect
List all crypto futures symbols currently tracked by TraderSpy with real-time candle data available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| symbols | No |
TDQS
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.
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.
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.
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.
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.
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_historyBRead-onlyIdempotentInspect
Use this when the user asks for closed trade history of a specific trader.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| limit | No | Results per page | |
| source | No | Exchange | binance |
| traderId | Yes | The trader ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| url | No | The trader's page on traderspy.app: positions, history and Follow |
| data | No | Closed positions, most recently closed first |
| pagination | No |
TDQS
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.
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.
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.
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.
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.
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_profileARead-onlyIdempotentInspect
Use this when the user needs one trader profile, including metrics and latest positions.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Exchange the trader is on | binance |
| traderId | Yes | The trader ID | |
| timeRange | No | Performance time range | 30D |
| rankingType | No | Ranking snapshot type | ROI |
Output Schema
| Name | Required | Description |
|---|---|---|
| aum | No | |
| mdd | No | Maximum drawdown |
| pnl | No | |
| roi | No | |
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| url | No | The trader's page on traderspy.app: positions, history and Follow |
| rank | No | |
| source | No | |
| winRate | No | |
| avatarUrl | No | |
| positions | No | Currently tracked positions |
| timeRange | No | |
| smartScore | No | |
| traderName | No | |
| rankingType | No | |
| topTraderId | No |
TDQS
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.
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.
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.
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.
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.
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_symbolsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return | |
| sortBy | No | volume (24h quote volume), change24h, or metric (the first condition's metric). Default: metric when conditions are given, else volume. | |
| symbols | No | Explicit 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. | |
| interval | No | Candle timeframe to evaluate on | 4h |
| universe | No | How many of the most-traded symbols (by 24h volume) to scan when `symbols` is omitted (max 100) | |
| sortOrder | No | desc | |
| conditions | No | Up 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
| Name | Required | Description |
|---|---|---|
| tip | No | Rare: one sentence about a TraderSpy feature this connector cannot do, with the page it leads to |
| sortBy | No | |
| matched | No | Symbols satisfying every condition (all scanned symbols when no conditions) |
| results | No | One row per matching symbol: { symbol, price, change24hPct, volume24hUsd, values { "<metric label>": value }, bias, trend, rsi14, adx14, atrPct, volumeRatio, squeeze } |
| interval | No | |
| returned | No | |
| universe | No | { source: top_by_volume | explicit, requested, scanned, missing[] } |
| warnings | No | |
| sortOrder | No | |
| conditions | No | Human-readable conditions, e.g. "RSI(14) < 30" |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
- Changed
backtest_condition1 field changed- changed
Input schema / properties / conditions / items / properties / metric / descriptionPrevious 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"
- Changed
screen_symbols1 field changed- changed
Input schema / properties / conditions / items / properties / metric / descriptionPrevious 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"
17 tool updates
- Changed
backtest_condition3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / tipAdded 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" +} - added
Output schema / properties / urlAdded value: +{ + "description": "The coin's chart on traderspy.app", + "type": [ + "string", + "null" + ] +}
- Changed
get_candles1 field changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_derivatives2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / descriptionPrevious 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"
- Changed
get_elite_leaderboard2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / leaders / descriptionPrevious 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)"
- Changed
get_exchanges1 field changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_market_stats1 field changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_positions3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / anyOfPrevious 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" + } +] - added
Output schema / properties / urlAdded value: +{ + "description": "The page on traderspy.app that lists these positions: the coin's holders, or the live feed", + "type": [ + "string", + "null" + ] +}
- Changed
get_price2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / anyOfPrevious 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" + } +]
- Changed
get_signal_details3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / tipAdded 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" +} - added
Output schema / properties / urlAdded value: +{ + "description": "This signal's page on traderspy.app: chart, levels and outcome", + "type": [ + "string", + "null" + ] +}
- Changed
get_signal_stats2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / urlAdded value: +{ + "description": "The signal feed on traderspy.app, every signal listed with its outcome", + "type": [ + "string", + "null" + ] +}
- Changed
get_signals3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / anyOfPrevious 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" + } +] - added
Output schema / properties / tipAdded 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" +}
- Changed
get_technical_indicators3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / tipAdded 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" +} - added
Output schema / properties / urlAdded value: +{ + "description": "The coin's chart on traderspy.app (a single-symbol answer; each `data` entry carries its own)", + "type": [ + "string", + "null" + ] +}
- Changed
get_top_traders2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / descriptionPrevious 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)"
- Changed
get_tracked_symbols1 field changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_trader_position_history3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / tipAdded 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" +} - added
Output schema / properties / urlAdded value: +{ + "description": "The trader's page on traderspy.app: positions, history and Follow", + "type": [ + "string", + "null" + ] +}
- Changed
get_trader_profile3 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / tipAdded 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" +} - added
Output schema / properties / urlAdded value: +{ + "description": "The trader's page on traderspy.app: positions, history and Follow", + "type": [ + "string", + "null" + ] +}
- Changed
screen_symbols2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / tipAdded 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" +}
2 tool updates
- Changed
get_signal_details2 fields changed- changed
Output schema / properties / history / anyOfPrevious 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" + } +] - added
Output schema / properties / howToReadAdded value: +{ + "description": "How the outcome was judged, in one sentence", + "type": [ + "string", + "null" + ] +}
- Changed
get_signal_stats1 field changed- added
Output schema / properties / howToReadAdded 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" +}
1 tool update
- Changed
get_technical_indicators5 fields changed- changed
Input schema / properties / symbol / descriptionPrevious value: -"Trading pair symbol, e.g. BTCUSDT"New value: +"Trading pair symbol, e.g. BTCUSDT. For several pairs pass `symbols` instead." - added
Input schema / properties / symbolsAdded 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" +} - removed
Input schema / requiredRemoved value: -[ - "symbol" -] - added
Output schema / properties / countAdded value: +{ + "description": "Entries in `data`", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / dataAdded 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." +}
2 tool updates
- Changed
get_signal_stats4 fields changed- added
Input schema / properties / strategyAdded value: +{ + "description": "Only the signals of one AI strategy (preset), matched by part of its name, case-insensitive.", + "type": "string" +} - added
Output schema / properties / byStrategyAdded 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" +} - added
Output schema / properties / strategyAdded value: +{ + "description": "The strategy filter that was applied, if any", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / warningAdded value: +{ + "description": "Set when a strategy filter could not be applied or matched nothing (with the closest preset names)", + "type": [ + "string", + "null" + ] +}
- Changed
get_signals2 fields changed- added
Input schema / properties / strategyAdded 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" +} - added
Output schema / properties / warningAdded value: +{ + "description": "Set when a strategy filter could not be applied or matched nothing (with the closest preset names)", + "type": [ + "string", + "null" + ] +}
1 tool update
- Removed
get_my_account
2 tool updates
- Added
backtest_condition - Added
screen_symbols
1 tool update
- Added
get_derivatives
1 tool update
- Changed
get_technical_indicators3 fields changed- changed
Output schema / properties / indicators / descriptionPrevious 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." - changed
Output schema / properties / summary / descriptionPrevious 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." - changed
Output schema / properties / timeframes / descriptionPrevious 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."
1 tool update
- Changed
get_technical_indicators17 fields changed- added
Input schema / properties / historyAdded 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" +} - changed
Input schema / properties / indicators / descriptionPrevious 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." - changed
Input schema / properties / indicators / items / enumPrevious 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" +] - changed
Input schema / properties / indicators / maxItemsPrevious value: -13New value: +19 - changed
Input schema / properties / interval / descriptionPrevious value: -"Candle interval/timeframe"New value: +"Candle timeframe. Ignored when `intervals` is given." - added
Input schema / properties / intervalsAdded 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" +} - added
Input schema / properties / periodsAdded 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" +} - added
Output schema / properties / candlesAdded value: +{ + "description": "Closed candles the primary timeframe was computed on", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / confluenceAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Multi-timeframe agreement: { aligned, bias, byInterval }" +} - changed
Output schema / properties / indicators / descriptionPrevious 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." - added
Output schema / properties / interval / descriptionAdded value: +"Primary timeframe (the first requested one)" - added
Output schema / properties / lastCandleOpenTimeAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / price / descriptionPrevious 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" - added
Output schema / properties / settingsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Echo of what was computed: indicators, history, resolved periods" +} - added
Output schema / properties / summaryAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Interpretation layer: bias, score, trend, momentum, volatility, volume, notes[]" +} - added
Output schema / properties / timeframesAdded 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" +} - added
Output schema / properties / warningsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] +}
1 tool update
- Changed
get_my_account1 field changed- changed
Output schema / properties / trading / descriptionPrevious 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"
15 tool updates
- First observed
get_candles - First observed
get_elite_leaderboard - First observed
get_exchanges - First observed
get_market_stats - First observed
get_my_account - First observed
get_positions - First observed
get_price - First observed
get_signal_details - First observed
get_signal_stats - First observed
get_signals - First observed
get_technical_indicators - First observed
get_top_traders - First observed
get_tracked_symbols - First observed
get_trader_position_history - First observed
get_trader_profile
Publisher details
- Operator
- TraderSpy · Publisher source
- Operator website
- https://traderspy.app
- Vendor relationship
- First-party
- Documentation
- https://traderspy.app/mcp
- 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
AI price forecasts, whale flows, market sentiment and prediction signals. 18 tools free, no account.
Crypto market signals, technical indicators, and sentiment analysis for AI agents.
AI-powered crypto trading signals: direction, confidence, TP/SL, thesis, technicals. 8 strategies.
Crypto intelligence: rug/scam scans for any token, verified whale flows, AI signals + track record
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI-Powered Cryptocurrency Direction Prediction & Market Signal AnalysisMIT
- FlicenseNot gradedqualityDmaintenanceProvides cryptocurrency trading signals, market analysis, and portfolio management capabilities across 15+ exchanges with AI-enhanced technical analysis, arbitrage detection, and risk assessment tools.2-
- AlicenseNot gradedqualityDmaintenanceAI-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.3MIT
- AlicenseAqualityAmaintenanceAI-native quantitative trading signal engine for crypto and TradFi perpetuals. Multi-factor composite BUY/SELL/HOLD signals, cross-venue funding rate arbitrage scanning, and market regime detection powered by Hyperliquid data.8780 npm10MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.