Inspiration
Anyone can create a token on the XRP Ledger and call it anything. On mainnet right now there are several tokens named RLUSD that aren't Ripple's stablecoin. Most of them have a "black-holed" issuer, which simple checkers score as safe. People ask friends, Discord or an assistant "is this legit?", and the answer is usually a guess. We wanted an assistant that answers from the ledger itself, in one spoken sentence, and can say why.
What it does
XRPL Token Guard is a self-hosted MCP server with three read-only tools:
check_token_safetyis the full live check of an XRPL token. It covers:- imitations of official tokens (RLUSD, USDC, SOLO)
- issuers that can still mint, freeze or claw back
- Global Freeze, transfer fees
- unverified or launchpad-only domains
- whale concentration (the AMM pool is excluded, so it isn't counted as a whale)
- thin AMM liquidity, brand-new issuers
is_it_the_real_tokenanswers "is this the real RLUSD?" instantly from verified official issuers.check_wallet_securitydetects the classic wallet-drainer setup: a stranger's regular key or multisig signer list. It marks changes from the last 7 days as urgent.
Every answer comes in three layers:
- a verdict: High risk / Caution / No red flags found / Not enough data
- reasons, each citing the exact ledger fact
- a
spoken_summary, written to be read aloud by Alexa+ or any voice assistant
The verdict is honest: "No red flags found" always comes with "that's not a promise". There's also a voice_token_check prompt that tells an assistant to answer in two sentences with no buy/sell advice.
The repo includes a voice-assistant simulator (the rules' "simulated Alexa+ web app" path).
- You speak or type a question in the local simulator. It runs a real MCP client over Streamable HTTP, calls the server live and speaks the answer. The hosted demo currently supports typed questions and example chips; microphone capture is disabled by the hosting policy. This is a simulator, not an actual Alexa integration.
- A side panel shows the actual
tools/callrequest and result, so you can see the MCP server being called at runtime.
How we built it
- Server: TypeScript with the official MCP TypeScript SDK (protocol 2025-11-25).
- Streamable HTTP transport, stateless (a fresh server per request, so it scales horizontally) with JSON responses.
- Origin allow-list, per-IP rate limit and a
/healthendpoint. - A stdio transport for desktop MCP clients.
- Tool contracts: typed
outputSchemaandstructuredContent, plusreadOnlyHintannotations on every tool. - Data: public XRPL JSON-RPC with endpoint fallback and timeouts. The calls are
account_info(with signer lists),gateway_balances,amm_info,account_linesandaccount_tx. No keys, no signing, no database. - Hard cases, encoded as rules:
- Tickers are case-sensitive on-ledger, so "bigds" is resolved to the issuer's real
$BIGDS. - The AMM pool's own balance is excluded from whale detection.
- Regulated stablecoins are expected to keep freeze, clawback and multisig control, so those are reported as information, not warnings.
- A locked supply never makes an imitation genuine.
- Bridged variants like
USDC.axlare told apart from outright fakes.
- Tickers are case-sensitive on-ledger, so "bigds" is resolved to the issuer's real
- Tests: 14 automated tests (unit tests with a mocked ledger, plus end-to-end tests where a real MCP client connects over HTTP). There's also an optional live-mainnet test.
- Docker: a Dockerfile for one-command self-hosting.
Challenges we ran into
- RLUSD looked black-holed at first. Our first version called the real RLUSD issuer black-holed, because a type-filtered
account_objectsquery returned an empty first page. Fetching signer lists throughaccount_infofixed it. A regulated issuer controlled by multisig is now described correctly. - The AMM pool looked like a whale. Meme tokens kept showing "one wallet holds 75%". That wallet was the AMM pool, which belongs to all liquidity providers.
- Fake answers had green ticks. A fake RLUSD's launchpad-hosted domain "verifies" itself. We now label launchpad domains as information, and a High risk answer never shows a green tick next to a fake.
Accomplishments that we're proud of
- It catches the fake RLUSDs that are live on mainnet today, including ones a naive "is the issuer black-holed?" check would pass.
- Each answer is short enough to speak, but every claim can still be traced to a ledger field.
What we learned
For a voice assistant, the hard part is precision under brevity. The tool's contract has to carry both the machine-precise reason and the human sentence, rather than leaving the model to paraphrase.
What's next for XRPL Token Guard
- More verified brands (each one checked against its issuer's on-ledger Domain and xrp-ledger.toml).
- An Alexa+ Agent Skill manifest once Alexa+ MCP connections open to developers.
- An optional paid deep report through x402 (XRP/RLUSD), using the same tools.
Built With
- docker
- express.js
- ffmpeg
- mcp-typescript-sdk
- model-context-protocol
- node.js
- piper-tts
- playwright
- typescript
- web-speech-api
- xrp-ledger
- zod
Log in or sign up for Devpost to join the conversation.