loophole tape: Solana token safety
com.loopholetapev0.2.0Updated Sep 30, 2026
Solana token safety and pump.fun rug checks: free for any mint, paid depth in USDC on Solana or Base
Installation
In SourceWeft
- Open loophole tape: Solana token safety in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
loophole tape — Solana token safety and pump.fun rug checks, free to $0.025 a call
Base URL: https://api.loopholetape.com
Payment: x402 v2, scheme exact, USDC on Solana mainnet (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) or Base (eip155:8453). Solana payments are settled by https://facilitator.payai.network, Base payments by Coinbase's facilitator https://api.cdp.coinbase.com/platform/v2/x402. Every 402 lists both networks in accepts[]; pay whichever your wallet supports. The facilitator pays the network fee on either chain; a caller needs only USDC. No account or API key required.
Version: 0.9.0 (schema 2.0)
Check one mint for $0.005, or up to five caller-selected mints for $0.01 total. Every result carries calibrated probabilities, P(rug within 5 minutes) for checks younger than 30 seconds and P(true graduation) at any age, fitted on our own capture and validated out of time; the validation tables are public at /v1/calibration. Get observed creator exits, early-wallet selling, drains, migration state, concentration and buyer flow in a compact JSON result. Use it before a swap or to monitor a position. Findings carry first-observed times and evidence; no_flags_observed means no documented flags were observed, not that a token is safe.
Free coverage, free watch availability, no charge for unchanged watched events. New paid checks require full live coverage for every mint and feed lag no greater than five seconds. An unpaid request with well-formed mints returns the ordinary 402 quote; when the payment (or prepaid key) arrives, uncovered mints are refused unpaid before verification with live_examples (mints covered right now) and the free /v1/radar to pick from, and eligibility is checked again after verification. Stale feeds and malformed mints are refused before payment. The existing full card remains $0.025 and the existing free routes remain free.
Local MCP server: one command, pays from your own wallet
loopholetape-mcp is a small local MCP server (stdio) for Claude Desktop, Claude Code, Cursor and any other MCP client. It lists this API's tools and pays the paid ones per call in USDC, signed on your machine, from a Solana wallet or a Base (EVM) wallet. Most MCP clients cannot sign an x402 payment; this does it for them. No account, no subscription.
Claude Desktop: download loopholetape-mcp-0.1.0.mcpb and open it. The wallet key is optional; the app keeps it in the system keychain.
Any MCP client (Node.js 20 or newer):
Claude Code: claude mcp add loopholetape -e SOLANA_KEYPAIR_PATH=/absolute/path/to/a-small-wallet.json -- npx -y https://github.com/gosadu/loophole-tape/releases/download/mcp-v0.2.0/loopholetape-mcp-0.2.0.tgz
What is free and what costs. token_safety is free for every Solana mint: mint and freeze authority, Token-2022 holder risks, the ten largest token accounts, the launch venue, and a verdict word with its reason. For a pump.fun launch in its first hours it also buys the $0.01 verdict with calibrated rug and graduation odds; depth=free never pays, and nothing is bought when the paid answer would add nothing. The other paid tools cost $0.001 to $0.04 a call and say so in their description. radar, market_regime, check_coverage and wallet_status are free. With no wallet and no key, the free tools work and a shared trial key answers a few paid calls a day.
What it will not do (enforced in src/server.mjs, one file, with tests; reviewed adversarially before the first release, and the review's findings are fixed in 0.1.0):
- sign a payment to any address other than this API's (
9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsTon Solana,0x25d408eF54e60F3006bD13d5A040d525E2F359c2on Base), in any asset other than USDC, on any network other than Solana mainnet or Base, or (on Solana) with your own wallet as the fee payer; - sign more for one call than the tool's listed price or
LOOPHOLETAPE_MAX_USD_PER_CALL(default $0.05; the payment library caps one payment at $1 on top); - sign more in one UTC day than
LOOPHOLETAPE_MAX_USD_PER_DAY(default $1): every payment is counted in~/.loopholetape-mcp/spend.jsonunder a lock before it is signed, settled or not, so the cap survives restarts, crashes and several copies of the server sharing that directory; if the file cannot be read or written, paid calls are refused rather than uncounted; - write, log or send the key. A pasted public address is refused (the key must be the 64-byte secret), so no wallet is ever derived from public text.
Use a dedicated wallet that holds a few dollars of USDC. It needs no SOL and no ETH: the facilitator pays the network fee on both chains.
Build it yourself: npm ci --ignore-scripts && npm test && npm run build reproduces dist/loopholetape-mcp.mjs from src/server.mjs and the pinned dependencies. Registry names: com.loopholetape/solana-token-safety (official MCP registry) and loopholetape/solana-token-safety (Smithery). Smithery also runs a hosted copy; a key given to that copy sits in Smithery's runtime, not on your machine, so install locally when the key should stay local.
Start here
- Choose one to five pump.fun mints from your own workflow. Call
GET /v1/check/coverage?mints=MINT1,MINT2for free to see availability and exact prices. Coverage is also checked automatically by the paid route, so a separate preflight call is optional. - Call
GET /v1/check/mint/MINT($0.005) orGET /v1/check/watchlist?mints=MINT1,MINT2($0.01 total). A payable request returns the standard x402 402 challenge. Pay once to receive the compact check and a watch cursor. - Poll
GET /v1/check/watch?mints=MINT1,MINT2&cursor=CURSORevery 15 seconds or slower for free. Whendata.has_new_eventsis true, pass the same cursor to the paid check for details and an updated cursor. Passing an unchanged cursor directly to the paid check also returns an unpaidno_new_eventsresult.
Only these events advance a watch cursor: creator_sold, bundle_dumped, curve_drained, pool_drained, curve_closed_low, migrate_below_grad, and curve completion/migration/graduation transitions. Ordinary trades, ages and changing totals do not. Cursors bind to the exact mint set and expire after 24 hours. Calling the free watch without a cursor initializes a baseline; omit the cursor from a paid check when you want the current measurements regardless of new events.
The five-second eligibility limit is measured at result generation, before settlement. Settlement and network transit can add delay. meta.freshness_checked_at and feed_lag_at_generation_s record the eligibility check; result_age_s, feed_lag_s and is_stale are aged when the result is sent, including time spent settling. Compare t with your own clock after receipt; this is not a guarantee of delivery within five seconds.
Try it without a wallet
A shared public trial key is published at /llms.txt (section "Try it without a wallet") and in /pricing. Send it as X-API-Key on any route priced $0.02 or less (launches, the compact check, the watchlist, the verdict, the screened list, the outcome labels, and since 2026-09-30 the rug and graduation lists, the creator and wallet cards, the pons curve card and its trades). It has tiny daily caps ($0.50 a day shared, $0.02 a day per caller IP, so one $0.02 answer is a caller's whole day) and answers carry X-Tape-Trial: 1 and a meta.trial block with the remaining amount; trial calls are never counted as payments. For your own budget buy a prepaid key: GET /v1/keys/trial ($0.10 of credit) or GET /v1/keys/new ($2.00).
No x402 client and no browser wallet? Buy a prepaid key with a plain USDC transfer (since 2026-09-30):
The amount carries a unique fraction of a cent, which is how the transfer is matched to your quote, so send it exactly. The key's credit is the amount received and does not expire. usd takes whole cents from 0.10 to 50; the quote stays payable for 7 days. A transfer that matches no quote buys nothing: write to [email protected] with the transaction.
Drop-in pre-buy filter for a self-built pump.fun bot: examples/python/pumpfun_bot_prebuy_filter.py asks the free coverage check, then the $0.01 verdict with your key, and returns (ok, reason); it fails open on any error so a slow check never blocks your bot. Outcome labels for grading your own signals: GET /v1/outcome/{mint} ($0.001) and GET /v1/outcome/batch?mints= (up to 40, $0.01) return, by the fixed public rule, whether a mint rugged or truly graduated and when. Free feeds: Atom feeds of graduation odds, Robinhood Chain ring flags and daily statistics at /feeds, usable by any RSS bot.
Pay on Solana, Base, Robinhood Chain or X Layer
Every paid route offers four x402 accepts entries: USDC on Solana mainnet and USDC on Base eip155:8453 (both settled by the Coinbase CDP facilitator since 2026-09-23), USDG on Robinhood Chain eip155:4663 (facilitator.naven.network) and USD₮0 on X Layer eip155:196 (PayAI facilitator). USDG and USD₮0 are not default assets in the x402 SDKs, so allow them in your client's spend controls if you want those entries. Clients that pay the first entry can reorder the quote with ?rail=solana|base|usdg|xlayer (or the X-Rail header); the order is Solana, Base, USDG, USD₮0 by default.
In a browser, no client needed: open any paid URL (for example a mint from the free radar) in a browser with a Solana wallet such as Phantom or Solflare; the page asks the wallet to pay the exact amount and then shows the result. With an EVM wallet (Coinbase Wallet, MetaMask) add ?rail=base to the URL. Agents get the JSON 402 with the PAYMENT-REQUIRED header instead.
Prepaid key, no client after one payment: GET https://api.loopholetape.com/v1/keys/new costs $2.00 once (x402 by header, or in a browser with a wallet) and returns a key lt_... holding $2.00 of credit. Then send X-API-Key: lt_... on any paid HTTP route and the route's price is deducted; GET /v1/keys/balance with the header is free. Credit does not expire; the key is a bearer secret. The same header on POST /mcp pays the MCP tools: set X-API-Key: lt_... in your MCP client's config for this server (clients that cannot sign x402 can still send a static header).
The bundled example buyers pay with USDC on Solana. Any generic x402 v2 client with an EVM signer pays the same prices with USDC on Base: for example @x402/fetch with @x402/evm (viem account) or Python x402[httpx,evm]. Check accepts[] for the eip155:8453 entry; its payTo and asset (native USDC) are fixed and published in /.well-known/x402.
Budgeted buyers: Python and TypeScript
Whole agent loop in one file: examples/python/agent_loop.py buys a $2 prepaid key once with x402, then polls GET /v1/launches/since every 30 s and buys a compact check for every launch whose calibrated P(true graduation) clears a threshold, all with a plain X-API-Key header. TAPE_PAYER_KEYPAIR=~/.config/solana/payer.json python examples/python/agent_loop.py --every 30 --grad-min 0.3 --check-max 20
The reference buyers work with HTTP and MCP. They check the recipient, Solana mainnet, USDC, exact scheme, resource, advertised product price and your budget before signing. A state file retains the original signed payment before transmission; timeouts reuse that payment. Neither client loads a wallet for unavailable or unchanged results. Choose a language below and run its setup from the repository root.
Python 3.12+ (Linux/macOS):
TypeScript, Node.js 24+:
Set MINTS to one mint or a comma-separated list of at most five. Add --transport mcp and use a separate --state file to use the same workflow through MCP. --polls 20 checks once, then makes up to 20 free availability polls at 15-second intervals; it buys an update only when a watched event changes. Omit --polls for a single check. --max-per-call defaults to $0.01 and the single-mint route is capped at $0.005.
Keep each buyer-state*.json file private and use one active process per file. The cumulative budget belongs to that file and counts authorized attempts conservatively, including attempts that did not settle; rerunning does not reset it. A mint-set or transport change requires a separate state file. Both clients stop on an uncertain outcome rather than signing again. TypeScript uses an exclusive .lock file; after an abrupt crash, confirm that its recorded PID has exited before removing only that lock and resuming with the original JSON state. Python releases its process lock automatically.
Exact retries on the same transport and original arguments recover the original result and receipt for ten minutes. Replays carry meta.replayed, meta.result_age_s and aged freshness metadata; they do not contain newly measured data. The optional x402 payment identifier is supported, but an identifier alone cannot retrieve a result. Altering metadata or arguments on an already-used transaction returns a conflict. If you receive payment_outcome_unknown with charged: null, or the retry window has elapsed, reconcile the original transaction before authorizing another payment.
Both examples include pinned dependency files for installation.
What it is
Live pump.fun / PumpSwap analytics derived from public on-chain data. Pay per request in USDC on Solana through x402. See the documented routes for coverage and freshness.
Since v0.3.0 the same service also covers Robinhood Chain (Pons V2 launchpad): launch feed and per-curve structure cards derived from public on-chain activity (exact reserves, raised/progress/price multiple, the launch's trade fee and creator tax in basis points, snipe-tax activity, holder concentration, same-block direct-buy cluster share, direct vs terminal route mix, new-buyer flow, lifecycle).
Robinhood Chain two- and six-second flow counts expire against the response timestamp, even when no new trade arrives. Check meta.is_stale before interpreting zero activity; field definitions explain timestamp and coverage semantics.
Routes
GET /about (aliases /about.json, /team, /contact) answers who sells this: the project identity and its role mailbox, this repository, the signed proof of control of both payment addresses (check each signature against accepts[].payTo in any 402 challenge), where the data comes from, and the plain fact that there is no token, presale or fundraising. HTML for browsers, the same record as JSON for agents.
The same identity resolves as a DID: did:web:api.loopholetape.com, document at GET /.well-known/did.json. Both payout accounts appear as CAIP-10 blockchainAccountId verification methods (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:... and eip155:8453:0x...), and the signatures that bind them to the origin are in the document's extension block, so a directory can verify the seller rather than trust it.
GET /transparency (aliases /transparency.json, /.well-known/transparency.json, /disclosures, /trust) is the seller's own settlement record: how many outside settlements there have been and for how much, split by payer class (a crawler that pays dozens of sellers in one sweep is counted apart from a customer), by network, with our own registration payments excluded and counted separately; the charging and replay policy; every named reason a payment can be refused (reason and hint come back on the 402, so a refusal says what to correct); known incidents; and both payout addresses, so the counts can be checked against the chain instead of believed. No payer wallet or purchase is published.
Every paid response is self-describing: schema_version, generated_at, coverage, and meta with freshness, source and related resources. The full /v1/mint/{mint} card supports both full live coverage and thin history/on-chain coverage. New compact checks require full coverage; an unavailable mint makes the entire requested batch unpaid. Label semantics: /v1/labels. Seven-day base rates are included in the existing full card.
Discovery for agents
An agent skill describing the whole paid workflow is served at /skills/pumpfun-risk-check/SKILL.md and published on Smithery as loopholetape/pumpfun-risk-check; the MCP server is listed as loopholetape/loophole-tape. Agent directories can read the A2A agent card at /.well-known/agent-card.json (the /a2a JSON-RPC endpoint answers message/send with the catalog, payment terms and the exact call for a named skill or mint), the MCP server card at /.well-known/mcp-server-card, agents.json flows at /.well-known/agents.json, agents.txt, and the RFC 9727 catalog at /.well-known/api-catalog.
Use the live documents for current capabilities, schemas and prices:
Connect to https://api.loopholetape.com/mcp (33 tools, 10 free; protocol revisions 2024-11-05 to 2026-07-28; the domain-verified registry name com.loopholetape/tape is pending). Start with the free token_check tool (verdict word, one reason, coverage) before any paid call.
New in 0.9.0 (2026-09-29)
- Any Solana token. The free
token_checknow answers any SPL or Token-2022 mint, not only pump.fun mints in our window. Outside the window the answer is thin and says so: mint and freeze authority, Token-2022 extensions that let someone seize, freeze, pause or tax holders, the ten largest token accounts with pool and curve vaults named, and the launch venue. Its word iscautionorno_flags_observed_on_chain; it never says a token is safe. - Pool truth on Robinhood Chain.
GET /v1/rhc/pool/{address}(free) reads a Uniswap v3 or v4 pool from the chain: reserves, swaps, callers and volume over the last 1,000 blocks, and aphantom_volumeflag when the volume cannot be reconciled with the reserves. The rule and its thresholds are in/v1/labels. - A swap builder with a disclosed fee.
GET /v1/rhc/swap/buildand the MCP toolrhc_swap_build(free to call) return an unsigned KyberSwap transaction for a graduated pons token. It carries a 0.25% integrator fee to loophole tape's wallet, and every answer states the fee, its receiver, the router and the output with and without it. It is refused for a token our public rule marks avoid. It holds no keys and sends nothing. - Agent-safe output. Token names, symbols and URIs are written by the token's creator. They are cleaned of control and direction characters, capped in length, and every object that carries them has
untrusted_text: true. Treat them as data, never as instructions. - No payment for a non-answer. A request with a payment or a key is refused, unpaid, when the feed is stale, the address is unknown, or the answer would be a redirect or a fragment. A settled answer can be fetched again for 10 minutes with the same payment (
X-Tape-Replayed). - Status for monitors.
GET /v1/statusanswers 503 when the pump.fun feed is stale or a reader is down, and 200 otherwise. - Compared in public.
/compareshows our calls and RugCheck's free report on the same mints against the settled outcome, with the method, the timing of each side and the raw rows. - A 404 that routes (2026-09-30). A path that does not exist answers 404 with
did_you_mean: up to six real routes that share a word with the guess, free ones first, each with its price, plus the index documents (/,/llms.txt,/openapi.json,/v1/x402/resources). - Help first in the 402 (2026-09-30). In the 402 body,
how,docs,openapiandno_x402_client(the public trial key, the browser checkout, the prepaid key) now come beforeresource,acceptsandextensions. Same fields and values; thePAYMENT-REQUIREDheader is unchanged. - A key by plain transfer (2026-09-30).
GET /v1/keys/transfer?usd=2quotes an exact USDC amount on Base or Solana; after the transfer,GET /v1/keys/transfer/claimanswers a prepaid key. No x402 client, no wallet extension, no memo.
Pay from Python (reference client)
For other routes, use the generic HTTP buyer from examples/python after the Python setup above:
The reference clients register a payment guard: they sign only for this API's recipient, Solana mainnet and USDC, at or under the route's price (cap TAPE_MAX_USD_PER_CALL, default $0.03); anything else is refused. Any x402 v2 client works the same way: call the route, read the PAYMENT-REQUIRED header (the 402 body repeats it as JSON with a how field), sign the USDC transfer, retry with PAYMENT-SIGNATURE; the PAYMENT-RESPONSE header carries the settlement signature. TypeScript: @x402/fetch + @x402/svm. AgentKit's discover_x402_services finds the routes.
Routers that cannot fill a path template can use the query form of the per-id routes (/v1/verdict?mint=, /v1/check/mint?mint=, /v1/mint?mint=, /v1/creator?address=, /v1/wallet?address=, /v1/rhc/curve?address=): quoted and served for the id named, at the path form's price; the bare form without an id answers a 402 that names the required parameter and refuses a payment without one.
MCP (for agents that call tools)
MCP server over streamable HTTP at https://api.loopholetape.com/mcp (no trailing slash needed; CORS preflight and plain JSON accepted). 28 tools: eight free, twenty paid (tools that declare an outputSchema publish anyOf[success, x402 PaymentRequired, refusal], so both the TypeScript and Python x402 clients pay them) (the verdict tool, $0.01, returns the verdict object with its share link). The compact-check tools are check_coverage and watchlist_updates (free), check_pumpfun_risk ($0.005) and check_watchlist_risk ($0.01 total). MCP mint lists are JSON arrays; a single check takes mint. The new paid tools publish typed outputSchema and return the same data as HTTP.
Existing tools: catalog, health, market_regime, sample_mint, radar, rhc_regime (free); mint_risk_card ($0.025), recent_launches ($0.01), recent_rugs, recent_graduations, creator_reputation, wallet_profile, rhc_curve_card ($0.02), buy_api_key ($2.00 once, a prepaid key for the HTTP routes and these tools), buy_trial_key ($0.10), buy_dataset ($5.00 per day file), launches_since ($0.001 per poll), and rhc_recent_launches ($0.01).
Paid tools first return an isError payment-required result. Retry with the signed payload in _meta["x402/payment"]; settlement returns in _meta["x402/payment-response"]. Invalid inputs and unavailable compact checks return structured errors without requesting payment. Use the budgeted buyers with --transport mcp. For other tools, use the generic MCP buyer; from examples/python, install its extra dependency with .venv/bin/pip install "mcp<2".
Terms, in one line
Statistics derived from public on-chain data; labels are heuristics, not guarantees; nothing here is financial advice; sold as-is per request; no refunds for empty results; do not resell raw responses. Full text at /terms.
Source: README.md at commit 9a8a75e
Tools
0Version history
1- v0.2.0LatestSep 30, 2026

