Skip to main content
Glama

Server Details

Checks crypto trading claims on real data: leverage, drawdown, stop-loss, seasonality, luck.

Ownership verified
Status
Healthy
Uptime
100.0% over 18 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a clearly distinct financial check or statistic, and descriptions explicitly differentiate themselves with cross-references to alternatives (e.g., drawdown_check vs leverage_survival vs stop_loss_check). Overlap is minimal and boundaries are well-drawn.

Naming Consistency4/5

All names are snake_case, but suffixes vary inconsistently (_check, _comparison, _survival, _odds, _lookup). The style is mostly consistent, but the lack of a single predictable pattern is a minor deviation.

Tool Count5/5

12 tools is well-scoped for the domain of backtesting and statistical checks. Each tool covers a distinct analytical lens without redundancy, and the count stays within the optimal 3-15 range.

Completeness4/5

The surface covers a wide array of backtesting and statistical checks for trading claims, including drawdown, leverage survival, stop-loss, seasonality, and overfitting. Minor gaps exist for fully custom strategy backtesting and multi-asset portfolio analysis beyond correlation, but core workflows are well-covered.

Available Tools

12 tools
averaging_in_checkAveraging in checkA
Read-onlyIdempotent
Inspect

Whether spreading the entry would have helped, measured. One amount into a coin over a window (90, 365 or 730 days): all of it on day one, or equal instalments weekly or monthly. Both start the same day, move the same money and are valued on the same day, started on every day of the history. You get how often spreading ended ahead, the middle result of each, and the worst start day of each — which is what spreading actually buys and the half nobody shows. Spot tape, no fees, dead coins included.

Use for dollar-cost averaging versus lump sum on one coin. For claims about particular days or months use best_days_check or calendar_check; for the fall after a single buy, drawdown_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesTicker or full pair. An unknown one comes back with the list we hold and the ones left out.
daysYesThe window, in days: 90, 365 or 730.
instalmentsYesHow often a slice goes in: weekly or monthly. Defaults to weekly.weekly

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
modelNoThe assumptions, stated: cash not yet in earns nothing (against spreading), no fees (in favour of spreading).
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
startsNoStart days tested. Fewer than 120 and we refuse to give a percentage.
instalmentsNoHow many slices fit in the window.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
spreading_wonNoStart days on which spreading it out ended ahead. A count, not a rate: «100%» is only said when it was all of them.
p05_spread_pctNoThe same for spreading.
p05_lump_sum_pctNoFifth percentile of starts, lump sum: one worst day is an anecdote.
worst_spread_pctNoThe same for spreading. This pair is the whole argument for averaging in, and it is the one that never appears next to the advice.
median_spread_pctNoMiddle start, spread out.
spreading_won_pctNoThe same as a share of starts.
median_edge_pointsNoPercentage points spreading made over lump sum in the middle case. Negative means lump sum won.
worst_lump_sum_pctNoThe single worst start day, all in on day one.
median_lump_sum_pctNoMiddle start, all in on day one.
share_in_profit_spread_pctNoThe same for spreading.
share_in_profit_lump_sum_pctNoShare of starts that ended up, lump sum.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds real method context beyond that — 'Spot tape, no fees, dead coins included' and 'started on every day of the history' — which materially affects how results should be interpreted. It stops short of stating limits or caveats on the statistics themselves.

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

Conciseness3/5

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

The routing paragraph is tight and earns its place, but the first paragraph is bloated with editorializing ('which is what spreading actually buys and the half nobody shows') and dense compound sentences. The genuinely useful constraints could be stated in far fewer words.

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

Completeness4/5

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

With an output schema present, return values needn't be explained, and the description still adds the valuation methodology and sibling routing. Combined with 100% schema coverage and full annotations, an agent has what it needs; only the statistical caveats are unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% and both enums are documented inline (days: 90/365/730; instalments: weekly/monthly with default). The description adds essentially no parameter meaning beyond what the schema already provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific, checkable operation: measuring whether spreading an entry (weekly/monthly DCA) beats lump sum on a single coin over a fixed window. The scope ('One amount into a coin over a window') distinguishes it cleanly from sibling checks without needing to open the schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('dollar-cost averaging versus lump sum on one coin') plus concrete routing to alternatives: best_days_check/calendar_check for particular days or months, drawdown_check for a single-buy fall. Covers both the positive case and the exclusion conditions.

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

best_days_checkBest days checkA
Read-onlyIdempotent
Inspect

The 'miss the ten best days and you get nothing' claim, measured on both sides. The same window of a coin lived four ways: all of it, without its N best days, without its N worst days, and without either, from every start day of the history. You also get how many of those best days landed within a week of a worst one, which is what decides whether the claim means anything. Backtest on spot daily candles, dead coins included.

Use when someone argues for staying invested because missing the best days ruins returns, or for timing the market to dodge the worst ones. Which weekday or month does best is calendar_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesTicker or full pair. An unknown one comes back with the list we hold and the ones left out.
daysYesWindow in days: 90, 365 or 730.
best_daysYesHow many days are missed: 1, 5, 10 or 20. Defaults to 10, the number in the claim.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
pageNoThe page with these exact numbers already in.
errorNono_data when ok is false.
modelNoWhat missing a day means here, and what is not charged.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
historyNoFrom, to, days held and which tape.
windowsNoStart days tested. Fewer than 120 and we refuse to give a percentage.
median_pctNoThe middle window, lived whole. The alternative, always.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
biggest_daysNoThe biggest up days and down days of the whole history, with their dates, so the clustering can be checked rather than believed.
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
share_in_profit_pctNoWindows that ended in profit, lived whole.
cost_of_missing_best_ppNoPercentage points the best days were worth.
median_without_best_pctNoThe same window without its best days. This is the half of the claim you get shown.
gift_of_missing_worst_ppNoPercentage points dodging the worst days would have paid.
median_without_worst_pctNoThe same window without its WORST days. This is the half nobody shows, and it is just as big.
median_without_either_pctNoWithout both groups: usually back near the first number, after dodging the days that supposedly decided everything.
next_to_means_within_daysNoWhat «next to» means, in days.
winners_turned_losers_pctNoOf the windows that ended in profit, the share that end in loss once their best days are removed.
share_in_profit_without_best_pctNoThe same, without the best days.
best_days_next_to_a_worst_day_pctNoShare of the best days that fell within a few days of one of the worst. High means you cannot dodge one without dodging the other.
share_in_profit_without_worst_pctNoThe same, without the worst days.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, closed-world, so the bar is lower. The description still adds substantive context beyond them: the data source (spot daily candles), the survivorship-bias stance ('dead coins included'), and the paired best/worst-day overlap diagnostic that determines whether the headline claim is meaningful.

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

Conciseness4/5

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

Front-loaded with the claim being tested, then what is returned, then usage. The first paragraph is dense and long, but each clause (four-way decomposition, overlap count, candle type, dead coins) conveys distinct information, and the second paragraph is a tight routing sentence.

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

Completeness5/5

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

An output schema exists, so return formatting need not be restated, yet the description still supplies methodology and scope an agent needs to set expectations. With annotations covering safety and the schema covering all three parameters, nothing material is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% with enums on days and best_days and a stated default of 10, so the schema carries the parameter detail. The description's 'without its N best days / N worst days' gives a little conceptual framing for best_days but no format or edge-case guidance beyond the schema, making 3 the right baseline.

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

Purpose5/5

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

States a specific analytical operation (decompose a window four ways with/without N best/worst days) on a specific resource (spot daily candles for a coin). It also explicitly names the sibling calendar_check as the tool for the adjacent weekday/month question, so the boundary is unambiguous.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Use when someone argues for staying invested because missing the best days ruins returns, or for timing the market to dodge the worst ones') and routes the nearby-but-different question to calendar_check. Both when-to-use and the alternative are named.

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

calendar_checkCalendar checkA
Read-onlyIdempotent
Inspect

'Uptober'. 'Mondays dip'. 'Sell in May'. Any calendar claim on 34 coins, measured against chance. With seven days one has to come first, so the answer is a permutation test: the SAME returns dealt out at random hundreds of times, and how often chance alone produces a bucket that good. Plus how many times the bucket really happened - October is 279 days of bitcoin but nine Octobers - and the round-trip cost. Nine years of daily candles.

Tests whether one day of the week, month of the year or hour of the day really beats the rest for a coin. Use for seasonality claims (Uptober, Monday dips, Sell in May). For the claim about missing the market's best days use best_days_check; for when to spread an entry, averaging_in_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesTicker or full pair. An unknown one comes back with the list we hold and the ones left out.
calendarYesday_of_week, month_of_year or hour_of_day. The hourly one exists for the 16 coins we hold hourly candles for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
pageNoThe page with these exact numbers already in.
errorNono_data when ok is false.
modelNoThe test, stated, including why a monthly p-value flatters itself.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
bucketsNoEvery bucket: its name, observations, times occurred, mean, median and share of up days.
historyNoFrom, to, days held and which tape.
shufflesNoHow many shuffled worlds were tested.
best_bucketNoThe best bucket by average move, named.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
observationsNoMoves measured across all buckets.
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
worst_bucketNoThe other end.
best_mean_pctNoIts average move. On its own, this is the advertisement.
worst_mean_pctNoIts average move.
edge_covers_costNoWhether the average move of the best bucket is bigger than that cost. Usually it is not.
chance_best_p95_pctNoWhat chance reaches in one shuffle out of twenty.
round_trip_cost_pctNoWhat entering and exiting once costs, so the edge can be compared with it.
beats_chance_at_5pctNoWhether that share is under 0.05. Across all 34 coins, about 5% of these come back true by chance alone, so one true answer on its own is not a finding.
chance_best_mean_pctNoWhat the BEST bucket of a shuffled world averages. Anything below this is less impressive than nothing.
chance_matches_it_shareNoThe p-value: share of shuffles whose best bucket matched or beat the real one. High means no pattern.
best_bucket_happened_timesNoHow many times that bucket has actually occurred. For months this is years, not days: nine Octobers is nine observations however many candles they hold, and it is the number these claims never show.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's burden is lower. It still adds real substance beyond them: the permutation-test methodology, the small-sample caveat ('nine Octobers'), inclusion of round-trip cost, and the nine-year daily-candle data span. Only the runtime cost of hundreds of resamples is undisclosed.

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

Conciseness3/5

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

The opening ('Uptober. Mondays dip. Sell in May.') is ornamental and the sample-size aside ('279 days of bitcoin but nine Octobers') is dense prose that could be plainer. The substantive content is real, but it is spread across two paragraphs with some redundancy between them.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and annotations carry the safety profile. The description supplies methodology and data-scope context adequate for correct invocation; what is missing is only peripheral (determinism, expected computation latency) for a resampling-based tool.

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

Parameters4/5

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

Schema coverage is 100%, so 3 is the baseline; the description earns above it by adding meaning the schema lacks, namely the coin universe size ('34 coins'), unknown-ticker fallback behavior, and the constraint that 'hour_of_day' exists only for the 16 hourly-candle coins.

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

Purpose5/5

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

The second paragraph states a precise verb and resource: 'Tests whether one day of the week, month of the year or hour of the day really beats the rest for a coin.' It also names the sibling tools it is not (best_days_check, averaging_in_check), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('Use for seasonality claims (Uptober, Monday dips, Sell in May)') plus two named alternatives with their selecting conditions. Nothing is left to inference.

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

coin_comparisonCoin comparisonA
Read-onlyIdempotent
Inspect

Two or three coins side by side, every check at once: for each, how often a buy fell 30% or more before the window was out and where the middle one ended, how often a leveraged month ended with nothing, whether spreading the entry won, how often a stop-loss sold a buy that ended in profit, and how much it moves with bitcoin. Nothing is ranked and no coin is called better. Spot and perpetual tapes, fees charged.

Use when two or three coins are being compared or chosen between. For one coin or one question the specific check gives more detail: drawdown_check, leverage_survival, averaging_in_check, stop_loss_check, diversification_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysYes90, 365 (default) or 730.
coinsYesTwo or three tickers, comma-separated: BTC,ETH,SOL. Kept in the order sent.
leverageYesFor the leverage row. Default 25.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
rowsNoPer coin: the drawdown, leverage, averaging-in and stop-loss answers, and its correlation with bitcoin (null for bitcoin itself).
errorNono_data when ok is false.
modelNoThe method, stated.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public files these numbers come from.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive/openWorld=false, so the description focuses on what annotations cannot express: data comes from both spot and perpetual tapes, fees are charged, and results are unranked. It stops short of disclosing cost/latency or pagination, but the added behavioral context is substantive.

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

Conciseness4/5

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

Purpose is front-loaded and the usage/routing guidance follows in its own short paragraph, which is good structure. The opening sentence is a dense comma-chained enumeration of five checks, which is informative but makes the reader parse a long list before reaching the distinctiveness statement.

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

Completeness5/5

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

An output schema exists, so return values need not be explained. For a multi-check comparative tool the description supplies scope, tape sources, fee treatment, the 'no ranking' caveat, and sibling routing — enough for an agent to call it correctly and interpret results.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents days, coins format, and leverage default. The description only restates the 2-3 coin constraint and order preservation, adding no syntax or format detail beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description names the resource (two or three coins) and the exact scope of the operation (every check at once: drawdown, leverage survival, averaging-in, stop-loss, bitcoin correlation). It is immediately distinguishable from the single-check siblings it names, and the 'Nothing is ranked' clause clarifies what the tool does not do.

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

Usage Guidelines5/5

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

Explicit routing rule: 'Use when two or three coins are being compared or chosen between', with the negative case spelled out — for one coin or one question, use the specific check, and six alternatives are enumerated by name. Nothing is left to inference.

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

copy_trading_checkCopy trading checkA
Read-onlyIdempotent
Inspect

Whether copying the top traders works, measured. Accounts in the top 10% or 1% of Hyperliquid one month, by return or by dollar profit: how many were in the top again the next month, next to chance, how many fell to the bottom instead, and how many made money the month you would have copied them for, next to every active account. 4,000 accounts sampled at random, not today's leaders; about 30 month pairs.

Use when someone proposes copying top traders, a leaderboard or signal leaders. Takes no account address. To place one specific return on the leaderboard use leaderboard_rank_check; to ask whether luck explains a record, overfitting_odds.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_pctYes10 (default) or 1. 0.1 is read as 10.
ranked_byYesreturn (default) or profit.return

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
modelNoThe method, stated.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
repeatedNoOf those, times it was in the top again next month.
chance_pctNoWhat picking accounts at random gives. The alternative, always.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
repeated_pctNoThe same as a share.
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
times_in_topNoTimes an account finished a month in the top group.
stopped_tradingNoCounted as not repeating.
fell_to_bottom_pctNoShare that fell to the bottom group instead: the size control.
in_profit_next_month_pctNoShare that made money the next month.
in_profit_next_month_all_accounts_pctNoThe same for every active account.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is methodology: 4,000 randomly sampled accounts, not today's leaders, ~30 month pairs, and the comparison baselines (chance, bottom bucket, all active accounts). That tells the agent what the result actually represents and guards against misreading it as a live-leaderboard query. It does not mention cost/latency or caching, so a 4 rather than 5.

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

Conciseness4/5

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

Front-loaded with the core question, then methodology, then usage and alternatives in a clearly separated second paragraph. The methodology sentence is long and packs several clauses, but each clause (sample size, sampling frame, month pairs, comparison groups) carries distinct meaning rather than filler.

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

Completeness5/5

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

An output schema exists, so return-shape explanation is unnecessary; what the agent does need — the analytical question, the sampling basis, the comparison baselines, when to invoke, and which siblings to use instead — is all present. Nothing required to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% and both enums are self-documented, so the baseline is 3. The description adds meaning beyond the schema by clarifying the negative space ('takes no account address') and by enumerating the analytical cut the parameters select (by return or by dollar profit). No parameter-specific edge cases are added beyond schema, hence not a 5.

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

Purpose5/5

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

The description states a specific, measurable question — whether top-decile/per-centile Hyperliquid traders persist into the next month — and names the exact ranking dimensions (return, dollar profit). It is clearly distinguishable from siblings leaderboard_rank_check (single-return placement) and overfitting_odds (luck explanation), so an agent can route without opening schemas.

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

Usage Guidelines5/5

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

Explicit trigger ('Use when someone proposes copying top traders, a leaderboard or signal leaders') plus explicit alternatives with the condition that selects each ('To place one specific return ... use leaderboard_rank_check; to ask whether luck explains a record, overfitting_odds'). It also states the negative constraint 'Takes no account address', preventing a common wrong invocation.

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

diversification_checkDiversification checkA
Read-onlyIdempotent
Inspect

Diversification check: how many independent bets a basket of coins really is. Give the coins (and optionally the window: 90, 365 or 730 days): you get the average correlation between the pairs on real daily returns, the number of independent bets it works out to, each coin's correlation with bitcoin — and what the equal-weight basket did on the days bitcoin closed 3% or more down: how often it fell too, by how much, and its worst such day. Dead coins included.

Use when a basket of two or more coins is called diversified or hedged. For one coin use drawdown_check; for two or three coins side by side on every check, coin_comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysYesWindow ending on the last day of the data: 90, 365 or 730. Defaults to 365.
coinsYesTickers or full pairs, e.g. ["BTC", "ETH", "SOL"]. A comma-separated string also works. One we do not hold comes back with the list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
modelNoThe assumptions, stated.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
btc_bad_daysNoThe days bitcoin closed 3% or more down: how many, on what share of them the basket fell too, its median and worst move. Diversification that vanishes on those days was never there.
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
independent_betsNoN / (1 + (N-1)*avg_corr). Five coins that move as one are one bet; five that ignore each other are five.
all_coins_we_holdNoWhat every coin we hold, at equal weights, adds up to — the ceiling, for comparison.
correlation_with_btcNoEach coin's correlation with bitcoin in the window.
average_pair_correlationNoPearson correlation of daily log returns, averaged over every pair in the basket.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds real behavioral context: the outputs returned, that correlations are computed on 'real daily returns', and that dead coins are included in the basket. It does not discuss edge cases like minimum basket size or error behavior, so not a 5.

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

Conciseness4/5

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

Purpose is front-loaded and the routing sentence is tight, but the first paragraph is a dense run-on that strings together four distinct outputs, making it slightly list-like. Most of it earns its place; minor trimming would sharpen it.

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

Completeness4/5

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

With an output schema present, the description needn't detail return values, and it is otherwise complete: trigger, alternatives, params, and key behaviors all covered. The only gap is the optional/required window ambiguity, which slightly undermines caller confidence.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are documented in structured form, making 3 the baseline. The description reinforces the purpose of the coins list and the 90/365/730 window, but also introduces a mismatch by calling the window 'optional' while the schema lists days as required — a small inconsistency rather than added value.

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

Purpose5/5

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

The description names a specific analysis (how many independent bets a coin basket really is) and enumerates the concrete outputs: average pairwise correlation, independent-bet count, per-coin BTC correlation, and equal-weight basket behavior on days BTC fell 3%+. This clearly distinguishes it from siblings like drawdown_check and coin_comparison.

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

Usage Guidelines5/5

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

It gives an explicit trigger ('Use when a basket of two or more coins is called diversified or hedged') and routes to named alternatives with conditions: drawdown_check for one coin, coin_comparison for two or three coins side by side. Nothing is left to inference.

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

drawdown_checkDrawdown checkA
Read-onlyIdempotent
Inspect

Drawdown check: what it cost to collect the return you were shown. The coin is bought at the close of every day of its history and held for the period you name: you get the drawdown from the entry before the period was out, the share of starts that fell 30% and 50%, the days spent under water, how it ended — and, among the starts that ended in profit, the drawdown they sat through first. Spot tape, no fees, coins that died included.

Use when a return is quoted for holding a coin ("BTC did +150% in a year") and you want the fall endured on the way. With leverage use leverage_survival; to test a stop that cuts the fall, stop_loss_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesTicker or full pair. An unknown one comes back with the list we hold and the ones left out.
daysYesHow long it is held: 30, 90, 365 or 730.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
modelNoThe assumptions, stated.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
startsNoStart days tested. Fewer than 120 and we refuse to give a percentage.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
median_return_pctNoHow the middle start ended.
share_fell_30_pctNoShare of starts that fell 30% or more from entry first.
share_fell_50_pctNoSame, 50% or more.
asset_max_drawdownNoThe coin's own biggest top-to-bottom fall, with dates and days to recover, for comparison.
share_in_profit_pctNoShare of starts that ended up.
median_worst_fall_pctNoThe middle start's worst fall from its own entry price within the hold.
median_days_under_waterNoDays of the hold spent below the entry price, middle start.
share_never_recovered_pctNoStarts that never closed back at their entry price within the hold.
median_worst_fall_among_winners_pctNoAmong the starts that ended in profit, the median fall they sat through first. The price of the number you were shown. A return without this is advertising.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safe read-only, idempotent, non-destructive profile, but the description adds substantive measurement context beyond them: spot tape, no fees, and dead coins included (an explicit survivorship-bias disclosure). It does not address data freshness or performance, so it falls just short of exhaustive.

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

Conciseness4/5

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

Purpose is front-loaded and the usage paragraph is cleanly separated, but the first sentence is dense and prose-heavy ("what it cost to collect the return you were shown") before the concrete method arrives. Every sentence still carries information.

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

Completeness5/5

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

With an output schema present, the description need not enumerate return fields, yet it still sketches what comes back and, more importantly, defines the data universe and exclusions. Combined with annotations covering the safety profile and 100% schema coverage, nothing needed to call the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% – both coin and days are documented in the schema, including the enum values and the unknown-ticker fallback behavior. The description adds only the framing "the period you name," so the baseline 3 is appropriate.

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

Purpose5/5

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

The description names a specific computation (buy at every daily close, hold for the named period) and the exact outputs (drawdown, share of starts that fell 30%/50%, days underwater, outcome). It explicitly distinguishes itself from siblings by naming leverage_survival and stop_loss_check with the conditions that select them.

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

Usage Guidelines5/5

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

Gives a concrete trigger scenario ("when a return is quoted for holding a coin ('BTC did +150% in a year')") plus explicit alternative routing: leverage → leverage_survival, stop-cut → stop_loss_check. Both when-to-use and when-to-use-something-else are stated.

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

leaderboard_rank_checkLeaderboard rank checkA
Read-onlyIdempotent
Inspect

How much company a return has. Send a return (+340%) and a window (day, week, month or all time) and get how many accounts on Hyperliquid's whole public leaderboard did the same or better, out of how many traded, its percentile, and the median account next to it. Every row of the exchange's own table, refreshed daily; the denominator is the accounts that traded, not the ones that sat idle.

Use when a trader or an ad quotes a return ("+340% this month") and you want to know how rare it is. Hyperliquid accounts only. Whether last month's top accounts stay on top is copy_trading_check; whether luck explains a win rate, overfitting_odds.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowYesday, week, month (default) or allTime.month
return_pctYesIn percent: 340 means +340%.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
modelNoThe method, stated.
one_inNoOne account in how many.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
percentileNoShare of accounts below it.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
same_or_betterNoAccounts at that return or above.
median_return_pctNoThe middle account, same window.
share_in_profit_pctNoAccounts in profit, same window.
accounts_that_tradedNoThe denominator.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent/non-destructive profile, yet the description adds substantial context beyond them: the data source is the exchange's own full public table, refreshed daily, and the denominator is accounts that traded rather than idle ones. These are exactly the behavioral facts an agent cannot infer from annotations.

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

Conciseness4/5

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

Front-loads the core computation and keeps the usage guidance in a separate paragraph. The opening fragment 'How much company a return has' is slightly cryptic and the parentheticals make it denser than necessary, but there is little outright waste.

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

Completeness5/5

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

With an output schema present the description needn't enumerate return values, yet it still conveys source, freshness, denominator semantics, and sibling boundaries. Nothing an agent needs to select or invoke the tool correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents both parameters including the '+340%' example and the window enum, so the description's '+340%' and window list add little beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific computation (given a return and window, how many leaderboard accounts did the same or better, out of how many traded, plus percentile and median) rather than restating the name. It explicitly differentiates from siblings by naming copy_trading_check and overfitting_odds as different questions.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Use when a trader or an ad quotes a return and you want to know how rare it is') and routes the agent away from two named alternatives. The scope limit ('Hyperliquid accounts only') further constrains correct use.

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

leverage_survivalLeverage survivalA
Read-onlyIdempotent
Inspect

What a leveraged trade actually did, opened on every single day of the history instead of the one day that worked. Give coin, side, leverage and holding period: you get the share of those days that ended liquidated, the median outcome, the best day, and what the same coin did with no leverage at all. Real perpetual tape, with the funding that was actually paid charged daily and eating into margin. Coins that blew up included.

Use when the question involves leverage, perpetuals or liquidation. For the fall an unleveraged holder sits through use drawdown_check; for two or three coins at once, coin_comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesTicker or full pair. An unknown one comes back with the list we hold and the ones we do not.
daysYesHow long it is held: 1, 7, 30 or 90.
sideNolong or short. Defaults to long.long
leverageYes2, 3, 5, 10, 20, 25, 50 or 100.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
modelNoThe assumptions, stated: liquidation at exactly 1/leverage with no maintenance margin, funding charged daily, the wick decides not the close.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
attemptsNoStarting days tested. A position still open when the history ends is not counted.
best_pctNoThe best day. It is the one you were shown, and it is not hidden here.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
liquidated_pctNoShare of them that ended with nothing left.
median_return_pctNoThe middle outcome, on the margin.
median_days_to_liquidationNoHow fast, when it happened.
median_return_unlevered_pctNoWhat the same coin did with no leverage over the same days. A result without this is advertising.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, non-destructive, idempotent, closed-world), but the description adds behavioral substance an annotation cannot: funding actually paid is charged daily and eats into margin, the tape is real perpetual data, and delisted/blown-up coins are retained rather than dropped. It also enumerates the returned statistics, so the agent knows the shape of the answer.

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

Conciseness4/5

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

Front-loaded and organized as purpose-then-routing, with the alternative tools last. It is slightly longer than needed in the opening clause ('instead of the one day that worked'), but every sentence still carries information.

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

Completeness5/5

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

For a read-only analytics tool with an output schema, the description covers everything an agent needs: data source, cost assumptions, universe handling (delisted coins), the metrics returned, and the sibling routing. Return values need not be re-explained because an output schema exists.

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

Parameters3/5

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

Schema description coverage is 100% and three of four parameters carry enums, so the schema already documents syntax and allowed values. The description only restates the four inputs ('give coin, side, leverage and holding period') without adding units, defaults, or interpretation beyond what the schema says. Baseline 3 is correct here.

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

Purpose5/5

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

The description states exactly what is computed: a leveraged trade opened on every historical day, returning liquidation share, median outcome, best day, and the unleveraged comparison. It names the data source (real perpetual tape) and scope (coins that blew up included), which an agent can use to distinguish it from drawdown_check or coin_comparison without opening the schema.

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

Usage Guidelines5/5

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

Explicit routing: 'Use when the question involves leverage, perpetuals or liquidation,' plus two named alternatives with the condition that selects each ('the fall an unleveraged holder sits through' -> drawdown_check; 'two or three coins at once' -> coin_comparison). Nothing is left to inference.

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

overfitting_oddsOverfitting oddsA
Read-onlyIdempotent
Inspect

Overfitting check: how many attempts plain chance needs to produce the track record you were shown. Give the wins, the losses and how many versions were tried: you get the exact binomial odds of one try reaching it, the odds once somebody shows you the best of N, and how many tries would make it an even bet. Arithmetic only — no market data, no model, no opinion. A 62% win rate over 100 trades is one thing on the first try, nothing on the fiftieth.

Use when you are shown a win rate, a backtest or a signal channel's record and need to know whether luck explains it. Needs no coin. For what a named rule did on real prices use strategy_grid_lookup; to place a return among real accounts, leaderboard_rank_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
winsYesWinning trades.
triesNoHow many versions were tried before this one was shown to you. Defaults to 1, which is almost never true.
lossesNoLosing trades. Give this or trades.
tradesYesTotal trades.
baselineNoProbability a single trade wins by chance. Defaults to 0.5.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
errorNono_data when ok is false.
reasonNoWhy, in one sentence, and what we do have instead.
readingNoThe same three numbers in one sentence.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
odds_one_tryNoP(at least this many wins) for a single attempt. Exact binomial, not simulated.
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
win_rate_pctNoThe win rate.
odds_best_of_triesNoSame result, once you take the best of the attempts made.
tries_for_even_oddsNoAttempts needed for chance alone to reach it half the time.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it is pure arithmetic with no market data, model or opinion, and it specifies the three distinct results returned, which is meaningful for a stats tool.

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

Conciseness4/5

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

The purpose and the query pattern are front-loaded before the when-to-use guidance and sibling routing. It is a touch long and the arithmetic sentence packs several clauses, but each sentence carries information and none is filler.

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

Completeness5/5

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

An output schema exists, so return values need no prose explanation, and the description still covers when to reach for it, what it computes, and which siblings handle the adjacent questions. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds interpretive value by framing wins/losses/tries as 'the track record you were shown and how much searching went into finding it' and illustrating the tries parameter with the 62%-over-100-trades-first-try-vs-fiftieth example.

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

Purpose5/5

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

States a specific computation (exact binomial odds that a shown track record arose from chance) and names the exact three outputs produced. It clearly distinguishes itself from the strategy/leaderboard siblings by being arithmetic-only rather than data-driven.

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

Usage Guidelines5/5

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

Explicit when-to-use ('when you are shown a win rate, a backtest or a signal channel's record and need to know whether luck explains it') plus two named alternatives with their selecting conditions: strategy_grid_lookup for a named rule on real prices, leaderboard_rank_check for placing a return among real accounts.

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

stop_loss_checkStop loss checkA
Read-onlyIdempotent
Inspect

Whether a stop-loss would have helped, measured. The same buy of a coin, held 30, 90, 365 or 730 days, with a stop 5, 10, 15, 20 or 30% below the entry and without one, started on every day of the history. The stop fires on the day's low, not its close, and fees are charged to both. You get how often it fired, how often it sold a buy that would have ended in profit, and the worst case of each. Spot tape, dead coins included.

Use when asked whether a stop-loss protects a spot buy-and-hold. For leveraged positions, where liquidation is the stop, use leverage_survival; for a rule with a stop and a take-profit, strategy_grid_lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesTicker or full pair. An unknown one comes back with the list we hold and the ones left out.
daysYesHolding period in days: 30, 90, 365 or 730.
stopYesHow far below the entry, in percent: 5, 10, 15, 20 or 30. 0.05 is read as 5.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
buysNoStart days tested. Fewer than 120 and we refuse to give a percentage.
errorNono_data when ok is false.
modelNoThe assumptions, stated: the low triggers, fills at the stop or the gap open, out until the end, same costs both ways.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
stop_firedNoBuys on which the stop fired. A count.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
stop_fired_pctNoThe same as a share of buys.
p05_with_stop_pctNoFifth percentile, with the stop: what the stop actually buys.
stop_beat_holdingNoBuys on which the stop ended strictly ahead of holding.
mean_with_stop_pctNoAverage buy, with the stop.
median_days_to_fireNoAmong the buys it fired on. Null when it never fired.
worst_with_stop_pctNoThe single worst buy, with the stop. Worse than the stop itself only when a day gapped through.
median_with_stop_pctNoMiddle buy, with the stop.
p05_without_stop_pctNoThe same, holding.
mean_without_stop_pctNoAverage buy, holding. Skewed by a few huge winners.
stop_beat_holding_pctNoThe same as a share of buys.
worst_without_stop_pctNoThe same, holding.
median_without_stop_pctNoMiddle buy, just holding. The alternative, always.
share_in_profit_with_stop_pctNoShare of buys that ended up, stop.
share_in_profit_without_stop_pctNoThe same, holding.
fired_but_would_have_ended_in_profitNoBuys the stop sold that, held to the end, would have ended in profit after fees. The half nobody shows.
fired_but_would_have_ended_in_profit_pctNoThe same as a share of ALL buys.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive, but the description goes well beyond: it discloses the simulation internals (stop fires on the day's low not the close, fees charged to both, every day of history as a start date, spot tape with dead coins included) and the outputs returned. This is exactly the context annotations cannot carry.

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

Conciseness4/5

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

Dense but front-loaded: the core purpose leads, the mechanics follow, and the sibling routing sits last. Some sentences are long and packed, but each earns its place by adding behavioral detail rather than restating the name or schema.

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

Completeness5/5

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

For a three-parameter analytical tool with full schema coverage, an output schema, and rich annotations, the description supplies everything else an agent needs: scope (spot, dead coins included), mechanics, and correct routing to alternatives. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the enum values and the '0.05 is read as 5' convention are already documented. The description still adds meaning the schema lacks: it frames days as the holding period and stop as the distance below entry, and clarifies that every day of history is used as a start date, which shapes how the parameters are interpreted.

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

Purpose5/5

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

States a specific verb+resource (a measured backtest of whether a stop-loss helps a spot buy-and-hold) and immediately distinguishes itself from siblings by naming leverage_survival and strategy_grid_lookup as the alternatives for leveraged or stop+take-profit cases. An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('asked whether a stop-loss protects a spot buy-and-hold') and names the two competing tools with the conditions that select them (leveraged positions/liquidation vs. stop+take-profit rules). Nothing is left to inference.

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

strategy_grid_lookupStrategy grid lookupA
Read-onlyIdempotent
Inspect

Backtest lookup: what one exact version of a strategy actually did. Buy-the-dip and the moving-average cross, every combination of their knobs, computed over nine years of real prices with the exchange's fees charged both ways — sixteen coins, three of which died. Give the coin and the numbers and you get the return, the trades, the worst drawdown, and what buying and holding did over the same window. Read from a file you can download.

Use when someone quotes a specific dip-buying or moving-average rule ("buy 10% dips, take 5%") and you want its real backtest. For leverage use leverage_survival; for a stop on a plain buy-and-hold, stop_loss_check; to judge a win rate you were shown, overfitting_odds.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesBTC, ETH, SOL, DOGE, PEPE, SRM… ticker or full pair. Ask with an unknown one and the answer lists the sixteen we hold.
dropNodip only: how far below its recent high to buy, in %.
fastNocross only: fast average.
slowNocross only: slow average.
stopNodip only: stop loss, in %.
hoursNodip only: give up after this many hours.
familyNodip (buy when it falls) or cross (moving average crossover). Defaults to dip.dip
targetNodip only: take profit, in %.
candlesNocross only: 1d or 4h.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNofalse when we do not hold that data. Never a zero standing in for an answer.
ruleNoThe rule in plain English.
errorNono_data when ok is false.
reasonNoWhy, in one sentence, and what we do have instead.
sourceNoThe public file these numbers come from.
tradesNoHow many trades it took.
return_pctNoWhat it returned, after fees.
try_insteadNoWhen ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).
same_coin_inNoWhen ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.
win_rate_pctNoShare of winners.
buy_and_hold_pctNoWhat buying the coin and leaving it alone returned over the same window. A result without this is advertising.
max_drawdown_pctNoWorst peak-to-trough fall.
versions_in_familyNoHow many versions of this idea exist.
versions_beating_buy_and_holdNoHow many of them beat doing nothing. Often zero.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the safety bar is low. The description adds real provenance the annotations cannot: results come from a downloadable static file rather than live computation, over nine years of prices, sixteen coins, fees charged on both sides. It does not cover refresh cadence or result-size limits, so it stops short of a 5.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first clause, and the routing sentence at the end is exactly where an agent needs it. The middle sentence is rhetorically padded ('sixteen coins, three of which died', the em-dash inventory), which is characterful but slows scanning for a structured-field reader.

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

Completeness4/5

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

An output schema exists, so return values need not be enumerated, and the tool is still complete: source data, coverage, alternatives and invocation shape are all present. Minor residual gaps are the interaction between family and the dip/cross-only parameters, which the description leaves to the schema.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter already carries a per-field description and family-gating note ('dip only', 'cross only'), so the schema does the heavy lifting. The description adds only a generic 'give the coin and the numbers', which hints that coin alone is sufficient but adds no syntax or defaulting detail beyond the schema. Baseline 3 is correct.

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

Purpose5/5

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

States a specific verb (backtest lookup) on a specific resource (one exact strategy version), and enumerates the two strategy families it covers (dip-buy, moving-average cross) along with the outputs returned. An agent can distinguish it from the eleven siblings without opening any schema.

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

Usage Guidelines5/5

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

Names three alternatives with the exact condition that selects each: leverage_survival for leverage, stop_loss_check for a stop on plain buy-and-hold, overfitting_odds for judging a quoted win rate. The trigger condition ('when someone quotes a specific dip-buying or moving-average rule') is stated explicitly.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updates
    • Changedaveraging_in_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coin": "btc",
        +    "days": 365
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedbest_days_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "best_days": 10,
        +    "coin": "btc",
        +    "days": 365
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedcalendar_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "calendar": "month_of_year",
        +    "coin": "btc"
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedcoin_comparison3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coins": [
        +      "btc",
        +      "eth"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedcopy_trading_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {}
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changeddiversification_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coins": [
        +      "btc",
        +      "eth"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changeddrawdown_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coin": "btc",
        +    "days": 365
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedleaderboard_rank_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "return_pct": 340
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedleverage_survival3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coin": "BTC",
        +    "days": 30,
        +    "leverage": 25
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedoverfitting_odds3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "losses": 38,
        +    "tries": 20,
        +    "wins": 62
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedstop_loss_check3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coin": "btc",
        +    "days": 365,
        +    "stop": 5
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
    • Changedstrategy_grid_lookup3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "coin": "btc"
        +  }
        +]
      • addedOutput schema / properties / same_coin_in
        Added value: +{
        +  "description": "When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send.",
        +  "type": "array"
        +}
      • addedOutput schema / properties / try_instead
        Added value: +{
        +  "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).",
        +  "type": "object"
        +}
  2. 12 tool updates
    • Changedaveraging_in_check3 fields changed
      • addedInput schema / properties / days / enum
        Added value: +[
        +  90,
        +  365,
        +  730
        +]
      • addedInput schema / properties / instalments / default
        Added value: +"weekly"
      • addedInput schema / properties / instalments / enum
        Added value: +[
        +  "weekly",
        +  "monthly"
        +]
    • Changedbest_days_check3 fields changed
      • addedInput schema / properties / best_days / default
        Added value: +10
      • addedInput schema / properties / best_days / enum
        Added value: +[
        +  1,
        +  5,
        +  10,
        +  20
        +]
      • addedInput schema / properties / days / enum
        Added value: +[
        +  90,
        +  365,
        +  730
        +]
    • Changedcalendar_check1 field changed
      • addedInput schema / properties / calendar / enum
        Added value: +[
        +  "day_of_week",
        +  "month_of_year",
        +  "hour_of_day"
        +]
    • Changedcoin_comparison3 fields changed
      • addedInput schema / properties / days / default
        Added value: +365
      • addedInput schema / properties / days / enum
        Added value: +[
        +  90,
        +  365,
        +  730
        +]
      • addedInput schema / properties / leverage / default
        Added value: +25
    • Changedcopy_trading_check4 fields changed
      • addedInput schema / properties / ranked_by / default
        Added value: +"return"
      • addedInput schema / properties / ranked_by / enum
        Added value: +[
        +  "return",
        +  "profit"
        +]
      • addedInput schema / properties / top_pct / default
        Added value: +10
      • addedInput schema / properties / top_pct / enum
        Added value: +[
        +  10,
        +  1
        +]
    • Changeddiversification_check2 fields changed
      • addedInput schema / properties / days / default
        Added value: +365
      • addedInput schema / properties / days / enum
        Added value: +[
        +  90,
        +  365,
        +  730
        +]
    • Changeddrawdown_check1 field changed
      • addedInput schema / properties / days / enum
        Added value: +[
        +  30,
        +  90,
        +  365,
        +  730
        +]
    • Changedleaderboard_rank_check2 fields changed
      • addedInput schema / properties / window / default
        Added value: +"month"
      • addedInput schema / properties / window / enum
        Added value: +[
        +  "day",
        +  "week",
        +  "month",
        +  "allTime"
        +]
    • Changedleverage_survival4 fields changed
      • addedInput schema / properties / days / enum
        Added value: +[
        +  1,
        +  7,
        +  30,
        +  90
        +]
      • addedInput schema / properties / leverage / enum
        Added value: +[
        +  2,
        +  3,
        +  5,
        +  10,
        +  20,
        +  25,
        +  50,
        +  100
        +]
      • addedInput schema / properties / side / default
        Added value: +"long"
      • addedInput schema / properties / side / enum
        Added value: +[
        +  "long",
        +  "short"
        +]
    • Changedoverfitting_odds2 fields changed
      • addedInput schema / properties / baseline / default
        Added value: +0.5
      • addedInput schema / properties / tries / default
        Added value: +1
    • Changedstop_loss_check2 fields changed
      • addedInput schema / properties / days / enum
        Added value: +[
        +  30,
        +  90,
        +  365,
        +  730
        +]
      • addedInput schema / properties / stop / enum
        Added value: +[
        +  5,
        +  10,
        +  15,
        +  20,
        +  30
        +]
    • Changedstrategy_grid_lookup3 fields changed
      • addedInput schema / properties / candles / enum
        Added value: +[
        +  "1d",
        +  "4h"
        +]
      • addedInput schema / properties / family / default
        Added value: +"dip"
      • addedInput schema / properties / family / enum
        Added value: +[
        +  "dip",
        +  "cross"
        +]
  3. 12 tool updates
    • First observedaveraging_in_check
    • First observedbest_days_check
    • First observedcalendar_check
    • First observedcoin_comparison
    • First observedcopy_trading_check
    • First observeddiversification_check
    • First observeddrawdown_check
    • First observedleaderboard_rank_check
    • First observedleverage_survival
    • First observedoverfitting_odds
    • First observedstop_loss_check
    • First observedstrategy_grid_lookup

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Checks whether a trading backtest survives its own statistics: deflated Sharpe, multiple-testing correction against a best-of-N-noise benchmark, minimum track record length, and fill realism. Takes no market data and no API keys, and cannot recommend a trade — it only reports that a result is weaker than claimed or not yet provable.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables statistical validation of whether a trading backtest’s edge is real using bootstrap-resampling and reshuffling Monte Carlo methods, including confidence intervals, drawdown-path percentiles, expected value calculations, and prop-firm challenge pass-probability simulation. It also compares multiple win-rate/risk-reward geometries by simulated pass rate.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides tools to research crypto trading strategies via backtesting, walk-forward validation, and paper trading, with a deflated-Sharpe overfitting check. Enables natural-language-driven analysis and interpretation of strategy performance.
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Most trading signals are noise. AlphaAssay puts them on trial — deflated Sharpe, out-of-sample, leakage forensics — and returns signed pass/fail verdicts anyone can verify. Methodology audits, not investment advice.
    17
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources