XRPL.to Token Analytics
REMOTE · API.XRPL.TO
XRP Ledger tokens, AMM pools, NFTs, accounts and transactions: prices, holders, trades and history
Available components
Last scanned (2 hours ago)
Scores higher than 55% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Crypto and Web3
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (delete_note). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability55
- 53% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 28792 tokens (~299/item across 96 items; 89 tools + 7 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management53
- Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage96
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 87% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 91 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 2 Nov 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_account_ancestry” rewrote its description, which is the text the model reads security
- Tool “get_account_transactions” rewrote its description, which is the text the model reads security
- Tool “get_amm_pools” rewrote its description, which is the text the model reads security
- Tool “get_network_activity” rewrote its description, which is the text the model reads security
- Tool “get_nft_collection” rewrote its description, which is the text the model reads security
- Tool “get_payment_flows” rewrote its description, which is the text the model reads security
- Tool “get_token_flow” rewrote its description, which is the text the model reads security
- “get_amm_pools” added an optional parameter “history” cosmetic
- “get_amm_pools” added an optional parameter “since” cosmetic
- “get_amm_pools” added an optional parameter “until” cosmetic
- “get_network_activity” added an optional parameter “accounts_by_day” cosmetic
- “get_network_activity” added an optional parameter “type” cosmetic
- “get_nft_collection” added an optional parameter “since” cosmetic
- “get_nft_collection” added an optional parameter “until” cosmetic
- “get_tokens_by_category” added an optional parameter “days” cosmetic
- “get_tokens_by_category” added an optional parameter “since” cosmetic
- “get_tokens_by_category” added an optional parameter “until” cosmetic
- “get_account_transactions” reworded the description of “summary” cosmetic
- “get_amm_pools” reworded the description of “amm_account” cosmetic
- “get_network_activity” reworded the description of “by” cosmetic
- “get_network_activity” reworded the description of “daily” cosmetic
- “get_network_activity” reworded the description of “hours” cosmetic
- “get_nft_collection” reworded the description of “rank” cosmetic
- “get_tokens_by_category” reworded the description of “min_holders” cosmetic
- “get_tokens_by_category” reworded the description of “sort” cosmetic
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 0
- Resource “Public API endpoint catalog for api_get (192 endpoints)” was removed ▼ functional
- New resource “Public API endpoint catalog for api_get (193 endpoints)” functional
- 29 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Oct 26 0
- Tool “get_account_objects” rewrote its description, which is the text the model reads security
- Tool “get_account_transactions” rewrote its description, which is the text the model reads security
- Tool “get_holders” rewrote its description, which is the text the model reads security
- New tool “get_trader_rotations” functional
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
- Resource “Public API endpoint catalog for api_get (187 endpoints)” was removed ▼ functional
- New resource “Public API endpoint catalog for api_get (192 endpoints)” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://api.xrpl.to/v1/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=xrpl.to | CN=WE1,O=Google Trust Services,C=US | 14 Oct 2026 | 12 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | b4a45687b9df2f1b13e09759a3181e0d |
| SANs: xrpl.to, *.xrpl.to | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.xrpl.to. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| to. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.xrpl.to/v1/mcp | Verified | 200 | |
| http (plaintext) | http://api.xrpl.to/v1/mcp | HTTPS enforced | 301 | https://api.xrpl.to/v1/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_orderbook ~61
Live XRP order book for a token (bids/asks with sizes). Returns: bids[] and asks[] with price, amount, total, maker; spread.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| limit | integer | – | – |
No output schema declared.
No examples provided.
get_payment_flows ~392
Trace an XRPL wallet's payment flows: who funded it and where it sent XRP and tokens, aggregated by counterparty (XRP as xrp/txCount, tokens by asset as tokens/tokenTxCount) with named exchanges labeled. Reads its latest transactions (up to 200) by default; all_history reads its whole history (up to 10,000), for "everyone it ever paid or was paid by". For everything between specific wallets (tokens too), use get_account_transactions with counterparty; for totals over a date range, get_account_transactions with since, until and summary. Dust probes (senders of a few drops, "has this wallet been probed") are flagged, with any sender whose address mimics a real counterparty's (address poisoning). Returns: inflows[]/outflows[] {counterparty, name, xrp, txCount, tokens? {<currency>.<issuer>: amount}, tokenTxCount?, isExchange (custodial: many wallets pay it under their own destination tags, as exchanges are paid), service (a named account that is not custodial: a fee wallet, a platform, a project), dust} (15 each, 40 with all_history; counterparties gives the full counts when more), dust {senders, payments, lookAlikes[]}, netXrp (XRP only), and scanned (tx count / hasMore).
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| all_history | boolean | – | Read the whole history instead (25 s of reading, about 25,000 transactions; with background, up to 200,000) |
| background | boolean | – | Run as a background job for up to 10 minutes, for more than 25 s of reading: answers at once with a job_id; get_job returns the result |
| limit | integer | – | latest transactions to scan |
No output schema declared.
No examples provided.
get_prediction_markets ~80
Active Polymarket prediction markets on the Fed, crypto or the economy, busiest first, each outcome priced as a probability (0-1). Returns: {topic, events[] {title, url, endDate, volume24hUsd, markets[] {question, outcomes[] {name, probability}}}}.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | – |
No output schema declared.
No examples provided.
get_protocol_rules ~271
XRP Ledger protocol rules checked against the rippled source this server runs: what the ledger allows and refuses and what things cost. Covers freezes and deep freeze, clawback, authorization, trust lines and their limits, payments and partial payments, Deposit Authorization, DisallowXRP, escrows, expiry of offers, checks and NFT offers, self-crossing offers, checks, AMM fees, votes, auction slot, LP tokens, one-sided withdrawals and deletion, NFT transfer fees and mutability, keys and the free key reset, AccountDelete, multisigning, tickets, Batch fees, ordering inside a ledger, sequence errors, amendment majority, close times, oracles and node operations. Each rule carries its evidence (file, current line, permalink), found again on every call; verified:false means the source changed and the rule needs re-checking. Check here BEFORE answering a protocol question from memory; search_rippled_source for anything it does not cover. Returns: {commit, rules[] {id, topics, rule, verified, evidence[] {file, line, url, snippet}}}.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | A topic or keywords, e.g. "deep freeze", "escrow", "amm", "partial payments", "account deletion". Omit to list every rule without evidence. |
No output schema declared.
No examples provided.
get_related_projects ~71
Projects sharing an AUDIENCE with a token (co-holders, co-mentions) — shared audience, not shared operator. Returns: related[] tokens/NFT collections sharing holders or promoters, with shared-wallet counts and posts; empty when none.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
get_social_mentions ~201
Recent X/Twitter posts mentioning a token. Without an id, the tokens mentioned most over the last `hours`: posts, distinct authors, views, and the bullish/bearish/neutral reading of the posts rated so far. Returns: mentions[] posts with author, text, engagement, time; without id {window, tokens[] {md5, name, mentions, authors, views, sentiment {bullish, bearish, neutral, rated}}}.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | With follower_growth: the window |
| follower_growth | boolean | – | Instead: the X accounts xrpl.to follows (project and token accounts) that gained the most followers over the last `days` (default 7), with the tokens that name them |
| hours | integer | – | Without an id: the window, ending now |
| id | string | – | Token md5 or slug (omit to rank the most-mentioned tokens) |
| limit | integer | – | – |
No output schema declared.
No examples provided.
get_swap_quote ~178
Exact swap quote between two tokens on the XRPL DEX (AMM + order book routed). Token ids: md5, or the literal "XRP". Give source_value (amount to spend) OR destination_value (amount to receive). Returns: quote {source_amount, destination_amount (XRP drops string or {currency,issuer,value}), execution_rate, spot_price, price_impact, amm_price_change, suggested_slippage, minimum_received, paths, warnings, route}, alternatives, requiresTrustline.
| Name | Type | Req | Description |
|---|---|---|---|
| destination_token | string | yes | – |
| destination_value | string | – | Amount of destination_token to receive |
| source_account | string | – | Optional r-address the quote is computed for (reserve/spendable checks) |
| source_token | string | yes | – |
| source_value | string | – | Amount of source_token to spend |
No output schema declared.
No examples provided.
get_testnet ~112
xrpl.to's live XRP Ledger TESTNET: the tokens (stablecoin, deep and volatile pools, edge cases such as transfer fee, frozen, auth-only, blackholed), AMM pools, NFT collections and test accounts it keeps active, the faucet grant, node state and the endpoints to read, submit and stream through. Read the ids from here rather than inventing them — a Testnet reset changes them. Returns: {network, node, faucet, endpoints, tokens[], pools[], collections[]}.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_token ~184
Detail for one XRPL token: price, market cap, volume, TVL, holders, origin, risk fields. id = md5, slug, or "XRP". Compact by default (the ~55 essential fields); pass full=true for the entire document. Returns: token with exch (XRP price), usd, marketcap, vol24hxrp, tvl, holders, trustlines, pro5m/1h/24h/7d changes, origin, tags, creator, top10, creatorHoldingPercent, depthPlus2/Minus2, tvlChange24h, vol6h/7d (full adds description, social links, supply detail and pipeline fields).
| Name | Type | Req | Description |
|---|---|---|---|
| full | boolean | – | Return the whole document instead of the compact essentials |
| id | string | yes | Token md5 / slug / issuer-currency / XRP |
No output schema declared.
No examples provided.
get_token_analytics ~70
Trader-side analytics for a token: unique traders, buyer/seller split, suspected wash volume, concentration. Returns: trader-side metrics: unique traders/makers/takers, buyer vs seller counts, suspected wash volume share, concentration of volume.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
get_token_flow ~166
Supply flow map: where the issued/dev supply went — held, locked in escrow, sold, pooled, sent to exchanges, burned. Returns: summary with the split as percentages of supply (retainedPctOfSupply, placedLockedPctOfSupply, tracedSoldPctOfSupply, lpDepositedPctOfSupply, placedToExchangePctOfSupply, creatorBurnedPctOfSupply, untracedPctOfSupply, unscannedPctOfSupply), flowSubject + flowSubjectRole (dev|issuer), XRP totals (totalSoldXrp, totalBoughtXrp, netFlowXrp, totalToExchanges), coverage flags (creatorScanComplete, preFloorLaunch); exchangeBreakdown[]; linkedAddresses[].
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
get_token_pairs ~51
Trading pairs a token trades in, with per-pair volume. Returns: pairs[] the token trades in with counter asset and 24h volume.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
get_tokens_by_category ~741
Tokens in a category/tag (e.g. Memes, Stablecoin, Gaming, FirstLedger), or of one token type: token_type mpt lists the Multi-Purpose Token (MPT) issuances with each issuance's rules read from the ledger, lp the AMM LP tokens; with neither, every listed token. Sorted by 24h volume unless sort says otherwise (holders for the most-held). With group_by issuer, issuing accounts ranked by tokens issued. With issuer_setting, every token with at least min_holders holders whose issuer's account has that setting, read live from the ledger: clawback, transfer_fee (with the fee), no_freeze, global_freeze, require_auth, blackholed, or no_default_ripple (DefaultRipple not set, so holders cannot send it to each other). Returns: tokens[]; with issuer_setting {setting, minHolders, checked {tokens, issuers}, matched, tokens[] {md5, name, currency, issuer, issuerName, holders, transferFeePct?}}.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Tag, e.g. Memes, Stablecoin, FirstLedger (optional when token_type is given) |
| days | integer | – | With sort holders_change and no since: the window is the last N days (default 7) |
| group_by | string | – | Instead: issuing accounts ranked by how many tokens each has issued (or by rank_by), with how many still have holders, their holders, trust lines and listed market cap, and each one's largest tokens |
| inactive_days | integer | – | With sort inactive: the idle period |
| issuer_setting | string | – | Tokens whose issuer has this setting on now (read from the validated ledger); no_default_ripple: the issuer has NOT set DefaultRipple, so holders cannot send the token to each other |
| limit | integer | – | – |
| min_holders | integer | – | With issuer_setting or sort holders_7d, holders_change, lp_burned, creator_holding or inactive: only tokens with at least this many holders today |
| min_marketcap | number | – | With sort turnover: only tokens with at least this market cap in XRP |
| rank_by | string | – | With group_by issuer: the ranking |
| since | string | – | With sort holders_change: start of the window, ISO date or Unix ms |
| sort | string | – | trades: the most trades (DEX fills) in the last 24 hours, whatever their size. turnover: 24h volume as a share of market cap, over every token with at least min_marketcap. trustlines_24h / holders_24… |
| token_type | string | – | – |
| until | string | – | With sort holders_change: end of the window, ISO date or Unix ms (default now) |
No output schema declared.
No examples provided.
get_top_movers ~100
Biggest gainers or losers over a timeframe. Returns: tokens[] sorted by the chosen timeframe change (pro5m/1h/24h/7d) with lightweight fields.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | – | – |
| limit | integer | – | – |
| min_holders | integer | – | Only tokens with at least this many holders (ranked over every such token, not a page of the overall list) |
| timeframe | string | – | – |
No output schema declared.
No examples provided.
get_top_traders ~109
Top traders of a token ranked by P&L, volume or wash-trading score, with realized/unrealized PnL, ROI and balances. Returns: traders[] with account, realized/unrealized PnL (XRP), ROI, buy/sell volumes, trade counts, current balance, wash flag.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| interval | string | – | – |
| limit | integer | – | – |
| sortBy | string | – | – |
No output schema declared.
No examples provided.
get_trade_brief ~448
One call for the market around XRP: XRP's price and 24h change (xrpl.to's own) and the crypto market (CoinGecko), xrpl.to's Fear & Greed for the XRP Ledger, perpetuals across six venues (the OI-weighted 8-hour funding rate, open interest, each venue's rate, long/short ratios, taker buy/sell over the last full hour), liquidations (OKX's latest orders, Gate's last 24 hours and 7 days, its heaviest hour, and the last 24 hours each venue streamed), US spot XRP ETF flows, the Coinbase and Korea premiums, and the latest US macro readings. Every figure is the answer of the tool named for it, cut to its headline, with sources and times and no verdict. Use it for "market overview", "what is the market doing", "how is XRP positioned"; get_funding_rates, get_liquidations, get_crypto_market and get_macro_indicators carry the detail. Returns: {asset, at, xrp {priceUsd, change24hPct, source}, market {totalMarketCapUsd, marketCapChange24hPct, btcDominancePct, xrpMarketCapUsd, xrpRank, at, source}, fearGreed {value, label, index}, derivatives {fundingRate8hWeighted, openInterestUsd, venues {venue: {fundingRate8h, openInterestUsd}}, longShort {measure: {venue: ratio}}, takerBuySell {hourStart, venue: ratio}}, liquidations {okxLatest {from, to, orders, longsUsd, shortsUsd}, gate24h, gate7d, gateHeaviestHour, streamed24h {venue: {longsUsd, shortsUsd, connected}}, streamsSince}, etf {latestDay, lastWeek, at}, premiums {coinbasePct, koreaPct}, macro[] {id, name, value, date, previous}, unavailable[] (sections that did not answer)}.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | Whose perpetuals and liquidations; the rest is XRP's and the market's |
No output schema declared.
No examples provided.
get_trader_rotations ~331
Where active DEX traders are moving XRP between tokens. A rotator is an account that both bought and sold tokens in the window; the window counts whole UTC days (24h = yesterday and today). Without id, the whole market: the tokens rotators traded most, with rotateInXrp (XRP they spent buying it), rotateOutXrp (XRP they got selling it), netFlow (in minus out) and trader counts, plus the 20 biggest rotators with their top buys and sells. With id, one token: which other tokens its sellers bought in the same window (rotatedTo), which tokens its buyers sold (rotatedFrom), each capped at the trader's own volume in this token, and freshCapital, its buyers who sold nothing else. Same window, not proven order. Returns: market {period, totalRotators, totalTokensInvolved, tokens[] {md5, name, rotateInXrp, rotateOutXrp, netFlow, rotateInTraders, rotateOutTraders}, topRotators[] {account, totalVolume, tokenCount, topTokens[]}}; token {period, sellers, buyers, sellVolume, buyVolume, rotatedTo[] {md5, name, xrp, traders, topTraders[]}, rotatedFrom[], freshCapital[] {account, xrp}, freshCapitalTotal, freshCapitalCount}.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | Token md5 or slug; omit for the whole market |
| limit | integer | – | Tokens in the market view |
| period | string | – | – |
No output schema declared.
No examples provided.
get_trades ~284
DEX trades for a token (time, side, amounts, price, trader): the latest, or those inside a past window (since/until), optionally of one trader. by_account true answers "who sold into that dump": the whole window (up to 7 days) totalled per wallet — net XRP each one sold or bought, the price path (open, close, low, high, with the fill that printed the low) and, for windows up to 48 h, an hourly breakdown. Returns: trades[] with time, amounts paid/got, price, maker/taker, hash; with by_account: {window, fills, price {open, close, low {price, time, taker, hash}, high}, sellers[], buyers[] {account, name, xrpSold, xrpBought, net, fills}, byHour[]}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | – | Only this trader's fills (r-address) |
| by_account | boolean | – | Total the window per wallet instead of listing fills (needs since; at most 7 days) |
| id | string | yes | Token md5 or slug |
| limit | integer | – | – |
| since | string | – | ISO date/time or Unix ms: trades at or after it |
| until | string | – | ISO date/time or Unix ms: trades at or before it |
No output schema declared.
No examples provided.
get_transaction ~55
Look up an XRPL transaction by hash. Returns: decoded transaction: type, account, destination, amounts, fee, result code, ledger, date, affected balances.
| Name | Type | Req | Description |
|---|---|---|---|
| hash | string | yes | 64-char hex tx hash |
No output schema declared.
No examples provided.
get_trending_tokens ~37
Top trending XRPL tokens right now. Returns: tokens ranked by trendingScore with lightweight market fields.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
No output schema declared.
No examples provided.
get_validators ~860
The validators xrpl.to's Mainnet node trusts (its UNL, from the default validator list sites), each with the domain in its signed manifest, its server version and its last vote; and every amendment still being voted on, with rippled's own tally (votes for, the threshold, when majority was reached, whether this node's software knows the amendment). Votes come from the validators' own validations of each voting ledger (every 256th). Pass amendment (a name or id) for which validators support it and which do not. Use it to say whether a validator key is on the default UNL, who runs it (the domain is the operator's own claim unless the domain verifies it), and where an amendment stands. What an amendment changes is not in this tally: read it in the code with search_rippled_source for its switch (feature<Name>, or fix<Name> itself; e.g. featureBatchV1_1), and get_protocol_rules. A name the source does not hold was built outside rippled's public develop branch (3.4.1 knows fixBatchV1_2; develop does not), so say that rather than guess from the name. Returns: {count (every key this node trusts, its own validator included), onDefaultLists (the default UNL: keys on at least one list), thisNodesValidator?, votesInLatestRound, votesWithin24h, validators[] {key, domain, version, lastVote {ledger, time}, onLists[] (the default list sites carrying the key), thisNode?, feeVote?}, feeVotes {heard, baseFee|reserveBase|reserveInc: {currentDrops, votes[] {drops, validators, direction}, keepCurrent}, proposals[], changes} (the next flag ledger's fee vote, run as rippled runs it), amendments[] {id, name, count, threshold, validations, hasMajorityNow, majoritySince, knownToThisNode, supporters?, notSupporting?, noRecentVote?, heldByRippled? {validators, supporting, names?}}, lists[] {uri, expiration, count}, note}; for an amendment already enabled: {amendment {id, name, enabled, enabledAt {ledger, time}}} (when it went live, read from the ledger); with history, events[] {ledger, time, am…
| Name | Type | Req | Description |
|---|---|---|---|
| agreement_hours | integer | – | Instead: each UNL validator's agreement over the last N hours (UTC clock hours): validated ledgers it validated too, signed differently, or missed |
| amendment | string | – | Optional: an amendment name or 64-hex id, to list its supporters and the validators not supporting it; for an enabled one, when it went live |
| commits_days | integer | – | Instead (or with releases): rippled development over the last N days: commits on develop and the top contributors |
| history | integer | – | Optional: the last N amendment events on the ledger (gained majority, lost majority, enabled), newest first |
| locations | boolean | – | Instead: where each trusted validator says it is: owner_country and server_country from its operator's own xrp-ledger.toml entry for its key (self-declared), with a count per server country |
| releases | boolean | – | Instead: rippled's latest GitHub releases (tag, date, the start of the release notes) beside the versions the trusted validators run |
No output schema declared.
No examples provided.
get_wallet_pnl ~178
Trading P&L profile of a wallet across all tokens: realized/unrealized PnL, ROI, win rate, volume, best/worst trades. realizedPnl counts tokens sold without a recorded purchase (transfers, airdrops, LP withdrawals) at zero cost; pnlSplit separates the trading result on positions it bought from those proceeds. Returns: aggregate trading profile: realized/unrealized PnL, pnlSplit {tradingPnlXrp, uncoveredProceedsXrp}, ROI, win rate, volumes, trade counts, topTokens[] (the 15 biggest by profit, each with the same split: tradingPnlXrp, uncoveredProceedsXrp, tokensSoldWithoutPurchase). 404 (isError) for wallets with no DEX trades.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
get_wallet_risk ~87
Composite risk read for an XRPL wallet from on-chain signals — scam-list status, account age, funding source (exchange vs unlabeled), blackhole, balance. Transparent factor breakdown + an aggregate level (Low/Medium/Elevated/Critical), not a black-box score. Returns: {level, factors, activator, signals}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
No output schema declared.
No examples provided.
get_wash_trading ~207
Wash-trading check for a token: which wallets self-trade to fake volume, using the per-wallet wash score (0-100, from FIFO/self-trade analysis); or, with collection, for an NFT collection: sales of an NFT back to a wallet that owned it, and sales between wallets tied by creation (backToPreviousOwner, linkedSales, repeatPairs, flaggedVolumePct). Returns a token-level verdict plus the top offenders. Returns: {washTraders, highWashTraders, washVolumeXrp, tradersScanned, verdict, topWashers[] {account, washScore, suspicious, volumeXrp, trades}}.
| Name | Type | Req | Description |
|---|---|---|---|
| collection | string | – | An NFT collection slug or id instead: wash trading in its sales |
| days | integer | – | Collection mode: how many days of sales to read |
| id | string | – | Token md5 or slug |
| interval | string | – | Window for the trader stats (default all) |
No output schema declared.
No examples provided.
get_whale_activity ~83
Recent large trades on a token with whale badges (smart money, named wallets, cross-token holders). Returns: events[] of large fills with side, xrpAmount, account, badges (smart money, named, cross-token holder, new wallet), time, hash.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
| limit | integer | – | – |
No output schema declared.
No examples provided.
get_xrp_distribution ~435
How XRP is spread across accounts, from xrpl.to's index of every account balance (kept current each ledger): accounts and XRP in balance bands (over 1B, 100M-1B, 10M-100M, 1M-10M, 100k-1M, 10k-100k, 1k-10k, under 1k), each as a share of the total supply and of the XRP held in accounts (the supply less escrowed XRP); with min_xrp, the accounts and XRP above that line. Answers "how many accounts hold over 1M XRP, and what share". With list true, the accounts themselves, largest first, each with the last ledger any transaction touched it, and with inactive_years only the dormant ones. Also live and deleted account counts. Returns: {asOf {ledger}, supply, escrowed, inAccounts, accounts {live, deleted}, bands[] {minXrp, maxXrp, accounts, xrp, shareOfSupplyPct, shareOfXrpInAccountsPct}, above? {minXrp, accounts, xrp, shareOfSupplyPct, shareOfXrpInAccountsPct}}.
| Name | Type | Req | Description |
|---|---|---|---|
| by_label | boolean | – | Also the XRP held under each account label in xrpl.to's index (an exchange, a company, a person), summed over EVERY wallet with that label: how much sits with exchanges |
| inactive_years | number | – | With list: only accounts no transaction has touched for this many years (dormant holders) |
| limit | integer | – | With list: how many accounts |
| list | boolean | – | Instead: the accounts above min_xrp themselves, largest first (the XRP rich list), each with the last ledger that touched it |
| median | boolean | – | Also the median balance and the accounts under 1, 10 and 100 XRP (counts over every account, about a second) |
| min_xrp | number | – | Optional: accounts holding more than this many XRP (1,000 or more) |
No output schema declared.
No examples provided.
identify_token_operator ~98
Who runs an XRPL token, searched on the web and X using the token's issuer, name, X account and website. Returns leads with the posts and pages behind them, not proof. Needs your own X-Api-Key (20,000 credits a call). Returns: {subject, answer, sources[] (links), searches {web, x}, asOf, note}.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Token md5 or slug |
No output schema declared.
No examples provided.
identify_wallet_owner ~131
Who owns or runs an XRPL wallet, searched on the web and X — for the question the ledger cannot answer (on-chain tools prove links between wallets, never a name). Returns leads with the posts and pages behind them, not proof. Needs your own X-Api-Key (20,000 credits a call). Returns: {subject, answer, sources[] (links), searches {web, x}, asOf, note}.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string | yes | r-address |
| context | string | – | Optional: what you already know (a token it issued, a handle), max 300 chars |
No output schema declared.
No examples provided.
pick_giveaway_winners ~285
Draw winners for an XRPL giveaway from the replies to an X post: the XRPL addresses posted, one entry per X account and per address, drawn with the hash of an XRP Ledger ledger as the public seed, so anyone can repeat the draw. Pass closes_at (when the giveaway closed) and the seed is the first ledger that closed after it: every caller gets the same winners and nobody can draw again for a different result; without it the newest ledger is the seed, so each call draws anew. X search returns only part of a thread (once 6 of 68 replies), so the result says how many replies it saw: check the post and add anyone missing before treating the draw as final. Returns: {tweetId, repliesSeen, entrants, winners[] {rank, handle, address}, seed {ledger, hash, closedAt, rule}, method, entrantList[], note}.
| Name | Type | Req | Description |
|---|---|---|---|
| closes_at | string | – | When the giveaway closed, as a date and time (e.g. 2026-10-06T18:00:00Z): the seed is the first ledger that closed after it, the same for everyone. Refused while the giveaway is still open |
| tweet_url | string | yes | The giveaway post: an X link containing /status/<id> |
| winners | integer | – | How many winners |
No output schema declared.
No examples provided.
recall_notes ~46
Recall notes saved earlier under this X-Api-Key, optionally filtered by subject (exact or prefix match). Returns: notes[] newest first.
| Name | Type | Req | Description |
|---|---|---|---|
| subject | string | – | Optional subject filter |
No output schema declared.
No examples provided.
run_script ~857
Run a short read-only JavaScript program against the XRP Ledger, for what no other tool answers: a scan of every ledger in a past day (about 22,000 ledgers: split it over three calls and add the parts), a sample of ledgers across history, many accounts' histories, anything that needs a loop over rippled reads. When the question needs one, run it rather than offering to: the all-time transaction count, which no index stores, is a sample of ledgers across history (stratified by period, since a ledger held a few transactions in 2013 and over a hundred now) scaled up and given with its 95% interval. Write the body of an async function and return a JSON value. Inside the program: xrpl(method, params, {network}) returns rippled's result for any read-only command xrpl_command takes (current state comes from the local node; ledgers and transactions older than its ~3 days come from full-history nodes, about 200 ledgers a second; rippled errors such as actNotFound come back in the result); api(path, query) returns any documented public xrpl.to GET endpoint; pmap(items, fn, n) runs fn over items n at a time (use it: one call at a time is slow); log(...) keeps up to 60 lines; rippleTime(s) turns a close_time into an ISO date; ledgersBetween(since, until) returns {first, last, count}, the ledgers that closed in [since, until) (a ledger often closes exactly at midnight, and it belongs to the day it opens). No network, files, timers or modules. Limits per call: 50 s, 20,000 node calls (96 at a time), 300 api calls, 64 MB, 60,000 characters of result. Needs an API key. Ways that work: to go on with a paged read (account_tx) in the next call, return its marker and pass it back in; never restart from a ledger index, since one ledger can hold several of the account's transactions. How many transactions an account sent in a window: get_account_transactions with summary and since/until (sentInRange), or in a program the change in its Sequence less the change in its TicketCount (absent…
| Name | Type | Req | Description |
|---|---|---|---|
| background | boolean | – | Run as a background job for up to 10 minutes and 200,000 node calls, for a program that needs more than 50 s: answers at once with a job_id; get_job returns the result |
| code | string | yes | The program: the body of an async function, ending in return |
| network | string | – | The network xrpl() reads; api() always reads xrpl.to's Mainnet data |
No output schema declared.
No examples provided.
save_note ~115
Save a finding under a subject (a wallet, a token, a topic) so it can be recalled in later sessions. Notes belong to the X-Api-Key making the call; without a key this tool explains how to get one. Returns: the stored note {id, subject, text, at}.
| Name | Type | Req | Description |
|---|---|---|---|
| subject | string | yes | What the note is about — an r-address, token md5/name, or a topic (max 64 chars) |
| text | string | yes | The finding (max 1000 chars) |
No output schema declared.
No examples provided.
scan_tweet_addresses ~88
XRPL addresses posted in the replies to an X (Twitter) post — for airdrops and giveaways. X search returns only part of a thread, so the result says how many replies it saw. Returns: {tweetId, repliesSeen, addresses[] {address, handle, snippet}}.
| Name | Type | Req | Description |
|---|---|---|---|
| tweet_url | string | yes | https://x.com/<user>/status/<id> |
No output schema declared.
No examples provided.
search_forum_posts ~221
Search the scraped early-XRP / Ripple forum corpus for historical context on-chain tools cannot give: BitcoinTalk ripple threads (e.g. "Pizza for ripples?", "Ripple Giveaway!", "Selling XRP for FRC", "A foundation with 80% of the coins can never work"), bitcoin-otc web-of-trust ratings (the fuzzybear OTC trader), and archived forum.ripple.com. Use for provenance / "who said what in early XRP" / founding-era questions. Returns matching passages with the source site and original thread URL, citable. Returns: {count, matches[] {site, url, title, snippet}}.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | Max matches to return (default 20, max 50) |
| query | string | yes | Word, phrase, wallet address, or (with regex:true) a POSIX ERE. e.g. "pizza", "fuzzybear", "rHb3LGN" |
| regex | boolean | – | Treat query as a regular expression (default false = literal) |
No output schema declared.
No examples provided.
search_rippled_source ~384
Search the actual rippled C++ source code (the XRPL server implementation) for engine-internals questions the docs and node cannot answer: exact constants, flag bit values, fee/reserve/AMM math, transaction apply/retry logic, canonical tx ordering, error-code meanings. It also reads the repository's own documents, first: API-CHANGELOG.md (which xrpld version added or changed each API method), API-VERSION-2.md / API-VERSION-3.md, cfg/xrpld-example.cfg (every config section and key with its limits) and docs/. Returns matching file:line excerpts pinned to the checked-out commit, each citable as a GitHub permalink. Use this for "what is the exact value/behaviour in rippled" questions; get_protocol_rules holds the rules already checked against it, and explain_result_code reads a result code with its branches. Returns: {commit, permalinkBase, count, matches[] {file, line, text, section (the heading a document match sits under)}}.
| Name | Type | Req | Description |
|---|---|---|---|
| context | integer | – | Lines of surrounding context per match (0-3, default 0) |
| max_results | integer | – | Max matches to return (default 25, max 50) |
| path_glob | string | – | Restrict to files matching this glob, e.g. "*.h", "AMM*.cpp" or "*.cfg" (default: .h/.cpp/.ipp/.macro and the .md/.cfg/.txt documents) |
| query | string | yes | What to find — a symbol, constant, string, or (with regex:true) a POSIX ERE. e.g. "kTradingFeeThreshold", "tecPATH_DRY", "canonical" |
| regex | boolean | – | Treat query as a regular expression (default false = literal string) |
No output schema declared.
No examples provided.
search_tokens ~175
Search XRPL tokens by name, symbol or issuer address. Returns matching tokens with md5 ids, price, volume and market cap. An r-address returns every token that account issued or created (a launchpad creator funds a separate issuer wallet; role says which), including the ones tagged Scam, which a name search leaves out; their tags say so. Returns: up to 15 matches with md5, name, issuer, currency, verified flag, price, 24h volume, market cap, holders, tags.
| Name | Type | Req | Description |
|---|---|---|---|
| oldest | boolean | – | Instead: every token with exactly this name, oldest first, with when each was created (the search ranks by activity, so an old or dormant token of a common name is not in its 15) |
| query | string | yes | Token name, symbol or issuer r-address |
No output schema declared.
No examples provided.
search_x ~124
Live X (Twitter) search on any topic, not only a token: an amendment, a project, a person, an address, a domain. X search operators work (from:user, "exact phrase", -word, since:YYYY-MM-DD). A sample of recent matching posts, not every post; each is its author's claim. 10 credits a call. Returns: {query, count, posts[] {author, name, text, likes, reposts, views, url, time}}.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| query | string | yes | – |
No output schema declared.
No examples provided.
search_xrpl_docs ~258
Search the XRP Ledger documentation at xrpl.build (xrpl.org's docs, lighter and improved, at the same paths): how the ledger works and how to build on it. Transaction types with their fields, flags and error cases, API methods, concepts (reserves, tickets, rippling, AMM, escrow, multi-signing ...), tutorials and code samples. Use it for any "how do I / what does field X mean / which flag" question and link the xrpl.build page it returns (url). Pass page (a path or URL it returned) to read a whole page. Returns: {query, count, results[] {title, section, url, description, excerpt}}, or with page {page, title, url, sections[] {heading, text}}.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Results (default 5, max 10) |
| page | string | – | Read one whole page instead: a path or URL a search returned, e.g. "docs/concepts/accounts/tickets" |
| query | string | – | A few words, a transaction type, a field or a flag name, e.g. "AMMDeposit flags", "TicketSequence", "partial payments delivered_amount" |
No output schema declared.
No examples provided.
xrpl_command ~352
Call any READ-ONLY rippled JSON-RPC command directly against the XRPL node — the full ledger API for anything the higher-level tools do not cover: account_objects, account_offers, account_channels, ledger_entry, ledger_data, owner_info, noripple_check, deposit_authorized, nft_buy_offers, nft_sell_offers, ripple_path_find (engine-computed payment paths and cost), transaction_entry, get_aggregate_price (price oracles), vault_info (single-asset vaults), simulate (dry-run a tx, submits nothing), server_info, feature, plus the Clio reads mpt_holders (who holds an MPT issuance), nfts_by_issuer and nft_info, and more. Write/sign/admin commands are refused. Params follow xrpl.org for that command. To find the ledger at a date, do not bisect with ledger: api_get /ledger/at with time=<ISO date> returns the last ledger closed at or before it (the one after it is the first to close later). Returns: the raw rippled result.
| Name | Type | Req | Description |
|---|---|---|---|
| command | string | yes | rippled command name, e.g. "account_objects", "ledger_entry", "simulate", "vault_info" |
| network | string | – | testnet sends the command to xrpl.to's Testnet node (read commands only); an xrpl:1:r… account or a T… X-address selects it too. devnet sends it to Ripple's public Devnet server (s.devnet.rippletest.… |
| params | object | – | Command parameters object as documented at xrpl.org (e.g. {account, ledger_index, limit}) |
No output schema declared.
No examples provided.
How do I install the XRPL.to Token Analytics MCP server?
XRPL.to Token Analytics is a hosted endpoint at https://api.xrpl.to/v1/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.xrpl.to
claude mcp add --transport http xrplto-xrpl-to 'https://api.xrpl.to/v1/mcp'
What is the XRPL.to Token Analytics MCP server?
XRPL.to Token Analytics is an MCP server listed in the public MCP registry as io.github.xrplto/xrpl-to. XRP Ledger tokens, AMM pools, NFTs, accounts and transactions: prices, holders, trades and history. This page covers its hosted endpoint (https://api.xrpl.to/v1/mcp).
Is the XRPL.to Token Analytics MCP server safe to use?
XRPL.to Token Analytics scores 70 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the XRPL.to Token Analytics MCP server expose?
XRPL.to Token Analytics exposes 89 tools: search_tokens, get_token, get_trending_tokens, get_new_launches, get_trades, and 84 more. Their descriptions and schemas cost roughly 24,842 tokens of context every time the server is loaded.
Does the XRPL.to Token Analytics MCP server require authentication?
No. We connected to XRPL.to Token Analytics without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the XRPL.to Token Analytics MCP server still maintained?
XRPL.to Token Analytics is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.