Server definition
- Hash
- sha256:e18043f205c921f41887ac37988bb069513741e35209820cf8e02b309c1d4f6e
- What it is
- What a remote MCP server returned when asked what it offers: 17 tools
The blob, as servednamed by its sha256
{
"instructions": "Crypto and macro market intelligence for autonomous agents — the signal set a trading desk watches, delivered as structured JSON.\n\nMost crypto APIs return a price. This returns positioning. Ask it where the leverage is across your whole watchlist and get_derivatives_aggregate answers for up to 10 coins in a single call — funding rate, open interest and funding spread per coin — because the underlying venue data is fetched once and shared, not re-fetched per symbol. When one coin needs a closer look, get_derivatives breaks it down venue by venue, where a single venue far off the others marks localised positioning rather than market consensus.\n\nThose numbers are only worth anything if they are computed honestly. Funding is taken from the largest-open-interest perpetual on each of Binance, Bybit, OKX and Hyperliquid, and thin venues are excluded outright. Averaging every venue that publishes a rate instead overstates BTC funding by roughly 30x — a near-empty book printing 9.5% per 8h counts exactly as much as a deep one, and there are ~190 venues in the feed.\n\nFunding is reported in percent per 8 hours throughout, so 0.0061 means 0.0061%.\n\nAround the derivatives read: Ethereum exchange whale flows (inflows as distribution pressure, outflows as accumulation), Bitcoin network health, DeFi liquidity and stablecoin supply, Fear & Greed as a contrarian input, and BTC/ETH/USDT dominance as a risk-on/risk-off regime filter.\n\nCrucially, it also carries the macro regime that actually drives crypto: Fed funds rate, 2Y and 10Y Treasury yields, CPI inflation, the dollar index, S&P 500 and gold — plus the scheduled catalysts ahead (FOMC, CPI, NFP, GDP).\n\nEvery response is built from live primary sources at call time. Nothing is simulated, mocked or hardcoded.\n\n17 read-only tools, composable into a single market read. No API key required to start.",
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_btc_network",
"outputSchema": {
"properties": {
"btcLargeMempool": {
"description": "Largest transactions currently waiting in the mempool.",
"items": {
"properties": {
"timestamp": {
"type": "number"
},
"totalBtc": {
"type": "number"
},
"txHash": {
"type": "string"
}
},
"required": [
"txHash",
"totalBtc",
"timestamp"
],
"type": "object"
},
"type": "array"
},
"difficulty": {
"type": "number"
},
"estimatedTxVolumeUsd": {
"type": "number"
},
"hashRate": {
"type": "number"
},
"marketPrice": {
"type": "number"
},
"minersRevenueUsd": {
"description": "null when the source does not publish it. Never 0 - miner revenue cannot be zero while blocks are produced.",
"type": [
"number",
"null"
]
},
"tradeVolumeUsd": {
"type": "number"
},
"txCount24h": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"ids": {
"description": "Coin IDs as lowercase slugs, e.g. ['bitcoin','ethereum','solana']",
"items": {
"type": "string"
},
"type": "array"
},
"vs_currency": {
"description": "Quote currency, defaults to 'usd'",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "get_crypto_market",
"outputSchema": {
"properties": {
"result": {
"items": {
"properties": {
"change24h": {
"description": "Percent.",
"type": [
"number",
"null"
]
},
"change7d": {
"description": "Percent.",
"type": [
"number",
"null"
]
},
"id": {
"description": "Coin id, e.g. `bitcoin`.",
"type": "string"
},
"marketCap": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"symbol": {
"type": "string"
},
"volume24h": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"symbol",
"name",
"price"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Recent crypto headlines for narrative context and catalysts. Summarize in your own words with attribution to the reporting outlet; do not reproduce articles.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_crypto_news",
"outputSchema": {
"properties": {
"result": {
"description": "Recent headlines, newest first. Summaries are our own words, not article text.",
"items": {
"properties": {
"publishedAt": {
"type": "string"
},
"source": {
"type": "string"
},
"summary": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"title",
"source",
"url",
"publishedAt"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_defi_overview",
"outputSchema": {
"properties": {
"stablecoinMarketCap": {
"description": "Dry powder waiting on the sidelines.",
"type": [
"number",
"null"
]
},
"topChains": {
"items": {
"properties": {
"name": {
"type": "string"
},
"tvl": {
"type": "number"
}
},
"required": [
"name",
"tvl"
],
"type": "object"
},
"type": "array"
},
"totalTvl": {
"description": "Total value locked across DeFi, in USD.",
"type": "number"
}
},
"required": [
"totalTvl",
"topChains"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"symbol": {
"description": "Coin or pair, e.g. BTC, BTCUSDT, ETH",
"type": "string"
}
},
"required": [
"symbol"
],
"type": "object"
},
"name": "get_derivatives",
"outputSchema": {
"properties": {
"avgFundingAnnualizedPct": {
"description": "The same funding as a yearly percentage, comparable to any other yield.",
"type": [
"number",
"null"
]
},
"avgFundingRate": {
"description": "Percent per 8 hours. 0.0067 means 0.0067%, not 0.67%.",
"type": [
"number",
"null"
]
},
"coin": {
"type": "string"
},
"exchangeCount": {
"description": "How many major venues backed the numbers.",
"type": "number"
},
"fundingSpread": {
"description": "Highest minus lowest venue funding. A wide spread marks localised positioning.",
"type": [
"number",
"null"
]
},
"perExchange": {
"description": "Per-venue breakdown, from each venue's largest-open-interest perpetual.",
"items": {
"properties": {
"exchange": {
"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.",
"enum": [
"Binance",
"Bybit",
"OKX",
"Hyperliquid"
],
"type": "string"
},
"fundingRate": {
"description": "Percent per 8 hours.",
"type": [
"number",
"null"
]
},
"openInterestUsd": {
"type": [
"number",
"null"
]
}
},
"required": [
"exchange"
],
"type": "object"
},
"type": "array"
},
"totalOpenInterestUsd": {
"description": "Summed across the major venues.",
"type": [
"number",
"null"
]
}
},
"required": [
"coin",
"perExchange",
"exchangeCount"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"coins": {
"description": "Base coins, e.g. [\"BTC\",\"ETH\",\"SOL\"]. Maximum 10. Defaults to BTC and ETH.",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "get_derivatives_aggregate",
"outputSchema": {
"properties": {
"coins": {
"items": {
"properties": {
"avgFundingAnnualizedPct": {
"description": "The same funding as a yearly percentage, comparable to any other yield.",
"type": [
"number",
"null"
]
},
"avgFundingRate": {
"description": "Percent per 8 hours. 0.0067 means 0.0067%, not 0.67%.",
"type": [
"number",
"null"
]
},
"coin": {
"type": "string"
},
"exchangeCount": {
"description": "How many major venues backed the numbers.",
"type": "number"
},
"fundingSpread": {
"description": "Highest minus lowest venue funding. A wide spread marks localised positioning.",
"type": [
"number",
"null"
]
},
"totalOpenInterestUsd": {
"description": "Summed across the major venues.",
"type": [
"number",
"null"
]
}
},
"required": [
"coin",
"exchangeCount"
],
"type": "object"
},
"type": "array"
},
"unavailable": {
"description": "Requested coins with no major-venue perpetual. Never silently dropped.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"coins",
"unavailable"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"days": {
"description": "How many days ahead to cover, defaults to 14",
"type": "number"
}
},
"type": "object"
},
"name": "get_economic_calendar",
"outputSchema": {
"properties": {
"result": {
"description": "Scheduled macro releases ahead, soonest first.",
"items": {
"properties": {
"actual": {
"description": "Null until the release lands.",
"type": [
"number",
"null"
]
},
"country": {
"type": "string"
},
"estimate": {
"type": [
"number",
"null"
]
},
"event": {
"type": "string"
},
"impact": {
"type": "string"
},
"previous": {
"type": [
"number",
"null"
]
},
"time": {
"type": "string"
}
},
"required": [
"event",
"country",
"time",
"impact"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"address": {
"description": "Ethereum address (0x...)",
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"name": "get_eth_address",
"outputSchema": {
"properties": {
"address": {
"type": "string"
},
"balanceEth": {
"type": "number"
},
"recentLargeTransfers": {
"description": "Transfers above 1 ETH, newest first.",
"items": {
"properties": {
"direction": {
"enum": [
"in",
"out"
],
"type": "string"
},
"from": {
"type": "string"
},
"hash": {
"type": "string"
},
"timestamp": {
"description": "Unix seconds.",
"type": "number"
},
"to": {
"type": "string"
},
"valueEth": {
"type": "number"
}
},
"required": [
"hash",
"from",
"to",
"valueEth",
"timestamp",
"direction"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"address",
"balanceEth",
"recentLargeTransfers"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_eth_whale_flows",
"outputSchema": {
"properties": {
"coverage": {
"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.",
"items": {
"properties": {
"exchange": {
"type": "string"
},
"minutesCovered": {
"type": "number"
},
"truncated": {
"description": "true means the wallet is too busy for a single page, so older transfers in the window were not seen.",
"type": "boolean"
}
},
"required": [
"exchange",
"minutesCovered",
"truncated"
],
"type": "object"
},
"type": "array"
},
"flows": {
"description": "Large ETH transfers to and from known exchange wallets, largest first.",
"items": {
"properties": {
"counterparty": {
"description": "The non-exchange side of the transfer.",
"type": "string"
},
"direction": {
"description": "`in` is flow toward the exchange (distribution pressure), `out` is away.",
"enum": [
"in",
"out"
],
"type": "string"
},
"exchange": {
"type": "string"
},
"hash": {
"type": "string"
},
"timestamp": {
"description": "Unix seconds.",
"type": "number"
},
"valueEth": {
"type": "number"
}
},
"required": [
"exchange",
"valueEth",
"direction",
"timestamp",
"hash"
],
"type": "object"
},
"type": "array"
},
"unavailable": {
"description": "Exchange wallets that could not be read. An empty flows list with entries here means nothing was read, not that nothing moved.",
"items": {
"type": "string"
},
"type": "array"
},
"windowMinutes": {
"description": "The window asked for, in minutes.",
"type": "number"
}
},
"required": [
"flows",
"windowMinutes",
"coverage",
"unavailable"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"coin": {
"description": "Coin symbol, e.g. \"BTC\", \"ETH\", \"SOL\". The USDT perpetual is read.",
"type": "string"
},
"sizesUsd": {
"description": "Trade sizes to price, in US dollars. Defaults to 10000, 50000 and 250000. At most five.",
"items": {
"type": "number"
},
"type": "array"
}
},
"required": [
"coin"
],
"type": "object"
},
"name": "get_execution_cost",
"outputSchema": {
"properties": {
"bandPct": {
"description": "Half-width of the depth band around mid, in percent.",
"type": "number"
},
"cheapest": {
"description": "Per requested size, the venue with the lowest slippage among those that can fill it.",
"items": {
"properties": {
"buySlippageBps": {
"type": [
"number",
"null"
]
},
"buyVenue": {
"type": [
"string",
"null"
]
},
"notionalUsd": {
"type": "number"
},
"sellSlippageBps": {
"type": [
"number",
"null"
]
},
"sellVenue": {
"type": [
"string",
"null"
]
}
},
"required": [
"notionalUsd",
"buyVenue",
"sellVenue"
],
"type": "object"
},
"type": "array"
},
"coin": {
"type": "string"
},
"sizesUsd": {
"items": {
"type": "number"
},
"type": "array"
},
"unavailable": {
"description": "Venues with no usable book for this coin. Never dropped silently.",
"items": {
"type": "string"
},
"type": "array"
},
"unavailableDetail": {
"description": "The same venues with the reason each one failed, so a missing venue is diagnosable.",
"items": {
"properties": {
"reason": {
"type": "string"
},
"venue": {
"type": "string"
}
},
"required": [
"venue",
"reason"
],
"type": "object"
},
"type": "array"
},
"venues": {
"items": {
"properties": {
"askDepthUsd": {
"type": "number"
},
"bestAsk": {
"type": "number"
},
"bestBid": {
"type": "number"
},
"bidDepthUsd": {
"description": "Notional resting within bandPct of mid on the bid side, in USD.",
"type": "number"
},
"buy": {
"items": {
"properties": {
"avgPrice": {
"description": "Volume-weighted price the order would actually get.",
"type": "number"
},
"costUsd": {
"description": "The same cost in dollars.",
"type": "number"
},
"filled": {
"description": "false means the book ran out before the requested size; the price is NOT extrapolated.",
"type": "boolean"
},
"filledUsd": {
"description": "How much of the size the book could actually absorb. Equals notionalUsd only when filled is true.",
"type": "number"
},
"notionalUsd": {
"type": "number"
},
"slippageBps": {
"description": "Cost against mid in basis points. Always positive, for buys and sells alike.",
"type": "number"
}
},
"required": [
"notionalUsd",
"filledUsd",
"avgPrice",
"slippageBps",
"costUsd",
"filled"
],
"type": "object"
},
"type": "array"
},
"levels": {
"properties": {
"asks": {
"type": "number"
},
"bids": {
"type": "number"
}
},
"type": "object"
},
"mid": {
"type": "number"
},
"sell": {
"items": {
"properties": {
"avgPrice": {
"description": "Volume-weighted price the order would actually get.",
"type": "number"
},
"costUsd": {
"description": "The same cost in dollars.",
"type": "number"
},
"filled": {
"description": "false means the book ran out before the requested size; the price is NOT extrapolated.",
"type": "boolean"
},
"filledUsd": {
"description": "How much of the size the book could actually absorb. Equals notionalUsd only when filled is true.",
"type": "number"
},
"notionalUsd": {
"type": "number"
},
"slippageBps": {
"description": "Cost against mid in basis points. Always positive, for buys and sells alike.",
"type": "number"
}
},
"required": [
"notionalUsd",
"filledUsd",
"avgPrice",
"slippageBps",
"costUsd",
"filled"
],
"type": "object"
},
"type": "array"
},
"spreadBps": {
"description": "Quoted spread in basis points. Half of it is the floor for any slippage.",
"type": "number"
},
"symbol": {
"type": "string"
},
"venue": {
"enum": [
"Bybit",
"OKX"
],
"type": "string"
}
},
"required": [
"venue",
"symbol",
"mid",
"spreadBps",
"buy",
"sell"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"coin",
"sizesUsd",
"venues",
"unavailable",
"cheapest"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_fear_greed",
"outputSchema": {
"properties": {
"classification": {
"type": "string"
},
"history": {
"items": {
"properties": {
"time": {
"type": "number"
},
"value": {
"type": "number"
}
},
"required": [
"time",
"value"
],
"type": "object"
},
"type": "array"
},
"previousClassification": {
"type": [
"string",
"null"
]
},
"previousValue": {
"type": [
"number",
"null"
]
},
"value": {
"description": "0-100. Low is fear, high is greed.",
"type": "number"
}
},
"required": [
"value",
"classification",
"history"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"coins": {
"description": "Coins, e.g. [\"BTC\",\"ETH\"]. Defaults to both. Only BTC and ETH have a published index.",
"items": {
"type": "string"
},
"type": "array"
},
"windowDays": {
"description": "How many days the percentile distribution covers. Defaults to 30, maximum 365.",
"type": "number"
}
},
"type": "object"
},
"name": "get_implied_volatility",
"outputSchema": {
"properties": {
"coins": {
"items": {
"properties": {
"coin": {
"type": "string"
},
"current": {
"description": "30-day implied volatility, annualized, in percent. 34.95 means 34.95%, not 0.3495.",
"type": "number"
},
"expectedMove1d": {
"description": "Expected move over 1 day, plus or minus percent. Scales with sqrt(time).",
"type": "number"
},
"expectedMove30d": {
"type": "number"
},
"expectedMove7d": {
"type": "number"
},
"max": {
"type": "number"
},
"median": {
"type": "number"
},
"min": {
"type": "number"
},
"percentile": {
"description": "0-100. Where `current` sits in its own distribution over the window.",
"type": "number"
},
"samples": {
"description": "Measurements backing the distribution.",
"type": "number"
}
},
"required": [
"coin",
"current",
"percentile",
"samples"
],
"type": "object"
},
"type": "array"
},
"unavailable": {
"description": "Requested coins with no published volatility index. Never silently dropped.",
"items": {
"type": "string"
},
"type": "array"
},
"windowDays": {
"type": "number"
}
},
"required": [
"windowDays",
"coins",
"unavailable"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_macro_rates",
"outputSchema": {
"properties": {
"cpiYoY": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"dollarIndex": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"fedFunds": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"m2": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"ust10y": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"ust2y": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"vix": {
"properties": {
"date": {
"description": "ISO date of the observation.",
"type": "string"
},
"previous": {
"description": "Prior observation, for direction.",
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"date"
],
"type": [
"object",
"null"
]
},
"yieldCurve2s10s": {
"description": "10Y minus 2Y. Inversion has preceded every recent US recession.",
"properties": {
"direction": {
"enum": [
"steepening",
"flattening",
"flat",
null
],
"type": [
"string",
"null"
]
},
"inverted": {
"type": "boolean"
},
"previous": {
"type": [
"number",
"null"
]
},
"value": {
"type": "number"
}
},
"required": [
"value",
"inverted"
],
"type": [
"object",
"null"
]
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"coin": {
"description": "Coin, e.g. \"BTC\" (default), \"ETH\", \"SOL\".",
"type": "string"
},
"sizeUsd": {
"description": "Trade size the execution cost is measured at, in US dollars. Defaults to 100000.",
"type": "number"
}
},
"type": "object"
},
"name": "get_market_brief",
"outputSchema": {
"properties": {
"asOf": {
"description": "ISO timestamp the brief was computed at.",
"type": "string"
},
"coin": {
"type": "string"
},
"confidence": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"drivers": {
"description": "Every signal that fed the verdict, so it can be argued with instead of taken on faith.",
"items": {
"properties": {
"direction": {
"description": "-1 toward risk, +1 toward support, 0 relevant but neutral.",
"type": "number"
},
"reading": {
"type": "string"
},
"signal": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"signal",
"value",
"reading",
"direction"
],
"type": "object"
},
"type": "array"
},
"invalidation": {
"description": "Concrete, numeric conditions that would make this verdict wrong.",
"items": {
"type": "string"
},
"type": "array"
},
"missing": {
"description": "Sources that did not answer. A missing signal is never counted as a neutral one.",
"items": {
"type": "string"
},
"type": "array"
},
"stance": {
"description": "fragile is a state, not a direction: crowded positioning together with cheap implied volatility.",
"enum": [
"risk-on",
"risk-off",
"fragile",
"neutral"
],
"type": "string"
},
"tradeable": {
"description": "null when no venue could be read.",
"properties": {
"costBps": {
"type": "number"
},
"sizeUsd": {
"type": "number"
},
"venue": {
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"verdict": {
"description": "The read in one or two sentences.",
"type": "string"
}
},
"required": [
"coin",
"asOf",
"stance",
"confidence",
"verdict",
"drivers",
"invalidation",
"missing"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_market_dominance",
"outputSchema": {
"description": "Share of total crypto market cap, in percent.",
"properties": {
"btcDominance": {
"type": [
"number",
"null"
]
},
"ethDominance": {
"type": [
"number",
"null"
]
},
"usdtDominance": {
"type": [
"number",
"null"
]
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"hours": {
"description": "How many hours back the window covers. Defaults to 24, maximum 168.",
"type": "number"
}
},
"type": "object"
},
"name": "get_market_history",
"outputSchema": {
"properties": {
"btcDominance": {
"description": "Current reading placed in its own distribution over the window.",
"properties": {
"current": {
"type": [
"number",
"null"
]
},
"max": {
"type": [
"number",
"null"
]
},
"median": {
"type": [
"number",
"null"
]
},
"min": {
"type": [
"number",
"null"
]
},
"percentile": {
"description": "0-100. Where `current` sits among the samples.",
"type": [
"number",
"null"
]
},
"samples": {
"description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
"type": "number"
}
},
"required": [
"current",
"median",
"min",
"max",
"percentile"
],
"type": "object"
},
"fearGreed": {
"description": "Current reading placed in its own distribution over the window.",
"properties": {
"current": {
"type": [
"number",
"null"
]
},
"max": {
"type": [
"number",
"null"
]
},
"median": {
"type": [
"number",
"null"
]
},
"min": {
"type": [
"number",
"null"
]
},
"percentile": {
"description": "0-100. Where `current` sits among the samples.",
"type": [
"number",
"null"
]
},
"samples": {
"description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
"type": "number"
}
},
"required": [
"current",
"median",
"min",
"max",
"percentile"
],
"type": "object"
},
"from": {
"type": "string"
},
"funding": {
"description": "Current reading placed in its own distribution over the window.",
"properties": {
"current": {
"type": [
"number",
"null"
]
},
"max": {
"type": [
"number",
"null"
]
},
"median": {
"type": [
"number",
"null"
]
},
"min": {
"type": [
"number",
"null"
]
},
"percentile": {
"description": "0-100. Where `current` sits among the samples.",
"type": [
"number",
"null"
]
},
"samples": {
"description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
"type": "number"
}
},
"required": [
"current",
"median",
"min",
"max",
"percentile"
],
"type": "object"
},
"openInterestUsd": {
"description": "Current reading placed in its own distribution over the window.",
"properties": {
"current": {
"type": [
"number",
"null"
]
},
"max": {
"type": [
"number",
"null"
]
},
"median": {
"type": [
"number",
"null"
]
},
"min": {
"type": [
"number",
"null"
]
},
"percentile": {
"description": "0-100. Where `current` sits among the samples.",
"type": [
"number",
"null"
]
},
"samples": {
"description": "How many measurements back these numbers. Lower than the window's total when the series has gaps — or, for open interest, when older readings came from a different set of venues and are therefore not comparable.",
"type": "number"
}
},
"required": [
"current",
"median",
"min",
"max",
"percentile"
],
"type": "object"
},
"samples": {
"description": "Snapshots in the window, captured every ~10 minutes.",
"type": "number"
},
"to": {
"type": "string"
},
"windowHours": {
"type": "number"
}
},
"required": [
"windowHours",
"samples",
"from",
"to"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_market_quotes",
"outputSchema": {
"properties": {
"quotes": {
"items": {
"properties": {
"change": {
"type": [
"number",
"null"
]
},
"changePercent": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"previousClose": {
"type": [
"number",
"null"
]
},
"price": {
"type": [
"number",
"null"
]
},
"symbol": {
"type": "string"
},
"time": {
"description": "Unix seconds.",
"type": [
"number",
"null"
]
}
},
"required": [
"symbol",
"name",
"price"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"quotes"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:e18043f205c921f41887ac37988bb069513741e35209820cf8e02b309c1d4f6e | sha256sum