{"serverId":"mcp-registry/io.github.dcroyalty/xrplhub","tools":[{"name":"check_domain_eligibility","fixed":{"name":"check_domain_eligibility","description":"Check whether an XRPL account holds a credential that satisfies a PermissionedDomain (XLS-80d) — the question every domain operator and every would-be participant actually asks before a real transaction. Live against a validated mainnet ledger. Eligibility is OR: any ONE accepted, unexpired credential matching the domain's AcceptedCredentials is enough. Params: wallet_address (r..., required), domain_id (64-hex DomainID, the PermissionedDomain ledger index, required). Free, no signup.","inputSchema":{"type":"object","required":["wallet_address","domain_id"],"properties":{"domain_id":{"type":"string","description":"The PermissionedDomain's ledger index — 64 hex characters"},"wallet_address":{"type":"string","description":"XRPL classic address to check (starts with r)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":231,"tokensAfter":231},{"name":"check_mpt_risk","fixed":{"name":"check_mpt_risk","description":"Get the risk view of one XLS-33 Multi-Purpose Token issuance before touching it: what the issuer CAN DO to a holder (clawback, freeze, require-auth, whether it's transferable at all) plus the issuer's XRPLScore. Free. For the full issuer picture — account age, xrp-ledger.toml-verified domain, credentials held (live ledger reads) — GET /api/x402/usdc/mpt/{id} pays $0.01 USDC on Base via x402. Every response states its source and returns 'unknown', never 'does not exist', when an issuance isn't fo","inputSchema":{"type":"object","required":["issuance_id"],"properties":{"issuance_id":{"type":"string","description":"The MPTokenIssuanceID — 48 hexadecimal characters (XLS-33, 192-bit)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":204,"tokensAfter":204},{"name":"check_service_health","fixed":{"name":"check_service_health","description":"Check whether the XRPLHub money path is working BEFORE you pay: database, Xaman, both x402 facilitators (t54 RLUSD + CDP USDC-on-Base), the on-ledger anchor config, the credential signing secret, and alerting. Returns overall \"ok\" | \"warn\" | \"down\" plus a per-component list. Poll this if a prior paid call failed. No params. Free, no signup.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"check_wallet_permissions","fixed":{"name":"check_wallet_permissions","description":"Who can move money out of an XRPL wallet: its master key, a regular key, a multi-sign signer list, permission delegations (given and received — live on mainnet since 2026-10-08), and money others can pull without a new approval (checks, payment channels, escrows, open DEX and NFT offers, tickets). One plain-English sentence per finding plus the raw ledger facts. This is a PAID x402 call: $0.02 in USDC on Base or RLUSD on the XRP Ledger at GET /api/x402/permissions?address=r.... This tool returns","inputSchema":{"type":"object","required":["address"],"properties":{"address":{"type":"string","description":"The XRPL account (r...) to check"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"check_xrpl_score","fixed":{"name":"check_xrpl_score","description":"Get a 300–850 creditworthiness score for any XRP Ledger wallet before you pay, lend to, trade with, or onboard it. You get back: the score, a letter grade, peer percentile, a per-signal breakdown (account age, lifetime tx history, financial health, token engagement, DEX activity, AMM participation, security config, NFTs), and ranked tips to raise it. Params: wallet_address (r... classic address, 25–35 chars, required). Free — no API key, no signup, 100% public ledger data.","inputSchema":{"type":"object","required":["wallet_address"],"properties":{"wallet_address":{"type":"string","description":"XRP Ledger classic address to score (starts with r, 25–35 characters)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"get_account_credentials","fixed":{"name":"get_account_credentials","description":"Get every XLS-70 credential an XRPL account holds — issuer, type, whether it has been accepted, whether it's expired, and its expiry date. Live against a validated mainnet ledger (never stale). Use this before trusting a counterparty who claims to hold a credential. Default walks the owner directory (bounded ~20s; response has coverage \"complete\"/\"partial\" — for an exchange-scale account it can be partial). Pass issuer (and credential_type unless it is XRPLHub's issuer) to do a direct ledger loo","inputSchema":{"type":"object","required":["wallet_address"],"properties":{"issuer":{"type":"string","description":"Optional — restrict to one issuer via a direct ledger lookup (no owner-directory walk)"},"wallet_address":{"type":"string","description":"XRPL classic address to look up (starts with r)"},"credential_type":{"type":"string","description":"Optional — credential type (plain name or hex); required with issuer unless the issuer is XRPLHub's"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":282,"tokensAfter":282},{"name":"get_issuer_credentials","fixed":{"name":"get_issuer_credentials","description":"Get everything an issuer account has issued: every credential type, distinct subject count, and acceptance rate. Served from a network-wide census rebuilt on a schedule — the response includes coverage (\"complete\" or \"partial\") so a mid-walk answer is never mistaken for a finished count. Params: issuer_address (r..., required). Free, no signup.","inputSchema":{"type":"object","required":["issuer_address"],"properties":{"issuer_address":{"type":"string","description":"XRPL classic address of the credential issuer (starts with r)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"get_issuer_mpts","fixed":{"name":"get_issuer_mpts","description":"Everything one issuer has put out as Multi-Purpose Tokens (XLS-33), from the registry index, plus the issuer's own XRPLScore. Each issuance lists the issuer's powers over a holder. Response carries coverage ('complete-per-known-issuer'/'partial'). Params: issuer_address (r..., required). Free, no signup.","inputSchema":{"type":"object","required":["issuer_address"],"properties":{"issuer_address":{"type":"string","description":"XRPL issuer address (starts with r)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":143,"tokensAfter":143},{"name":"get_lending_exposure","fixed":{"name":"get_lending_exposure","description":"A borrower's TOTAL XLS-66 lending exposure across ALL loan brokers in one call — the XRP Ledger has no aggregate borrower-debt object, so a broker carrying first-loss capital cannot see a borrower's total leverage elsewhere. Returns: outstanding by asset, loan count, distinct broker count, defaults / impairments / overdue, XRPLHub's XRPLScore, and an observation history summary. IMPORTANT: XLS-66 keeps CURRENT exposure only. A defaulted loan zeroes its own amounts (the flag is the credit event, ","inputSchema":{"type":"object","required":["borrower"],"properties":{"borrower":{"type":"string","description":"XRPL classic address (r..., 25–35 chars) of the borrower"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"get_lending_history","fixed":{"name":"get_lending_history","description":"Every loan XRPLHub has EVER observed for a borrower, built from append-only exposure snapshots — the credit file the XRP Ledger can't keep. Per loan: first/last observed ledger, last-known status, monotonic everDefaulted / everImpaired / everOverdue flags, and for loans since deleted from the ledger, the ledger window in which they vanished. A borrower who defaulted and then deleted the loan shows nothing on-ledger; here it shows as vanished with everDefaulted true. `observationWindow` says how ","inputSchema":{"type":"object","required":["borrower"],"properties":{"borrower":{"type":"string","description":"XRPL classic address (r...) of the borrower"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"get_monitoring_info","fixed":{"name":"get_monitoring_info","description":"Describe XRPLHub's continuous-monitoring service so an agent can decide whether to use it: what it watches for a list of wallets (score drops against a threshold YOU set, OFAC SDN list hits, and — once XLS-66 activates — first loan / overdue / impaired / defaulted), how it is delivered (HMAC-signed webhooks, once-a-day checks, attested Merkle-anchored history), per-plan watch slots, the shared capacity limit, the consumer-use acknowledgement text that subscribing requires (no FCRA/ECOA consumer ","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":166,"tokensAfter":166},{"name":"get_underwriting_inputs","fixed":{"name":"get_underwriting_inputs","description":"The full underwriting-inputs bundle a LoanBroker needs for an XLS-66 decision, in one call: cross-broker exposure, XRPLScore + grade, OFAC SDN screening (with its own verifiable receipt), observation history + gaps, and one Merkle-anchored attestation over the whole bundle. FACTS ONLY — it never returns a recommended principal, rate, approve/decline, or probability of default; the broker decides. This is a PAID x402 call: $0.05 USDC on Base at GET /api/x402/lending/underwrite?borrower=r... (no f","inputSchema":{"type":"object","required":["borrower"],"properties":{"borrower":{"type":"string","description":"XRPL classic address (r...) of the borrower"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":198,"tokensAfter":198},{"name":"precheck_payment","fixed":{"name":"precheck_payment","description":"Before your agent pays an XRPL address: one verdict (block / caution / proceed) by fixed published rules — the destination's XRPLScore, a sanctions screen against every list XRPLHub holds (with a verifiable receipt), account age and ledger flags, and whether the ledger would REJECT the payment (missing destination tag, Deposit Authorization, no RLUSD trust line, unfunded account). This is a PAID x402 call: $0.03 in USDC on Base or RLUSD on the XRP Ledger at GET /api/x402/precheck. This tool retu","inputSchema":{"type":"object","required":["destination"],"properties":{"from":{"type":"string","description":"Optional: your paying address — lets the check test Deposit Authorization preauth"},"amount":{"type":"string","description":"Optional: the amount you intend to send (plain decimal)"},"currency":{"enum":["XRP","RLUSD"],"type":"string","description":"Optional: XRP (default when amount is given) or RLUSD"},"destination":{"type":"string","description":"The XRPL address (r...) you are about to pay"},"destination_tag":{"type":"integer","description":"Optional: the destination tag you will use"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":320,"tokensAfter":320},{"name":"prepare_batch_send","fixed":{"name":"prepare_batch_send","description":"Pay 2 to 8 XRPL addresses with ONE signature, all or nothing (XRPL Batch, tfAllOrNothing — live on mainnet since 2026-10-09). Checks every payment on the live ledger first (destination exists or will be created, destination tag, Deposit Authorization, RLUSD trust line, sender balance + fee) and refuses a batch that would fail. Returns the UNSIGNED Batch transaction and a Xaman sign link. FREE. XRPLHub never signs: the sender signs with its own wallet, before sending any other transaction from th","inputSchema":{"type":"object","required":["from","recipients"],"properties":{"from":{"type":"string","description":"The paying XRPL account (r...)"},"recipients":{"type":"array","items":{"type":"object","required":["address","amount"],"properties":{"amount":{"type":"string","description":"Plain decimal, e.g. \"10\" or \"2.5\""},"address":{"type":"string"},"currency":{"enum":["XRP","RLUSD"],"type":"string"},"destinationTag":{"type":"integer"}}},"maxItems":8,"minItems":2}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":285,"tokensAfter":285},{"name":"screen_address_ofac","fixed":{"name":"screen_address_ofac","description":"Compare one XRPL address against a vintage-pinned snapshot of the US Treasury OFAC SDN list (exact address-string match only) and get a factual, Merkle-anchored receipt. ATTESTS TO PROCESS, NOT GROUND TRUTH: the receipt records that the address was compared against a named list snapshot (its OFAC publish date + the SHA-256 of the exact file) at a stated time, and what the comparison found. A \"no match\" means the address did NOT appear on that list version — it is NOT a statement that the address","inputSchema":{"type":"object","required":["address"],"properties":{"address":{"type":"string","description":"XRPL classic address (r..., 25–35 chars) to compare against the OFAC SDN list"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":206,"tokensAfter":206},{"name":"search_mpts","fixed":{"name":"search_mpts","description":"Search the XRPL Multi-Purpose Token (XLS-33) registry index by issuer address, MPTokenIssuanceID (or a hex prefix of one), or token name / ticker. Returns each match with issuer powers (clawback, freeze, require-auth, transferable), supply, holder count and source. Served from the index — the response carries coverage ('complete' or 'partial') and lastCompletedPassAt; treat 'partial' as a floor, not the whole population. Params: q (required). Free, no signup.","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Issuer address (r...), MPTokenIssuanceID or hex prefix, or token name/ticker"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":190,"tokensAfter":190},{"name":"submit_grant_application","fixed":{"name":"submit_grant_application","description":"Apply for a community micro-grant ($25–$100) paid wallet-to-wallet from the XRPLHub on-chain treasury for rent, utilities, groceries, medical, transport, or childcare. Returns a grant id and status. A person reviews every application and makes every decision — no automated triage, no middleman. Params: wallet_address (r..., required), category (RENT|UTILITIES|GROCERIES|MEDICAL|TRANSPORT|CHILDCARE|OTHER, required), amount (25–100, required), description (2–4 sentences, required). No signup.","inputSchema":{"type":"object","required":["wallet_address","category","amount","description"],"properties":{"amount":{"type":"number","description":"Amount requested in RLUSD (1–100)"},"category":{"type":"string","description":"Grant category: RENT, UTILITIES, GROCERIES, MEDICAL, TRANSPORT, CHILDCARE, or OTHER"},"currency":{"type":"string","description":"Payout currency. Default and recommended: RLUSD"},"description":{"type":"string","description":"Clear description of the need, situation, and urgency (2–4 sentences). Be specific — vague applications are harder for the reviewer to verify."},"wallet_address":{"type":"string","description":"XRPL wallet address where the grant will be sent if approved"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":350,"tokensAfter":350}],"toolsChanged":17,"tokensSaved":0,"todo":[{"tool":"prepare_batch_send","params":["recipients"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}