<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AlgoVault.com</title>
    <description>The latest articles on DEV Community by AlgoVault.com (@algovaultlabs).</description>
    <link>https://dev.to/algovaultlabs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3866031%2F8c632343-9790-4a72-8b66-b538319f2fce.png</url>
      <title>DEV Community: AlgoVault.com</title>
      <link>https://dev.to/algovaultlabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/algovaultlabs"/>
    <language>en</language>
    <item>
      <title>AlgoVault Weekly Trade-Call Report — Week of 2026-08-30</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Sun, 30 Aug 2026 12:00:04 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/algovault-weekly-trade-call-report-week-of-2026-08-30-2jbd</link>
      <guid>https://dev.to/algovaultlabs/algovault-weekly-trade-call-report-week-of-2026-08-30-2jbd</guid>
      <description>&lt;p&gt;AlgoVault Trade-Call Intelligence — Week of 2026-08-30&lt;/p&gt;

&lt;p&gt;📊 524,637 trade calls tracked&lt;br&gt;
🎯 PFE Win Rate: 91.7% across 1807+ assets (Hyperliquid)&lt;br&gt;
🏆 Top performer: NCSKSONY2USD 3m — 100.0% PFE Win Rate (8 evaluated)&lt;br&gt;
📈 Confidence band 50-54 hitting 91.9% accuracy&lt;/p&gt;

&lt;p&gt;All calls are on-chain verified (Base L2 Merkle root).&lt;/p&gt;

&lt;p&gt;📊 Live track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;br&gt;
🔌 Connect an agent: &lt;a href="https://algovault.com/docs?src=devto" rel="noopener noreferrer"&gt;algovault.com/docs&lt;/a&gt;&lt;br&gt;
🛰 Set a standing scan in Telegram: &lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;t.me/algovaultofficialbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by AlgoVault Labs — call interpretation for AI trading agents.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>trading</category>
    </item>
    <item>
      <title>This week's top crypto trade setups — 708 asset scans · 14 venues (Aug 2026)</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Fri, 28 Aug 2026 12:02:20 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/this-weeks-top-crypto-trade-setups-708-asset-scans-14-venues-aug-2026-gko</link>
      <guid>https://dev.to/algovaultlabs/this-weeks-top-crypto-trade-setups-708-asset-scans-14-venues-aug-2026-gko</guid>
      <description>&lt;p&gt;This week's top crypto trade setups — 708 asset scans · 14 venues (Aug 2026)&lt;/p&gt;

&lt;p&gt;Live from AlgoVault's engine:&lt;/p&gt;

&lt;p&gt;📡 This week I scanned 708 assets across 14 venues.&lt;/p&gt;

&lt;p&gt;Top fresh setups:&lt;/p&gt;

&lt;p&gt;🟢 UNI — BUY @ $4.63 · 60% conviction · TRENDING_UP&lt;br&gt;
   📊 trend persistence MEDIUM · funding extreme ↑ · breakout imminent&lt;br&gt;
   💡 Funding at -0.0145% is unusually negative for UNI over 14 days: shorts pay longs → bullish&lt;/p&gt;

&lt;p&gt;🟢 NCCO1OILWTI2USD — BUY @ $82.91 · 57% conviction · TRENDING_UP&lt;br&gt;
   📊 trend persistence MEDIUM · funding normal · breakout imminent&lt;br&gt;
   💡 Funding at -0.0100% is negative at a normal level for NCCO1OILWTI2USD: shorts pay longs → bullish&lt;/p&gt;

&lt;p&gt;🟢 MSFT — BUY @ $503.97 · 55% conviction · TRENDING_UP&lt;br&gt;
   📊 trend persistence HIGH · funding normal · breakout imminent&lt;br&gt;
   💡 Regime is trending up on the moving-average cross → bullish&lt;/p&gt;

&lt;p&gt;🟢 SOL — BUY @ $105.70 · 51% conviction · TRENDING_UP&lt;br&gt;
   📊 trend persistence HIGH · funding elevated ↑ · OI +6.7% (24h)&lt;br&gt;
   💡 Funding at -0.0067% is unusually negative for SOL over 14 days: shorts pay longs → bullish&lt;/p&gt;

&lt;p&gt;🟢 BEAT — BUY @ $0.1239 · 48% conviction · RANGING&lt;br&gt;
   📊 trend persistence HIGH · funding normal · breakout imminent&lt;br&gt;
   💡 Regime is ranging with the moving averages inside the noise band → bullish&lt;/p&gt;

&lt;p&gt;Every setup above is a live call from the same engine that publishes its full record on-chain — each one written down before its outcome is known. Conviction is shown as measured, not rounded up: these are the week's strongest setups, not certainties.&lt;/p&gt;

&lt;p&gt;Ranking is by conviction across every venue scanned, deduplicated per coin, and filtered by a USD liquidity floor. The headline figure counts scans rather than distinct assets — a coin listed on several venues is scanned on each. What is not here matters as much as what is: the engine holds by default.&lt;/p&gt;

&lt;p&gt;⚠️ This is call interpretation, not financial advice. AlgoVault helps AI agents analyze — execution decisions are theirs.&lt;/p&gt;

&lt;p&gt;🛰 Want this on your coins automatically? Set a standing scan: &lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;t.me/algovaultofficialbot&lt;/a&gt;&lt;br&gt;
📊 See the full verified track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>trading</category>
    </item>
    <item>
      <title>The crypto-quant cold-start problem and how AI agents solve it</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Fri, 28 Aug 2026 02:04:32 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/the-crypto-quant-cold-start-problem-and-how-ai-agents-solve-it-2a3h</link>
      <guid>https://dev.to/algovaultlabs/the-crypto-quant-cold-start-problem-and-how-ai-agents-solve-it-2a3h</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Every crypto-quant team starts in the same hole. You have an LLM agent that can reason, a broker connection that can execute, and precisely zero calibrated signal to bridge them. Building that bridge from scratch — pulling OHLCV, tuning a regime classifier, backtesting a composite weighting across venues, then proving the whole thing works — is the cold-start problem, and it eats six-to-nine months of engineering time before your agent takes its first paper trade. That is exactly the gap AlgoVault fills: 91.7% PFE win rate · 518,764+ verified calls · Merkle-anchored on Base L2, delivered as a single MCP tool call your agent can invoke on turn one. We provide the thesis; the agent decides execution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15yz0mcs3pho4qtmndcc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15yz0mcs3pho4qtmndcc.png" alt="AlgoVault cold-start cover" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post lays out why the cold-start problem is structural (not a tooling gap), what a "brain layer" actually looks like when you inspect its output byte-by-byte, and how to wire it into a Claude, Cursor, or custom MCP-client agent loop today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: what "cold start" actually costs
&lt;/h2&gt;

&lt;p&gt;Ask any team that has built a crypto trading agent in the last two years and the timeline is depressingly consistent. Weeks one through four go to data plumbing: normalizing perp funding across all live derivatives venues; reconciling contract multipliers; handling the fact that "open interest" means three different things depending on which venue you ask. Weeks five through twelve go to a first-pass indicator stack — some combination of trend, funding, OI delta, volume regime — glued together with hand-tuned thresholds that inevitably overfit the last quarter's tape.&lt;/p&gt;

&lt;p&gt;Then you hit the real wall: &lt;strong&gt;calibration&lt;/strong&gt;. Your agent needs to know not just "is this a buy?" but "how confident should I be, and does that confidence generalize across regimes I haven't seen?" That requires a labelled outcome dataset, a walk-forward evaluation harness, and enough live paper-trading time to distinguish luck from edge. Most teams never make it past this stage. They either ship an overconfident bot that blows up in the first regime change, or they cut scope down to a single asset on a single venue and quietly stop calling it "quant."&lt;/p&gt;

&lt;p&gt;The structural reason this happens is not laziness. It is that the three things a trading agent needs — normalized cross-venue data, a calibrated composite verdict, and a public track record it can verify — are each a full-time engineering discipline. Building all three inside one team, from zero, is a business-model mismatch for anyone whose actual product is the agent itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AlgoVault answer: a brain layer, not an indicator feed
&lt;/h2&gt;

&lt;p&gt;The positioning we have settled into after two years of shipping is deliberately narrow. AlgoVault is not a charting tool. It is not a raw indicator aggregator. It is not a signal advisor telling you to buy XRP at market. It is the &lt;strong&gt;brain layer&lt;/strong&gt; that sits between an AI agent and the market: one MCP endpoint that returns a composite verdict (LONG / SHORT / HOLD), a conviction percentage, a regime label, and a receipt showing which factors contributed and how.&lt;/p&gt;

&lt;p&gt;That framing matters because it defines what we do and do not do. We do publish a live, Merkle-anchored track record so your agent (or your compliance team) can verify our claims cryptographically. We do compute the verdict across all live derivatives venues so a single-exchange funding spike does not fool the composite. We do let HOLD be a first-class output — because an agent that trades on every tick is an agent that pays every spread and every verdict fee. We do not custody funds. We do not route orders. We do not tell any specific human what to buy.&lt;/p&gt;

&lt;p&gt;The &lt;span&gt;91.7%&lt;/span&gt; PFE peak-favourable-excursion win rate is the number that anchors the pitch, but the more interesting artefact for engineers is the shape of a single response. Here is what an agent actually receives when it asks for a BTC verdict on a short intraday timeframe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation walkthrough
&lt;/h2&gt;

&lt;p&gt;The fastest way from zero to a running agent loop is three code blocks: install, inspect a real response, wire it into a loop. Every dependency below is pinned; every output is verbatim from the live &lt;code&gt;api.algovault.com&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block 1: install and first call
&lt;/h3&gt;

&lt;p&gt;The MCP server is distributed via npm and consumable by any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Continue, custom SDK). No API key is required for the free tier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the MCP server (pin the minor for reproducibility)&lt;/span&gt;
npx &lt;span class="nt"&gt;-y&lt;/span&gt; @algovault/crypto-quant-signal-mcp@^1.28

&lt;span class="c"&gt;# Or wire it into Claude Desktop's mcp_servers.json:&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/Library/Application&lt;span class="se"&gt;\ &lt;/span&gt;Support/Claude/claude_desktop_config.json &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;'
{
  "mcpServers": {
    "algovault": {
      "command": "npx",
      "args": ["-y", "@algovault/crypto-quant-signal-mcp@^1.28"]
    }
  }
}
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="c"&gt;# Verify the health endpoint (no auth, no rate-limit hit)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://api.algovault.com/api/performance-public | jq &lt;span class="s1"&gt;'.pfe_win_rate, .total_signals'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the server is registered, your agent has the full tool coverage available: &lt;code&gt;get_trade_signal&lt;/code&gt;, &lt;code&gt;get_regime&lt;/code&gt;, and &lt;code&gt;get_venue_status&lt;/code&gt;. The workhorse takes a coin, a timeframe (the full intraday-through-daily range, computed on demand per call — the decision cadence is the timeframe your caller selects, not a fixed clock interval), and an optional confidence threshold.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block 2: a real API response
&lt;/h3&gt;

&lt;p&gt;Below is a verbatim response for BTC on a short intraday timeframe. Note the &lt;code&gt;_algovault&lt;/code&gt; metadata block (version, session, quota, auth tier) and the &lt;code&gt;_receipts&lt;/code&gt; block (per-factor ledger, track-record snapshot, verification URI). Everything an agent needs to justify its own action to a downstream reviewer is in this single payload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6n9njswj12hn8qi49sv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6n9njswj12hn8qi49sv.png" alt="AlgoVault API response" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80467&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"indicators"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.00007092&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"trend_persistence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MEDIUM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"breakout_pending"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INACTIVE"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RANGING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Regime is ranging with the moving averages inside the noise band → bullish. Funding at +0.0071% sits in BTC's normal 14-day band: no crowd pressure either way. Turns directional if funding moves off neutral."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeframe"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_algovault"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.28.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"exchange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BINANCE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"venue_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"promoted"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"quota"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;113&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"daily"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"binding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"monthly"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"auth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"outcome"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ABSENT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"presented"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"free"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_receipts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"verdict"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"conviction_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RANGING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"track_record"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pfe_win_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.917&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;512602&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"window"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-10..2026-08-28"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"verification_uri"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://algovault.com/track-record"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things worth calling out. First, the free tier is 200 calls/month and 100 calls/day (two independent walls) — enough for a research spike or a single-asset paper-trading loop. Second, the &lt;code&gt;_receipts.factor_ledger&lt;/code&gt; (elided above for brevity) lets your agent explain &lt;em&gt;why&lt;/em&gt; the verdict came out the way it did, which matters enormously if a human reviewer ever asks. Third, &lt;code&gt;also_see&lt;/code&gt; and &lt;code&gt;closest_tradeable&lt;/code&gt; are the composite's opinion on where conviction actually lives right now — a HOLD on BTC does not mean "sit on your hands," it means "look at SOL on the short intraday timeframe, we score it higher."&lt;/p&gt;

&lt;h3&gt;
  
  
  Block 3: wire it into an agent loop
&lt;/h3&gt;

&lt;p&gt;Here is a minimal TypeScript example that polls the tool for a watchlist, filters by conviction threshold, and hands high-conviction verdicts to a downstream execution stub. This is the shape most Claude Code / Cursor users end up with after a day of iteration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F16iyivfwawbkgpwqx1gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F16iyivfwawbkgpwqx1gg.png" alt="Agent loop diagram" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;AlgoVault&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MCP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;coins=BTC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;confidence_threshold=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;BTC&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;80424.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"indicators"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.00007092&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_24h_avg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.00007092&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_window"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"24h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"v…

# DRYRUN_MODE=1 — example complete
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dry-run harness ships in the repo under &lt;code&gt;examples/agent-loop.ts&lt;/code&gt; with &lt;code&gt;DRYRUN_MODE=1&lt;/code&gt; on by default; flip it off, add your execution adapter of choice (CCXT, Hyperliquid SDK, a broker webhook), and you have a paper-trading agent in under fifty lines of glue code. The verdict, the conviction score, and the factor ledger are the contract your execution layer consumes; everything else (venue routing, position sizing, risk gates) belongs on your side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pitfalls and design decisions worth knowing
&lt;/h2&gt;

&lt;p&gt;Three honest gotchas before you commit to this stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rate limits are real on the free tier.&lt;/strong&gt; 200 calls/month sounds generous until you build a watchlist of ten assets on a short intraday cadence and burn through it in a week. The response includes a live &lt;code&gt;quota&lt;/code&gt; object so your agent can back off gracefully; if you see &lt;code&gt;remaining&lt;/code&gt; dropping fast, cache verdicts by (coin, timeframe) for the duration of the timeframe bar and only refetch on close. This is what serious quant users do anyway — asking for a fresh verdict twice inside the same candle is wasted budget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regime classifier has blind spots at regime transitions.&lt;/strong&gt; The composite is calibrated to hold conviction back when the regime label itself is ambiguous — that is the design intent — but the transition from RANGING to TRENDING (or vice versa) can produce a run of low-conviction HOLDs even as price moves meaningfully. If your agent's success metric penalizes missed moves more than false starts, wrap the verdict with your own regime-change detector and treat AlgoVault as one input among several.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We chose composite over raw for a reason.&lt;/strong&gt; The obvious question from any quant is "why not just give me the raw indicators and let me weight them myself?" We do expose the indicators inside &lt;code&gt;_receipts.factor_ledger&lt;/code&gt; for exactly that reason — you can rebuild your own composite if you want to. But the flagship product is the calibrated verdict, because the calibration is the moat: it is what the Merkle-anchored track record is measuring, and it is what took two years of walk-forward evaluation to earn. Raw indicators are commoditized. Calibrated composite verdicts, verifiable on-chain, are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data actually shows
&lt;/h2&gt;

&lt;p&gt;The number that matters is not any single verdict's outcome; it is the aggregate PFE win rate across the full corpus of published calls. &lt;span&gt;91.7%&lt;/span&gt; PFE win rate across &lt;span&gt;518,764&lt;/span&gt;+ verified calls, Merkle-anchored on Base L2 — that is the current window (2026-04-10 through 2026-08-28), sourced live from &lt;code&gt;/api/performance-public&lt;/code&gt; at draft time and re-verifiable at the &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;track-record page&lt;/a&gt; any time you want to audit it yourself.&lt;/p&gt;

&lt;p&gt;Two things about that number that are easy to miss. First, "PFE" is peak-favourable-excursion — it measures whether the market ever moved in the verdict's favour by a meaningful margin during the verdict's lifetime, not whether a specific exit rule would have profited. It is a calibration metric, not a returns claim, and it is deliberately the only public metric because it is the honest one to publish. Second, the corpus is Merkle-anchored on Base L2 — the tree roots are notarized on-chain so we cannot silently drop losing calls to make the number look better. This is Moat #2 in the AlgoVault stack (published track record) and Moat #1 (composite verdict quant weighting) working together.&lt;/p&gt;

&lt;p&gt;For agent builders, the practical takeaway is that calibration this deep is not something you replicate in a sprint. Buying it as a service, calling it from an MCP tool, and putting the verification URI in your own audit trail is a two-hour integration instead of a two-quarter build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the track record&lt;/a&gt; — verify the &lt;span&gt;91.7%&lt;/span&gt; PFE win rate and &lt;span&gt;518,764&lt;/span&gt;+ call corpus for yourself, live and Merkle-anchored&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://algovault.com/docs" rel="noopener noreferrer"&gt;the docs&lt;/a&gt; — full MCP tool reference, agent-loop patterns, and quota/auth details&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;the GitHub repo&lt;/a&gt; — MCP server source, &lt;code&gt;examples/agent-loop.ts&lt;/code&gt;, and integration adapters&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;Try Free in Telegram&lt;/a&gt; — no API key, no signup, verdicts in one message&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— AlgoVault Labs&lt;/p&gt;

&lt;p&gt;⭐ Star the repo to follow new exchanges and signals: &lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>algorithmictrading</category>
      <category>ai</category>
    </item>
    <item>
      <title>How an AI agent analyzes BTC with AlgoVault MCP</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Wed, 26 Aug 2026 12:00:02 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/how-an-ai-agent-analyzes-btc-with-algovault-mcp-40f4</link>
      <guid>https://dev.to/algovaultlabs/how-an-ai-agent-analyzes-btc-with-algovault-mcp-40f4</guid>
      <description>&lt;p&gt;How an AI agent analyzes BTC with AlgoVault MCP&lt;/p&gt;

&lt;p&gt;Here's a real-world workflow showing how agents use AlgoVault:&lt;/p&gt;

&lt;p&gt;💡 Workflow #1: Quick BTC Check (Beginner)&lt;br&gt;
"Get me a trade call for BTC on the 1h timeframe"&lt;/p&gt;

&lt;p&gt;And here's what the live call returned just now:&lt;/p&gt;

&lt;p&gt;Tool: get_trade_signal&lt;br&gt;
Asset: BTC (Blue Chip)&lt;br&gt;
Timeframe: 1h&lt;br&gt;
Verdict: HOLD (35% confidence)&lt;/p&gt;

&lt;p&gt;Price is down over 24h, the momentum term behind the call → bearish. Funding at +0.0089% sits in BTC's normal 14-day band: no crowd pressure either way. Becomes actionable if the breakout resolves.&lt;/p&gt;

&lt;p&gt;This is what "call interpretation" means — we don't tell agents what to trade. We give them the analysis so they can decide.&lt;/p&gt;

&lt;p&gt;📖 20 workflows like this in our docs: &lt;a href="https://algovault.com/docs?src=devto" rel="noopener noreferrer"&gt;algovault.com/docs&lt;/a&gt;&lt;br&gt;
📊 Full verified track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>trading</category>
    </item>
    <item>
      <title>Volume, gainers, losers, movers: choosing which perps an AI agent scans</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Tue, 25 Aug 2026 02:02:38 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/volume-gainers-losers-movers-choosing-which-perps-an-ai-agent-scans-4dh7</link>
      <guid>https://dev.to/algovaultlabs/volume-gainers-losers-movers-choosing-which-perps-an-ai-agent-scans-4dh7</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;An AI trading agent that scans crypto perpetuals every few minutes spends most of its budget deciding &lt;em&gt;what to look at&lt;/em&gt;. Scoring is cheap; universe selection is where a scan quietly succeeds or quietly wastes calls. In the first post of this series we covered the default open-interest lens and the liquidity floor — the "what is big" question. This post is about the other question a scan can ask: &lt;em&gt;what is moving right now&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That question has four answers in the AlgoVault MCP surface: &lt;code&gt;volume&lt;/code&gt;, &lt;code&gt;gainers&lt;/code&gt;, &lt;code&gt;losers&lt;/code&gt;, and &lt;code&gt;movers&lt;/code&gt;. They are not synonyms. Each one selects a different slice of the market, and picking the wrong one is the difference between an agent that catches continuation and an agent that catches nothing. Our composite verdict is built on 91.7% PFE win rate · 509,055+ verified calls · Merkle-anchored on Base L2, and every one of those calls started with a universe decision like the one this post is about.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk6bpqwxvb7u8x59as3yt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk6bpqwxvb7u8x59as3yt.png" alt="cover" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Big is not the same as busy
&lt;/h2&gt;

&lt;p&gt;Open interest, the default lens covered in the earlier post of &lt;a href="https://algovault.com/docs" rel="noopener noreferrer"&gt;this series&lt;/a&gt;, answers a structural question: which perps carry committed capital right now. It is a slow-moving, high-signal filter, and it is the correct starting point for most agents most of the time.&lt;/p&gt;

&lt;p&gt;The activity lenses answer a behavioural question instead: which perps are being &lt;em&gt;traded&lt;/em&gt; right now, in which direction, and by how much. Big and busy overlap a lot at the top of the book — the majors are usually both — but the tail is where the two views diverge, and the tail is where the interesting setups usually live. An agent that only ever scans by open interest will keep re-scoring the same names every cycle. An agent that only ever scans by movement will chase noise on illiquid perps. The activity lenses exist so the scan can decide, per cycle, which of the two questions it is asking.&lt;/p&gt;

&lt;p&gt;The rule of thumb we use internally: if the strategy is &lt;em&gt;continuation&lt;/em&gt; (trend, breakout, momentum), the activity lenses tend to surface better candidates because they select for names where price is already in motion. If the strategy is &lt;em&gt;mean reversion&lt;/em&gt; against a structural anchor, open interest and the liquidity floor tend to be safer, because you want the reversion to happen in a book that can actually absorb the position.&lt;/p&gt;

&lt;h2&gt;
  
  
  volume vs open interest — the one-sentence difference that matters
&lt;/h2&gt;

&lt;p&gt;Volume is turnover — the notional that changed hands in a window. Open interest is the notional currently held. The one-sentence difference: volume can be inflated in ways open interest structurally cannot, because a single position can be opened and closed many times in a day, but it can only be &lt;em&gt;held&lt;/em&gt; once. That is not a criticism of volume as a lens — it is exactly why &lt;code&gt;volume&lt;/code&gt; surfaces different names than &lt;code&gt;oiBasis&lt;/code&gt;. High turnover on a modest open-interest base is a real signal about who is present in the book right now, and that is often what a momentum agent wants to see.&lt;/p&gt;

&lt;h2&gt;
  
  
  gainers, losers, movers — three ways to ask "what is moving"
&lt;/h2&gt;

&lt;p&gt;The three price-change lenses all read from the same underlying field — the venue's own &lt;span&gt;24&lt;/span&gt;h price change, reconstructed uniformly across venues so the number means the same thing whether the perp is on Binance, Bybit, OKX, Bitget, or Hyperliquid. What differs is the direction filter.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gainers&lt;/code&gt; — signed change, positive only. The top of this list is the perps that are up the most over the window. This is the lens for a long-biased continuation agent.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;losers&lt;/code&gt; — signed change, negative only. The mirror. This is the lens for a short-biased continuation agent, or a mean-reversion agent hunting oversold candidates.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;movers&lt;/code&gt; — magnitude regardless of sign. This is &lt;em&gt;not&lt;/em&gt; the same as running &lt;code&gt;gainers&lt;/code&gt; and &lt;code&gt;losers&lt;/code&gt; and merging: &lt;code&gt;movers&lt;/code&gt; orders by absolute change, so a perp down heavily and a perp up heavily can appear in the same slice, ranked together. It is the lens for a direction-agnostic scan that cares about volatility more than trend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;volume&lt;/code&gt; is the fourth option in the same family, ordering by &lt;span&gt;24&lt;/span&gt;h turnover rather than price change. It answers a different sub-question — where is participation right now — and the returned set often looks nothing like any of the three price-change lenses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation walkthrough — gainers, losers, movers, and the aliases
&lt;/h2&gt;

&lt;p&gt;The MCP tool accepts the lens as a parameter on the scan call. The canonical names are &lt;code&gt;volume&lt;/code&gt;, &lt;code&gt;gainers&lt;/code&gt;, &lt;code&gt;losers&lt;/code&gt;, &lt;code&gt;movers&lt;/code&gt;, and short-form aliases are accepted so agent authors don't have to remember exact strings — enumerate them from the live &lt;code&gt;tools/list&lt;/code&gt; schema rather than from a copy-pasted table, because that surface evolves.&lt;/p&gt;

&lt;p&gt;Block 1 — install and first call, one lens, one venue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @algovault/crypto-quant-signal-mcp@latest
&lt;span class="c"&gt;# then, from your MCP client:&lt;/span&gt;
&lt;span class="c"&gt;# call: scan_universe { "lens": "gainers", "venue": "binance", "timeframe": "15m" }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Block 2 — a real verdict returned by &lt;code&gt;get_trade_call&lt;/code&gt;, which is what the scan calls per shortlisted asset once the lens has selected the universe. Notice the &lt;code&gt;_algovault.quota&lt;/code&gt; block: the lens changed &lt;em&gt;which&lt;/em&gt; assets were scored, not how many calls were billed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;79803.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"indicators"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0000796&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"volume_24h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;18859152141.64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"trend_persistence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MEDIUM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"breakout_pending"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INACTIVE"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RANGING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Regime is ranging with the moving averages inside the noise band. Funding sits in BTC's normal 14-day band: no crowd pressure either way. Turns directional if funding moves off neutral."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeframe"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_algovault"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.28.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_trade_call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"exchange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BINANCE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"quota"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;67&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;133&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"daily"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frby2azgk4kqlfx5s2n1p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frby2azgk4kqlfx5s2n1p.png" alt="api-response" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Block 3 — dropping the lens choice into an agent loop. The loop picks the lens dynamically based on the strategy the agent is currently running, calls the scan, then iterates the shortlist through &lt;code&gt;get_trade_call&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;AlgoVault&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MCP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;example&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;—&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;coins=BTC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;confidence_threshold=&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;BTC&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;79803.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"indicators"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0000796&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_24h_avg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.0000796&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.79&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_window"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"24h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"volu…

# DRYRUN_MODE=1 — example complete
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffly3bzupgr6yyay9eqmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffly3bzupgr6yyay9eqmn.png" alt="agent-loop" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent chose &lt;code&gt;gainers&lt;/code&gt; because it was in continuation mode this cycle. Had the same loop been in mean-reversion mode, it would have swapped to &lt;code&gt;losers&lt;/code&gt; (to find oversold candidates) or fallen back to the open-interest default from the earlier post. Nothing else in the loop changed — same timeframe, same confidence threshold, same billing behaviour.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked comparison: two lenses, same venue, different universes
&lt;/h2&gt;

&lt;p&gt;The load-bearing evidence for this post is that the lenses genuinely return different universes. Run a scan for the top slice by &lt;code&gt;volume&lt;/code&gt; and a scan for the top slice by &lt;code&gt;gainers&lt;/code&gt; on the same venue at the same timeframe. In a healthy market, the two shortlists overlap on maybe the top majors and then diverge — the &lt;code&gt;volume&lt;/code&gt; list will be dominated by BTC, ETH, SOL and whichever mid-caps are being churned that day, while the &lt;code&gt;gainers&lt;/code&gt; list will be dominated by whatever mid- and lower-caps are actually running.&lt;/p&gt;

&lt;p&gt;The BTC verdict above is a good honest example of what a &lt;code&gt;volume&lt;/code&gt;-lens scan surfaces on a quiet day: a HOLD at &lt;span&gt;1%&lt;/span&gt; conviction, ranging regime, funding in the normal band. The lens did its job — BTC is genuinely near the top of the venue by &lt;span&gt;24&lt;/span&gt;h turnover — but the &lt;em&gt;scoring&lt;/em&gt; correctly refused to fabricate a call where none existed. A &lt;code&gt;gainers&lt;/code&gt; scan at the same moment would have surfaced a completely different shortlist, and if any of those names had cleared the confidence threshold, the agent would have acted on them instead. If, on a given cycle, the two universes happen to overlap heavily — because the whole market is moving together — the honest report is "these overlapped today", and the agent should behave accordingly rather than pretending it found distinct opportunities.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;closest_tradeable&lt;/code&gt; hint in the response (&lt;code&gt;XRP 3m at 57% confidence&lt;/code&gt;) is the scan's way of saying: "nothing on your requested shortlist crossed the bar, but here is the nearest thing that did on the wider surface." That hint is lens-agnostic. It behaves the same whether you selected &lt;code&gt;volume&lt;/code&gt;, &lt;code&gt;gainers&lt;/code&gt;, &lt;code&gt;losers&lt;/code&gt;, or &lt;code&gt;movers&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pitfalls — the lens is universe-selection, not ranking
&lt;/h2&gt;

&lt;p&gt;Three honest gotchas worth calling out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lens does not re-order the output.&lt;/strong&gt; Once the universe is chosen, verdicts are returned in confidence order, not in lens order. If you scanned by &lt;code&gt;gainers&lt;/code&gt; and the top gainer scored &lt;span&gt;12%&lt;/span&gt; confidence while a smaller gainer scored &lt;span&gt;71%&lt;/span&gt;, the &lt;span&gt;71%&lt;/span&gt; call comes first. This is a common and reasonable misreading — the natural assumption is that "scan by gainers" means "results ordered by gain" — but it is not what the tool does. The lens picks the universe; conviction picks the presentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lens does not change the bill.&lt;/strong&gt; A scan of the top slice by &lt;code&gt;volume&lt;/code&gt; and a scan of the top slice by &lt;code&gt;movers&lt;/code&gt; both score the same number of assets and consume the same number of calls against your monthly allowance. If the strategy is direction-agnostic and you find yourself running both lenses back-to-back on every cycle, you are billing twice for what should be one decision — pick one, or alternate on a schedule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A quiet lens is a real result.&lt;/strong&gt; Sometimes the &lt;code&gt;movers&lt;/code&gt; lens on a given venue at a given timeframe returns a set where nothing crosses your confidence threshold. The correct behaviour is to record the empty result and move on, not to loosen the threshold until something appears. An honest empty scan protects the composite; a scan that fabricates conviction under pressure is the failure mode we spent the most engineering time designing against.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance — what the composite shows across lenses
&lt;/h2&gt;

&lt;p&gt;The reason to trust any of this is that the composite verdict has been measured across every lens against forward outcomes. The AlgoVault public track record aggregates all lenses, all venues, and all timeframes into a single PFE win-rate figure: 91.7% PFE win rate · 509,055+ verified calls · Merkle-anchored on Base L2. That number is not a per-lens boast — it is the aggregate honesty check on the whole surface, including the cycles where the scan returned nothing and the agent correctly did nothing. Full breakdown, per-window slices, and the on-chain proofs are on &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the track record page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the track record&lt;/a&gt; — live PFE win rate, verified call count, and the Merkle anchors on Base L2&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://algovault.com/docs" rel="noopener noreferrer"&gt;the docs&lt;/a&gt; — scan parameters, lens aliases, and the free-tier allowance&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;the GitHub repo&lt;/a&gt; — the MCP server source, issue tracker, and example agent loops&lt;/li&gt;
&lt;li&gt;Earlier post in the scan-lens series: the open-interest default and the liquidity floor, on &lt;a href="https://algovault.com/docs" rel="noopener noreferrer"&gt;the AlgoVault blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Next in the series: funding and volatility lenses — when to scan by crowd pressure vs. realised range&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— AlgoVault Labs&lt;/p&gt;

&lt;p&gt;⭐ Star the repo to follow new exchanges and signals: &lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>algorithmictrading</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>AlgoVault MCP v1.28.1 — What's New</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Mon, 24 Aug 2026 06:47:28 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/algovault-mcp-v1281-whats-new-1p3i</link>
      <guid>https://dev.to/algovaultlabs/algovault-mcp-v1281-whats-new-1p3i</guid>
      <description>&lt;p&gt;AlgoVault MCP v1.28.1 is live&lt;/p&gt;

&lt;p&gt;What's new:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changed: Clearer tool descriptions across all seven tools, so an agent picking a tool has more to go on. &lt;code&gt;get_trade_signal&lt;/code&gt; now points new integrations at &lt;code&gt;get_trade_call&lt;/code&gt;, and &lt;code&gt;scan_trade_calls&lt;/code&gt;' &lt;code&gt;exchange&lt;/code&gt; parameter says plainly that it takes one venue.&lt;/li&gt;
&lt;li&gt;Fixed: The LobeHub manifest's tool descriptions were out of step with the ones the server actually serves. All seven are now generated from the same source, and a test keeps them that way.&lt;/li&gt;
&lt;li&gt;Fixed: &lt;code&gt;/capabilities&lt;/code&gt; and &lt;code&gt;tools/list&lt;/code&gt; gave different descriptions for &lt;code&gt;get_trade_signal&lt;/code&gt;; the alias steering hint reached only one of them. Both now project from one source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now tracking 1744+ assets with 91.7% PFE Win Rate across 501,201 evaluated calls.&lt;/p&gt;

&lt;p&gt;Upgrade now — remote agents get the new version automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote MCP   https://api.algovault.com/mcp
npm          npx -y crypto-quant-signal-mcp@1.28.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📖 Docs: &lt;a href="https://algovault.com/docs?src=devto" rel="noopener noreferrer"&gt;algovault.com/docs&lt;/a&gt;&lt;br&gt;
📊 Track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by AlgoVault Labs — call interpretation for AI trading agents.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>release</category>
    </item>
    <item>
      <title>AlgoVault Weekly Trade-Call Report — Week of 2026-08-23</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Sun, 23 Aug 2026 12:00:04 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/algovault-weekly-trade-call-report-week-of-2026-08-23-dab</link>
      <guid>https://dev.to/algovaultlabs/algovault-weekly-trade-call-report-week-of-2026-08-23-dab</guid>
      <description>&lt;p&gt;AlgoVault Trade-Call Intelligence — Week of 2026-08-23&lt;/p&gt;

&lt;p&gt;📊 504,386 trade calls tracked&lt;br&gt;
🎯 PFE Win Rate: 91.7% across 1736+ assets (Hyperliquid)&lt;br&gt;
🏆 Top performer: GILD 3m — 100.0% PFE Win Rate (10 evaluated)&lt;br&gt;
📈 Confidence band 55-59 hitting 91.9% accuracy&lt;/p&gt;

&lt;p&gt;All calls are on-chain verified (Base L2 Merkle root).&lt;/p&gt;

&lt;p&gt;📊 Live track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;br&gt;
🔌 Connect an agent: &lt;a href="https://algovault.com/docs?src=devto" rel="noopener noreferrer"&gt;algovault.com/docs&lt;/a&gt;&lt;br&gt;
🛰 Set a standing scan in Telegram: &lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;t.me/algovaultofficialbot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by AlgoVault Labs — call interpretation for AI trading agents.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>trading</category>
    </item>
    <item>
      <title>AlgoVault MCP v1.28.0 — What's New</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:16:20 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/algovault-mcp-v1280-whats-new-55n</link>
      <guid>https://dev.to/algovaultlabs/algovault-mcp-v1280-whats-new-55n</guid>
      <description>&lt;p&gt;AlgoVault MCP v1.28.0 is live&lt;/p&gt;

&lt;p&gt;What's new:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added: &lt;code&gt;_algovault.auth&lt;/code&gt; on every response: authentication outcome is now reported, not inferred. Absent, malformed, unknown and "could not verify" are distinct states.&lt;/li&gt;
&lt;li&gt;Added: Documented &lt;code&gt;assetClass&lt;/code&gt; (&lt;code&gt;get_trade_call&lt;/code&gt;, &lt;code&gt;get_trade_signal&lt;/code&gt;) and &lt;code&gt;minLiquidityUsd&lt;/code&gt; (&lt;code&gt;scan_trade_calls&lt;/code&gt;), projected from the live schema so the docs cannot drift from the server.&lt;/li&gt;
&lt;li&gt;Added: An error-code reference and the &lt;code&gt;scan_trade_calls&lt;/code&gt; response envelope in &lt;code&gt;/docs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Changed: A well-formed but unrecognised API key is now refused. Previously it was served free-tier data, which made a bad key indistinguishable from no key.&lt;/li&gt;
&lt;li&gt;Changed: The published &lt;code&gt;exchange&lt;/code&gt; enum lists only publicly served venues; retired and shadow venues no longer appear in the schema.&lt;/li&gt;
&lt;li&gt;Changed: &lt;code&gt;/docs&lt;/code&gt; no longer describes a multi-step handshake for the HTTP transport — it has been stateless for some time, and the samples now run as written.&lt;/li&gt;
&lt;li&gt;Removed: &lt;strong&gt;BREAKING&lt;/strong&gt; — &lt;code&gt;EDGEX&lt;/code&gt; and &lt;code&gt;WEEX&lt;/code&gt; are no longer accepted values for the &lt;code&gt;exchange&lt;/code&gt; parameter on &lt;code&gt;get_trade_call&lt;/code&gt;, &lt;code&gt;get_trade_signal&lt;/code&gt; and &lt;code&gt;get_market_regime&lt;/code&gt;. Calls passing either now return &lt;code&gt;-32602 invalid_enum_value&lt;/code&gt;. EDGEX is retired and WEEX was never promoted; the published enum lists only publicly served venues. If you pinned either value, switch to a listed venue. Shipped under a minor because the change went live on the API on 2026-08-19 and neither value was ever documented.&lt;/li&gt;
&lt;li&gt;Removed: The sample activity feed on &lt;code&gt;/verify&lt;/code&gt;. The page shows verifiable batch data only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now tracking 1721+ assets with 91.7% PFE Win Rate across 493,418 evaluated calls.&lt;/p&gt;

&lt;p&gt;Upgrade now — remote agents get the new version automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remote MCP   https://api.algovault.com/mcp
npm          npx -y crypto-quant-signal-mcp@1.28.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📖 Docs: &lt;a href="https://algovault.com/docs?src=devto" rel="noopener noreferrer"&gt;algovault.com/docs&lt;/a&gt;&lt;br&gt;
📊 Track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built by AlgoVault Labs — call interpretation for AI trading agents.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>release</category>
    </item>
    <item>
      <title>Funding arb alert: CASHCAT showing 438.11% annualized spread</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Fri, 21 Aug 2026 12:00:13 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/funding-arb-alert-cashcat-showing-43811-annualized-spread-47of</link>
      <guid>https://dev.to/algovaultlabs/funding-arb-alert-cashcat-showing-43811-annualized-spread-47of</guid>
      <description>&lt;p&gt;Funding arb alert: CASHCAT showing 438.11% annualized spread&lt;/p&gt;

&lt;p&gt;Live from AlgoVault's engine:&lt;/p&gt;

&lt;p&gt;Top funding arb opportunities right now:&lt;/p&gt;

&lt;p&gt;CASHCAT: 5 bps (438.11% ann.) — Long Bybit / Short HL | Urgency: HIGH | Conviction: MEDIUM&lt;/p&gt;

&lt;p&gt;Scanned 1162 pairs across Hyperliquid, Binance, Bybit, Gate, KuCoin, Aster, and OKX. These spreads reflect cross-venue funding rate differences that delta-neutral strategies can capture.&lt;/p&gt;

&lt;p&gt;⚠️ This is call interpretation, not financial advice. AlgoVault helps AI agents analyze — execution decisions are theirs.&lt;/p&gt;

&lt;p&gt;🛰 Want this on your coins automatically? Set a standing scan: &lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;t.me/algovaultofficialbot&lt;/a&gt;&lt;br&gt;
📊 See the full verified track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>trading</category>
    </item>
    <item>
      <title>Regime-aware trading with one composite verdict for AI agents</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Fri, 21 Aug 2026 02:03:13 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/regime-aware-trading-with-one-composite-verdict-for-ai-agents-23ef</link>
      <guid>https://dev.to/algovaultlabs/regime-aware-trading-with-one-composite-verdict-for-ai-agents-23ef</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;If you have ever wired an AI trading agent to a raw indicator feed, you already know the failure mode: the RSI screams oversold, the MACD flips bullish, funding is neutral, open interest is climbing, and your agent has to somehow reconcile five conflicting stories into a single decision on the next candle. Most agents can't. They pick the loudest indicator and act — and then get chopped up the moment the market shifts regime.&lt;/p&gt;

&lt;p&gt;That is the problem we built AlgoVault to solve. One composite verdict, regime-classified, cross-venue, with a public record: 91.7% PFE win rate · 497,194+ verified calls · Merkle-anchored on Base L2. We provide the thesis; your agent decides execution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8zlb2bzinu5146w40coc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8zlb2bzinu5146w40coc.png" alt="Cover" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post walks through why regime awareness matters, how our composite verdict encodes it, and how to wire it into an agent loop today. Full track record is at &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the AlgoVault track record page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: raw indicators lie about the market they are in
&lt;/h2&gt;

&lt;p&gt;An indicator like RSI carries an implicit assumption about the market it is measuring. In a ranging market, RSI &amp;lt; 30 is a mean-reversion buy signal that works most of the time. In a strong trend, RSI &amp;lt; 30 is exactly where you get run over — the market is oversold because a real move is happening, and it will stay oversold for hours.&lt;/p&gt;

&lt;p&gt;The same asymmetry haunts every technical input. Funding rate divergences mean one thing in a leverage-flush regime and something completely different in a slow grind higher. Open-interest expansion during a breakout is confirmation; during a range, it's a warning sign. Moving-average crossovers are magic in trends and noise in chop.&lt;/p&gt;

&lt;p&gt;Agents that consume raw indicators have to encode all of this regime logic themselves, per asset, per timeframe, per venue. Most don't. The ones that try do it with brittle if/else stacks that need constant recalibration. The failure mode is silent: the agent looks like it's working until a regime shift reveals that its rules were fitted to the last one.&lt;/p&gt;

&lt;p&gt;The competing tools in this space — TradingView alerts, raw indicator APIs, single-exchange feeds — all push this reconciliation problem onto the agent builder. That is fine if you have a quant team. It is not fine if you are one person shipping an autonomous strategy on a weekend.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AlgoVault answer: composite verdict, regime-classified
&lt;/h2&gt;

&lt;p&gt;AlgoVault's core primitive is a single call — &lt;code&gt;get_trade_signal&lt;/code&gt; — that returns one of &lt;code&gt;LONG&lt;/code&gt;, &lt;code&gt;SHORT&lt;/code&gt;, or &lt;code&gt;HOLD&lt;/code&gt;, with a conviction score, an explicit &lt;code&gt;regime&lt;/code&gt; field, and a receipts block that shows exactly which factors contributed. The verdict is composite: it fuses momentum, funding, open-interest dynamics, trend persistence, breakout state, and volume into one interpretation, then labels the regime that interpretation was made under.&lt;/p&gt;

&lt;p&gt;That last part is the piece agents cannot easily build themselves. When the response comes back with &lt;code&gt;"regime": "RANGING"&lt;/code&gt;, the classifier has already decided that mean-reversion-friendly logic applies. When it flips to &lt;code&gt;TRENDING&lt;/code&gt;, the same underlying indicators get weighted differently. Your agent doesn't need to know how — it just needs to know the verdict and, if it wants to, the receipts.&lt;/p&gt;

&lt;p&gt;This is Moat #1 (composite verdict quant weighting) tied to M2 (one verdict beats a stack of raw indicators). The proof that the weighting is real, and not just clever framing, sits at &lt;span&gt;91.7%&lt;/span&gt; PFE win rate across &lt;span&gt;497,194+&lt;/span&gt; verified calls, every one anchored to Base L2 and independently auditable at &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the AlgoVault track record page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation walkthrough
&lt;/h2&gt;

&lt;p&gt;Here is the end-to-end wiring. Three code blocks: install and first call, real API response, agent-loop integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block 1 — install and first call
&lt;/h3&gt;

&lt;p&gt;The MCP server is distributed via npx, so there is no long-lived install step. Point Claude Desktop or Claude Code at it and you get the &lt;code&gt;get_trade_signal&lt;/code&gt; tool immediately.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add to your MCP client config (Claude Desktop, Cursor, Claude Code)&lt;/span&gt;
npx &lt;span class="nt"&gt;-y&lt;/span&gt; @algovault/crypto-quant-signal-mcp@latest

&lt;span class="c"&gt;# Or call the remote HTTPS endpoint directly&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://api.algovault.com/mcp/get_trade_signal &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"content-type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"coin":"BTC","timeframe":"15m"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The free tier gives you 200 calls/month (also expressible as 100 calls/day), which is enough to prototype a full agent loop against live data without a signup gate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block 2 — real API response
&lt;/h3&gt;

&lt;p&gt;Here is a verbatim response from &lt;code&gt;get_trade_signal&lt;/code&gt; for BTC on the short-intraday timeframe. Note the &lt;code&gt;regime&lt;/code&gt; field, the &lt;code&gt;_receipts.factor_ledger&lt;/code&gt; showing every input the classifier considered, and the &lt;code&gt;_algovault.quota&lt;/code&gt; block your agent can key on for rate-limit budgeting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7js61drot737gq2g8dam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7js61drot737gq2g8dam.png" alt="API response" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;75108.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RANGING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Price is sharply up over 24h, the momentum term behind the call → bullish. Funding at +0.0083% sits in BTC's normal 14-day band: no crowd pressure either way. Turns directional if funding moves off neutral."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1787277610&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeframe"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_algovault"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.27.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_trade_call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"session_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v2:01a2631b198fb4f4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"exchange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BINANCE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"quota"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;59&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"remaining"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;141&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"binding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"monthly"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_receipts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"verdict"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"conviction_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RANGING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"factor_ledger"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"factor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"price_change_24h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bullish"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"strength"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"primary"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"factor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"funding_state"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"neutral"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+0.0083%"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"factor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"neutral"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ranging"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"factor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"trend_persistence"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"neutral"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MEDIUM"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"factor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"breakout_pending"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"neutral"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INACTIVE"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read the receipts and the story becomes clear: momentum is bullish, but the classifier tagged the regime as &lt;code&gt;RANGING&lt;/code&gt;, so a bullish momentum term alone is not enough to overcome the neutral funding and neutral trend-persistence terms. The composite verdict is HOLD at &lt;span&gt;10%&lt;/span&gt; conviction. That is exactly the behavior you want — selectivity, not enthusiasm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Block 3 — agent-loop integration
&lt;/h3&gt;

&lt;p&gt;Now wire it into a loop your agent actually runs. This is a minimal TypeScript client that polls the verdict, gates on regime and conviction, and hands off to your execution layer. Real terminal output from a dry-run of the example follows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnt59vc298arasim18kzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnt59vc298arasim18kzj.png" alt="Agent loop" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# AlgoVault MCP example — coins=BTC confidence_threshold=70

[BTC] {
  "call": "HOLD",
  "confidence": 10,
  "price": 75083.1,
  "indicators": {
    "funding_rate": 0.00008323,
    "funding_24h_avg": 0.00008323,
    "funding_state": "NORMAL",
    "oi_change_pct": 7.25,
    "oi_change_window": "24h",
    "v…

# DRYRUN_MODE=1 — example complete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The pattern most agents settle on: poll on the timeframe you care about, act only when &lt;code&gt;call != "HOLD"&lt;/code&gt; AND &lt;code&gt;confidence &amp;gt;= threshold&lt;/code&gt; AND the &lt;code&gt;regime&lt;/code&gt; matches the strategy you deployed. A mean-reversion strategy consumes &lt;code&gt;RANGING&lt;/code&gt; verdicts; a breakout strategy consumes &lt;code&gt;TRENDING&lt;/code&gt;. Same endpoint, two agents, no glue code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pitfalls and design decisions
&lt;/h2&gt;

&lt;p&gt;Three honest limits worth naming.&lt;/p&gt;

&lt;p&gt;First, the regime classifier is not omniscient. Regime transitions — the exact moment a range breaks into a trend — are the hardest thing in this domain, and no classifier calls them on the first candle. You will see the label flip a candle or two after the move begins. The mitigation is not to fight it: build your agent to accept that regime is a lagging label on a leading market, and size positions accordingly.&lt;/p&gt;

&lt;p&gt;Second, asset coverage. The composite verdict is strongest on liquid perp majors where every input has a clean signal. On thinly traded pairs, funding rate becomes noisy and open-interest deltas swamp the classifier. We publish the full asset coverage on &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the AlgoVault track record page&lt;/a&gt; with per-asset PFE win rates so you can filter your universe honestly rather than assuming the aggregate number applies to everything.&lt;/p&gt;

&lt;p&gt;Third, the design choice we get asked about most: why one verdict instead of exposing the underlying indicator stack? Because the whole moat is the weighting. If we shipped the raw stack, we would be a slower indicator API. The composite verdict is the product, and every gram of complexity we hide from your agent is a gram your agent doesn't have to get right on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance: what the receipts actually show
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;_receipts.track_record&lt;/code&gt; block that ships inside every response is the same live figure you can verify at &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the AlgoVault track record page&lt;/a&gt; — &lt;span&gt;91.7%&lt;/span&gt; PFE win rate across &lt;span&gt;497,194+&lt;/span&gt; verified calls in the current window, Merkle-anchored on Base L2.&lt;/p&gt;

&lt;p&gt;The mechanic worth internalizing: PFE (peak favorable excursion) win rate measures whether a directional call would have hit its favorable target before its adverse one, within the timeframe the caller selected. It is a strict measure of directional correctness, and it is aggregate across every venue we cover. It is not a return figure, it is not a strategy backtest, and it is not investment advice. It is one thing: how often the composite verdict pointed the right way on the timeframe the caller asked about.&lt;/p&gt;

&lt;p&gt;For an agent builder, that is the number that matters. If the thesis is right ~&lt;span&gt;91.7%&lt;/span&gt; of the time on the timeframe your agent trades, your execution layer, position sizing, and risk management get to compound on top of a base rate that is doing the hard work. That is what "regime-aware" buys you in practice — not clairvoyance, but a base rate high enough that the rest of your stack has something durable to build on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the track record&lt;/a&gt; — every verified call, Merkle-anchored, filter by asset and timeframe&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://algovault.com/docs" rel="noopener noreferrer"&gt;the docs&lt;/a&gt; — MCP setup, endpoint reference, quota mechanics&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;the GitHub repo&lt;/a&gt; — the MCP server source, integration examples, issue tracker&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;Try free in Telegram&lt;/a&gt; — no API key, no signup, live verdicts in-chat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AlgoVault Labs&lt;/p&gt;

&lt;p&gt;⭐ Star the repo to follow new exchanges and signals: &lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>crypto</category>
      <category>algorithmictrading</category>
    </item>
    <item>
      <title>How an AI agent analyzes BTC with AlgoVault MCP</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Wed, 19 Aug 2026 12:00:03 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/how-an-ai-agent-analyzes-btc-with-algovault-mcp-1b1h</link>
      <guid>https://dev.to/algovaultlabs/how-an-ai-agent-analyzes-btc-with-algovault-mcp-1b1h</guid>
      <description>&lt;p&gt;How an AI agent analyzes BTC with AlgoVault MCP&lt;/p&gt;

&lt;p&gt;Here's a real-world workflow showing how agents use AlgoVault:&lt;/p&gt;

&lt;p&gt;💡 Workflow #1: Quick BTC Check (Beginner)&lt;br&gt;
"Get me a trade call for BTC on the 1h timeframe"&lt;/p&gt;

&lt;p&gt;And here's what the live call returned just now:&lt;/p&gt;

&lt;p&gt;Tool: get_trade_signal&lt;br&gt;
Asset: BTC (Blue Chip)&lt;br&gt;
Timeframe: 1h&lt;br&gt;
Verdict: HOLD (8% confidence)&lt;/p&gt;

&lt;p&gt;Regime is trending up on the moving-average cross → bullish. Funding at +0.0041% sits in BTC's normal 14-day band: no crowd pressure either way. Turns directional if funding moves off neutral.&lt;/p&gt;

&lt;p&gt;This is what "call interpretation" means — we don't tell agents what to trade. We give them the analysis so they can decide.&lt;/p&gt;

&lt;p&gt;📖 20 workflows like this in our docs: &lt;a href="https://algovault.com/docs?src=devto" rel="noopener noreferrer"&gt;algovault.com/docs&lt;/a&gt;&lt;br&gt;
📊 Full verified track record: &lt;a href="https://algovault.com/track-record?src=devto" rel="noopener noreferrer"&gt;algovault.com/track-record&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>ai</category>
      <category>trading</category>
    </item>
    <item>
      <title>How to rank the crypto perp universe by open interest and the liquidity floor</title>
      <dc:creator>AlgoVault.com</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:55:18 +0000</pubDate>
      <link>https://dev.to/algovaultlabs/how-to-rank-the-crypto-perp-universe-by-open-interest-and-the-liquidity-floor-3jbf</link>
      <guid>https://dev.to/algovaultlabs/how-to-rank-the-crypto-perp-universe-by-open-interest-and-the-liquidity-floor-3jbf</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Most agent builders who call our scanner assume there is one fixed universe of perps behind it. There is not. Before any verdict is computed, &lt;code&gt;scan_trade_calls&lt;/code&gt; first &lt;em&gt;selects&lt;/em&gt; the universe it will look at, and that selection is a parameter you control. The choice of lens changes the output more than any confidence threshold does — and until now, we have not written about it.&lt;/p&gt;

&lt;p&gt;This is part one of a three-part series on the scan lenses. It covers the default lens, &lt;code&gt;oi&lt;/code&gt; (rank by open interest), and its companion parameter, &lt;code&gt;minLiquidityUsd&lt;/code&gt;. It exists because a reader who does not know the universe is a choice cannot make a deliberate one.&lt;/p&gt;

&lt;p&gt;The scanner sits on the same composite verdict engine as our per-asset endpoint, whose public record stands at 91.7% PFE win rate · 488,409+ verified calls · Merkle-anchored on Base L2. That engine does not change when the universe changes. What changes is &lt;em&gt;what it is pointed at&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg34nih2ljyutll96snhe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg34nih2ljyutll96snhe.png" alt="Cover" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: your agent is scanning the wrong universe
&lt;/h2&gt;

&lt;p&gt;Here is the shape of the mistake I see most often. An agent builder wires up a scan-style tool, sees a ranked list of setups come back, and treats that list as &lt;em&gt;the&lt;/em&gt; market. It is not. It is a ranked slice of &lt;em&gt;some&lt;/em&gt; universe the tool chose for them — and in almost every scanner on the market, that universe is either turnover-weighted (&lt;span&gt;24&lt;/span&gt;h volume) or fully undocumented.&lt;/p&gt;

&lt;p&gt;Two things follow. First, the ranking silently biases toward whatever the tool's default sort surfaces — which, for most volume-ranked scanners, is whatever is being churned right now, not necessarily what is worth watching. Second, when the scanner returns a compelling setup on a thin book, the agent has no way of knowing the book is thin, because a per-call response does not carry a liquidity field. The agent trades a verdict it should never have been offered.&lt;/p&gt;

&lt;p&gt;This is where the two parameters this post is about earn their existence. &lt;code&gt;rankBy&lt;/code&gt; decides &lt;em&gt;which perps are even in the running&lt;/em&gt;. &lt;code&gt;minLiquidityUsd&lt;/code&gt; decides &lt;em&gt;what floor of tradability&lt;/em&gt; they must clear to stay in. Neither touches the verdict engine. Both control the pond it fishes in.&lt;/p&gt;

&lt;p&gt;If you separate universe-selection from scoring in your head, the rest of this post is common sense. If you do not, you will keep debugging the scoring layer for problems that live one layer up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open interest as the default lens (and why not volume)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;scan_trade_calls&lt;/code&gt; defaults &lt;code&gt;rankBy&lt;/code&gt; to &lt;code&gt;oi&lt;/code&gt; — rank the universe by open interest on the venue you queried. This is a deliberate choice and worth explaining, because volume is the more common default in the wider tooling ecosystem and it is the wrong one for an agent's purposes.&lt;/p&gt;

&lt;p&gt;Volume measures churn. Open interest measures commitment. A perp with high &lt;span&gt;24&lt;/span&gt;h volume and low open interest is telling you that a lot of paper has changed hands &lt;em&gt;today&lt;/em&gt;; it is not telling you that anyone is holding conviction on the other side of the close. Open interest, by contrast, is capital sitting in positions right now. It is harder to fake — you cannot round-trip it with wash trades the way you can with volume — and it is a truer proxy for "this market has a real book behind it."&lt;/p&gt;

&lt;p&gt;For an agent whose whole job is to decide whether a setup is worth &lt;em&gt;entering&lt;/em&gt;, ranking by committed capital rather than churn is the more honest starting point. It biases the universe toward markets where the verdict, whatever it turns out to be, will be actionable.&lt;/p&gt;

&lt;p&gt;That is why &lt;code&gt;oi&lt;/code&gt; is the default. It is not the only sensible default one could pick — parts two and three of this series cover the activity and funding/volatility lenses, which are the right choice for different agent shapes — but if you have not thought about the question, &lt;code&gt;oi&lt;/code&gt; is the answer you would arrive at if you had.&lt;/p&gt;

&lt;p&gt;There is also a supporting parameter, &lt;code&gt;oiBasis&lt;/code&gt;, which controls whether the ranking is done on notional open interest (contracts × mark price) or on contract count. Notional is what almost everyone means when they say "open interest," and it is the default. The contracts basis exists for one specific use: it is price-independent, so a sudden move in the underlying does not reshuffle the ranking. If you are running a scan on a fixed cadence and want a stable universe across price swings, &lt;code&gt;contracts&lt;/code&gt; is worth knowing about. Most readers will never touch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation walkthrough — one call, explained parameter by parameter
&lt;/h2&gt;

&lt;p&gt;Here is the smallest useful &lt;code&gt;scan_trade_calls&lt;/code&gt; invocation that makes the universe an explicit choice rather than a default. The floor is &lt;em&gt;an&lt;/em&gt; example — pick your own; there is no recommended value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@modelcontextprotocol/sdk/client/index.js@^1.x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scan_trade_calls&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;rankBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;oi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;oiBasis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notional&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;minLiquidityUsd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="nx"&gt;_000_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timeframe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1h&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;confidence_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reading that call, parameter by parameter: &lt;code&gt;rankBy: "oi"&lt;/code&gt; names the lens — rank the universe by open interest. &lt;code&gt;oiBasis: "notional"&lt;/code&gt; says use dollar-notional, not contract count. &lt;code&gt;minLiquidityUsd: 50_000_000&lt;/code&gt; is the floor — an example, chosen by you, that says &lt;em&gt;do not include a perp in the universe unless its OI clears fifty million&lt;/em&gt;. &lt;code&gt;timeframe: "1h"&lt;/code&gt; is the decision cadence: verdicts are computed on the timeframe you ask for, not on a fixed clock. &lt;code&gt;limit&lt;/code&gt; and &lt;code&gt;confidence_threshold&lt;/code&gt; cap and filter the result set after the verdict runs.&lt;/p&gt;

&lt;p&gt;The response the verdict engine returns per asset is the shape you already know from &lt;code&gt;get_trade_call&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HOLD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;64150.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"indicators"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.00004752&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"funding_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"oi_change_pct"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-2.56&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"volume_24h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;8357528090.33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"trend_persistence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MEDIUM"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"regime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TRENDING_UP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Regime is trending up on the moving-average cross → bullish. Funding at +0.0048% sits in BTC's normal 14-day band: no crowd pressure either way."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timeframe"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"15m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"_algovault"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.27.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_trade_call"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"exchange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BINANCE"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wcaekeowch9a5dhd7df.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4wcaekeowch9a5dhd7df.png" alt="API response" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The scan wraps this shape in an array — one entry per asset that survived the universe selection &lt;em&gt;and&lt;/em&gt; cleared &lt;code&gt;confidence_threshold&lt;/code&gt;. Reading the result in an agent loop is the same one-liner you would use for a per-asset call, applied across the array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# AlgoVault MCP example — coins=BTC confidence_threshold=70&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;BTC] &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"call"&lt;/span&gt;: &lt;span class="s2"&gt;"HOLD"&lt;/span&gt;,
  &lt;span class="s2"&gt;"confidence"&lt;/span&gt;: 3,
  &lt;span class="s2"&gt;"price"&lt;/span&gt;: 64150.4,
  &lt;span class="s2"&gt;"indicators"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"funding_rate"&lt;/span&gt;: 0.00004752,
    &lt;span class="s2"&gt;"funding_state"&lt;/span&gt;: &lt;span class="s2"&gt;"NORMAL"&lt;/span&gt;,
    &lt;span class="s2"&gt;"oi_change_pct"&lt;/span&gt;: &lt;span class="nt"&gt;-2&lt;/span&gt;.56,
    &lt;span class="s2"&gt;"volume_24h"&lt;/span&gt;: 8357528090.33
  &lt;span class="o"&gt;}&lt;/span&gt;,
  ...
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# DRYRUN_MODE=1 — example complete&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxulbw9hu0w0ngbl2r5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxulbw9hu0w0ngbl2r5y.png" alt="Agent loop" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your agent iterates the array, reads &lt;code&gt;call&lt;/code&gt; + &lt;code&gt;confidence&lt;/code&gt; + &lt;code&gt;regime&lt;/code&gt; on each entry, and routes execution accordingly. That is the whole ergonomic difference between a per-asset call and a scan: the scan handed you a &lt;em&gt;universe of verdicts&lt;/em&gt; instead of one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The liquidity floor, and why it has to live on the server
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;minLiquidityUsd&lt;/code&gt; is the parameter I most want readers to understand, because its design is honest in a way that is easy to miss.&lt;/p&gt;

&lt;p&gt;The floor is applied server-side, and it has to be — this is not a stylistic choice. A per-call verdict response does not carry a liquidity field. It carries &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;indicators&lt;/code&gt;, &lt;code&gt;regime&lt;/code&gt;, &lt;code&gt;reasoning&lt;/code&gt;, and receipts. Nowhere in that payload is there a number a client could inspect to say "this one is too thin, drop it." A client physically cannot post-filter for liquidity, because the client is never given the data it would need to.&lt;/p&gt;

&lt;p&gt;That means one of two things is true of any tool that offers a liquidity filter. Either it is applied on the server, where the OI/volume data actually lives, or it is not being applied at all and the parameter is decorative. We chose the first. &lt;code&gt;minLiquidityUsd&lt;/code&gt; is enforced inside the universe-selection stage: the ranking is computed, the floor is applied to it, and only the surviving assets are handed to the verdict engine. By the time the response reaches your agent, the floor is already a fait accompli.&lt;/p&gt;

&lt;p&gt;That is why it is a real feature and not a client-side filter dressed up in server-side clothing. It is also why you should think of it as a &lt;em&gt;universe&lt;/em&gt; parameter, not a &lt;em&gt;quality&lt;/em&gt; parameter. It changes what the scanner is allowed to look at. It does not change how the scanner scores what it looks at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pitfalls — the proxy-venue caveat, and what the floor does not do
&lt;/h2&gt;

&lt;p&gt;Two honest limits, both of which matter more than they look like they should.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The OI-proxy caveat.&lt;/strong&gt; Not every venue exposes a bulk open-interest endpoint that would let us rank an entire perp universe by OI in one query. On the venues that do, the ranking is what you would expect: notional OI, sorted, floor applied. On the venues that do not, the tool falls back to &lt;span&gt;24&lt;/span&gt;h volume as the ranking basis — and labels that behaviour honestly in the response metadata rather than pretending the underlying number is OI. This is worth stating plainly because it is where most vendors would quietly conflate the two and hope nobody noticed. If you are building an agent that cares about the &lt;em&gt;lens&lt;/em&gt;, read the metadata; the tool will tell you which basis was used. The named list of proxy-venues drifts as exchanges ship OI endpoints, which is why this post talks about the behaviour and not the roster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The floor does not touch accuracy.&lt;/strong&gt; This is the one that most surprises agent builders. &lt;code&gt;minLiquidityUsd&lt;/code&gt; changes the universe. It does not change the verdict, it does not change the confidence, and it does not improve win rate on the assets that survive it. A reader who expects "higher floor = better calls" has been misled by the shape of the parameter. What a higher floor gets you is &lt;em&gt;tradability&lt;/em&gt; — the surviving assets are ones your agent can actually enter and exit without moving the book. That is a real and useful property, and it is the only one the floor is claiming.&lt;/p&gt;

&lt;p&gt;If you want higher-conviction calls, that is what &lt;code&gt;confidence_threshold&lt;/code&gt; is for. If you want a tradable universe, that is what &lt;code&gt;minLiquidityUsd&lt;/code&gt; is for. Do not use one for the other.&lt;/p&gt;

&lt;p&gt;A third, smaller point: the floor is expressed in USD, which means on the contracts-basis ranking (&lt;code&gt;oiBasis: "contracts"&lt;/code&gt;) the tool still converts to notional internally to apply it. If you set the basis to contracts &lt;em&gt;and&lt;/em&gt; set a dollar floor, you get the price-independent ranking you asked for, with the tradability guard you asked for, both. That is the sensible combination for cadence-driven scans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance — what the data shows about the universe layer
&lt;/h2&gt;

&lt;p&gt;Because the floor and the lens both sit above the verdict engine, they do not shift the engine's public record — that number is what it is, and it is what the receipts on every response point to. What the universe layer &lt;em&gt;does&lt;/em&gt; shift is the composition of the calls counted in that record.&lt;/p&gt;

&lt;p&gt;The visible effect, when you compare a scan run with the default &lt;code&gt;oi&lt;/code&gt; lens and a modest floor against a scan run with no floor at all: fewer results, more of them on markets that carry real book depth, and a materially lower rate of HOLDs generated on markets whose thinness was already the reason they had no coherent regime. This is the shape you would predict. The verdict engine cannot resolve a regime on a market where nothing is committed to either side, so it returns HOLD honestly. The floor keeps those markets out of the universe in the first place. You do not get better verdicts; you get fewer wasted ones.&lt;/p&gt;

&lt;p&gt;That is the case for using the floor deliberately even at modest values. It is not the case for treating the floor as a scoring parameter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Parts two and three of this series cover the activity and funding/volatility lenses respectively — they are the right choice for agents with different shapes than the OI-default is built for. For now, go make one deliberate call and see the universe you actually asked for.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verify the composite verdict engine's public record on &lt;a href="https://algovault.com/track-record" rel="noopener noreferrer"&gt;the track record&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Read the full &lt;code&gt;scan_trade_calls&lt;/code&gt; parameter surface in &lt;a href="https://algovault.com/docs" rel="noopener noreferrer"&gt;the docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Inspect the MCP server implementation on &lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;the GitHub repo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Try the free tier with no signup on &lt;a href="https://t.me/algovaultofficialbot" rel="noopener noreferrer"&gt;Telegram&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Read the companion piece on &lt;a href="https://algovault.com/blog" rel="noopener noreferrer"&gt;composite verdicts vs raw indicators&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— AlgoVault Labs&lt;/p&gt;

&lt;p&gt;⭐ Star the repo to follow new exchanges and signals: &lt;a href="https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp" rel="noopener noreferrer"&gt;https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>crypto</category>
      <category>algorithmictrading</category>
      <category>cryptocurrency</category>
    </item>
  </channel>
</rss>
