MCPサーバー

Crypto Data & Market Analysis Agent

io.github.dopionut-jpg/crypto-data-market-analysis

このMCPでできること

Provides live cryptocurrency markets, derivatives, on-chain activity, DeFi, sentiment, macroeconomic data, execution costs, and deterministic market briefs.

get_btc_network
Live Bitcoin network health: hashrate, difficulty, transaction count, estimated volume, miner revenue and the largest recent mempool transactions (>10 BTC). Call for on-chain Bitcoin activity. Miner revenue is null when the source stops publishing it, never a misleading zero.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'properties': {'hashRate': {'type': 'number'}, 'difficulty': {'type': 'number'}, 'txCount24h': {'type': 'number'}, 'marketPrice': {'type': 'number'}, 'tradeVolumeUsd': {'type': 'number'}, 'btcLargeMempool': {'type': 'array', 'items': {'type': 'object', 'required': ['txHash', 'totalBtc', 'timestamp'], 'properties': {'txHash': {'type': 'string'}, 'totalBtc': {'type': 'number'}, 'timestamp': {'type': 'number'}}}, 'description': 'Largest transactions currently waiting in the mempool.'}, 'minersRevenueUsd': {'type': ['number', 'null'], 'description': 'null when the source does not publish it. Never 0 - miner revenue cannot be zero while blocks are produced.'}, 'estimatedTxVolumeUsd': {'type': 'number'}}}
get_crypto_market
Live crypto prices and market data: spot price, market cap, 24h volume and change for any coins (Bitcoin, Ethereum, Solana, altcoins). Call for any price, market cap or volume question.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'description': "Coin IDs as lowercase slugs, e.g. ['bitcoin','ethereum','solana']"}, 'vs_currency': {'type': 'string', 'description': "Quote currency, defaults to 'usd'"}}}
出力スキーマ
{'type': 'object', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'symbol', 'name', 'price'], 'properties': {'id': {'type': 'string', 'description': 'Coin id, e.g. `bitcoin`.'}, 'name': {'type': 'string'}, 'price': {'type': 'number'}, 'symbol': {'type': 'string'}, 'change7d': {'type': ['number', 'null'], 'description': 'Percent.'}, 'change24h': {'type': ['number', 'null'], 'description': 'Percent.'}, 'marketCap': {'type': ['number', 'null']}, 'volume24h': {'type': ['number', 'null']}}}}}}
get_crypto_news
Recent crypto headlines for narrative context and catalysts. Summarize in your own words with attribution to the reporting outlet; do not reproduce articles.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'source', 'url', 'publishedAt'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'summary': {'type': 'string'}, 'publishedAt': {'type': 'string'}}}, 'description': 'Recent headlines, newest first. Summaries are our own words, not article text.'}}}
get_defi_overview
Live DeFi overview: total value locked (TVL), top chains by TVL and stablecoin market cap. Call for DeFi flows, liquidity and dry powder, or risk-on/risk-off reads.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['totalTvl', 'topChains'], 'properties': {'totalTvl': {'type': 'number', 'description': 'Total value locked across DeFi, in USD.'}, 'topChains': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'tvl'], 'properties': {'tvl': {'type': 'number'}, 'name': {'type': 'string'}}}}, 'stablecoinMarketCap': {'type': ['number', 'null'], 'description': 'Dry powder waiting on the sidelines.'}}}
get_derivatives
Venue-by-venue breakdown for a single coin: what each major liquid venue — Binance, Bybit, OKX and Hyperliquid, the largest perpetual DEX — shows for funding and open interest, taken from that venue's largest-open-interest perpetual. Returns the per-venue rows plus the average funding, total open interest in USD and the funding spread. Reach for this when divergence between venues matters — one venue far more positive or negative than the rest signals localised positioning rather than market consensus. Takes one coin only; to sweep several at once, call get_derivatives_aggregate. Funding is returned in PERCENT per 8 hours (0.0061 means 0.0061%, not 0.61%) and also ANNUALIZED as a percent per year, so it can be compared directly against any other yield; open interest is in USD. Errors if the coin has no major-venue data. Current snapshot.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['symbol'], 'properties': {'symbol': {'type': 'string', 'description': 'Coin or pair, e.g. BTC, BTCUSDT, ETH'}}}
出力スキーマ
{'type': 'object', 'required': ['coin', 'perExchange', 'exchangeCount'], 'properties': {'coin': {'type': 'string'}, 'perExchange': {'type': 'array', 'items': {'type': 'object', 'required': ['exchange'], 'properties': {'exchange': {'enum': ['Binance', 'Bybit', 'OKX', 'Hyperliquid'], 'type': 'string', 'description': 'Venue name. Hyperliquid is the only DEX in the set; its native hourly funding is already converted to the same percent-per-8h unit as the others.'}, 'fundingRate': {'type': ['number', 'null'], 'description': 'Percent per 8 hours.'}, 'openInterestUsd': {'type': ['number', 'null']}}}, 'description': "Per-venue breakdown, from each venue's largest-open-interest perpetual."}, 'exchangeCount': {'type': 'number', 'description': 'How many major venues backed the numbers.'}, 'fundingSpread': {'type': ['number', 'null'], 'description': 'Highest minus lowest venue funding. A wide spread marks localised positioning.'}, 'avgFundingRate': {'type': ['number', 'null'], 'description': 'Percent per 8 hours. 0.0067 means 0.0067%, not 0.67%.'}, 'totalOpenInterestUsd': {'type': ['number', 'null'], 'description': 'Summed across the major venues.'}, 'avgFundingAnnualizedPct': {'type': ['number', 'null'], 'description': 'The same funding as a yearly percentage, comparable to any other yield.'}}}
get_derivatives_aggregate
Watchlist sweep over up to 10 coins in one call: the headline funding and open interest figures per coin — average funding, total open interest in USD, funding spread — with no per-venue rows, which keeps the response compact enough to compare positioning across a basket. Costs a single upstream call no matter how many coins you request, so prefer it over repeated single-coin calls. Figures come from the major liquid venues — Binance, Bybit, OKX and Hyperliquid; thin venues are excluded, since their outlier rates would otherwise distort the average by an order of magnitude. Coins with no major-venue data are listed in "unavailable" instead of failing the whole request. Reach for get_derivatives instead when you need the per-venue detail on one coin. Funding is returned in PERCENT per 8 hours (0.0061 means 0.0061%, not 0.61%) and also ANNUALIZED as a percent per year — 0.0067% per 8h is 7.3% a year, which says immediately whether a long is paying more than a bond yields. Open interest is in USD. Current snapshot.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'coins': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Base coins, e.g. ["BTC","ETH","SOL"]. Maximum 10. Defaults to BTC and ETH.'}}}
出力スキーマ
{'type': 'object', 'required': ['coins', 'unavailable'], 'properties': {'coins': {'type': 'array', 'items': {'type': 'object', 'required': ['coin', 'exchangeCount'], 'properties': {'coin': {'type': 'string'}, 'exchangeCount': {'type': 'number', 'description': 'How many major venues backed the numbers.'}, 'fundingSpread': {'type': ['number', 'null'], 'description': 'Highest minus lowest venue funding. A wide spread marks localised positioning.'}, 'avgFundingRate': {'type': ['number', 'null'], 'description': 'Percent per 8 hours. 0.0067 means 0.0067%, not 0.67%.'}, 'totalOpenInterestUsd': {'type': ['number', 'null'], 'description': 'Summed across the major venues.'}, 'avgFundingAnnualizedPct': {'type': ['number', 'null'], 'description': 'The same funding as a yearly percentage, comparable to any other yield.'}}}}, 'unavailable': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Requested coins with no major-venue perpetual. Never silently dropped.'}}}
get_economic_calendar
Scheduled macro events (CPI, PCE, NFP / Employment Situation, GDP, Retail Sales, FOMC) from the official US release calendar. Call for upcoming economic catalysts. Returns the scheduled date and indicator, not analyst consensus.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'days': {'type': 'number', 'description': 'How many days ahead to cover, defaults to 14'}}}
出力スキーマ
{'type': 'object', 'required': ['result'], 'properties': {'result': {'type': 'array', 'items': {'type': 'object', 'required': ['event', 'country', 'time', 'impact'], 'properties': {'time': {'type': 'string'}, 'event': {'type': 'string'}, 'actual': {'type': ['number', 'null'], 'description': 'Null until the release lands.'}, 'impact': {'type': 'string'}, 'country': {'type': 'string'}, 'estimate': {'type': ['number', 'null']}, 'previous': {'type': ['number', 'null']}}}, 'description': 'Scheduled macro releases ahead, soonest first.'}}}
get_eth_address
Ethereum address activity: ETH balance plus recent large transfers in and out. Call when a specific wallet or exchange address is named and needs to be tracked.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['address'], 'properties': {'address': {'type': 'string', 'description': 'Ethereum address (0x...)'}}}
出力スキーマ
{'type': 'object', 'required': ['address', 'balanceEth', 'recentLargeTransfers'], 'properties': {'address': {'type': 'string'}, 'balanceEth': {'type': 'number'}, 'recentLargeTransfers': {'type': 'array', 'items': {'type': 'object', 'required': ['hash', 'from', 'to', 'valueEth', 'timestamp', 'direction'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'hash': {'type': 'string'}, 'valueEth': {'type': 'number'}, 'direction': {'enum': ['in', 'out'], 'type': 'string'}, 'timestamp': {'type': 'number', 'description': 'Unix seconds.'}}}, 'description': 'Transfers above 1 ETH, newest first.'}}}
get_eth_whale_flows
Large ETH transfers (>100 ETH) to and from live exchange hot wallets (Binance, Coinbase, Bitfinex) in the last 2 hours. Inflows to exchanges suggest potential selling pressure, outflows suggest accumulation. Call for smart-money signals and exchange flows. Wallets that could not be read are listed under "unavailable" rather than dropped, so an empty result is never mistaken for a quiet market. The response also states how far back each wallet could actually be read: the busiest exchange wallets produce thousands of transfers an hour, and a tool that silently sees only the last few minutes of one reports calm that was never measured.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['flows', 'windowMinutes', 'coverage', 'unavailable'], 'properties': {'flows': {'type': 'array', 'items': {'type': 'object', 'required': ['exchange', 'valueEth', 'direction', 'timestamp', 'hash'], 'properties': {'hash': {'type': 'string'}, 'exchange': {'type': 'string'}, 'valueEth': {'type': 'number'}, 'direction': {'enum': ['in', 'out'], 'type': 'string', 'description': '`in` is flow toward the exchange (distribution pressure), `out` is away.'}, 'timestamp': {'type': 'number', 'description': 'Unix seconds.'}, 'counterparty': {'type': 'string', 'description': 'The non-exchange side of the transfer.'}}}, 'description': 'Large ETH transfers to and from known exchange wallets, largest first.'}, 'coverage': {'type': 'array', 'items': {'type': 'object', 'required': ['exchange', 'minutesCovered', 'truncated'], 'properties': {'exchange': {'type': 'string'}, 'truncated': {'type': 'boolean', 'description': 'true means the wallet is too busy for a single page, so older transfers in the window were not seen.'}, 'minutesCovered': {'type': 'number'}}}, 'description': 'How much of that window each wallet could actually be read back over. A busy wallet can exhaust one page before reaching the far end.'}, 'unavailable': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Exchange wallets that could not be read. An empty flows list with entries here means nothing was read, not that nothing moved.'}, 'windowMinutes': {'type': 'number', 'description': 'The window asked for, in minutes.'}}}
get_execution_cost
What a given trade size actually costs to execute right now, walked through the live order books of Bybit and OKX. Every other tool here reports where price is; this one reports the price YOU would get at YOUR size. Returns, per requested notional and separately for buying and selling: the average fill price, slippage against mid in basis points AND in dollars, the spread, the depth sitting within 1% of mid, and which venue is cheapest for that size. The floor is half the spread; anything above it is the size eating through levels. A size the book cannot absorb comes back as "filled": false with the amount that could actually be filled, never an extrapolated price. This is the number that decides whether a correct thesis still makes money after costs.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['coin'], 'properties': {'coin': {'type': 'string', 'description': 'Coin symbol, e.g. "BTC", "ETH", "SOL". The USDT perpetual is read.'}, 'sizesUsd': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Trade sizes to price, in US dollars. Defaults to 10000, 50000 and 250000. At most five.'}}}
出力スキーマ
{'type': 'object', 'required': ['coin', 'sizesUsd', 'venues', 'unavailable', 'cheapest'], 'properties': {'coin': {'type': 'string'}, 'venues': {'type': 'array', 'items': {'type': 'object', 'required': ['venue', 'symbol', 'mid', 'spreadBps', 'buy', 'sell'], 'properties': {'buy': {'type': 'array', 'items': {'type': 'object', 'required': ['notionalUsd', 'filledUsd', 'avgPrice', 'slippageBps', 'costUsd', 'filled'], 'properties': {'filled': {'type': 'boolean', 'description': 'false means the book ran out before the requested size; the price is NOT extrapolated.'}, 'costUsd': {'type': 'number', 'description': 'The same cost in dollars.'}, 'avgPrice': {'type': 'number', 'description': 'Volume-weighted price the order would actually get.'}, 'filledUsd': {'type': 'number', 'description': 'How much of the size the book could actually absorb. Equals notionalUsd only when filled is true.'}, 'notionalUsd': {'type': 'number'}, 'slippageBps': {'type': 'number', 'description': 'Cost against mid in basis points. Always positive, for buys and sells alike.'}}}}, 'mid': {'type': 'number'}, 'sell': {'type': 'array', 'items': {'type': 'object', 'required': ['notionalUsd', 'filledUsd', 'avgPrice', 'slippageBps', 'costUsd', 'filled'], 'properties': {'filled': {'type': 'boolean', 'description': 'false means the book ran out before the requested size; the price is NOT extrapolated.'}, 'costUsd': {'type': 'number', 'description': 'The same cost in dollars.'}, 'avgPrice': {'type': 'number', 'description': 'Volume-weighted price the order would actually get.'}, 'filledUsd': {'type': 'number', 'description': 'How much of the size the book could actually absorb. Equals notionalUsd only when filled is true.'}, 'notionalUsd': {'type': 'number'}, 'slippageBps': {'type': 'number', 'description': 'Cost against mid in basis points. Always positive, for buys and sells alike.'}}}}, 'venue': {'enum': ['Bybit', 'OKX'], 'type': 'string'}, 'levels': {'type': 'object', 'properties': {'asks': {'type': 'number'}, 'bids': {'type': 'number'}}}, 'symbol': {'type': 'string'}, 'bestAsk': {'type': 'number'}, 'bestBid': {'type': 'number'}, 'spreadBps': {'type': 'number', 'description': 'Quoted spread in basis points. Half of it is the floor for any slippage.'}, 'askDepthUsd': {'type': 'number'}, 'bidDepthUsd': {'type': 'number', 'description': 'Notional resting within bandPct of mid on the bid side, in USD.'}}}}, 'bandPct': {'type': 'number', 'description': 'Half-width of the depth band around mid, in percent.'}, 'cheapest': {'type': 'array', 'items': {'type': 'object', 'required': ['notionalUsd', 'buyVenue', 'sellVenue'], 'properties': {'buyVenue': {'type': ['string', 'null']}, 'sellVenue': {'type': ['string', 'null']}, 'notionalUsd': {'type': 'number'}, 'buySlippageBps': {'type': ['number', 'null']}, 'sellSlippageBps': {'type': ['number', 'null']}}}, 'description': 'Per requested size, the venue with the lowest slippage among those that can fill it.'}, 'sizesUsd': {'type': 'array', 'items': {'type': 'number'}}, 'unavailable': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Venues with no usable book for this coin. Never dropped silently.'}, 'unavailableDetail': {'type': 'array', 'items': {'type': 'object', 'required': ['venue', 'reason'], 'properties': {'venue': {'type': 'string'}, 'reason': {'type': 'string'}}}, 'description': 'The same venues with the reason each one failed, so a missing venue is diagnosable.'}}}
get_fear_greed
Crypto Fear & Greed Index: current and previous value plus classification (Extreme Fear to Extreme Greed), with recent history. Best used as a contrarian sentiment signal, not on its own.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['value', 'classification', 'history'], 'properties': {'value': {'type': 'number', 'description': '0-100. Low is fear, high is greed.'}, 'history': {'type': 'array', 'items': {'type': 'object', 'required': ['time', 'value'], 'properties': {'time': {'type': 'number'}, 'value': {'type': 'number'}}}}, 'previousValue': {'type': ['number', 'null']}, 'classification': {'type': 'string'}, 'previousClassification': {'type': ['string', 'null']}}}
get_implied_volatility
How far the market EXPECTS price to move, priced off options (the DVOL index). Every other derivatives tool here describes how the market is POSITIONED; this one prices how expensive protection is. Returns the current 30-day implied volatility, annualized, in PERCENT (34.95 means 34.95%), together with its min, median, max and PERCENTILE over the window — an IV of 35% says nothing alone, but at the 5th percentile of the last month it says optionality is cheap and the market is complacent. Also returns the derived expected move (plus or minus percent over 1, 7 and 30 days), which scales with the square root of time, not linearly: dividing annualized IV by 365 instead of by the root understates a one-day move roughly nineteenfold. Distinct from the VIX reported by get_macro_rates, which is US equity volatility, not crypto. Published for BTC and ETH only; any other coin comes back under "unavailable" rather than failing the request.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'coins': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Coins, e.g. ["BTC","ETH"]. Defaults to both. Only BTC and ETH have a published index.'}, 'windowDays': {'type': 'number', 'description': 'How many days the percentile distribution covers. Defaults to 30, maximum 365.'}}}
出力スキーマ
{'type': 'object', 'required': ['windowDays', 'coins', 'unavailable'], 'properties': {'coins': {'type': 'array', 'items': {'type': 'object', 'required': ['coin', 'current', 'percentile', 'samples'], 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}, 'coin': {'type': 'string'}, 'median': {'type': 'number'}, 'current': {'type': 'number', 'description': '30-day implied volatility, annualized, in percent. 34.95 means 34.95%, not 0.3495.'}, 'samples': {'type': 'number', 'description': 'Measurements backing the distribution.'}, 'percentile': {'type': 'number', 'description': '0-100. Where `current` sits in its own distribution over the window.'}, 'expectedMove1d': {'type': 'number', 'description': 'Expected move over 1 day, plus or minus percent. Scales with sqrt(time).'}, 'expectedMove7d': {'type': 'number'}, 'expectedMove30d': {'type': 'number'}}}}, 'windowDays': {'type': 'number'}, 'unavailable': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Requested coins with no published volatility index. Never silently dropped.'}}}
get_macro_rates
Live US macro data with the derived signals, not just the raw levels: Fed funds rate, 2Y and 10Y Treasury yields plus the 2s10s YIELD CURVE SPREAD (with its direction — steepening or flattening — and an inverted flag), CPI inflation year-over-year, the broad trade-weighted dollar index (a different index from the ICE dollar index, so read its direction rather than comparing its level), VIX and M2 money supply. Every series carries its previous reading, so direction is available without a second call. The curve slope, not the level of any single yield, is the liquidity and cycle signal: inversion has preceded every US recession, and re-steepening out of an inversion usually marks the start of easing — the moment that matters for risk assets. VIX explains crypto drawdowns that have no crypto-native cause.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'properties': {'m2': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'vix': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'ust2y': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'cpiYoY': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'ust10y': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'fedFunds': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'dollarIndex': {'type': ['object', 'null'], 'required': ['value', 'date'], 'properties': {'date': {'type': 'string', 'description': 'ISO date of the observation.'}, 'value': {'type': 'number'}, 'previous': {'type': ['number', 'null'], 'description': 'Prior observation, for direction.'}}}, 'yieldCurve2s10s': {'type': ['object', 'null'], 'required': ['value', 'inverted'], 'properties': {'value': {'type': 'number'}, 'inverted': {'type': 'boolean'}, 'previous': {'type': ['number', 'null']}, 'direction': {'enum': ['steepening', 'flattening', 'flat', None], 'type': ['string', 'null']}}, 'description': '10Y minus 2Y. Inversion has preceded every recent US recession.'}}}
get_market_brief
The verdict in one call, not the ingredients. Composes positioning (funding and open interest with their percentiles), sentiment, implied volatility, the macro regime and the cost of execution into a single stance — risk-on, risk-off, fragile or neutral — with a confidence level, the signals that produced it and what would invalidate it. The rules are DETERMINISTIC, not a model opinion: the same numbers always give the same verdict, and every driver is returned with its value and its reading, so any part of it can be argued with rather than taken on faith. "Fragile" is a state rather than a direction: crowded positioning TOGETHER WITH cheap implied volatility, meaning the market is leaning one way and paying almost nothing for protection. A source that fails lowers confidence and is named under "missing" instead of being counted as a neutral zero. Percentile context exists only for BTC; for other coins the level is reported without the crowded label.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'coin': {'type': 'string', 'description': 'Coin, e.g. "BTC" (default), "ETH", "SOL".'}, 'sizeUsd': {'type': 'number', 'description': 'Trade size the execution cost is measured at, in US dollars. Defaults to 100000.'}}}
出力スキーマ
{'type': 'object', 'required': ['coin', 'asOf', 'stance', 'confidence', 'verdict', 'drivers', 'invalidation', 'missing'], 'properties': {'asOf': {'type': 'string', 'description': 'ISO timestamp the brief was computed at.'}, 'coin': {'type': 'string'}, 'stance': {'enum': ['risk-on', 'risk-off', 'fragile', 'neutral'], 'type': 'string', 'description': 'fragile is a state, not a direction: crowded positioning together with cheap implied volatility.'}, 'drivers': {'type': 'array', 'items': {'type': 'object', 'required': ['signal', 'value', 'reading', 'direction'], 'properties': {'value': {'type': 'string'}, 'signal': {'type': 'string'}, 'reading': {'type': 'string'}, 'direction': {'type': 'number', 'description': '-1 toward risk, +1 toward support, 0 relevant but neutral.'}}}, 'description': 'Every signal that fed the verdict, so it can be argued with instead of taken on faith.'}, 'missing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Sources that did not answer. A missing signal is never counted as a neutral one.'}, 'verdict': {'type': 'string', 'description': 'The read in one or two sentences.'}, 'tradeable': {'type': ['object', 'null'], 'properties': {'venue': {'type': 'string'}, 'costBps': {'type': 'number'}, 'sizeUsd': {'type': 'number'}}, 'description': 'null when no venue could be read.'}, 'confidence': {'enum': ['low', 'medium', 'high'], 'type': 'string'}, 'invalidation': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Concrete, numeric conditions that would make this verdict wrong.'}}}
get_market_dominance
Crypto market dominance: BTC.D, ETH.D and USDT.D as a percentage of total crypto market cap. Use as a regime filter (risk-on/off) and a BTC vs altcoin rotation signal.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'properties': {'btcDominance': {'type': ['number', 'null']}, 'ethDominance': {'type': ['number', 'null']}, 'usdtDominance': {'type': ['number', 'null']}}, 'description': 'Share of total crypto market cap, in percent.'}
get_market_history
Where the current reading sits in its own recent distribution, from a series captured every ~10 minutes: funding, open interest, Fear & Greed and BTC dominance, each as current, median, min, max and percentile over the window. This is the one question a snapshot cannot answer — "is funding high right now?" has no absolute answer, only one relative to where it has been. A percentile near 0 means the reading is at the low end of the window, near 100 the high end. Check "samples" before trusting the percentile: a window with few measurements is not a distribution. Window defaults to 24 hours, maximum 168. Funding is in percent per 8 hours.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {'hours': {'type': 'number', 'description': 'How many hours back the window covers. Defaults to 24, maximum 168.'}}}
出力スキーマ
{'type': 'object', 'required': ['windowHours', 'samples', 'from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'funding': {'type': 'object', 'required': ['current', 'median', 'min', 'max', 'percentile'], 'properties': {'max': {'type': ['number', 'null']}, 'min': {'type': ['number', 'null']}, 'median': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null']}, 'samples': {'type': 'number', 'description': "How many measurements back these numbers. Lower than the window's total when the series has gaps â\x80\x94 or, for open interest, when older readings came from a different set of venues and are therefore not comparable."}, 'percentile': {'type': ['number', 'null'], 'description': '0-100. Where `current` sits among the samples.'}}, 'description': 'Current reading placed in its own distribution over the window.'}, 'samples': {'type': 'number', 'description': 'Snapshots in the window, captured every ~10 minutes.'}, 'fearGreed': {'type': 'object', 'required': ['current', 'median', 'min', 'max', 'percentile'], 'properties': {'max': {'type': ['number', 'null']}, 'min': {'type': ['number', 'null']}, 'median': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null']}, 'samples': {'type': 'number', 'description': "How many measurements back these numbers. Lower than the window's total when the series has gaps â\x80\x94 or, for open interest, when older readings came from a different set of venues and are therefore not comparable."}, 'percentile': {'type': ['number', 'null'], 'description': '0-100. Where `current` sits among the samples.'}}, 'description': 'Current reading placed in its own distribution over the window.'}, 'windowHours': {'type': 'number'}, 'btcDominance': {'type': 'object', 'required': ['current', 'median', 'min', 'max', 'percentile'], 'properties': {'max': {'type': ['number', 'null']}, 'min': {'type': ['number', 'null']}, 'median': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null']}, 'samples': {'type': 'number', 'description': "How many measurements back these numbers. Lower than the window's total when the series has gaps â\x80\x94 or, for open interest, when older readings came from a different set of venues and are therefore not comparable."}, 'percentile': {'type': ['number', 'null'], 'description': '0-100. Where `current` sits among the samples.'}}, 'description': 'Current reading placed in its own distribution over the window.'}, 'openInterestUsd': {'type': 'object', 'required': ['current', 'median', 'min', 'max', 'percentile'], 'properties': {'max': {'type': ['number', 'null']}, 'min': {'type': ['number', 'null']}, 'median': {'type': ['number', 'null']}, 'current': {'type': ['number', 'null']}, 'samples': {'type': 'number', 'description': "How many measurements back these numbers. Lower than the window's total when the series has gaps â\x80\x94 or, for open interest, when older readings came from a different set of venues and are therefore not comparable."}, 'percentile': {'type': ['number', 'null'], 'description': '0-100. Where `current` sits among the samples.'}}, 'description': 'Current reading placed in its own distribution over the window.'}}}
get_market_quotes
Live quotes for the S&P 500 (SPY ETF), gold (GLD ETF) and Nasdaq 100 (QQQ ETF). Macro context for risk-on/risk-off and the correlation of traditional markets with crypto. These are ETFs priced in USD per share, so use direction and percent change rather than the absolute index level.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['quotes'], 'properties': {'quotes': {'type': 'array', 'items': {'type': 'object', 'required': ['symbol', 'name', 'price'], 'properties': {'name': {'type': 'string'}, 'time': {'type': ['number', 'null'], 'description': 'Unix seconds.'}, 'price': {'type': ['number', 'null']}, 'change': {'type': ['number', 'null']}, 'symbol': {'type': 'string'}, 'changePercent': {'type': ['number', 'null']}, 'previousClose': {'type': ['number', 'null']}}}}}}
追加
get_market_brief
2026年9月17日12:41
追加
get_execution_cost
2026年9月17日12:41
追加
get_implied_volatility
2026年9月17日12:41
追加
get_market_history
2026年9月17日12:41
追加
get_market_dominance
2026年9月17日12:41
追加
get_market_quotes
2026年9月17日12:41
追加
get_derivatives_aggregate
2026年9月17日12:41
追加
get_crypto_news
2026年9月17日12:41
追加
get_eth_whale_flows
2026年9月17日12:41
追加
get_eth_address
2026年9月17日12:41
追加
get_btc_network
2026年9月17日12:41
追加
get_defi_overview
2026年9月17日12:41
追加
get_economic_calendar
2026年9月17日12:41
追加
get_macro_rates
2026年9月17日12:41
追加
get_derivatives
2026年9月17日12:41
追加
get_fear_greed
2026年9月17日12:41
追加
get_crypto_market
2026年9月17日12:41