About RugRadar
RugRadar is presented as a service for checking Solana token risks, including rug, token-safety, and honeypot checks, as well as watch alerts. The README describes a set of pay-per-call research APIs paid in USDC, but does not specify the risk-check endpoints or an MCP interface.
Key features
- 01Solana token risk checks
- 02Token safety and honeypot checks
- 03Token watch alerts
Use cases
- 01Check potential risks of Solana tokens
- 02Assess token safety and honeypot risk
- 03Receive token watch alerts
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://x402-seller-pmlm.onrender.com/mcpclaude mcp add --transport http jimmybr-pdx-rugradar https://x402-seller-pmlm.onrender.com/mcp{"mcpServers":{"jimmybr-pdx-rugradar":{"type":"http","url":"https://x402-seller-pmlm.onrender.com/mcp"}}}Open in Cursor{"servers":{"jimmybr-pdx-rugradar":{"type":"http","url":"https://x402-seller-pmlm.onrender.com/mcp"}}}Open in VS Code{"mcpServers":{"jimmybr-pdx-rugradar":{"type":"http","url":"https://x402-seller-pmlm.onrender.com/mcp"}}}{"mcpServers":{"jimmybr-pdx-rugradar":{"serverUrl":"https://x402-seller-pmlm.onrender.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://x402-seller-pmlm.onrender.com/mcpAuth requiredTools
3| Parameter | Type | Required | Description |
|---|---|---|---|
| chain | enum | No | default solana; 0x addresses default to basesolana | base | bnb | ethereum | arbitrum |
| token | string | Yes | Solana mint or EVM 0x token contract |
| api_key | string | No | optional RugRadar credit key (or send header X-RugRadar-Key) |
Details
From the project READMEAgent Research Tools — pay-per-call x402 APIs (USDC on Base, Polygon, Arbitrum, Solana, Avalanche, Sei)
Live: https://x402-seller-pmlm.onrender.com · Agent guide: /llms.txt · OpenAPI: /openapi.json · Discovery: /.well-known/x402
No API key, no signup. AI agents pay per request in USDC on Base (eip155:8453), Polygon (eip155:137),
Arbitrum (eip155:42161), Solana mainnet (CDP facilitator) or Avalanche (eip155:43114) and Sei (eip155:1329)
(free PayAI facilitator) using the
x402 protocol, settled through the Coinbase CDP facilitator and listed in the CDP x402 Bazaar.
| Endpoint | Price | Use it when | Returns |
|---|---|---|---|
GET /report?q=<question> | $0.01 | You need a quick, cited answer or background on a topic | 1-3 sentence answer, key_points tied to source ids, sources[] (typically 1-5: Wikipedia first, plus Stack Overflow, GitHub, Crossref papers, official docs when they match; off-topic sources dropped) with URLs, dates and supporting quotes, confidence |
GET /read?url=<https url> | $0.005 | You have a URL and need its text for an LLM | title, description, publishedAt, clean markdown, wordCount, headings[], links[] |
GET /check?url=<x402 endpoint> | $0.005 | You are about to pay for or list an x402 API | readiness score, per-check results, fixes[] (one unpaid probe; never pays the target) |
GET /news?q=<keywords> | $0.005 | You need what happened on a topic in the last 1-7 days | articles[] (title, url, outlet, publishedAt, match score, partialMatch), outlets, provider status. Optional hours (1-168, default 72), limit (1-25). Headlines + links only |
GET /price?token=<symbol, 0x address or Solana mint> | $0.002 | You need a verifiable USD price + 24h change for a token | priceUsd, change24hPct + priceUsd24hAgo (EVM), confidence, poolSpreadPct, totalDepthUsd, pools[] with explorer links, block/slot. Optional chain (ethereum, base, arbitrum, polygon, solana) |
GET /solana-price?token=<symbol or mint> | $0.002 | You need a Solana token price (incl. pump.fun / PumpSwap tokens) | priceUsd, confidence, thinLiquidity, pools[] (Orca Whirlpool, Raydium CLMM, PumpSwap, pump.fun curve) with depth, poolSpreadPct, solUsd, slot |
GET /balance?address=<0x, name.eth or Solana address> | $0.003 | You need what a wallet holds and what it is worth | per-chain native + tokens[] (balance, price, USD) and totalUsd; EVM = Ethereum, Base, Arbitrum, Polygon in one call. Optional chain, tokens (extra contracts/mints) |
GET /tx?hash=<0x hash or Solana signature> | $0.003 | You need to know if a tx/payment landed and what it did | status, timestamp, confirmations, from/to, decoded method (flags x402 / EIP-3009 USDC payments), fee in USD, decoded tokenTransfers[] (EVM) or SOL/token balance changes (Solana). Optional chain |
GET /gas[?chain=] | $0.002 | You need current fees before sending a tx | base fee, slow/standard/fast priority fees, maxFeePerGas, USD cost of a transfer / ERC-20 transfer / swap per EVM chain, Solana priority fees, cheapestEvmForErc20Transfer |
Never charged for errors: 400 bad input, 422 nothing found / target unreachable, 503 unavailable. The x402 middleware only settles a payment when the handler returns 2xx.
Call it
# 1. Unpaid call -> 402 with base64 JSON challenge in the PAYMENT-REQUIRED header
curl -i "https://x402-seller-pmlm.onrender.com/report?q=history+of+the+transistor"
# 2. Pay with any x402 client, e.g. @x402/fetch
import { wrapFetchWithPayment } from "@x402/fetch";
// ... create an x402 client with an EVM signer holding a little Base USDC
const res = await fetchWithPayment("https://x402-seller-pmlm.onrender.com/report?q=what+is+RAG");
console.log(await res.json()); // { summary, bullets, sources, ... }
Run it yourself
Node 22+, a CDP API key (https://portal.cdp.coinbase.com), and a Base receive address.
cp .env.example .env # fill CDP_API_KEY_ID / CDP_API_KEY_SECRET / X402_PAY_TO
npm ci && npm run dev # http://localhost:8402
| Env | Default | Notes |
|---|---|---|
X402_ENV | development | production = Base, Polygon, Arbitrum, Solana (CDP) + Avalanche, Sei (PayAI); development = Base Sepolia + Solana Devnet |
X402_NETWORKS | per X402_ENV | Optional comma-separated CAIP-2 override, e.g. eip155:8453,eip155:137 (supported: 8453, 137, 42161, 43114, 1329, 84532, Solana mainnet/devnet). Same X402_PAY_TO on every EVM chain |
X402_SOLANA_PAY_TO | built-in public address | Solana receive address (public key only; the secret never lives in this repo) |
PAYAI_FACILITATOR_URL | https://facilitator.payai.network | Facilitator for Avalanche/Sei (free tier, no API key) |
X402_PAY_TO | — | Your EVM receive address (else CDP provisions one; needs CDP_WALLET_SECRET) |
REPORT_PRICE / READ_PRICE / CHECK_PRICE / NEWS_PRICE / TOKEN_PRICE | $0.01 / $0.005 / $0.005 / $0.005 / $0.002 | Per-call prices |
SOL_PRICE / BALANCE_PRICE / TX_PRICE / GAS_PRICE | $0.002 / $0.003 / $0.003 / $0.002 | Per-call prices for /solana-price, /balance, /tx, /gas |
NEWS_GKG_HOURS | 24 | Hours of the GDELT GKG 15-minute news index kept in memory (0 = off). ~2.5 MB download per 15 min, ~50k headlines/day, ~60 MB RAM |
NEWS_GDELT_API | off | 1 = also query the GDELT DOC API (rate-limited; adds latency) |
TRAFFIC_FILE | ./data/traffic.json | Where /stats counts are saved (every 10 min + on shutdown). off = memory only. Render free has no persistent disk, so counts reset on each deploy unless you mount a disk here |
SOLANA_RPC_URLS | Solana Foundation + PublicNode | Comma-separated Solana RPC URLs (first healthy one wins) |
PUBLIC_URL | Render URL | Used in discovery docs |
DAILY_SPEND_CAP_USD | 50 | Runaway guard on confirmed settlements per UTC day |
GROK_API_KEY or OPENAI_API_KEY | — | Optional: LLM synthesis over the cited sources; without it /report is extractive |
SERPER_API_KEY | — | Optional: Serper (Google results API) as the first /search source (5 s timeout); on error/quota or if unset, falls back to Brave → DuckDuckGo → Bing → Bing RSS → Wikipedia, topping up short result lists |
Free routes: /health, /stats, /examples, /llms.txt, /openapi.json, /.well-known/x402, /robots.txt, /icon.png (/icon.svg).
Answer permalinks (/a/<id>)
Every paid /report answer gets a free shareable page at /a/<id> (clean HTML; ?format=json for the stored JSON) with a footer link back to the service. Stored in memory only (max 500, 30 days), so links reset on each Render deploy/restart. Only the answer is stored (question, answer, sources), never IP, user agent or payer. /a/example-mcp is a pinned demo. The paid response leads with bot-friendly fields: answer, answer_citations, key_points[{text,citations}], sources with publisher, published, quote, confidence + confidence_why, checked_at, permalink; the original fields (summary, bullets, ...) are unchanged.
Interest tracker (/stats)
Open /stats in a browser (or /stats?view=simple) for a plain-English page: one headline sentence, a per-tool table (looked at price / paid / bots-crawlers), Pacific times. Programs get JSON (default, or ?format=json). Payments signed by our own test wallet (SELF_PAYERS, default 0x4862…4940) and the unpaid probe just before them from the same visitor are tagged self and excluded from buyer counts (selfPaid shows them).
Per paid route and per hour / UTC day: unpaid 402s, paid 200s, settle failures, rejected payments, uncharged
errors and unique visitors, split by visitor class: client (anyone who sends a payment, or a non-bot user agent such
as node, python, curl, a browser), crawler (CDP Bazaar, x402scan, 402index, other x402 directories), pinger
(cron-job.org, UptimeRobot, ...), bot (search/AI crawlers, scanners, empty UA), head (HEAD/OPTIONS) and self
(scripts/rank-check.mjs). Visitors are sha256(random daily salt + IP + UA); raw IPs are never stored and the salt
never leaves memory. /health carries a compact traffic block; /stats has today, yesterday, last 7 days, 48 hourly
and 35 daily buckets, top user agents and definitions. Memory use is a few hundred KB.
Discovery and ranking
- Every paid route declares
extensions.bazaar(input schema + example, typed output schema + example) andresource.serviceName/tags/iconUrl/mimeType, per the x402 Bazaar spec. - CDP Bazaar indexes a route after its first CDP-settled payment and refreshes ranking every ~6 h (30-day calls, unique payers, metadata quality, availability). Routes with no settlement for 30 days drop out.
node scripts/rank-check.mjsprints the recurring checklist (live status, Bazaar listing + rank per query with and without the Base filter, CDP validate, on-chain sales,/statsinterest tracker, x402scan presence).- What moves Bazaar search order (CDP docs + observed rankings): relevance of
serviceName, tags and description to the query (hybrid text + semantic search), blended with 30-day unique buyers, settled calls, recency and metadata completeness; recomputed about every 6 h; results are capped per domain; indexed metadata only refreshes after a new CDP-settled payment.
Guard rails
- Settlements are logged to
payments.jsonl(gitignored) only after the facilitator confirms, with payer + tx hash. - Circuit breaker: 3 failed settlements (verified payment, settle failed) in 10 minutes -> 503 (uncharged) for paid calls.
/newssources: the GDELT GKG 15-minute files (open data, cite gdeltproject.org; indexed in memory so no API rate limits), Hacker News (Algolia API) and ~26 publisher RSS/Atom feeds (cached 10 min). Only headlines, links, outlet and time are returned, never article text./pricereads Uniswap v3 pool state (slot0, reserves) straight from public RPC nodes via Multicall: no third-party price API, so every number is verifiable onchain at the returned block. Pools under $25k quote-side depth are ignored; no qualifying pool -> 422 (uncharged). 24h change comes from the deepest pool's own TWAP oracle (observe) or an archiveslot0read ~24 h of blocks back. Cached 30 s./solana-price(and/pricefor Solana) derives Orca Whirlpool, Raydium CLMM, PumpSwap and pump.fun bonding-curve accounts by PDA and reads them from public Solana RPC (no indexer, no API key). Not covered: Raydium AMM v4, Meteora. No 24h change on Solana (public RPC keeps no price history). Under $5k depth -> 422; under $25k ->thinLiquidity./balance,/tx,/gasread public RPC nodes only (Multicall3 on EVM). Balances cover native + a curated list of major tokens per chain plus anytokens=you pass (public RPC does not index every token a wallet holds)./readand/checkonly fetch publichttpshosts (private/loopback/link-local IPs blocked, redirects re-checked, 3 MB / 15 s caps).
MIT-style: use freely. No secrets in this repo; never commit .env.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.