{"name":"token_safety","oldName":"token_verdict","title":"Is this token safe?","category":"tokens","useWhen":"Run before buying, accepting or recommending a token. Answers SAFE, CAUTION or AVOID with the exact reasons, from on-chain and market data.","benefit":{"kind":"money","text":"Flags tokens you can't sell, liquidity the creator can pull, creators who have rugged before, hidden insider wallets and issuers who can freeze or take your tokens, before you buy. Regulated stablecoins' powers count as expected."},"description":"Simulates a real holder selling, checks whether the liquidity can be pulled, the creator's record, insider wallet networks, what the issuer can do (mint, freeze, Token-2022 traps), verification, liquidity, holders and age, and turns that into one verdict.","price":"$0.02","priceText":"25 free calls a day, then $0.02 USDC per call (x402)","http":{"method":"POST","path":"/api/tools/token_safety","body":"JSON object with the inputs below"},"mcp":{"method":"tools/call","name":"token_safety"},"inputs":[{"name":"token","type":"string (token address)","required":true,"lookingFor":"The token's address.","whereToGet":"From find_token (for a ticker) or tokens (for tokens a wallet holds)."},{"name":"network","type":"\"mainnet-beta\" | \"devnet\"","required":false,"lookingFor":"Which Solana network to read. Default \"mainnet-beta\" (real money).","whereToGet":"Leave it out for mainnet. Use \"devnet\" only for test wallets."}],"outputs":[{"field":"verdict","type":"\"SAFE\" | \"CAUTION\" | \"AVOID\"","is":"The answer. AVOID: at least one check failed. CAUTION: at least one warning. SAFE: no warnings.","howWorkedOut":"The worst check wins: any fail is AVOID, any warn is CAUTION, otherwise SAFE."},{"field":"summary","type":"string","is":"One sentence explaining the verdict.","howWorkedOut":"Built from the failed and warning checks."},{"field":"about.symbol / name","type":"string | null","is":"Ticker and name.","howWorkedOut":"Jupiter token data."},{"field":"about.decimals","type":"number","is":"Decimal places.","howWorkedOut":"The on-chain token account."},{"field":"about.supply","type":"string","is":"Total supply in whole tokens.","howWorkedOut":"On-chain supply / 10^decimals, exact."},{"field":"about.token_program","type":"\"spl-token\" | \"token-2022\"","is":"Which token program it uses.","howWorkedOut":"The owner of the token's account."},{"field":"about.who_can_mint","type":"string | null","is":"Who can create more tokens. null means nobody (fixed supply).","howWorkedOut":"The on-chain mint authority."},{"field":"about.who_can_freeze","type":"string | null","is":"Who can freeze holders' tokens. null means nobody.","howWorkedOut":"The on-chain freeze authority."},{"field":"about.extensions","type":"string[]","is":"Token-2022 extensions turned on.","howWorkedOut":"Read from the token's account."},{"field":"about.usd_price / liquidity_usd / holders / top10_share_pct / first_traded","type":"number | string | null","is":"Market facts the checks use.","howWorkedOut":"Jupiter token data. top10_share_pct is the share the 10 biggest holders own. first_traded is when its first pool was made."},{"field":"about.creator / creator_tokens_launched","type":"string | number | null","is":"The wallet that created the token, and how many tokens it has launched.","howWorkedOut":"Jupiter token data."},{"field":"about.metadata_can_change","type":"boolean | null","is":"Whether the name and logo can still be changed.","howWorkedOut":"RugCheck's report of the token's metadata."},{"field":"checks[].name","type":"string","is":"Which check: sell_test, liquidity_pull, creator_history, insiders, metadata, verified, mint_authority, freeze_authority, extension:<name>, liquidity, holder_concentration, age, known_stablecoin, market_data or rugcheck_data.","howWorkedOut":"A fixed list. market_data or rugcheck_data (warn) shows up only when Jupiter or RugCheck can't be reached. The checks that need them are then skipped, not guessed."},{"field":"checks[].result","type":"\"pass\" | \"info\" | \"warn\" | \"fail\"","is":"How the check came out. info means notable but expected, like a regulated stablecoin's freeze power.","howWorkedOut":"Sell test: fail if the token blocked a real holder's simulated sale, warn if there's no route to sell or it failed for another reason. Liquidity pull: fail when over 20% of the liquidity is unlocked and comes from 1 or 2 providers (warn for verified tokens), warn for 3 to 9 providers. Creator: fail if they have rugged before, warn if an unverified token's creator launched 20+ tokens or still holds over 20%. Insiders: warn over 10% of supply, fail over 30%. Metadata: warn if an unverified token's name and logo can change. Liquidity: fail under $10k, warn under $100k. Top 10 holders: warn over 50%, fail over 80% (info for known stablecoins). Age: warn under 24 hours. Permanent delegate, frozen-by-default and non-transferable fail. Mint and freeze powers warn unless it's a known stablecoin."},{"field":"checks[].detail","type":"string","is":"The fact behind the result, in plain words.","howWorkedOut":"Built from the data."},{"field":"checks[].source","type":"\"on-chain\" | \"jupiter\" | \"rugcheck\" | \"simulation\"","is":"Where the fact came from.","howWorkedOut":"on-chain for token data, jupiter for market and creator data, rugcheck for liquidity locks, insiders and creator history, simulation for the sell test."}],"notes":["The check doesn't make a token safe, and it can't. It looks for the known ways people get robbed with a token. \"SAFE\" really means \"none of the traps we know about are present.\" Every rule exists because it matches a real scam.","It can't catch everything, such as a team abandoning a project or insiders it has no data on, and SAFE says nothing about whether the price will rise or fall.","The sell test sells about $20 from a real holder's wallet in a simulation only: nothing is sent, and no funds move.","Top-holder share counts accounts, which can include exchanges and liquidity pools."],"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string"},"network":{"default":"mainnet-beta","type":"string","enum":["mainnet-beta","devnet"]}},"required":["token"]}}