Rugsight
Solana token rug-risk scores. Free basic score; full report pay-per-call via x402 (0.03 USDC).
Description from the maker (original English)
Rug check tokens on Base, Ethereum, Arbitrum, Optimism, Polygon, Solana: 0-100 risk score + reasons
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
X402_PRIVATE_KEY, TOKEN_SAFETY_MAX_USDValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"token-safety-check": {
"command": "npx",
"args": [
"-y",
"token-safety-check"
],
"env": {
"X402_PRIVATE_KEY": "your-value",
"TOKEN_SAFETY_MAX_USD": "your-value"
}
}
}
}Run this in your terminal
claude mcp add token-safety-check --env X402_PRIVATE_KEY=your-value --env TOKEN_SAFETY_MAX_USD=your-value -- npx -y token-safety-checkFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"token-safety-check": {
"command": "npx",
"args": [
"-y",
"token-safety-check"
],
"env": {
"X402_PRIVATE_KEY": "your-value",
"TOKEN_SAFETY_MAX_USD": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"token-safety-check": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"token-safety-check"
],
"env": {
"X402_PRIVATE_KEY": "your-value",
"TOKEN_SAFETY_MAX_USD": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
TOKEN_SAFETY_MAX_USD envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 10, 2026
The registry name was verified with the GitHub account lx1112, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: X402_PRIVATE_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.4.1) reached the registry 15 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Rugsight, xsolana, IRONCLAW BTC Node
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Solana token rug-risk scores. Free basic score; full report pay-per-call via x402 (0.03 USDC).
Design, check, simulate and launch Solana game economies on loot, one shared program, no contract.
Bitcoin full node data via MCP: fees, mempool, txs, whales, SEC. $0.001/call USDC on Base.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Is this token safe? A rug check for any token on Base, Ethereum, Arbitrum, Optimism, Polygon or Solana, for AI agents and scripts. Each check returns:
since and the next check tells you what changed: new risks, authority changes, liquidity or price moves. That makes it easy to monitor tokens on a schedule.A verdict call turns the same facts into a grade (CLEAN, MID, SKETCHY or RUGGY), a one-liner, a short take and a link to a share card, for chat replies and quests.
A watchlist call re-checks up to 5 tokens at once for the same $0.01, returning a compact entry per token and one-line alerts for whatever changed since your last call.
Checks, verdicts and watchlist calls cost $0.01 each in USDC on Base, paid automatically with x402 from a wallet you control. There's no account or API key. Errors and invalid input are never charged, and a spending cap stops any call priced above your limit (default $0.05).
The score is rules-based and is not investment advice. Powers count for less on tokens with deep liquidity, where they're usually a large issuer's compliance controls (USDC can freeze and mint, for example).
Create a new wallet just for this and send it a little USDC on Base: $1 covers 100 checks. Then add to your MCP config (for Claude Desktop, that's claude_desktop_config.json):
{
"mcpServers": { "token-safety-check": { "command": "npx", "args": ["-y", "token-safety-check"], "env": { "X402_PRIVATE_KEY": "0x " } } } }
The server has three tools:
check_token_safety (address, optional chain and since): the full check for one token.token_verdict (address, optional chain): a grade, one-liner, short take and share-card link.watch_tokens (tokens: up to 5 of { address, chain?, since? }): re-checks them all in one paid call and, given each token's earlier fingerprint, reports what changed with one-line alerts.Optional environment variables:
TOKEN_SAFETY_MAX_USD: per-check spending cap, default 0.05.TOKEN_SAFETY_ENDPOINT: point at another deployment.npm install token-safety-check
import { createTokenSafetyClient } from "token-safety-check";
const client = createTokenSafetyClient({ privateKey: process.env.X402_PRIVATE_KEY as 0x${string} });
const first = await client.checkToken({ chain: "base", address: "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed" }); console.log(first.risk.score, first.risk.level, first.risk.summary); // 15 low Low risk: the owner can pause all transfers; ownership is not renounced.
// Later: what changed since then? const later = await client.checkToken({ address: first.address, chain: "base", since: first.watch.fingerprint }); if (later.watch.changes?.anythingChanged) console.log(later.watch.changes);
const v = await client.verdict({ address: "0xe468f13905669748bf312611b9ebcc8ccc6db5d9" });
console.log(v.grade, v.oneLiner); // SKETCHY Liquidity: two coins and a prayer console.log(v.take, v.card); // "$KTI: 60/100 risk. ..." and a signed share-card link // Pass requestKey (8-128 letters, digits or _.:-) and a retry with the same key is never charged twice.
let list = [
{ chain: "base", address: "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed" }, { chain: "solana", address: "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN" }, ] as const; let fingerprints: (string | undefined)[] = [];
// Every hour (or however often): one $0.01 call for the whole list. const w = await client.watchlist(list.map((t, i) => ({ ...t, since: fingerprints[i] }))); for (const alert of w.alerts) console.log(alert); // e.g. "PEPINA (eth): risk 0 -> 30 (medium); liquidity -99.99%" fingerprints = w.tokens.map((t) => t.fingerprint);
token-safety-check/ai gives three ready tools (checkTokenSafety, tokenVerdict, watchTokens), plain { description, inputSchema, execute } objects that both take as tools:
import { generateText } from "ai";
import { createTokenSafetyClient } from "token-safety-check"; import { tokenSafetyTools } from "token-safety-check/ai";
const tools = tokenSafetyTools(createTokenSafetyClient({ privateKey: process.env.X402_PRIVATE_KEY as 0x${string} })); const { text } = await generateText({ model, tools, prompt: "Is 0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed on Base safe to buy?" });
token-safety-check/eliza is an ElizaOS 1.x plugin with one action, CHECK_TOKEN_SAFETY. When a message names a token address ("is 0x… on Base safe?", "rug check "), the agent replies with the verdict and a share-card link.
import { tokenSafetyPlugin } from "token-safety-check/eliza";
export const character = { name: "trader", plugins: [tokenSafetyPlugin], settings: { secrets: { TOKEN_SAFETY_PRIVATE_KEY: process.env.TOKEN_SAFETY_PRIVATE_KEY } }, };
Settings: TOKEN_SAFETY_PRIVATE_KEY (a dedicated wallet with a little USDC on Base; falls back to X402_PRIVATE_KEY), optional TOKEN_SAFETY_MAX_USD (default 0.05) and TOKEN_SAFETY_ENDPOINT.
import { customActionProvider } from "@coinbase/agentkit";
import { z } from "zod"; import { createTokenSafetyClient } from "token-safety-check";
const safety = createTokenSafetyClient({ privateKey: process.env.X402_PRIVATE_KEY as 0x${string} });
export const tokenSafety = customActionProvider({ name: "check_token_safety", description: "Rug check a token on Base, Ethereum, Arbitrum, Optimism, Polygon or Solana: 0-100 risk score with reasons.", schema: z.object({ address: z.string().describe("Token contract or Solana mint address"), chain: z.enum(["base", "eth", "arbitrum", "optimism", "polygon", "solana"]).optional(), }), invoke: async (args) => JSON.stringify(await safety.checkToken(args)), }); // Add tokenSafety to the actionProviders you pass to AgentKit.from(...).
import { tool } from "@langchain/core/tools";
import { z } from "zod"; import { createTokenSafetyClient } from "token-safety-check";
const safety = createTokenSafetyClient({ privateKey: process.env.X402_PRIVATE_KEY as 0x${string} });
export const checkTokenSafety = tool(async (args) => JSON.stringify(await safety.checkToken(args)), { name: "check_token_safety", description: "Rug check a token on Base, Ethereum, Arbitrum, Optimism, Polygon or Solana: 0-100 risk score with reasons.", schema: z.object({ address: z.string(), chain: z.enum(["base", "eth", "arbitrum", "optimism", "polygon", "solana"]).optional(), }), });
{
"address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed", "chain": "base", "name": "Degen", "symbol": "DEGEN", "risk": { "score": 15, "level": "low", "reasons": [ { "code": "can-pause", "points": 10, "text": "The owner can pause all transfers." }, { "code": "owner-not-renounced", "points": 5, "text": "Ownership is not renounced." } ], "summary": "Low risk: the owner can pause all transfers; ownership is not renounced." }, "market": { "dex": "uniswap-v3", "pairedWith": "WETH", "priceUsd": 0.000963, "quoteSideLiquidityUsd": 134000 }, "watch": { "fingerprint": "eyJzIjoxNSwi…", "changes": null } }
Both are plain x402 endpoints, so any x402 client can call them directly: GET https://onchaincheck.dev/token?chain= &address= [&since= ] and GET https://onchaincheck.dev/watchlist?tokens= : ,...[&since= ,...]. It's also listed in the x402 Bazaar.
maxUsdPerCheck / TOKEN_SAFETY_MAX_USD is refused.MIT licensed.