Nota
Read-only crypto research skills that check a price, RSI and ATR against independent sources.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"nota": {
"url": "https://nota-ryo.vercel.app/mcp"
}
}
}Remote endpoints
https://nota-ryo.vercel.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢narrative_convergence(voices, tokens, hours)
Monitor up to 20 user-selected voices (Telegram public channels, Bluesky and X handles) and report which tokens they mention, lexicon-scored sentiment per token, conviction and urgency, and whether the voices converge: at least two voices carry a non-zero net sentiment on the token and every one of them has the same sign.
Input Schema
{
"type": "object",
"properties": {
"voices": {
"type": "array",
"description": "Up to 20 ids like tg:WatcherGuru, bs:handle.bsky.social or x:handle",
"items": {
"type": "string"
}
},
"tokens": {
"type": "array",
"description": "Symbols to track; default = every cashtag, ticker or name of a known major found",
"items": {
"type": "string"
}
},
"hours": {
"type": "integer",
"description": "Look-back window in hours (default 24)"
}
},
"required": [
"voices"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢news_verify(claim, symbol, max_results)
Verify a crypto news claim: count independent domains reporting it (four outlets' RSS headlines plus Tavily or Venice web search), count those whose headline leans the opposite way, and attach the token's RYO analyze_token evidence so the story and the market read sit side by side.
Input Schema
{
"type": "object",
"properties": {
"claim": {
"type": "string",
"description": "The story to verify, in one sentence"
},
"symbol": {
"type": "string",
"description": "Token symbol to attach market evidence for"
},
"max_results": {
"type": "integer",
"description": "Search results to inspect (default 6, max 20)"
}
},
"required": [
"claim"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢price_crosscheck(symbol, reference_price, reference_path, reference_fear_greed)
Fetch independent USD spot prices for a symbol from CoinGecko, Coinbase, Kraken, Binance and DefiLlama (no keys), drop a source that disagrees with the rest as an outlier, report median and spread, and flag how far a reference price (e.g. RYO's) deviates from them.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. SOL"
},
"reference_price": {
"type": "number",
"description": "Price to compare against, e.g. RYO deep_analysis price"
},
"reference_path": {
"type": "string",
"description": "Where the reference price came from"
},
"reference_fear_greed": {
"type": "number",
"description": "A Fear & Greed value to compare with alternative.me"
}
},
"required": [
"symbol"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢technicals_crosscheck(symbol, reference_rsi_14, reference_atr_14, days)
Recompute RSI(14) and ATR(14) (Wilder smoothing) from 200 closed UTC-day candles (OKX, else Binance, else CoinGecko 4h OHLC aggregated to days) plus 1d/7d/30d performance, and report how far reference values (e.g. RYO's) deviate from the independent calculation.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. SOL"
},
"reference_rsi_14": {
"type": "number",
"description": "RSI(14) to compare against"
},
"reference_atr_14": {
"type": "number",
"description": "ATR(14) in USD to compare against"
},
"days": {
"type": "integer",
"description": "lookback for performance, 7..90 (indicators always use 200 closed daily candles)"
}
},
"required": [
"symbol"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢positioning_check(symbol, reference_derivatives, peer_derivatives, ryo_btc_funding_bps, atr_stop_pct)
Decide, field by field, whether RYO's deep_analysis derivatives block can be cited as evidence about this token (identical values across other tokens, sign conflicts with OKX coin-terms open interest), and report OKX perp positioning: premium over spot on OKX and Hyperliquid, 24 h open-interest change in coins, long/short account ratio and its 100-hour percentile, and for BTC/ETH Deribit's DVOL implied 7-day move as a check on stop distance.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. SOL"
},
"reference_derivatives": {
"type": "object",
"description": "RYO deep_analysis data.derivatives for this symbol; fetched from RYO when omitted and a RYO key is set"
},
"peer_derivatives": {
"type": "array",
"description": "Same-day RYO derivatives blocks for other symbols: [{symbol, funding_rate_bps, open_interest_change_24h_pct}]; taken from the day's scorecard locks when omitted",
"items": {
"type": "object"
}
},
"ryo_btc_funding_bps": {
"type": "number",
"description": "Latest BTC funding from RYO monitor_market_sentiment_shift (evidence.funding.latest_bps)"
},
"atr_stop_pct": {
"type": "number",
"description": "Stop distance in % of price (e.g. RYO's 1.5 x atr_14_pct), checked against the DVOL implied 7-day move"
}
},
"required": [
"symbol"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢move_base_rate(symbol, k, horizon_days, direction, event, ...)
Empirical probability that a token moves k ATRs (up or down, touched or closed beyond) within h days, counted from ~400 days of OKX daily candles on days in the same ATR tercile as today, with a time-split holdout. Pass RYO's atr_14_pct to measure the distance in RYO's ATR; k=0 with event=close gives the plain 'higher after h days' rate.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. SOL"
},
"k": {
"type": "number",
"description": "Distance in ATRs (default 1)"
},
"horizon_days": {
"type": "integer",
"description": "1 to 14 (default 3)"
},
"direction": {
"type": "string",
"description": "Default up",
"enum": [
"up",
"down"
]
},
"event": {
"type": "string",
"description": "Default touch",
"enum": [
"touch",
"close"
]
},
"atr_14_pct": {
"type": "number",
"description": "RYO's ATR(14) as % of price (analyze_token or deep_analysis)"
},
"as_of": {
"type": "string",
"description": "YYYY-MM-DD: use only candles closed before this day (scoring a past call)"
}
},
"required": [
"symbol"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢verdict_track_record(symbol, horizon_hours)
How RYO's own deep_analysis plans have fared: locked daily for 25 majors and settled on OKX hourly candles (stop or +1R target first, 24 h or 72 h). Returns counts by verdict and by confluence state, plans whose verdict leans against their own direction, and the latest locked verdict. Omit the symbol for all tokens.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. SOL; omit for every token"
},
"horizon_hours": {
"type": "integer",
"description": "24 (default) or 72",
"enum": [
24,
72
]
}
},
"required": [],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢liquidity_check(symbol)
Macro liquidity from DefiLlama (no key): 7-day and 30-day change of the total USD stablecoin supply, and of DeFi TVL on the token's own chain (ETH, SOL, BNB, AVAX and other L1/L2 tokens). Each leg reports its own as_of and availability; a token without a chain of its own gets no TVL rather than a borrowed one.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. SOL"
}
},
"required": [
"symbol"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}🟢crowd_odds(symbol, horizon_days, spot)
Prediction-market implied probability that a token trades higher than now at a horizon: the Polymarket 'above $K on <date>' ladder (Kalshi's KX<coin>D ladder as fallback) expiring within a day of now + horizon, liquid strikes only, made monotone and interpolated at spot. BTC, ETH, SOL, XRP (and DOGE on Kalshi); null when no market.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Token symbol, e.g. BTC"
},
"horizon_days": {
"type": "integer",
"description": "1 to 14 (default 7)"
},
"spot": {
"type": "number",
"description": "Price to read the ladder at (default: Binance spot, which is what Polymarket's crypto ladders resolve on)"
}
},
"required": [
"symbol"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version"
},
"tool": {
"title": "Tool",
"type": "string"
},
"status": {
"enum": [
"ok",
"partial",
"unavailable"
],
"title": "Status",
"type": "string"
},
"data_mode": {
"default": "unknown",
"enum": [
"live",
"mixed",
"simulated",
"unknown"
],
"title": "Data Mode",
"type": "string"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"request": {
"additionalProperties": true,
"title": "Request",
"type": "object"
},
"data": {
"additionalProperties": true,
"title": "Data",
"type": "object"
},
"summary": {
"$ref": "#/$defs/Summary"
},
"availability": {
"additionalProperties": true,
"title": "Availability",
"type": "object"
},
"warnings": {
"items": {
"type": "string"
},
"title": "Warnings",
"type": "array"
},
"trace_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trace Id"
}
},
"required": [
"tool",
"status"
],
"$defs": {
"Summary": {
"additionalProperties": true,
"properties": {
"headline": {
"default": "",
"title": "Headline",
"type": "string"
},
"key_points": {
"items": {
"type": "string"
},
"title": "Key Points",
"type": "array"
}
},
"title": "Summary",
"type": "object"
}
},
"additionalProperties": true,
"title": "Envelope"
}Community
Evidence