Kriptonianlabs Agent APIs
Read-only XRPL and Solana data for agents: fees, slippage, readiness. Free /mcp; x402 /mcp/pro.
Should I use this
Quality & Safety
Findings (3)
- HIGH
- MEDIUMin solana_transfer_readiness
- MEDIUMin solana_token
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": {
"agent-apis": {
"url": "https://api.kriptonianlabs.com/mcp"
}
}
}Remote endpoints
https://api.kriptonianlabs.com/mcpstreamable-httphttps://api.kriptonianlabs.com/mcp/prostreamable-httpWhat it can do
Tool inventory
Tools (16)
🟢xrpl_fee
Current XRPL fee tiers in drops with a congestion score. When to use: Before submitting a transaction, to choose a `Fee` and to decide whether the network is congested. Prefer another tool: Not a price feed and not a historical series; it describes the latest validated ledger only. Example: xrpl_fee {}
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"fee": {
"type": "object",
"properties": {
"economy": {
"type": "string",
"description": "Drops"
},
"standard": {
"type": "string",
"description": "Drops"
},
"priority": {
"type": "string",
"description": "Drops"
}
},
"required": [
"economy",
"standard",
"priority"
],
"additionalProperties": false
},
"congestion": {
"type": "object",
"properties": {
"score": {
"type": "integer",
"minimum": 0,
"maximum": 100
},
"band": {
"type": "string",
"enum": [
"low",
"medium",
"high"
]
},
"load_factor_assumed": {
"type": "boolean"
}
},
"required": [
"score",
"band",
"load_factor_assumed"
],
"additionalProperties": false
},
"base_fee": {
"type": "string",
"description": "Decimal string"
},
"median_fee": {
"type": "string",
"description": "Decimal string"
},
"minimum_fee": {
"type": "string",
"description": "Decimal string"
},
"open_ledger_fee": {
"type": "string",
"description": "Decimal string"
},
"current_queue_size": {
"type": "string",
"description": "Decimal string"
},
"max_queue_size": {
"type": "string",
"description": "Decimal string"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"fee",
"congestion",
"base_fee",
"median_fee",
"minimum_fee",
"open_ledger_fee",
"current_queue_size",
"max_queue_size",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_network_health
Overall and per-node health of the upstream XRPL nodes. When to use: To decide whether to trust or retry data, or to explain a 503 from another endpoint. Prefer another tool: Not a probe of your own connectivity; it reports the service's upstream nodes. Example: xrpl_network_health {}
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"degraded",
"down",
"unknown"
]
},
"nodes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"member": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"up",
"down"
]
},
"latency_ms": {
"type": [
"number",
"null"
]
},
"ledger_index": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"ledger_age_s": {
"type": [
"number",
"null"
]
},
"load_factor": {
"type": [
"number",
"null"
]
},
"error": {
"type": [
"string",
"null"
]
},
"sampled_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
}
},
"required": [
"member",
"state",
"latency_ms",
"ledger_index",
"ledger_age_s",
"load_factor",
"error",
"sampled_at"
],
"additionalProperties": false
}
},
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"last_probe_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
{
"type": "null"
}
]
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"status",
"nodes",
"ledger_index",
"last_probe_at",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_orderbook(base, quote, depth)
CLOB order book for a currency pair with unfunded offers removed. When to use: To read executable liquidity for a pair on the XRPL central limit order book (CLOB). Prefer another tool: Not for AMM liquidity (use the amm page) and not for a cost estimate (use the slippage page). Example: xrpl_orderbook {"base":"XRP","quote":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}
Input Schema
{
"type": "object",
"properties": {
"base": {
"type": "string",
"description": "Base currency: `XRP` (no issuer) or `CODE.issuer` with a valid classic-address issuer (e.g. `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`)"
},
"quote": {
"type": "string",
"description": "Quote currency: `XRP` (no issuer) or `CODE.issuer` with a valid classic-address issuer (e.g. `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`)"
},
"depth": {
"description": "Levels per side: a positive integer, rounded up to 10, 50, 100 or 200 (max 200)",
"type": "string"
}
},
"required": [
"base",
"quote"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"base": {
"type": "string"
},
"quote": {
"type": "string"
},
"depth": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"asks": {
"type": "array",
"items": {
"$ref": "#/$defs/BookLevel"
},
"description": "Best (lowest) price first"
},
"bids": {
"type": "array",
"items": {
"$ref": "#/$defs/BookLevel"
},
"description": "Best (highest) price first, from the base-asset side"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"base",
"quote",
"depth",
"asks",
"bids",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"BookLevel": {
"type": "object",
"properties": {
"gets": {
"type": "string",
"description": "Decimal string"
},
"pays": {
"type": "string",
"description": "Decimal string"
},
"price": {
"type": "string",
"description": "Pays per gets, decimal string"
}
},
"required": [
"gets",
"pays",
"price"
],
"additionalProperties": false
},
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_slippage(base, quote, amount, depth)
Slippage and average price for buying an amount of base currency. When to use: Before placing a market-style trade, to size it against available depth and to see whether the CLOB or the AMM pool is the cheaper venue. Prefer another tool: It is an estimate, not a quote, and it does not split an amount across venues or route through other pairs. To read pool reserves, use the amm page. Example: xrpl_slippage {"base":"XRP","quote":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","amount":"1000"}
Input Schema
{
"type": "object",
"properties": {
"base": {
"type": "string",
"description": "Base currency: `XRP` (no issuer) or `CODE.issuer` with a valid classic-address issuer (e.g. `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`)"
},
"quote": {
"type": "string",
"description": "Quote currency: `XRP` (no issuer) or `CODE.issuer` with a valid classic-address issuer (e.g. `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`)"
},
"amount": {
"type": "string",
"description": "Positive decimal amount of base to buy"
},
"depth": {
"description": "Levels per side: a positive integer, rounded up to 10, 50, 100 or 200 (max 200)",
"type": "string"
}
},
"required": [
"base",
"quote",
"amount"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"base": {
"type": "string"
},
"quote": {
"type": "string"
},
"side": {
"type": "string",
"const": "buy"
},
"depth": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"amount": {
"type": "string",
"description": "Decimal string"
},
"filled": {
"type": "string",
"description": "Decimal string"
},
"partial": {
"type": "boolean"
},
"insufficient_liquidity": {
"type": "boolean"
},
"best_price": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
]
},
"avg_price": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
]
},
"slippage_pct": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Percent, null when liquidity is insufficient"
},
"transfer_fee_applied": {
"type": "boolean"
},
"transfer_fee": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
]
},
"avg_price_after_fees": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
]
},
"venues": {
"type": "object",
"properties": {
"best": {
"anyOf": [
{
"type": "string",
"enum": [
"clob",
"amm"
]
},
{
"type": "null"
}
],
"description": "Cheaper venue by avg_price (ties go to the CLOB), null when neither can fill"
},
"amm_status": {
"type": "string",
"enum": [
"ok",
"stale",
"no_pool",
"unavailable"
],
"description": "State of the AMM read: ok, stale (served past its fresh window), no_pool, unavailable"
},
"clob": {
"type": "object",
"properties": {
"avg_price": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Quote paid per base received, null when it cannot fill"
},
"cost": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Total quote paid for `amount`, null when it cannot fill"
},
"slippage_pct": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Percent vs the best ask, null when it cannot fill"
},
"insufficient_liquidity": {
"type": "boolean"
},
"avg_price_after_fees": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "avg_price x issuer TransferRate, null when the rate is unknown"
}
},
"required": [
"avg_price",
"cost",
"slippage_pct",
"insufficient_liquidity",
"avg_price_after_fees"
],
"additionalProperties": false
},
"amm": {
"anyOf": [
{
"type": "object",
"properties": {
"avg_price": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Quote paid per base received, null when it cannot fill"
},
"cost": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Total quote paid for `amount`, null when it cannot fill"
},
"slippage_pct": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Percent vs the fee-free pool spot price (includes the trading fee), null when it cannot fill"
},
"insufficient_liquidity": {
"type": "boolean"
},
"avg_price_after_fees": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "avg_price x issuer TransferRate, null when the rate is unknown"
},
"spot_price": {
"type": "string",
"description": "Pool spot price, quote per base, excluding fee and impact"
},
"trading_fee": {
"type": "string",
"description": "Pool trading fee as a fraction, like /v1/xrpl/amm"
}
},
"required": [
"avg_price",
"cost",
"slippage_pct",
"insufficient_liquidity",
"avg_price_after_fees",
"spot_price",
"trading_fee"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Null when the pair has no pool or the pool could not be read (see amm_status)"
}
},
"required": [
"best",
"amm_status",
"clob",
"amm"
],
"additionalProperties": false,
"description": "CLOB vs AMM comparison for the same amount; no routing split"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"base",
"quote",
"side",
"depth",
"amount",
"filled",
"partial",
"insufficient_liquidity",
"best_price",
"avg_price",
"slippage_pct",
"transfer_fee_applied",
"transfer_fee",
"avg_price_after_fees",
"venues",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_amm(a, b)
AMM pool reserves and trading fee for an asset pair. When to use: To read AMM pool depth and fee for a pair. Prefer another tool: It does not estimate slippage or compare venues (use the slippage page for the CLOB vs AMM comparison); a pair without a pool returns 404. Example: xrpl_amm {"a":"XRP","b":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}
Input Schema
{
"type": "object",
"properties": {
"a": {
"type": "string",
"description": "First asset: `XRP` (no issuer) or `CODE.issuer` with a valid classic-address issuer (e.g. `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`)"
},
"b": {
"type": "string",
"description": "Second asset: `XRP` (no issuer) or `CODE.issuer` with a valid classic-address issuer (e.g. `USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh`)"
}
},
"required": [
"a",
"b"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"asset_a": {
"type": "string"
},
"asset_b": {
"type": "string"
},
"reserve_a": {
"type": "string",
"description": "Decimal string"
},
"reserve_b": {
"type": "string",
"description": "Decimal string"
},
"trading_fee": {
"type": "string",
"description": "Decimal string"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"asset_a",
"asset_b",
"reserve_a",
"reserve_b",
"trading_fee",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_account_summary(address)
XRP balance, sequence, owner count, transfer rate and trust lines (capped) for an account. When to use: To inspect an account before building a transaction for it. Prefer another tool: Not for transaction history, reserves or account flags; it is a summary, not a full account dump. Example: xrpl_account_summary {"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Valid classic XRPL account address (r..., checksum verified)"
}
},
"required": [
"address"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"address": {
"type": "string"
},
"balance_xrp": {
"type": "string",
"description": "Decimal string"
},
"sequence": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"owner_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"transfer_rate": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Issuer TransferRate, 1000000000 = no fee"
},
"trust_lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"issuer": {
"type": "string"
},
"balance": {
"type": "string",
"description": "Decimal string"
},
"limit": {
"type": "string",
"description": "Decimal string"
}
},
"required": [
"currency",
"issuer",
"balance",
"limit"
],
"additionalProperties": false
}
},
"lines_truncated": {
"type": "boolean"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"address",
"balance_xrp",
"sequence",
"owner_count",
"transfer_rate",
"trust_lines",
"lines_truncated",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_account_lines(address, limit, peer, marker)
One page of an account's trust lines, with an opaque cursor for the next page. When to use: To list every trust line of an account (balances, limits, freeze and authorization flags), page by page. Prefer another tool: For a quick capped overview with the XRP balance, use `/v1/xrpl/account/{address}/summary`; for issued totals of a token, use the token endpoint. Example: xrpl_account_lines {"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Valid classic XRPL account address (r..., checksum verified)"
},
"limit": {
"description": "Lines per page: an integer from 10 to 400 (default 100)",
"type": "string"
},
"peer": {
"description": "Only lines with this counterparty (classic address)",
"type": "string"
},
"marker": {
"description": "Opaque cursor from the previous page's `marker`, for the same address",
"type": "string"
}
},
"required": [
"address"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"address": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"peer": {
"type": [
"string",
"null"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"peer": {
"type": "string",
"description": "Counterparty address"
},
"currency": {
"type": "string",
"description": "Canonical currency code (3 characters or 40 hex)"
},
"currency_ascii": {
"description": "Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes",
"type": [
"string",
"null"
]
},
"balance": {
"type": "string",
"description": "Positive: the peer owes the account; negative: the account owes"
},
"limit": {
"type": "string",
"description": "Limit the account sets"
},
"peer_limit": {
"type": "string",
"description": "Limit the peer sets"
},
"no_ripple": {
"type": "boolean"
},
"no_ripple_peer": {
"type": "boolean"
},
"freeze": {
"type": "boolean"
},
"freeze_peer": {
"type": "boolean"
},
"authorized": {
"type": "boolean"
},
"peer_authorized": {
"type": "boolean"
}
},
"required": [
"peer",
"currency",
"balance",
"limit",
"peer_limit",
"no_ripple",
"no_ripple_peer",
"freeze",
"freeze_peer",
"authorized",
"peer_authorized"
],
"additionalProperties": false
}
},
"marker": {
"description": "Opaque cursor for the next page (send as `marker`); null on the last page",
"type": [
"string",
"null"
]
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"address",
"limit",
"peer",
"lines",
"marker",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_account_transactions(address, limit, marker)
One page of an account's most recent validated transactions, newest first. When to use: To check what an account did recently (payments sent or received, offers, trust line changes) and whether each transaction succeeded. Prefer another tool: For balances and trust lines, use `/v1/xrpl/account/{address}/summary` or `/v1/xrpl/account/{address}/lines`; for full archival history, use a full-history node or indexer: history depth depends on the serving node and older pages may be slower. Example: xrpl_account_transactions {"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Valid classic XRPL account address (r..., checksum verified)"
},
"limit": {
"description": "Transactions per page: an integer from 1 to 50 (default 20)",
"type": "string"
},
"marker": {
"description": "Opaque cursor from the previous page's `marker`, for the same address",
"type": "string"
}
},
"required": [
"address"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"address": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"transactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hash": {
"type": "string"
},
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"close_time": {
"type": "string",
"description": "Ledger close time, ISO-8601 UTC"
},
"type": {
"type": "string",
"description": "Transaction type, for example `Payment`"
},
"result": {
"type": "string",
"description": "Result code, for example `tesSUCCESS`"
},
"counterparty": {
"description": "The other account, when the transaction names one",
"type": [
"string",
"null"
]
},
"delivered": {
"anyOf": [
{
"type": "object",
"properties": {
"asset": {
"type": "string",
"description": "`XRP` or `CODE.issuer`"
},
"value": {
"type": "string",
"description": "Decimal string"
},
"currency_ascii": {
"description": "Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes",
"type": [
"string",
"null"
]
}
},
"required": [
"asset",
"value"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Delivered amount, when the transaction reports one"
}
},
"required": [
"hash",
"ledger_index",
"close_time",
"type",
"result",
"counterparty",
"delivered"
],
"additionalProperties": false
},
"description": "Validated transactions, newest first"
},
"marker": {
"description": "Opaque cursor for the next (older) page (send as `marker`); null on the last page",
"type": [
"string",
"null"
]
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"address",
"limit",
"transactions",
"marker",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_token(asset)
Issuer data for an issued asset: flags, domain, transfer fee and total issued. When to use: Before accepting or sending an issued token: check that the issuer exists, is not frozen, whether holders need authorization, and the transfer fee charged on every transfer between non-issuer accounts. Prefer another tool: For XRP (not an issued asset; 400), for one account's own balances use `/v1/xrpl/account/{address}/lines`, and for prices use `/v1/xrpl/orderbook` or `/v1/xrpl/amm/{a}/{b}`. Example: xrpl_token {"asset":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}
Input Schema
{
"type": "object",
"properties": {
"asset": {
"type": "string",
"description": "Issued asset as CODE.issuer (3-character or 40-hex code, classic issuer address); not XRP"
}
},
"required": [
"asset"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"issuer": {
"type": "string",
"description": "Issuer address"
},
"currency": {
"type": "string",
"description": "Canonical currency code (3 characters or 40 hex)"
},
"currency_ascii": {
"description": "Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes",
"type": [
"string",
"null"
]
},
"global_freeze": {
"type": "boolean"
},
"no_freeze": {
"type": "boolean"
},
"require_auth": {
"type": "boolean"
},
"default_ripple": {
"type": "boolean"
},
"domain": {
"description": "Issuer domain decoded to text, when set",
"type": [
"string",
"null"
]
},
"transfer_rate": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Issuer TransferRate, 1000000000 = no fee"
},
"transfer_fee_pct": {
"type": "string",
"description": "Transfer fee in percent"
},
"obligations": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Total issued of this currency; null when `obligations_status` is `unavailable`"
},
"obligations_status": {
"type": "string",
"enum": [
"ok",
"unavailable"
]
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"issuer",
"currency",
"global_freeze",
"no_freeze",
"require_auth",
"default_ripple",
"domain",
"transfer_rate",
"transfer_fee_pct",
"obligations",
"obligations_status",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_payment_readiness(source, destination, asset, amount, destination_tag)
Pre-payment check: can this payment from source to destination succeed now? When to use: Right before sending a payment: to catch a missing or unfunded destination, a required destination tag, deposit authorization, missing or frozen trust lines, insufficient balance and issuer freezes, in one call. Prefer another tool: To find a multi-hop route or the source amount needed for a cross-currency payment (use the paths endpoint), or to list balances (use `/v1/xrpl/account/{address}/summary`). Example: xrpl_payment_readiness {"source":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","destination":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"}
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Sending account: valid classic XRPL address (r..., checksum verified)"
},
"destination": {
"type": "string",
"description": "Receiving account: valid classic XRPL address, different from source"
},
"asset": {
"description": "XRP (default) or CODE.issuer (3-character or 40-hex code, classic issuer)",
"type": "string"
},
"amount": {
"description": "Positive decimal amount of asset; omit to skip amount-dependent checks",
"type": "string"
},
"destination_tag": {
"description": "Destination tag you will send: an integer from 0 to 4294967295",
"type": "string"
}
},
"required": [
"source",
"destination"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"verdict": {
"type": "string",
"enum": [
"ready",
"not_ready",
"unknown"
],
"description": "`not_ready` on any blocking reason; else `unknown` on any failed sub-check"
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"source_not_found",
"insufficient_xrp_balance",
"source_line_missing",
"insufficient_token_balance",
"source_line_frozen",
"destination_not_found",
"amount_below_destination_reserve",
"destination_tag_required",
"deposit_not_authorized",
"destination_line_missing",
"destination_line_limit_exceeded",
"destination_line_frozen",
"issuer_not_found",
"issuer_global_freeze"
]
},
"description": "Blocking reason codes"
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"enum": [
"destination_will_be_created",
"transfer_fee",
"high_fee",
"network_degraded"
]
},
"description": "Non-blocking warnings"
},
"checks_failed": {
"type": "array",
"items": {
"type": "string",
"enum": [
"source_account",
"destination_account",
"deposit_authorized",
"source_line",
"destination_line",
"issuer",
"fee",
"network_health"
]
},
"description": "Sub-checks that could not run"
},
"spendable_xrp": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Source XRP above its live reserve and the standard fee; null when not computable"
},
"transfer_fee_pct": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Issuer transfer fee in percent, when it applies"
},
"source": {
"type": "string"
},
"destination": {
"type": "string"
},
"asset": {
"type": "string",
"description": "`XRP` or `CODE.issuer`"
},
"amount": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Amount checked; null when omitted (amount checks skipped)"
},
"destination_tag": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"verdict",
"reasons",
"warnings",
"checks_failed",
"spendable_xrp",
"transfer_fee_pct",
"source",
"destination",
"asset",
"amount",
"destination_tag",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_paths(source, destination, asset, amount, send_max_asset, ...)
Multi-hop payment paths and their source cost. When to use: Before a cross-currency or multi-hop payment: to see whether a route exists and how much the source would spend to deliver the amount. A call can take up to about 20 seconds and paths may be non-optimal. Prefer another tool: To check whether a direct payment can succeed (use `/v1/xrpl/payment-readiness`), or for the single-hop cost of a trade on one pair (use `/v1/xrpl/slippage`, which compares the order book and the AMM). Example: xrpl_paths {"source":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","destination":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","asset":"XRP","amount":"1"}
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Sending account: valid classic XRPL address (r..., checksum verified)"
},
"destination": {
"type": "string",
"description": "Receiving account: valid classic XRPL address"
},
"asset": {
"type": "string",
"description": "Asset delivered: XRP or CODE.issuer (3-character or 40-hex code, classic issuer)"
},
"amount": {
"type": "string",
"description": "Positive decimal amount of asset the destination receives"
},
"send_max_asset": {
"description": "Asset of send_max: XRP or CODE.issuer; give it with send_max",
"type": "string"
},
"send_max": {
"description": "Most the source may spend, in send_max_asset; not with source_assets",
"type": "string"
},
"source_assets": {
"description": "Comma-separated assets the source may spend (1 to 4); not with send_max",
"type": "string"
}
},
"required": [
"source",
"destination",
"asset",
"amount"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"alternatives": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source_amount": {
"type": "object",
"properties": {
"asset": {
"type": "string",
"description": "`XRP` or `CODE.issuer`"
},
"value": {
"type": "string",
"description": "Decimal string"
},
"currency_ascii": {
"description": "Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes",
"type": [
"string",
"null"
]
}
},
"required": [
"asset",
"value"
],
"additionalProperties": false,
"description": "Estimated amount the source spends"
},
"paths_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Number of computed paths"
},
"paths": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"account": {
"description": "Account the path rips through",
"type": "string"
},
"currency": {
"description": "Currency code of this step (3 characters or 40 hex)",
"type": "string"
},
"currency_ascii": {
"description": "Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes",
"type": [
"string",
"null"
]
},
"issuer": {
"description": "Issuer of the step currency",
"type": "string"
}
},
"additionalProperties": false
}
},
"description": "Computed paths, compact steps"
}
},
"required": [
"source_amount",
"paths_count",
"paths"
],
"additionalProperties": false
},
"description": "Path alternatives; empty when none was found"
},
"paths_may_be_non_optimal": {
"type": "boolean",
"const": true,
"description": "Path finding is best effort: a cheaper path may exist"
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"enum": [
"destination_not_found"
]
},
"description": "Non-blocking warnings"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"alternatives",
"paths_may_be_non_optimal",
"warnings",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢xrpl_latest_ledger
Latest validated ledger index, hash and close time. When to use: To anchor other readings to a ledger or to check how current the network view is. Prefer another tool: Not for transaction data or account state; use the account endpoint for those. Example: xrpl_latest_ledger {}
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"close_time": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
{
"type": "null"
}
]
},
"ledger_hash": {
"type": [
"string",
"null"
]
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"required": [
"ledger_index",
"close_time",
"ledger_hash",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"Meta": {
"type": "object",
"properties": {
"ledger_index": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Validated ledger the data comes from"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from the ledger"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"ledger_index",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢solana_transfer_readiness(source, destination, mint, amount)
Will this Solana transfer succeed? A verdict for SOL or an SPL or Token-2022 token. When to use: Before building or signing a Solana transfer, to learn whether it will fail and what it will cost in rent and fees. Prefer another tool: Not a simulation of the exact transaction (no priority fee, no program logic), not a token price or holder lookup, and not a way to read raw accounts. Example: solana_transfer_readiness {"source":"83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri","destination":"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd","mint":"SOL","amount":"0.5"}
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Sending wallet: Solana wallet address: a base58 string that decodes to exactly 32 bytes"
},
"destination": {
"type": "string",
"description": "Receiving wallet (not its token account): Solana wallet address: a base58 string that decodes to exactly 32 bytes"
},
"mint": {
"type": "string",
"description": "`SOL` for native SOL, or the mint address of an SPL Token or Token-2022 token"
},
"amount": {
"type": "string",
"description": "Positive decimal amount in UI units (SOL or tokens, not lamports or raw units)"
}
},
"required": [
"source",
"destination",
"mint",
"amount"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Sending wallet address"
},
"destination": {
"type": "string",
"description": "Receiving wallet address"
},
"mint": {
"type": "string",
"description": "`SOL` or the mint address"
},
"amount": {
"type": "string",
"description": "Amount checked, in the asset's UI units (as sent)"
},
"amount_raw": {
"type": "string",
"description": "Amount in raw units (lamports for SOL)"
},
"decimals": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Decimals of the asset (9 for SOL)"
},
"token_program": {
"description": "Token program that owns the mint; null for SOL",
"type": [
"string",
"null"
]
},
"ready": {
"type": "boolean",
"description": "True when no blocker applies"
},
"blockers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"insufficient_balance",
"insufficient_sol_for_fees",
"source_below_rent_exempt",
"destination_below_rent_exempt",
"source_frozen",
"destination_frozen",
"non_transferable",
"mint_paused"
]
},
"description": "Every blocking code that matched"
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"enum": [
"destination_off_curve",
"memo_required"
]
},
"description": "Every non-blocking warning that matched"
},
"requires_ata_creation": {
"type": "boolean",
"description": "True when the destination has no associated token account yet"
},
"ata_creation_lamports": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Rent-exempt lamports to create the destination token account; null when not needed"
},
"transfer_fee": {
"anyOf": [
{
"type": "string",
"description": "Decimal string"
},
{
"type": "null"
}
],
"description": "Token-2022 transfer fee in raw units; null without a fee config"
},
"net_amount": {
"type": "string",
"description": "Raw units the destination receives after any transfer fee"
},
"meta": {
"$ref": "#/$defs/MetaSolana"
}
},
"required": [
"source",
"destination",
"mint",
"amount",
"amount_raw",
"decimals",
"token_program",
"ready",
"blockers",
"warnings",
"requires_ata_creation",
"ata_creation_lamports",
"transfer_fee",
"net_amount",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"MetaSolana": {
"type": "object",
"properties": {
"slot": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Context slot of the finalized read"
},
"commitment": {
"type": "string",
"const": "finalized",
"description": "Every read is at finalized commitment"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from Solana"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"slot",
"commitment",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢solana_token(mint)
Is this Solana token safe to hold or receive? A SAFE, WARN or DANGER verdict. When to use: Before accepting or swapping into an unfamiliar token, to see whether its mint can freeze, mint more, move or tax balances. Prefer another tool: Not a price, liquidity or holder lookup and not an audit of the token's project; it reads only the mint account. Example: solana_token {"mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}
Input Schema
{
"type": "object",
"properties": {
"mint": {
"type": "string",
"description": "Mint address of an SPL Token or Token-2022 token (base58, 32 bytes)"
}
},
"required": [
"mint"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"mint": {
"type": "string"
},
"token_program": {
"type": "string",
"description": "SPL Token or Token-2022 program address"
},
"decimals": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"supply": {
"type": "string",
"description": "Total supply in raw units, exact"
},
"mint_authority": {
"description": "Null when the mint authority is renounced",
"type": [
"string",
"null"
]
},
"freeze_authority": {
"description": "Null when the freeze authority is renounced",
"type": [
"string",
"null"
]
},
"extensions": {
"type": "array",
"items": {
"type": "string"
},
"description": "Token-2022 mint extensions by name; empty for SPL Token"
},
"transfer_fee": {
"anyOf": [
{
"type": "object",
"properties": {
"basis_points": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"maximum_fee": {
"type": "string",
"description": "Maximum fee in raw units"
}
},
"required": [
"basis_points",
"maximum_fee"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Transfer fee active at the current epoch; null without a fee config"
},
"verdict": {
"type": "string",
"enum": [
"SAFE",
"WARN",
"DANGER"
],
"description": "Highest level matched: DANGER > WARN > SAFE"
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"permanent_delegate",
"transfer_hook",
"pausable",
"default_account_frozen",
"mint_authority_set",
"freeze_authority_set",
"transfer_fee",
"mint_close_authority",
"unknown_extension"
]
},
"description": "Every matched code of every level; empty for SAFE"
},
"meta": {
"$ref": "#/$defs/MetaSolana"
}
},
"required": [
"mint",
"token_program",
"decimals",
"supply",
"mint_authority",
"freeze_authority",
"extensions",
"transfer_fee",
"verdict",
"reasons",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"MetaSolana": {
"type": "object",
"properties": {
"slot": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Context slot of the finalized read"
},
"commitment": {
"type": "string",
"const": "finalized",
"description": "Every read is at finalized commitment"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from Solana"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"slot",
"commitment",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢solana_latest_slot
Latest finalized Solana slot and its block time. When to use: To check how fresh the finalized view of Solana is, or to anchor a read to a slot. Prefer another tool: Not a tip-of-chain feed: it is finalized, not processed or confirmed, and it is cached for 2 seconds. Example: solana_latest_slot {}
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"slot": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Latest finalized slot"
},
"block_time": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
{
"type": "null"
}
],
"description": "Block time of that slot; null when unavailable"
},
"meta": {
"$ref": "#/$defs/MetaSolana"
}
},
"required": [
"slot",
"block_time",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"MetaSolana": {
"type": "object",
"properties": {
"slot": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Context slot of the finalized read"
},
"commitment": {
"type": "string",
"const": "finalized",
"description": "Every read is at finalized commitment"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from Solana"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"slot",
"commitment",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}🟢solana_network_health
Whether Solana data is currently being served: latest probe status and finalized slot. When to use: Before relying on the Solana verdict endpoints, or to explain a 503 from them. Prefer another tool: Not a measure of the Solana network itself, only of this service's access to it; use the latest-slot endpoint to see chain progress. Example: solana_network_health {}
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"up",
"down",
"unknown",
"unavailable"
],
"description": "Latest probe result; `unavailable` while Solana data is not configured"
},
"slot": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Finalized slot of the latest successful probe"
},
"latency_ms": {
"type": [
"number",
"null"
]
},
"last_probe_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
},
{
"type": "null"
}
]
},
"meta": {
"$ref": "#/$defs/MetaSolana"
}
},
"required": [
"status",
"slot",
"latency_ms",
"last_probe_at",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"$defs": {
"MetaSolana": {
"type": "object",
"properties": {
"slot": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Context slot of the finalized read"
},
"commitment": {
"type": "string",
"const": "finalized",
"description": "Every read is at finalized commitment"
},
"as_of": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
"description": "When the data was read from Solana"
},
"age_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Age of the data at response time"
},
"cache": {
"type": "string",
"enum": [
"hit",
"miss",
"stale"
]
},
"stale": {
"type": "boolean",
"description": "True when served past its fresh TTL (stale-on-error)"
}
},
"required": [
"slot",
"commitment",
"as_of",
"age_seconds",
"cache",
"stale"
],
"additionalProperties": false
}
}
}Community
Evidence