Skip to main content
These tools require no settlement and no API key. Call them from any MCP host configured against https://mcp.pegana.xyz (see setup).

ping

Liveness check. Returns server version and timestamp.
// → ping()
{
  "ok": true,
  "version": "0.1.0",
  "ts": "2026-05-26T14:32:11Z"
}
Use this to verify the MCP connection is healthy before relying on other tools.

getAssets

Lists every tracked asset with the latest snapshot.
// → getAssets()
[
  {
    "symbol": "USDC",
    "name": "USD Coin",
    "class": "stablecoin",
    "state": "PEGGED",
    "discount": -0.0002,
    "intrinsic_usd": 1.0000,
    "market_usd": 0.9998,
    "updated_at": "2026-05-26T14:32:00Z"
  },
  {
    "symbol": "jitoSOL",
    "class": "lst",
    "state": "PEGGED",
    "discount": -0.0034,
    "intrinsic_usd": 213.42,
    "market_usd": 212.69,
    "intrinsic_sol": 1.180,
    "market_sol": 1.176,
    "updated_at": "2026-05-26T14:32:08Z"
  }
]
The full list is 22 active assets (plus one frozen entry — see assets.toml). No filtering parameter in v1 — filter client-side or in the model’s reasoning.

getAssetState

Current state for one asset.
// → getAssetState({ asset: "USDC" })
{
  "asset": "USDC",
  "state": "PEGGED",
  "since": "2026-05-26T14:32:11Z",
  "discount": -0.0002,
  "intrinsic_usd": 1.0000,
  "market_usd": 0.9998,
  "confidence": 0.98
}
If the asset is unknown, returns:
{ "error": "asset_not_found", "asset": "XYZ" }

getMethodology

Returns the formula, sources, and thresholds the asset uses. Static content vendored at build time — safe for the model to read as authoritative.
// → getMethodology({ asset: "USDC" })
{
  "asset": "USDC",
  "class": "stablecoin",
  "intrinsic_source": "Pyth USDC/USD reference",
  "market_source": "Jupiter routed quote to USDC numeraire",
  "formula": "spread = 1 - market_usd / intrinsic_usd",
  "smoothing": { "type": "EWMA", "alpha": 0.3 },
  "thresholds": {
    "drift_entry": 0.0015,
    "depeg_entry": 0.0050,
    "critical_entry": 0.0200,
    "exit_ratio": 0.67
  },
  "dwell": { "entry_secs": 30, "exit_secs": 60 }
}
Or for an asset class:
// → getMethodology({ class: "lst" })
{
  "class": "lst",
  "intrinsic_source": "Sanctum sol_value × Pyth SOL/USD",
  ...
}

Typical agent flow

1. ping() — verify connection
2. getAssets() — read all 22 (caches in agent context)
3. For each user request involving asset X:
   - getAssetState({ asset: X })
   - if state != "PEGGED" and not user-acknowledged:
       refuse, return state + explanation
   - else: proceed
4. Optionally, getMethodology({ asset: X }) once at startup,
   so model can reason about WHY an alert exists
The methodology call is the differentiator — agents that read it before reasoning can explain peg state to a user in plain language, including the per-asset threshold context (“INF’s drift threshold is wide because its 24h p99 is wide”).

Next

Paid tools — getAssetHistory + subscribePegEvents

Settlement flow for the two paid tools.