f1ow

Crypto market data & research MCP: price, derivatives, on-chain, sentiment, news, catalysts.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
98%
Vollständigkeit des Schemas
79%
Qualität der Benennung
80%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Befunde (1)

  • LOWTool 'providers_health' description lacks action verbin providers_health

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~11,160Tokens (Tool-Definitionen)
~2.9 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (8.72% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "f1ow": {
      "url": "https://mcp.f1ow.com/mcp"
    }
  }
}

Remote-Endpunkte

https://mcp.f1ow.com/mcpstreamable-http
https://mcp.f1ow.com/x402streamable-http

Was es kann

Tool-Inventar

Tools (30)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢catalysts_calendar(coins)

Lists upcoming crypto catalyst events for the next 7 days. Optionally filter by comma-separated coin IDs (e.g. 'bitcoin,ethereum').

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "coins": {
      "type": "string",
      "description": "Comma-separated coin IDs, e.g. 'bitcoin,ethereum'. Omit for all coins."
    }
  },
  "required": []
}
🟢catalysts_economic_calendar(min_importance)

Scheduled macroeconomic data releases (CPI, FOMC, jobs, GDP, etc.) from the last ~2 days through the next 7 days. Optionally set 'min_importance' (1-3, default 2) to filter out low-impact releases.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "min_importance": {
      "type": "integer",
      "description": "Minimum importance level to include: 1 (all), 2 (medium+), 3 (high only). Defaults to 2."
    }
  },
  "required": []
}
🟢catalysts_etf_flows(asset, symbol)

Recent daily spot-ETF net flows (USD) for an underlying asset (BTC, ETH, SOL, XRP; defaults to BTC): latest day total, per-fund breakdown, and the trailing daily trend. Positive means net inflows. Flows settle behind spot and skip weekends, so the latest row is routinely a day or more old — its age is reported next to the date, and the price it carries is the price on THAT date, not spot. 'symbol' is accepted as an alias for 'asset'.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "asset": {
      "type": "string",
      "description": "Underlying asset symbol, e.g. \"BTC\" or \"ETH\". Defaults to BTC."
    },
    "symbol": {
      "type": "string",
      "description": "Alias for 'asset'."
    }
  },
  "required": []
}
🟢derivatives_open_interest(symbol, points)

Current market-wide (cross-exchange aggregate) open interest (USD) for one coin's perpetuals, with its 24h and 7d change, the 24h price change, AND the underlying 4h-bucket series. Read OI against price: price up on rising OI is new money opening positions, price up on falling OI is short covering — opposite trades off the same price move. The series makes that read available bucket by bucket instead of once per day (pair it with market_candles at 4h for the price leg), and carries the window's own low/high so the current level can be judged against where it has actually been. Falls back to a single-venue figure if the aggregate source is offline. Set 'points' to trim the series (omit for the full ~10-day window; 0 to suppress it).

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. \"BTC\"."
    },
    "points": {
      "type": "integer",
      "description": "How many of the newest 4h buckets to emit. Omit for the full window (60 points ~ 10 days); 0 suppresses the series and returns the summary only."
    }
  },
  "required": [
    "symbol"
  ]
}
🟢events_prediction_odds(query)

Market-implied prediction-market odds for a topic (e.g. 'Fed rate cut', 'bitcoin 100k'). Returns the most active matching markets with per-outcome probabilities, volume, and resolution date.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Topic to match against market questions, e.g. 'Fed', 'bitcoin', 'ETH ETF'."
    }
  },
  "required": [
    "query"
  ]
}
🟢filings_search(query)

Searches recent regulatory filings (full-text) for a company, ticker, or theme (e.g. 'bitcoin treasury'). Returns the most recent matching filings with form type, filer, and a direct document link.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free-text query, e.g. a company name, ticker, or theme."
    }
  },
  "required": [
    "query"
  ]
}
🟢flow_orderbook(symbol)

Order-book snapshot for one coin's perpetuals: best bid/ask, spread in bps, top-of-book depth (USD) per side, and bid/ask depth imbalance. Positive imbalance means more bid depth. Single-venue by nature — Hyperliquid, falling back to Bybit for coins it doesn't list; the response names the venue that answered.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. \"BTC\"."
    }
  },
  "required": [
    "symbol"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string"
    },
    "asOfAt": {
      "type": "string",
      "description": "Order-book timestamp, ISO-8601 UTC"
    },
    "asOfMs": {
      "type": "integer",
      "description": "Order-book timestamp, Unix epoch milliseconds"
    },
    "bestBidUsd": {
      "type": "number",
      "description": "Best bid price, USD"
    },
    "bestAskUsd": {
      "type": "number",
      "description": "Best ask price, USD"
    },
    "midPriceUsd": {
      "type": "number",
      "description": "Mid price, USD"
    },
    "spreadBps": {
      "type": "number",
      "description": "Bid/ask spread, basis points of mid"
    },
    "bidDepthUsd": {
      "type": "number",
      "description": "Top-of-book bid depth, USD"
    },
    "askDepthUsd": {
      "type": "number",
      "description": "Top-of-book ask depth, USD"
    },
    "imbalancePct": {
      "type": "number",
      "description": "Signed bid-vs-ask depth skew in percentage points (positive = more bids)"
    },
    "source": {
      "type": "string",
      "description": "Venue that served the book"
    }
  },
  "required": [
    "symbol"
  ]
}
🟢flow_whale_context(symbol, min_usd)

Aggregate whale context for one coin (cohort-level, no individual wallets): per-exchange reserve changes (1d/7d), top-trader long/short positioning on Binance perps, and large on-chain transfers to/from exchange wallets above a USD threshold. The transfer feed covers ERC-20 tokens; for native assets (BTC, ETH) it substitutes market-wide USDT exchange flows as a dry-powder signal. Exchange withdrawals suggest accumulation; deposits suggest potential sell pressure. For specific whale wallets and their live positions use flow_whale_positions.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. \"BTC\" or \"ETH\"."
    },
    "min_usd": {
      "type": "number",
      "description": "Minimum transfer size in USD to count as a whale transfer. Defaults to 1000000."
    }
  },
  "required": [
    "symbol"
  ]
}
🟢flow_whale_positions(addresses)

Live whale positions on Hyperliquid perps. By default discovers the largest currently-active whale accounts from the venue leaderboard and returns each one's equity and open positions with side, notional (USD), entry price, liquidation price, leverage and unrealized PnL. Optionally pass 'addresses' (comma-separated 0x wallets, max 10) to follow specific wallets instead. For aggregate cohort signals use flow_whale_context.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "addresses": {
      "type": "string",
      "description": "Optional comma-separated 0x wallet addresses to inspect (max 10). Omit to auto-discover the biggest live whales."
    }
  },
  "required": []
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "accounts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          },
          "accountValueUsd": {
            "type": "number",
            "description": "Wallet equity, USD"
          },
          "positions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "coin": {
                  "type": "string"
                },
                "side": {
                  "type": "string",
                  "description": "long or short"
                },
                "isLong": {
                  "type": "boolean"
                },
                "notionalUsd": {
                  "type": "number",
                  "description": "Position notional, USD"
                },
                "entryPriceUsd": {
                  "type": "number",
                  "description": "Entry price, USD"
                },
                "liquidationPriceUsd": {
                  "type": "number",
                  "description": "Liquidation price, USD; omitted when not liquidatable at current margin"
                },
                "leverage": {
                  "type": "number",
                  "description": "Position leverage as a multiple"
                },
                "unrealizedPnlUsd": {
                  "type": "number",
                  "description": "Unrealized PnL, USD"
                }
              }
            }
          }
        }
      }
    }
  }
}
🟢funding_current(symbol, points)

Current perpetual funding rate for one coin (hourly rate plus an annualized estimate), merged across providers, with its 24h and 7d trajectory AND the underlying 8h-bucket series. Positive means longs pay shorts. The trajectory is the point: the same +6% annualized reads as post-flush relief if it fell from +40% and as shorts capitulating if it rose from -20%. The series carries the shape a trailing delta flattens away — a steady drift and a spike that retraced give the same 24h change off opposite tapes — plus the window's own low/high, so the current rate can be judged against where it has actually been rather than an absolute threshold. Set 'points' to trim the series (omit for the full ~10-day window; 0 to suppress it).

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. \"BTC\"."
    },
    "points": {
      "type": "integer",
      "description": "How many of the newest 8h buckets to emit. Omit for the full window (30 points ~ 10 days); 0 suppresses the series and returns the summary only."
    }
  },
  "required": [
    "symbol"
  ]
}
🟢market_candles(symbol, interval, market, limit, days)

OHLC(V) candle history for a coin by symbol (e.g. 'ETH', 'BTC'). 'interval' picks the candle size (1m|5m|15m|30m|1h|4h|12h|1d|1w, default 1d); 'limit' the number of candles (default 100, max 400); 'market' picks the series — 'spot' (Binance, Bybit, then CoinGecko/CoinMarketCap), 'perp' (Hyperliquid, Bybit, then Binance futures — perpetual marks), or 'auto' (default: spot preferred, perp fallback). spot/perp are hard constraints and error rather than substitute. The response labels the market, interval and source actually delivered, includes USD volume when the source carries it, and flags a still-forming last candle.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. 'ETH' or 'BTC'"
    },
    "interval": {
      "type": "string",
      "enum": [
        "1m",
        "5m",
        "15m",
        "30m",
        "1h",
        "4h",
        "12h",
        "1d",
        "1w"
      ],
      "description": "Candle size. Default 1d."
    },
    "market": {
      "type": "string",
      "enum": [
        "spot",
        "perp",
        "auto"
      ],
      "description": "Which market's series: spot exchange trades, perpetual-futures marks, or auto (spot preferred, perp fallback). Default auto."
    },
    "limit": {
      "type": "integer",
      "description": "Number of candles, newest last. Default 100, max 400."
    },
    "days": {
      "type": "integer",
      "description": "DEPRECATED: trailing window in days; use interval+limit instead. Ignored when interval is given."
    }
  },
  "required": [
    "symbol"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "coinId": {
      "type": "string",
      "description": "Identifier the answering provider queried"
    },
    "interval": {
      "type": "string",
      "description": "Candle size actually delivered, e.g. '4h'"
    },
    "market": {
      "type": "string",
      "description": "'spot' or 'perp' — which market the series describes"
    },
    "source": {
      "type": "string",
      "description": "Provider that answered"
    },
    "lastCandleIsPartial": {
      "type": "boolean",
      "description": "True when the newest candle is still forming; exclude it from indicator math"
    },
    "candles": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "timestampMs": {
            "type": "integer",
            "description": "Candle open time, Unix epoch milliseconds"
          },
          "asOfAt": {
            "type": "string",
            "description": "Candle open time, ISO-8601 UTC"
          },
          "openUsd": {
            "type": "number",
            "description": "Open price, USD"
          },
          "highUsd": {
            "type": "number",
            "description": "High price, USD"
          },
          "lowUsd": {
            "type": "number",
            "description": "Low price, USD"
          },
          "closeUsd": {
            "type": "number",
            "description": "Close price, USD"
          },
          "volumeUsd": {
            "type": "number",
            "description": "Traded volume, USD notional; omitted when the source has none"
          }
        }
      }
    }
  }
}
🟢market_coin_details(coin_id)

Fetches price, market cap, ATH/ATL and description for a coin by its CoinGecko coin ID (e.g. 'bitcoin', 'ethereum') or by ticker symbol (e.g. 'BTC', 'WAVES'). IDs are case-sensitive; a symbol, or an ID in the wrong case, is resolved by search and the response names the ID actually fetched, so a resolution is never silent.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "coin_id": {
      "type": "string",
      "description": "CoinGecko coin ID (e.g. 'bitcoin') or ticker symbol (e.g. 'BTC'). IDs are case-sensitive; symbols are resolved by search."
    }
  },
  "required": [
    "coin_id"
  ]
}
🟢market_coins

Lists the coin symbols available from the market-data provider

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}
🟢market_overview

Global market snapshot: total market cap, BTC/ETH dominance, Fear & Greed index, and Altcoin Season index

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "totalMarketCapUsd": {
      "type": "number",
      "description": "Total crypto market cap, USD"
    },
    "totalVolume24hUsd": {
      "type": "number",
      "description": "Total 24h volume, USD"
    },
    "btcDominancePct": {
      "type": "number",
      "description": "BTC dominance in percentage points"
    },
    "ethDominancePct": {
      "type": "number",
      "description": "ETH dominance in percentage points"
    },
    "fearGreedValue": {
      "type": "integer",
      "description": "Fear & Greed index, 0-100"
    },
    "fearGreedLabel": {
      "type": "string"
    },
    "altcoinSeasonIndex": {
      "type": "integer",
      "description": "Altcoin Season index, 0-100"
    }
  }
}
🟢market_quotes(symbols)

Per-coin market snapshot (spot price, perpetual mark price, 24h change, funding rate, open interest, long/short ratio, 24h liquidations), merged across providers. Spot and perp prices are separate fields (spot from spot-market providers, perp mark from the perp venue); they differ by the basis. Pass 'symbols' to filter to specific coins; omit it for every covered coin.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Coin symbols to include, e.g. [\"BTC\",\"ETH\"]. Omit for all covered coins."
    }
  },
  "required": []
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "quotes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "spotPriceUsd": {
            "type": "number",
            "description": "Spot/index price, USD; 0 when no spot source covers the coin"
          },
          "perpPriceUsd": {
            "type": "number",
            "description": "Perpetual mark price, USD; 0 when no perp venue covers the coin"
          },
          "priceUsd": {
            "type": "number",
            "description": "Canonical price, USD: spot when available, else perp mark"
          },
          "marketCapUsd": {
            "type": "number",
            "description": "Market cap, USD"
          },
          "openInterestUsd": {
            "type": "number",
            "description": "Open interest, USD"
          },
          "fundingRatePct": {
            "type": "number",
            "description": "Perp funding rate in percent (0.01 = 0.01%)"
          },
          "priceChangePct24h": {
            "type": "number",
            "description": "24h price change in percentage points (5.2 = +5.2%)"
          },
          "longShortRatio24h": {
            "type": "number",
            "description": "Long/short account ratio over 24h"
          },
          "liquidation24hUsd": {
            "type": "number",
            "description": "24h liquidations, USD"
          }
        },
        "required": [
          "symbol"
        ]
      }
    }
  }
}
🟢market_top_movers

Ranked 24h gainers, losers, and trend candidates (>+5% move)

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}
🟢market_trending

Lists the currently trending cryptocurrencies

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}
🟢news_search(query)

Searches for recent news on a topic — articles, market-moving posts and exchange announcements, newest first. Each item is tagged with its kind and, where measured, the price move that followed the headline.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ]
}
🟢onchain_metrics(symbol)

On-chain TVL and network fees/revenue (24h/7d/30d) for one chain. Use a chain's own token symbol (e.g. 'ETH', 'SOL', 'BNB') — returns a plain 'not a tracked chain' message for tokens that aren't L1/L2s. Does not cover gas price (gwei).

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Chain token symbol, e.g. 'ETH' or 'SOL'"
    }
  },
  "required": [
    "symbol"
  ]
}
🟢providers_health

Reports the health of each connected data provider

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}
🟢research_opportunities(tier, limit, symbols, intervals)

Cross-sectional opportunity scan across every major and medium-cap coin at once — the screener the per-coin tools cannot be looped into safely. Two whole-universe feeds (the merged market snapshot + venue perp contexts) build a liquidity-filtered universe and rank it, then candles are fetched for a bounded shortlist only; ZERO per-symbol calls are made to the rate-limited derivatives provider, which is what lets this cover a universe without silently degrading. Up to six signals per candidate: crowding (annualized funding vs the venue-standard anchor AND its percentile across the screened universe right now — a cross-sectional read, explicitly NOT the own-history percentile research_positioning reports), stress (24h liquidations as a share of open interest — whether forced sellers already cleared), leverage (open interest as a share of market cap — the gap-through-your-stop condition), compression (4h Bollinger bandwidth ranked against the coin's own trailing window — the per-coin form of the reading research_regime computes for BTC alone; says energy is loading, never direction), trend (ADX with the +DI/-DI separation on 4h, confirmed against 1d — the vote is withheld unless the slow timeframe agrees), and location (distance from the 4h EMA20 in ATR units — an extended coin scores DOWN, because a chase is not a setup). Each signal reports its state, the numbers, and a +1/0/-1 setup-quality vote; the setup name and score come from a disclosed rule shipped with every scan. Candidates carry ATR-and-structure geometry — a resting-limit entry at the EMA20 (never at market), a stop a full 2 ATR beyond it, and a target shaded inside the first structural level — priced so it feeds risk_position_size directly. 'tier' filters major/medium/all; 'limit' caps the ranked list; 'symbols' narrows the universe to specific coins, and every symbol named there is accounted for individually in the response — selected, excluded by your own tier filter, below the liquidity floors (never screened, so no band was ever applied to it), below the tier floor, or not quoted at all — because mere absence from the ranked list conflates four different answers. Reports a board, not a forecast: the bands are disclosed constants chosen for plausibility with no backtest behind them, and 'NO CANDIDATES' is a real and frequent answer. Use it to pick what to look at, then research_positioning and ta_technicals on the two or three that stand out.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "tier": {
      "type": "string",
      "enum": [
        "major",
        "medium",
        "all"
      ],
      "description": "Size tier to screen: 'major' (market cap >= $10B), 'medium' ($300M-$10B), or 'all' (default)."
    },
    "limit": {
      "type": "integer",
      "description": "Ranked candidates to return. Default 10, max 25."
    },
    "symbols": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: narrow the universe to these coin symbols, e.g. [\"SOL\",\"AVAX\"]. Omit to screen everything that clears the tier and liquidity floors."
    },
    "intervals": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "1m",
          "5m",
          "15m",
          "30m",
          "1h",
          "4h",
          "12h",
          "1d",
          "1w"
        ]
      },
      "description": "The timeframe pair to analyse, FINEST FIRST: [fast] or [fast, slow]. Default [\"4h\",\"1d\"]. This is the most consequential argument: entry, stop, target, ATR and every AT STRUCTURE verdict are measured on the fast timeframe, so changing it produces a DIFFERENT trade rather than a refinement of the same one — on one live BTC read the 1h pair put the entry 0.2% above spot while the 1d pair put it 10.7% below, with stops of 0.77% and 3.31%. Lookbacks are counted in candles, so the swing windows scale too (30 candles is 5 days at 4h, 7 hours at 15m). The second interval only CONFIRMS the first and must be slower; pass one interval to skip confirmation, which halves the candle cost and makes the trend vote abstain."
    }
  },
  "required": []
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "coverage": {
      "type": "object",
      "description": "What the scan actually looked at — read this before treating an empty candidate list as a quiet market",
      "properties": {
        "quoted": {
          "type": "integer",
          "description": "Coins the merged market feed returned with a usable price"
        },
        "perpCovered": {
          "type": "integer",
          "description": "Coins with a venue perp context, the source of the 24h volume floor"
        },
        "screened": {
          "type": "integer",
          "description": "Every coin passing the liquidity floors — the universe every cross-sectional percentile is computed against, whatever tier or symbols were requested"
        },
        "selected": {
          "type": "integer",
          "description": "Coins left after the tier/symbol narrowing — the set the shortlist is drawn from. Equal to screened when nothing was filtered."
        },
        "major": {
          "type": "integer"
        },
        "medium": {
          "type": "integer"
        },
        "analyzed": {
          "type": "integer",
          "description": "Shortlisted coins whose candles answered"
        },
        "technicalsFailed": {
          "type": "integer",
          "description": "Shortlisted coins whose candles did not answer; their candidates carry Stage A signals only"
        },
        "priceDisagreements": {
          "type": "array",
          "description": "Shortlisted coins whose candle series was DISCARDED because its newest close disagreed with the merged market price beyond the divergence band — a stale or mismatched series (e.g. a delisted pair a venue still serves). A wrong answer, not a missing one. These candidates carry Stage A signals only and are never priced.",
          "items": {
            "type": "object",
            "properties": {
              "symbol": {
                "type": "string"
              },
              "candleCloseUsd": {
                "type": "number"
              },
              "mergePriceUsd": {
                "type": "number"
              }
            }
          }
        },
        "sources": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "fastInterval": {
          "type": "string",
          "description": "The timeframe every level in this report is measured on"
        },
        "slowInterval": {
          "type": "string",
          "description": "The confirmation timeframe; absent when only one interval was requested, in which case the trend vote abstains"
        }
      }
    },
    "requestedSymbols": {
      "type": "array",
      "description": "One entry per symbol named in the 'symbols' argument, so a symbol missing from 'candidates' can be explained. Empty when no symbols were named. A status other than 'selected' means no band was applied to that coin, so its absence says nothing about its setup.",
      "items": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "selected | tier_excluded | below_liquidity_floors | below_tier_floor | not_quoted"
          },
          "detail": {
            "type": "string",
            "description": "The numbers behind the status, with the floor each was measured against"
          }
        }
      }
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "tier": {
            "type": "string",
            "description": "major or medium"
          },
          "tierFromVolume": {
            "type": "boolean",
            "description": "True when no market-cap source answered and the tier was inferred from 24h volume instead — a weaker claim than a size tier, and those rows carry no leverage signal"
          },
          "setup": {
            "type": "string",
            "description": "TRENDING PULLBACK | COILED | SQUEEZE FUEL | EXTENDED | NO SETUP. EXTENDED is reported so it is NOT taken as an entry."
          },
          "lean": {
            "type": "string",
            "description": "long, short, or empty. A lean, never a call; COILED deliberately carries none."
          },
          "score": {
            "type": "integer",
            "description": "Plain sum of signal votes"
          },
          "priceUsd": {
            "type": "number"
          },
          "marketCapUsd": {
            "type": "number"
          },
          "change24hPct": {
            "type": "number"
          },
          "dayNotionalUsd": {
            "type": "number",
            "description": "24h perp notional volume, USD"
          },
          "timeframes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Intervals whose candles answered; empty means Stage A signals only"
          },
          "signals": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string"
                },
                "detail": {
                  "type": "string",
                  "description": "The numbers behind the state, as prose"
                },
                "metrics": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number"
                  },
                  "description": "The same numbers keyed by metric name, e.g. fundingUniversePercentile, bandwidthOwnPercentile, distanceFromEma20Atr"
                },
                "vote": {
                  "type": "integer",
                  "description": "The signal's own reading: +1 supports a defined entry, -1 argues against one, 0 informational. Not summable with research_regime or research_positioning votes."
                },
                "contribution": {
                  "type": "integer",
                  "description": "What the signal contributed to the score once the setup's side was known. Equals vote except where the signal leans against that side, when the sign flips — a reading favouring the opposite side is evidence the entry would be joining the cohort that pays."
                },
                "lean": {
                  "type": "string"
                }
              }
            }
          },
          "geometry": {
            "type": "object",
            "description": "ATR-and-structure prices, ready for risk_position_size. Absent for a setup with no priceable side (COILED) and for EXTENDED, where refusing to price a chase is the point.",
            "properties": {
              "entryUsd": {
                "type": "number",
                "description": "Resting limit at the 4h EMA20 — never the current price"
              },
              "stopUsd": {
                "type": "number"
              },
              "targetUsd": {
                "type": "number"
              },
              "rewardRisk": {
                "type": "number",
                "description": "Reported as computed, never adjusted to clear the 2:1 bar"
              },
              "stopDistancePct": {
                "type": "number",
                "description": "Stop distance as a percentage of entry"
              },
              "stopDistanceAtr": {
                "type": "number",
                "description": "Stop distance in ATR(14) units"
              },
              "targetDistanceAtr": {
                "type": "number",
                "description": "Target distance in ATR(14) units. Read alongside rewardRisk: a tight stop with a distant target prices well and still asks price to travel a long way. R:R is geometry, never expectancy."
              },
              "targetBasis": {
                "type": "string",
                "description": "The structural level the target was shaded inside, named"
              },
              "livePriceUsd": {
                "type": "number",
                "description": "The live merged market price the entry was checked against"
              },
              "entryGapAtr": {
                "type": "number",
                "description": "How far live price sits from the entry in ATR units, signed in the setup's favour: positive means the limit has not been reached yet, negative that price has passed it"
              },
              "freshness": {
                "type": "string",
                "description": "PENDING (limit not reached) | AT ENTRY (filling now) | THROUGH (passed the limit, stop still holds). Geometry is absent entirely when INVALIDATED — price is already at or beyond the stop."
              },
              "rule": {
                "type": "string"
              }
            }
          },
          "signalsComputed": {
            "type": "integer"
          },
          "signalsTotal": {
            "type": "integer"
          }
        }
      }
    },
    "rule": {
      "type": "string",
      "description": "The exact rule that produced setup and score"
    },
    "caveats": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "What the scan cannot see, stated rather than implied"
    }
  }
}
🟢research_positioning(symbol)

Deterministic positioning read for one coin — the game-state companion to research_regime, answering 'who is crowded, who is paying, who is trapped, and where'. Up to nine axes, each tagged with the market-actor cohort it reads: crowding (annualized funding vs the venue-standard 0.01%/8h anchor, long/short skew, dollars/day the majority pays to hold, crowd-vs-top-trader divergence, and cross-venue funding dispersion), buildup (24h price vs open-interest direction and the funding trend — whether positions are being added into the move or closed out), liquidity (order-book spread and imbalance — makers backing off), basis (perp vs oracle premium — spot-perp froth or hedging pressure, informational), fragility (24h liquidations as a share of market-wide open interest; the axis degrades rather than substituting a single venue's OI, since the liquidation total is cross-exchange), predation (visible Hyperliquid whale positions within 2 daily sigmas of their liquidation price, with defending book depth), trap (share of tracked whale notional underwater on the funding-paying side — attrition fuel), house book (Hyperliquid HLP LP-vault inventory, summed across its child sub-vaults — the literal venue counterparty, so the inventory it carries mirrors how traders are crowded; measured as net over its own gross book, since a market maker's net is a rounding error against venue open interest; informational), and disagreement (the most liquid matching prediction market, volume-gated, informational). Each axis reports its state, the numbers, and a +1/0/-1 fragility vote (+1 clean, -1 crowded/fragile); the stance is the disclosed sum-of-votes rule. Also returns a one-line 'farmed' synthesis (which cohort the board is currently farming, or an explicit statement that none is), focal points — reachable liquidation and breakeven price levels the whole market can see — and 'would change the call' thresholds a polling agent can watch statelessly. Reports the board, not a direction: crowding says who is paying, not where price goes. Deterministic — same inputs, same read. Call research_regime first for market context, then this per coin before sizing or timing decisions.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. \"BTC\" or \"ETH\"."
    }
  },
  "required": [
    "symbol"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string"
    },
    "stance": {
      "type": "string",
      "description": "Overall positioning-fragility label"
    },
    "stanceRule": {
      "type": "string",
      "description": "The exact rule that produced stance"
    },
    "farmed": {
      "type": "string",
      "description": "One-line synthesis of which cohort the board is currently farming. Always populated: when no cohort clears the trap/crowding/predation bars it says so explicitly and names who is paying the carry."
    },
    "axes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "detail": {
            "type": "string",
            "description": "The numbers behind the state, as prose"
          },
          "metrics": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "The same numbers keyed by metric name, e.g. annualizedFundingPct, trappedShare"
          },
          "actors": {
            "type": "string",
            "description": "The market-actor cohort(s) this axis reads — the counterparty tag"
          },
          "vote": {
            "type": "integer",
            "description": "+1 clean, -1 crowded/fragile, 0 neutral or informational"
          }
        }
      }
    },
    "focalPoints": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "priceUsd": {
            "type": "number",
            "description": "A known price level: a visible liquidation or a breakeven exit level"
          },
          "side": {
            "type": "string",
            "description": "e.g. long liquidation, short liquidation, long breakeven"
          },
          "reason": {
            "type": "string",
            "description": "The position behind the level"
          }
        }
      },
      "description": "Price levels that are common knowledge on the board, nearest to spot first"
    },
    "wouldChange": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Thresholds that would flip an axis, as prose"
    },
    "thresholds": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "metric": {
            "type": "string"
          },
          "comparator": {
            "type": "string",
            "description": ">= or <="
          },
          "value": {
            "type": "number",
            "description": "The disclosed flip threshold"
          },
          "current": {
            "type": "number",
            "description": "Where the metric stands now"
          },
          "flipsTo": {
            "type": "string",
            "description": "The state the axis flips to at the threshold"
          }
        }
      },
      "description": "The wouldChange lines in machine-readable form for stateless alerting"
    },
    "axesComputed": {
      "type": "integer"
    },
    "axesTotal": {
      "type": "integer"
    }
  }
}
🟢research_regime

Deterministic market-regime classification across seven axes: trend (Mayer Multiple bands vs the 200-day SMA), volatility (30d realized, percentile vs own history), cycle (a ~30-indicator top checklist incl. MVRV Z-Score, NUPL, Pi Cycle, AHR999), sentiment (Fear & Greed level, trajectory and percentile), leverage stress (derivatives-risk-index percentile), liquidity (7d spot-ETF net flows vs prior 7d), and rotation (Altcoin Season index, BTC dominance, ETH/BTC 30d). Each axis reports its state, the numbers behind it, and a +1/0/-1 vote; the overall posture is the disclosed sum-of-votes rule, with one exception — while 30d realized volatility sits at or below its 5th percentile the tape is compressed, trend structure stops being tradeable, and the Trend axis's vote is withheld (its reading is still reported). Compression is flagged structurally, and adds an informational, never-voting asymmetry lean naming which side is more exposed. Includes explicit 'would change the call' thresholds to watch. Rule-based and deterministic — same inputs, same read. Useful as a first call: most other signals (funding, sentiment, flows) read differently depending on this regime.

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "posture": {
      "type": "string",
      "description": "Overall risk-posture label"
    },
    "postureRule": {
      "type": "string",
      "description": "The exact rule that produced posture"
    },
    "axes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "detail": {
            "type": "string",
            "description": "The numbers behind the state"
          },
          "vote": {
            "type": "integer",
            "description": "+1 risk-on, -1 risk-off, 0 neutral"
          }
        }
      }
    },
    "asymmetry": {
      "type": "object",
      "description": "Which side is more exposed while compressed; a lean with a stated confidence, never a vote. Absent unless the tape is compressed and at least two of its inputs are meaningful",
      "properties": {
        "name": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "detail": {
          "type": "string"
        },
        "vote": {
          "type": "integer"
        }
      }
    },
    "compressed": {
      "type": "boolean",
      "description": "30d realized vol at or below its 5th percentile — while true the Trend axis contributes 0 to the posture whatever its state"
    },
    "volatilityPercentile": {
      "type": "number",
      "description": "30d realized-vol percentile vs own history; absent when no candle history was available, which is not the same as not compressed"
    },
    "wouldChange": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Thresholds that would flip an axis"
    },
    "axesComputed": {
      "type": "integer"
    },
    "axesTotal": {
      "type": "integer"
    }
  }
}
🟢research_token_view(symbol)

Aggregated single-coin dossier: market data (spot/perp price, funding, market-wide OI, long/short, liquidations — the same enriched line as market_quotes), global market context (dominance, Fear & Greed), multi-timeframe technicals computed in-house from candles (4h + 1d: RSI, EMA/SMA, MACD, ATR, Bollinger, ADX, trend — the same numbers as ta_technicals), on-chain TVL/fees (when the symbol is a tracked chain), news, a grounded narrative synthesis with citations, upcoming catalyst events, social sentiment, ETF flows, prediction-market odds, live provider coverage, and a per-section status list that distinguishes an empty section from a failed feed — for one symbol (e.g. 'ETH').

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. 'ETH' or 'BTC'"
    }
  },
  "required": [
    "symbol"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string"
    },
    "market": {
      "type": "object",
      "description": "Same shape as one market_quotes item; omitted when no provider covers the symbol"
    },
    "technicals": {
      "type": "array",
      "description": "In-house per-timeframe snapshots; same item shape as ta_technicals's timeframes. Empty when no timeframe could be analyzed.",
      "items": {
        "type": "object"
      }
    },
    "news": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "snippet": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "description": "Publish date; omitted when unknown"
          },
          "source": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "description": "Item type: article, tweet or exchange (announcement); empty when the feed doesn't say"
          },
          "coins": {
            "type": "array",
            "description": "Coin symbols the feed tagged on the item, e.g. [\"BTC\",\"ETH\"]",
            "items": {
              "type": "string"
            }
          },
          "impact": {
            "type": "object",
            "description": "Measured price move after the headline broke; omitted when not measured",
            "properties": {
              "coin": {
                "type": "string"
              },
              "pct": {
                "type": "number",
                "description": "Net move over the window, percentage points, e.g. 1.9"
              },
              "up": {
                "type": "number",
                "description": "Best move reached in the window, percentage points"
              },
              "down": {
                "type": "number",
                "description": "Worst move reached in the window, percentage points"
              },
              "windowMs": {
                "type": "number",
                "description": "Measurement window in milliseconds, e.g. 3600000"
              }
            }
          }
        }
      }
    },
    "narrative": {
      "type": "object",
      "properties": {
        "answer": {
          "type": "string"
        },
        "citations": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "catalysts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "coins": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "eventDate": {
            "type": "string"
          },
          "dateAdded": {
            "type": "string"
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source": {
            "type": "string"
          }
        }
      }
    },
    "marketContext": {
      "type": "object",
      "description": "Same shape as market_overview"
    },
    "onChain": {
      "type": "object",
      "properties": {
        "chainName": {
          "type": "string"
        },
        "tvlUsd": {
          "type": "number",
          "description": "Total value locked, USD"
        },
        "fees24hUsd": {
          "type": "number"
        },
        "fees7dUsd": {
          "type": "number"
        },
        "fees30dUsd": {
          "type": "number"
        },
        "feesChangePct24h": {
          "type": "number",
          "description": "24h fees change, percentage points"
        }
      }
    },
    "social": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "galaxyScore": {
          "type": "number",
          "description": "0-100 composite"
        },
        "altRank": {
          "type": "number",
          "description": "1-based rank, lower is stronger"
        },
        "sentimentPct": {
          "type": "number",
          "description": "Bullish share, percentage points"
        },
        "socialVolume24h": {
          "type": "number"
        },
        "socialDominancePct": {
          "type": "number",
          "description": "Share of total crypto social volume, percentage points"
        },
        "interactions24h": {
          "type": "number"
        }
      }
    },
    "etfFlow": {
      "type": "object",
      "properties": {
        "asset": {
          "type": "string"
        },
        "dateMs": {
          "type": "integer",
          "description": "Flow date, Unix epoch milliseconds"
        },
        "asOfAt": {
          "type": "string",
          "description": "Flow date, ISO-8601 UTC"
        },
        "ageHours": {
          "type": "number",
          "description": "How old the flow date is now, in hours. ETF flows settle behind spot and skip weekends, so this is routinely >24."
        },
        "stale": {
          "type": "boolean",
          "description": "True when the flow date is more than 96h old — the series has missed a publication"
        },
        "totalFlowUsd": {
          "type": "number",
          "description": "Net flow across all funds, USD (positive = inflow)"
        },
        "priceUsd": {
          "type": "number",
          "description": "The underlying's price ON THE FLOW DATE, not spot — compare against ageHours before reading it as current"
        },
        "byTicker": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ticker": {
                "type": "string"
              },
              "flowUsd": {
                "type": "number",
                "description": "Per-fund net flow, USD"
              }
            }
          }
        }
      }
    },
    "predictionMarkets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string"
          },
          "outcomes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "outcome": {
                  "type": "string"
                },
                "probability": {
                  "type": "number",
                  "description": "Market-implied probability, 0-1"
                }
              }
            }
          },
          "volumeUsd": {
            "type": "number"
          },
          "liquidityUsd": {
            "type": "number"
          },
          "endDate": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "source": {
            "type": "string"
          }
        }
      }
    },
    "sections": {
      "type": "array",
      "description": "Per-section outcome, so an empty section can be told apart from a failed feed. Check this before reading an empty array as a real absence.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Section key, e.g. news, narrative, catalysts"
          },
          "status": {
            "type": "string",
            "description": "ok, empty (feed answered, nothing for this symbol), not_applicable, or unavailable (feed failed)"
          },
          "reason": {
            "type": "string",
            "description": "Present for not_applicable and unavailable"
          }
        }
      }
    },
    "providerCoverage": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "description": "healthy, degraded, or offline"
          },
          "reason": {
            "type": "string",
            "description": "Present only when degraded or offline"
          }
        }
      }
    }
  },
  "required": [
    "symbol"
  ]
}
🟢risk_position_size(account_size, risk_percent, entry, stop, target)

Fixed-fractional position sizing — a local calculation, not a data-provider lookup. Given account_size, risk_percent, entry and stop, returns position size in units, notional, implied leverage, stop distance, and — if a target is given — the reward:risk ratio. Direction (long/short) is inferred from the stop's side of entry. Deterministic: same inputs always give the same result.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "account_size": {
      "type": "number",
      "description": "Total account equity in USD"
    },
    "risk_percent": {
      "type": "number",
      "description": "Percent of the account to risk if the stop is hit, e.g. 1 for 1%"
    },
    "entry": {
      "type": "number",
      "description": "Planned entry price"
    },
    "stop": {
      "type": "number",
      "description": "Stop-loss price (below entry = long, above = short)"
    },
    "target": {
      "type": "number",
      "description": "Optional take-profit price, used only to report reward:risk"
    }
  },
  "required": [
    "account_size",
    "risk_percent",
    "entry",
    "stop"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "direction": {
      "type": "string",
      "description": "long or short, inferred from the stop's side of entry"
    },
    "riskAmountUsd": {
      "type": "number",
      "description": "Risk budget, USD"
    },
    "riskPerUnitUsd": {
      "type": "number",
      "description": "Risk per unit (|entry-stop|), USD"
    },
    "stopDistancePct": {
      "type": "number",
      "description": "Stop distance from entry in percentage points"
    },
    "positionSizeUnits": {
      "type": "number",
      "description": "Position size in base-asset units"
    },
    "positionNotionalUsd": {
      "type": "number",
      "description": "Position notional, USD"
    },
    "impliedLeverage": {
      "type": "number",
      "description": "Notional / account equity as a multiple (3.5 = 3.5x)"
    },
    "rewardRiskRatio": {
      "type": "number",
      "description": "Reward:risk ratio; omitted when no target was given"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "direction",
    "riskAmountUsd",
    "positionSizeUnits",
    "positionNotionalUsd"
  ]
}
🟢sentiment_fear_greed

Current market-wide Fear & Greed index (0-100 plus label), updated roughly every 15 minutes. A macro sentiment gauge; use market_overview for the full market snapshot.

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}
🟢sentiment_social(symbol)

Social-sentiment snapshot for one coin: galaxy score (0-100 composite), alt rank (lower is stronger), bullish sentiment %, 24h social volume, social dominance %, and 24h interactions.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. \"BTC\"."
    }
  },
  "required": [
    "symbol"
  ]
}
🟢sentiment_twitter(query, latest, minLikes, limit)

Searches Twitter/X and returns matching tweets with engagement (likes, retweets, replies, views) and author reach (followers, verified). Raw crowd voice for judging social sentiment on a coin or topic. Sorted by relevance; set latest=true for the newest tweets instead.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search keywords, $cashtag or #hashtag, e.g. \"$BTC\" or \"bitcoin etf\"."
    },
    "latest": {
      "type": "boolean",
      "description": "Return the newest tweets instead of top-relevance. Defaults to false."
    },
    "minLikes": {
      "type": "integer",
      "description": "Only tweets with at least this many likes. Useful for cutting spam in top-relevance mode; avoid combining with latest=true (brand-new tweets have no likes yet, so it returns nothing). Defaults to 0."
    },
    "limit": {
      "type": "integer",
      "description": "Max tweets to return (1-50). Defaults to 10."
    }
  },
  "required": [
    "query"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "tweets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "author": {
            "type": "string",
            "description": "Author screen name (without @)"
          },
          "authorName": {
            "type": "string"
          },
          "authorFollowers": {
            "type": "number"
          },
          "authorVerified": {
            "type": "boolean"
          },
          "text": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "description": "ISO 8601; empty when the venue omits it"
          },
          "likes": {
            "type": "number"
          },
          "retweets": {
            "type": "number"
          },
          "replies": {
            "type": "number"
          },
          "views": {
            "type": "number"
          }
        }
      }
    }
  }
}
🟢ta_technicals(symbol, intervals, market)

Multi-timeframe technical-analysis snapshot for one coin, computed locally from real candles (not a vendor black box): per interval — last close, RSI(14), EMA20/50/200 + SMA200, MACD(12,26,9) with signal/histogram/cross freshness, ATR(14) with 2xATR stop suggestions (feed risk_position_size), Bollinger(20,2) with %B and bandwidth, ADX(14) with +DI/-DI, volume vs 20-candle average, and a transparent trend rule (EMA alignment qualified by ADX). 'intervals' picks the timeframes (default 1h,4h,1d; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w); 'market' routes candles (spot|perp|auto, default auto: spot preferred, perp fallback). AltFINS vendor support/resistance levels are appended when that feed is up.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "description": "Coin symbol, e.g. 'ETH' or 'BTC'"
    },
    "intervals": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Candle intervals to analyze, e.g. [\"4h\",\"1d\"]. Default [\"1h\",\"4h\",\"1d\"]; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w"
    },
    "market": {
      "type": "string",
      "description": "Which candle series: 'spot', 'perp', or 'auto' (default: spot preferred, perp fallback)"
    }
  },
  "required": [
    "symbol"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string"
    },
    "lastPriceUsd": {
      "type": "number",
      "description": "Newest close of the finest analyzed timeframe"
    },
    "timeframes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "interval": {
            "type": "string"
          },
          "market": {
            "type": "string",
            "description": "'spot' or 'perp' — series actually delivered"
          },
          "source": {
            "type": "string",
            "description": "Candle provider that answered"
          },
          "closedCandles": {
            "type": "integer"
          },
          "droppedPartialCandle": {
            "type": "boolean",
            "description": "True when a still-forming newest candle was excluded"
          },
          "asOfMs": {
            "type": "integer",
            "description": "Open time of the newest closed candle, Unix epoch ms"
          },
          "asOfAt": {
            "type": "string",
            "description": "Same instant, ISO-8601 UTC"
          },
          "lastCloseUsd": {
            "type": "number"
          },
          "rsi14": {
            "type": "number",
            "description": "Wilder RSI, 0-100; omitted without 15 closed candles"
          },
          "ema20Usd": {
            "type": "number"
          },
          "ema50Usd": {
            "type": "number"
          },
          "ema200Usd": {
            "type": "number"
          },
          "sma200Usd": {
            "type": "number"
          },
          "macd": {
            "type": "object",
            "properties": {
              "macd": {
                "type": "number"
              },
              "signal": {
                "type": "number"
              },
              "histogram": {
                "type": "number",
                "description": "macd - signal; sign is the cross state"
              },
              "aboveSignal": {
                "type": "boolean"
              },
              "candlesSinceCross": {
                "type": "integer",
                "description": "1 = crossed on the newest closed candle; omitted when no cross in window"
              }
            }
          },
          "atr14Usd": {
            "type": "number",
            "description": "Wilder ATR(14), USD"
          },
          "atr14Pct": {
            "type": "number",
            "description": "ATR(14) as % of last close — stop-sizing form"
          },
          "bollinger": {
            "type": "object",
            "properties": {
              "middleUsd": {
                "type": "number"
              },
              "upperUsd": {
                "type": "number"
              },
              "lowerUsd": {
                "type": "number"
              },
              "percentB": {
                "type": "number",
                "description": "Close inside the band: 0 = lower, 1 = upper"
              },
              "bandwidthPct": {
                "type": "number",
                "description": "Band width as % of middle — squeeze measure"
              }
            }
          },
          "adx14": {
            "type": "number",
            "description": ">=25 trending, 20-25 developing, <20 rangebound"
          },
          "plusDi14": {
            "type": "number"
          },
          "minusDi14": {
            "type": "number"
          },
          "volumeLastClosedUsd": {
            "type": "number"
          },
          "volumeAvg20Usd": {
            "type": "number"
          },
          "trend": {
            "type": "string",
            "description": "Transparent rule: EMA alignment qualified by ADX"
          }
        }
      }
    },
    "failedIntervals": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Intervals that could not be analyzed, with reasons"
    },
    "altFins": {
      "type": "object",
      "description": "Vendor levels enrichment; omitted when the AltFINS feed is down",
      "properties": {
        "supportLevelsUsd": {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "resistanceLevelsUsd": {
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "shortTermTrend": {
          "type": "string"
        },
        "mediumTermTrend": {
          "type": "string"
        },
        "longTermTrend": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "symbol",
    "lastPriceUsd",
    "timeframes"
  ]
}
🟢utc_time

Returns the current UTC time in ISO 8601 format. Use it to anchor 'now' — e.g. to judge how stale a generatedAt timestamp or news date is.

Eingabe-Schema

{
  "type": "object",
  "properties": {}
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet30 Tools
fehlgeschlagene BeobachtungVersion nicht aufgezeichnet—
verifiziertVersion nicht aufgezeichnet30 Tools