ping
Free liveness probe for the Pegana oracle MCP server. Returns the string `pong (Ns)` where N is the number of seconds since the server booted, plus a `structuredContent` payload with `{ message, uptime_sec }`. Use this to confirm the endpoint is reachable before issuing real tool calls; it makes no DB or Redis read.
get_assets
Free. Lists every asset currently tracked by Pegana with its real-time peg state. Returns `{ count, assets: [{ asset, state, discount, intrinsic_usd, market_usd, ts }, ...] }` where `state` is one of `PEGGED | DRIFT | DEPEG | CRITICAL | BLACK_SWAN | UNKNOWN`, `discount` is a signed decimal string (`-0.0042` = 42bps below intrinsic), and `ts` is unix seconds. Call this once at session start to discover the supported symbols (22 active today across LSTs, fiat stablecoins, yield-bearing tokens, CDPs, FX-pegged, and synthetics). Use `get_asset_state` for a single symbol if you already know it — that path is cheaper.
get_asset_state
Free. Returns the current peg state for a single tracked asset on Solana. On success, `structuredContent` is `{ asset, state, discount, intrinsic_usd, market_usd, ts }` — `state` is one of `PEGGED | DRIFT | DEPEG | CRITICAL | BLACK_SWAN | UNKNOWN`, `discount` is signed (negative = trading below intrinsic) as a decimal string, prices are USD as strings, `ts` is unix seconds. Example: `{ symbol: "dSOL" }` → current state of Drift's dSOL LST. Returns `isError: true` with `_meta.lastFreshSec` if the cached state is older than 5 minutes, or if the symbol is not tracked (call `get_assets` first to enumerate valid symbols). Prefer this over `get_assets` when you already know the symbol — it skips the full enumeration.
get_methodology
Free. Explains *how* Pegana computes the peg/discount for a given asset — i.e. the formula behind `intrinsic_usd` and what a non-zero `discount` means for that asset class (LST, fiat stablecoin, yield-bearing, CDP, synthetic, FX, RWA, delta-neutral). Returns `structuredContent` shaped `{ symbol, explanation, methodology_url }` plus the same prose in `content[0].text`. Example: `{ symbol: "jitoSOL" }` → returns the LST methodology (intrinsic = Sanctum stake-pool rate × Pyth SOL/USD; market = Jupiter quote). Call this when an agent needs to *explain* a depeg, not just report it — e.g. to a user asking 'why is dSOL discounted?'.
ping_paid
Paid ($0.001/call via x402 USDC on Solana mainnet). Returns `paid pong` in both `content` and `structuredContent.message`. Smoke test for the x402 payment-wiring path — if this call settles, the paid stack is live. Use only to validate your wallet/payment setup; for liveness use the free `ping`.
get_asset_history
Paid ($0.001/call via x402 USDC on Solana mainnet). Returns a bucketed time-series of intrinsic-vs-market discount for one asset. `structuredContent` is `{ symbol, bucket, count, rows: [{ ts, discount, intrinsic_usd, market_usd }, ...] }` — `ts` is an ISO timestamp at the bucket start, prices and discount are decimal strings, discount is signed. Example: `{ symbol: "dSOL", bucket: "5m", limit: 288 }` → last 24h of dSOL discount at 5-minute resolution. Use this to detect trends (gradual drift vs. sudden depeg), backtest peg-aware strategies, or chart history. For *current* state only, use the free `get_asset_state` instead. Rows are returned most-recent first; SQL hard-caps at 50,000 regardless of `limit`. Lookback window is 30 days.