Regime
Server Details
Checks crypto trading claims on real data: leverage, drawdown, stop-loss, seasonality, luck.
- Status
- Healthy
- Uptime
- 100.0% over 18 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 12 tools
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.
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.
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.
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 toolsaveraging_in_checkAveraging in checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Ticker or full pair. An unknown one comes back with the list we hold and the ones left out. | |
| days | Yes | The window, in days: 90, 365 or 730. | |
| instalments | Yes | How often a slice goes in: weekly or monthly. Defaults to weekly. | weekly |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| model | No | The assumptions, stated: cash not yet in earns nothing (against spreading), no fees (in favour of spreading). |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| starts | No | Start days tested. Fewer than 120 and we refuse to give a percentage. |
| instalments | No | How many slices fit in the window. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| spreading_won | No | Start 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_pct | No | The same for spreading. |
| p05_lump_sum_pct | No | Fifth percentile of starts, lump sum: one worst day is an anecdote. |
| worst_spread_pct | No | The 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_pct | No | Middle start, spread out. |
| spreading_won_pct | No | The same as a share of starts. |
| median_edge_points | No | Percentage points spreading made over lump sum in the middle case. Negative means lump sum won. |
| worst_lump_sum_pct | No | The single worst start day, all in on day one. |
| median_lump_sum_pct | No | Middle start, all in on day one. |
| share_in_profit_spread_pct | No | The same for spreading. |
| share_in_profit_lump_sum_pct | No | Share of starts that ended up, lump sum. |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Ticker or full pair. An unknown one comes back with the list we hold and the ones left out. | |
| days | Yes | Window in days: 90, 365 or 730. | |
| best_days | Yes | How many days are missed: 1, 5, 10 or 20. Defaults to 10, the number in the claim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| page | No | The page with these exact numbers already in. |
| error | No | no_data when ok is false. |
| model | No | What missing a day means here, and what is not charged. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| history | No | From, to, days held and which tape. |
| windows | No | Start days tested. Fewer than 120 and we refuse to give a percentage. |
| median_pct | No | The middle window, lived whole. The alternative, always. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| biggest_days | No | The biggest up days and down days of the whole history, with their dates, so the clustering can be checked rather than believed. |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| share_in_profit_pct | No | Windows that ended in profit, lived whole. |
| cost_of_missing_best_pp | No | Percentage points the best days were worth. |
| median_without_best_pct | No | The same window without its best days. This is the half of the claim you get shown. |
| gift_of_missing_worst_pp | No | Percentage points dodging the worst days would have paid. |
| median_without_worst_pct | No | The same window without its WORST days. This is the half nobody shows, and it is just as big. |
| median_without_either_pct | No | Without both groups: usually back near the first number, after dodging the days that supposedly decided everything. |
| next_to_means_within_days | No | What «next to» means, in days. |
| winners_turned_losers_pct | No | Of the windows that ended in profit, the share that end in loss once their best days are removed. |
| share_in_profit_without_best_pct | No | The same, without the best days. |
| best_days_next_to_a_worst_day_pct | No | Share 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_pct | No | The same, without the worst days. |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
'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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Ticker or full pair. An unknown one comes back with the list we hold and the ones left out. | |
| calendar | Yes | day_of_week, month_of_year or hour_of_day. The hourly one exists for the 16 coins we hold hourly candles for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| page | No | The page with these exact numbers already in. |
| error | No | no_data when ok is false. |
| model | No | The test, stated, including why a monthly p-value flatters itself. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| buckets | No | Every bucket: its name, observations, times occurred, mean, median and share of up days. |
| history | No | From, to, days held and which tape. |
| shuffles | No | How many shuffled worlds were tested. |
| best_bucket | No | The best bucket by average move, named. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| observations | No | Moves measured across all buckets. |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| worst_bucket | No | The other end. |
| best_mean_pct | No | Its average move. On its own, this is the advertisement. |
| worst_mean_pct | No | Its average move. |
| edge_covers_cost | No | Whether the average move of the best bucket is bigger than that cost. Usually it is not. |
| chance_best_p95_pct | No | What chance reaches in one shuffle out of twenty. |
| round_trip_cost_pct | No | What entering and exiting once costs, so the edge can be compared with it. |
| beats_chance_at_5pct | No | Whether 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_pct | No | What the BEST bucket of a shuffled world averages. Anything below this is less impressive than nothing. |
| chance_matches_it_share | No | The p-value: share of shuffles whose best bucket matched or beat the real one. High means no pattern. |
| best_bucket_happened_times | No | How 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
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.
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.
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.
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.
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.
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 comparisonARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | 90, 365 (default) or 730. | |
| coins | Yes | Two or three tickers, comma-separated: BTC,ETH,SOL. Kept in the order sent. | |
| leverage | Yes | For the leverage row. Default 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| rows | No | Per coin: the drawdown, leverage, averaging-in and stop-loss answers, and its correlation with bitcoin (null for bitcoin itself). |
| error | No | no_data when ok is false. |
| model | No | The method, stated. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public files these numbers come from. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top_pct | Yes | 10 (default) or 1. 0.1 is read as 10. | |
| ranked_by | Yes | return (default) or profit. | return |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| model | No | The method, stated. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| repeated | No | Of those, times it was in the top again next month. |
| chance_pct | No | What picking accounts at random gives. The alternative, always. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| repeated_pct | No | The same as a share. |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| times_in_top | No | Times an account finished a month in the top group. |
| stopped_trading | No | Counted as not repeating. |
| fell_to_bottom_pct | No | Share that fell to the bottom group instead: the size control. |
| in_profit_next_month_pct | No | Share that made money the next month. |
| in_profit_next_month_all_accounts_pct | No | The same for every active account. |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Window ending on the last day of the data: 90, 365 or 730. Defaults to 365. | |
| coins | Yes | Tickers 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
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| model | No | The assumptions, stated. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| btc_bad_days | No | The 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_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| independent_bets | No | N / (1 + (N-1)*avg_corr). Five coins that move as one are one bet; five that ignore each other are five. |
| all_coins_we_hold | No | What every coin we hold, at equal weights, adds up to — the ceiling, for comparison. |
| correlation_with_btc | No | Each coin's correlation with bitcoin in the window. |
| average_pair_correlation | No | Pearson correlation of daily log returns, averaged over every pair in the basket. |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Ticker or full pair. An unknown one comes back with the list we hold and the ones left out. | |
| days | Yes | How long it is held: 30, 90, 365 or 730. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| model | No | The assumptions, stated. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| starts | No | Start days tested. Fewer than 120 and we refuse to give a percentage. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| median_return_pct | No | How the middle start ended. |
| share_fell_30_pct | No | Share of starts that fell 30% or more from entry first. |
| share_fell_50_pct | No | Same, 50% or more. |
| asset_max_drawdown | No | The coin's own biggest top-to-bottom fall, with dates and days to recover, for comparison. |
| share_in_profit_pct | No | Share of starts that ended up. |
| median_worst_fall_pct | No | The middle start's worst fall from its own entry price within the hold. |
| median_days_under_water | No | Days of the hold spent below the entry price, middle start. |
| share_never_recovered_pct | No | Starts that never closed back at their entry price within the hold. |
| median_worst_fall_among_winners_pct | No | Among 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
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window | Yes | day, week, month (default) or allTime. | month |
| return_pct | Yes | In percent: 340 means +340%. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| model | No | The method, stated. |
| one_in | No | One account in how many. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| percentile | No | Share of accounts below it. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| same_or_better | No | Accounts at that return or above. |
| median_return_pct | No | The middle account, same window. |
| share_in_profit_pct | No | Accounts in profit, same window. |
| accounts_that_traded | No | The denominator. |
TDQS
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.
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.
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.
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.
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.
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 survivalARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Ticker or full pair. An unknown one comes back with the list we hold and the ones we do not. | |
| days | Yes | How long it is held: 1, 7, 30 or 90. | |
| side | No | long or short. Defaults to long. | long |
| leverage | Yes | 2, 3, 5, 10, 20, 25, 50 or 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| model | No | The assumptions, stated: liquidation at exactly 1/leverage with no maintenance margin, funding charged daily, the wick decides not the close. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| attempts | No | Starting days tested. A position still open when the history ends is not counted. |
| best_pct | No | The best day. It is the one you were shown, and it is not hidden here. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| liquidated_pct | No | Share of them that ended with nothing left. |
| median_return_pct | No | The middle outcome, on the margin. |
| median_days_to_liquidation | No | How fast, when it happened. |
| median_return_unlevered_pct | No | What the same coin did with no leverage over the same days. A result without this is advertising. |
TDQS
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.
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.
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.
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.
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.
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 oddsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wins | Yes | Winning trades. | |
| tries | No | How many versions were tried before this one was shown to you. Defaults to 1, which is almost never true. | |
| losses | No | Losing trades. Give this or trades. | |
| trades | Yes | Total trades. | |
| baseline | No | Probability a single trade wins by chance. Defaults to 0.5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| error | No | no_data when ok is false. |
| reason | No | Why, in one sentence, and what we do have instead. |
| reading | No | The same three numbers in one sentence. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| odds_one_try | No | P(at least this many wins) for a single attempt. Exact binomial, not simulated. |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| win_rate_pct | No | The win rate. |
| odds_best_of_tries | No | Same result, once you take the best of the attempts made. |
| tries_for_even_odds | No | Attempts needed for chance alone to reach it half the time. |
TDQS
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.
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.
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.
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.
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.
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 checkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Ticker or full pair. An unknown one comes back with the list we hold and the ones left out. | |
| days | Yes | Holding period in days: 30, 90, 365 or 730. | |
| stop | Yes | How far below the entry, in percent: 5, 10, 15, 20 or 30. 0.05 is read as 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| buys | No | Start days tested. Fewer than 120 and we refuse to give a percentage. |
| error | No | no_data when ok is false. |
| model | No | The assumptions, stated: the low triggers, fills at the stop or the gap open, out until the end, same costs both ways. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| stop_fired | No | Buys on which the stop fired. A count. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| stop_fired_pct | No | The same as a share of buys. |
| p05_with_stop_pct | No | Fifth percentile, with the stop: what the stop actually buys. |
| stop_beat_holding | No | Buys on which the stop ended strictly ahead of holding. |
| mean_with_stop_pct | No | Average buy, with the stop. |
| median_days_to_fire | No | Among the buys it fired on. Null when it never fired. |
| worst_with_stop_pct | No | The single worst buy, with the stop. Worse than the stop itself only when a day gapped through. |
| median_with_stop_pct | No | Middle buy, with the stop. |
| p05_without_stop_pct | No | The same, holding. |
| mean_without_stop_pct | No | Average buy, holding. Skewed by a few huge winners. |
| stop_beat_holding_pct | No | The same as a share of buys. |
| worst_without_stop_pct | No | The same, holding. |
| median_without_stop_pct | No | Middle buy, just holding. The alternative, always. |
| share_in_profit_with_stop_pct | No | Share of buys that ended up, stop. |
| share_in_profit_without_stop_pct | No | The same, holding. |
| fired_but_would_have_ended_in_profit | No | Buys 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_pct | No | The same as a share of ALL buys. |
TDQS
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.
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.
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.
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.
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.
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 lookupARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | BTC, ETH, SOL, DOGE, PEPE, SRM… ticker or full pair. Ask with an unknown one and the answer lists the sixteen we hold. | |
| drop | No | dip only: how far below its recent high to buy, in %. | |
| fast | No | cross only: fast average. | |
| slow | No | cross only: slow average. | |
| stop | No | dip only: stop loss, in %. | |
| hours | No | dip only: give up after this many hours. | |
| family | No | dip (buy when it falls) or cross (moving average crossover). Defaults to dip. | dip |
| target | No | dip only: take profit, in %. | |
| candles | No | cross only: 1d or 4h. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | false when we do not hold that data. Never a zero standing in for an answer. |
| rule | No | The rule in plain English. |
| error | No | no_data when ok is false. |
| reason | No | Why, in one sentence, and what we do have instead. |
| source | No | The public file these numbers come from. |
| trades | No | How many trades it took. |
| return_pct | No | What it returned, after fees. |
| try_instead | No | When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed). |
| same_coin_in | No | When ok is false because this tool lacks the coin: the other tools that hold it, each with arguments ready to send. |
| win_rate_pct | No | Share of winners. |
| buy_and_hold_pct | No | What buying the coin and leaving it alone returned over the same window. A result without this is advertising. |
| max_drawdown_pct | No | Worst peak-to-trough fall. |
| versions_in_family | No | How many versions of this idea exist. |
| versions_beating_buy_and_hold | No | How many of them beat doing nothing. Often zero. |
TDQS
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.
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.
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.
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.
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.
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.
12 tool updates
- Changed
averaging_in_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coin": "btc", + "days": 365 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
best_days_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "best_days": 10, + "coin": "btc", + "days": 365 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
calendar_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "calendar": "month_of_year", + "coin": "btc" + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
coin_comparison3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coins": [ + "btc", + "eth" + ] + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
copy_trading_check3 fields changed- added
Input schema / examplesAdded value: +[ + {} +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
diversification_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coins": [ + "btc", + "eth" + ] + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
drawdown_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coin": "btc", + "days": 365 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
leaderboard_rank_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "return_pct": 340 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
leverage_survival3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coin": "BTC", + "days": 30, + "leverage": 25 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
overfitting_odds3 fields changed- added
Input schema / examplesAdded value: +[ + { + "losses": 38, + "tries": 20, + "wins": 62 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
stop_loss_check3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coin": "btc", + "days": 365, + "stop": 5 + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
- Changed
strategy_grid_lookup3 fields changed- added
Input schema / examplesAdded value: +[ + { + "coin": "btc" + } +] - added
Output schema / properties / same_coin_inAdded 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" +} - added
Output schema / properties / try_insteadAdded value: +{ + "description": "When ok is false: the closest call that does answer, ready to send (tool, arguments, and what changed).", + "type": "object" +}
12 tool updates
- Changed
averaging_in_check3 fields changed- added
Input schema / properties / days / enumAdded value: +[ + 90, + 365, + 730 +] - added
Input schema / properties / instalments / defaultAdded value: +"weekly" - added
Input schema / properties / instalments / enumAdded value: +[ + "weekly", + "monthly" +]
- Changed
best_days_check3 fields changed- added
Input schema / properties / best_days / defaultAdded value: +10 - added
Input schema / properties / best_days / enumAdded value: +[ + 1, + 5, + 10, + 20 +] - added
Input schema / properties / days / enumAdded value: +[ + 90, + 365, + 730 +]
- Changed
calendar_check1 field changed- added
Input schema / properties / calendar / enumAdded value: +[ + "day_of_week", + "month_of_year", + "hour_of_day" +]
- Changed
coin_comparison3 fields changed- added
Input schema / properties / days / defaultAdded value: +365 - added
Input schema / properties / days / enumAdded value: +[ + 90, + 365, + 730 +] - added
Input schema / properties / leverage / defaultAdded value: +25
- Changed
copy_trading_check4 fields changed- added
Input schema / properties / ranked_by / defaultAdded value: +"return" - added
Input schema / properties / ranked_by / enumAdded value: +[ + "return", + "profit" +] - added
Input schema / properties / top_pct / defaultAdded value: +10 - added
Input schema / properties / top_pct / enumAdded value: +[ + 10, + 1 +]
- Changed
diversification_check2 fields changed- added
Input schema / properties / days / defaultAdded value: +365 - added
Input schema / properties / days / enumAdded value: +[ + 90, + 365, + 730 +]
- Changed
drawdown_check1 field changed- added
Input schema / properties / days / enumAdded value: +[ + 30, + 90, + 365, + 730 +]
- Changed
leaderboard_rank_check2 fields changed- added
Input schema / properties / window / defaultAdded value: +"month" - added
Input schema / properties / window / enumAdded value: +[ + "day", + "week", + "month", + "allTime" +]
- Changed
leverage_survival4 fields changed- added
Input schema / properties / days / enumAdded value: +[ + 1, + 7, + 30, + 90 +] - added
Input schema / properties / leverage / enumAdded value: +[ + 2, + 3, + 5, + 10, + 20, + 25, + 50, + 100 +] - added
Input schema / properties / side / defaultAdded value: +"long" - added
Input schema / properties / side / enumAdded value: +[ + "long", + "short" +]
- Changed
overfitting_odds2 fields changed- added
Input schema / properties / baseline / defaultAdded value: +0.5 - added
Input schema / properties / tries / defaultAdded value: +1
- Changed
stop_loss_check2 fields changed- added
Input schema / properties / days / enumAdded value: +[ + 30, + 90, + 365, + 730 +] - added
Input schema / properties / stop / enumAdded value: +[ + 5, + 10, + 15, + 20, + 30 +]
- Changed
strategy_grid_lookup3 fields changed- added
Input schema / properties / candles / enumAdded value: +[ + "1d", + "4h" +] - added
Input schema / properties / family / defaultAdded value: +"dip" - added
Input schema / properties / family / enumAdded value: +[ + "dip", + "cross" +]
12 tool updates
- First observed
averaging_in_check - First observed
best_days_check - First observed
calendar_check - First observed
coin_comparison - First observed
copy_trading_check - First observed
diversification_check - First observed
drawdown_check - First observed
leaderboard_rank_check - First observed
leverage_survival - First observed
overfitting_odds - First observed
stop_loss_check - First observed
strategy_grid_lookup
Related MCP Connectors
Read-only crypto strategy backtest & verification verdicts. No trading tools; every result is cited.
- mcpOAuthcom.market-graphs
Praxis: published trading strategies re-run and audited — verdicts, claimed vs measured stats.
Is a trading strategy's track record luck? Free luck check, plus what a full strategy audit checks.
Crypto backtesting & Bitcoin cycle analytics. Point-in-time, DSR-corrected, look-ahead-aware.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceChecks 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
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityBmaintenanceProvides 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.2Apache 2.0
- AlicenseAqualityCmaintenanceMost 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.17Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.