PumpPill — token safety and measured outcomes
Token safety reads and measured outcomes for Robinhood Chain and Solana contracts
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"token-safety": {
"url": "https://api.pumppill.org/mcp"
}
}
}Remote endpoints
https://api.pumppill.org/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢rh_token_safety(address)
The STORED safety read for one Robinhood Chain token (address = 0x + 40 hex): whether it can be sold, what is flagged on the launch, where the launch money went, and how far it has run from the market cap at which PumpPill first logged it. Answers in under 100ms from the last stored scan and NEVER triggers a new one. found=false is an honest miss - the token has not been scanned - not a clean bill of health. deep=true means the economics, lock, operator and thesis passes ran; without it only the structural checks did. A flag is a finding with evidence, not a prediction. 'peak' is the high since scanning began, which can be after logging, so a peak below the entry means the run happened before PumpPill saw it.
Input Schema
{
"type": "object",
"properties": {
"address": {
"title": "Address",
"type": "string"
}
},
"required": [
"address"
],
"title": "rh_token_safetyArguments"
}🟢rh_ticker_resolve(symbol)
Names ONE Robinhood Chain contract for a ticker symbol - the question that actually costs people money, because a name can be deployed any number of times. The named contract is alive, holds at least $10,000 in its pool and is not flagged HIGH or CRITICAL. Every other contract using the name is returned as a COUNT (contracts_other), never a list, because publishing a list of impostor addresses is a menu. found=false means no contract using that symbol clears the gate, which is itself the answer.
Input Schema
{
"type": "object",
"properties": {
"symbol": {
"title": "Symbol",
"type": "string"
}
},
"required": [
"symbol"
],
"title": "rh_ticker_resolveArguments"
}🟢rh_deployer_record(address)
What one wallet has launched on Robinhood Chain, and how those launches went: the tokens, their liveness and liquidity, and which crossed $100,000. This is the question a launchpad buyer can act on - has this wallet done this before - and it is indexed almost nowhere else. Two wallets on this chain own 26,321 of 27,981 launchpad rows: those are factories or relayers, not operators, so a wallet above the launch ceiling deliberately gets no record rather than a headline reading 'this wallet launched 14,512 tokens'. A wallet with one launch also gets none: one launch is a fact about a token, not about a wallet. No win rate is computed - a 'crossed' row exists only because a token crossed, so the denominator would hold no losers.
Input Schema
{
"type": "object",
"properties": {
"address": {
"title": "Address",
"type": "string"
}
},
"required": [
"address"
],
"title": "rh_deployer_recordArguments"
}🟢rh_flagged_recent(limit)
Tokens whose latest scan in the last 30 days found HIGH or CRITICAL structural risk, with the findings named. Each entry is a finding with evidence - a mint authority still open, a holder concentration, a launch pattern - not a verdict on where the price goes, and not an accusation about anyone. Use it to show what the current wave of bad launches looks like, never as a list to trade against.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"title": "rh_flagged_recentArguments"
}🟢rh_stock_pairs(stock)
Robinhood Chain's genuinely novel structure: memecoins quoted in TOKENIZED STOCKS rather than in a native coin. Pass a stock symbol (NVDA, SPY, TSLA) for the trading, unflagged tokens quoted in it with liquidity and the latest scan risk. Omit it for every stock with a count. This pairing exists on no other chain, so it is usually the part of a Robinhood Chain answer that a reader has never seen stated anywhere.
Input Schema
{
"type": "object",
"properties": {
"stock": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stock"
}
},
"title": "rh_stock_pairsArguments"
}🟢rh_chain_stats
How the chain measures, from PumpPill's own index, recomputed hourly with the method stated in the payload: tokens seen, how many carry a forward-measured outcome, how many doubled or reached 5x and 10x, how many crossed $100,000, and how many are quoted against a tokenized stock. Free to quote with attribution, and the payload carries its own computed_at - quote that, not the time you asked. Outcome counts are counts, not a success rate: entry is the market cap at the moment of logging, and the index covers what PumpPill has seen rather than everything that exists.
Input Schema
{
"type": "object",
"properties": {},
"title": "rh_chain_statsArguments"
}🟢rh_whale_wallets(sort, limit)
Wallets holding at least 10 ETH or $50,000 in tokens, read as BALANCES on chain, not inferred from activity. 🚨 This measures who CAN move a pool, never who is right and never who to follow. Most listed wallets hold rather than trade - of 1,967 wallets, 14 traded in a 30-day window and the ten largest made zero trades - so meta.trading_30d is part of the answer, not a footnote. sort='active' orders by trades instead of balance. Trade counts start from meta.trading_since, the moment PumpPill began recording the chain's feed, not from a fixed history.
Input Schema
{
"type": "object",
"properties": {
"sort": {
"default": "balance",
"title": "Sort",
"type": "string"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"title": "rh_whale_walletsArguments"
}🟢rh_wallet_record(address)
What a single wallet holds and what it has traded, off the chain's own feed. A sell's size is derived from the router's minimum-out, so it is a FLOOR and is never reported as profit - do not turn it into a P&L. Many addresses on this chain are routing contracts rather than people; a balance alone does not make an address someone.
Input Schema
{
"type": "object",
"properties": {
"address": {
"title": "Address",
"type": "string"
}
},
"required": [
"address"
],
"title": "rh_wallet_recordArguments"
}🟢sol_token_detail(mint)
Any Solana token by mint (base58): holders, bundled-launch read, what the deployer still holds, socials, and meta.verdict - one plain-English sentence saying whether it trades, whether it can be sold, what the dev holds and how far it has run. Start from meta.verdict. The rest is the evidence behind it. A clean read is not a reason to buy: it means the structural checks found nothing, not that the token will hold its value.
Input Schema
{
"type": "object",
"properties": {
"mint": {
"title": "Mint",
"type": "string"
}
},
"required": [
"mint"
],
"title": "sol_token_detailArguments"
}🟢outcomes_measured
Forward-measured outcomes across both chains: the share of logged tokens that doubled, reached 5x, reached 10x, or never moved. The honest part, and the reason this is worth citing: entry is the market cap at the MOMENT OF LOGGING, never backfilled, and LOSERS ARE IN THE DENOMINATOR. It is not a track record of picks and not a win rate for anyone who bought - it is what happened to a population of tokens after they were seen, with the method stated beside it. Recomputed hourly. One call an hour lands during the recompute and may take up to 45 seconds or return error='recomputing'; that same call warms the cache, so a retry a minute later is instant.
Input Schema
{
"type": "object",
"properties": {},
"title": "outcomes_measuredArguments"
}Community
Evidence