MCP 서버

solsnap

art.maddegen.agent/solsnap
암호화폐 및 Web3 보안 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Evaluates Solana tokens and wallet holdings for rug-pull risk using token authorities, liquidity, holder concentration, trading activity, and related indicators.

solsnap_scan
Solana token rug-risk scan
Grade one Solana token mint for rug risk: 0-100 safety score, A-F grade and itemised flags. Free. Checks mint/freeze authority, Token-2022 traps (transfer fee, hook, permanent delegate, pause), mutable metadata, pump.fun curve status, top-holder concentration (wallets vs pools), liquidity, pair age, FDV/liquidity, volume/liquidity, buy/sell imbalance. Does NOT check LP locks. Use it before buying one token; to grade everything a wallet holds use wallet_sweep instead. Unknown or unlisted mints still return on-chain checks with found=false. Errors (isError=true): malformed mint. Live data from Solana RPC + DexScreener, typically 1-4 s.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['mint'], 'properties': {'mint': {'type': 'string', 'pattern': '^[1-9A-HJ-NP-Za-km-z]{32,44}$', 'description': 'Token mint address (base58, 32-44 chars), e.g. DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263 (BONK). Not a wallet or pair address.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['mint', 'found'], 'properties': {'mint': {'type': 'string'}, 'name': {'type': 'string'}, 'flags': {'type': 'array', 'items': {'type': 'object', 'properties': {'msg': {'type': 'string'}, 'severity': {'enum': ['critical', 'high', 'med', 'low', 'info', 'ok'], 'type': 'string'}}}}, 'found': {'type': 'boolean', 'description': 'false = no DEX pair found'}, 'grade': {'type': 'string', 'description': 'A (safest) to F'}, 'score': {'type': ['integer', 'null'], 'description': '0-100, higher is safer'}, 'symbol': {'type': 'string'}, 'fdv_usd': {'type': ['number', 'null']}, 'onchain': {'type': ['object', 'null'], 'description': 'program, decimals, supply, authorities, holders, token2022_extensions, metadata_mutable, pump_fun'}, 'scan_ms': {'type': 'integer'}, 'pair_url': {'type': ['string', 'null']}, 'price_usd': {'type': ['string', 'number', 'null']}, 'liquidity_usd': {'type': ['number', 'null']}, 'onchain_error': {'type': ['string', 'null']}, 'pair_age_hours': {'type': ['number', 'null']}, 'volume_24h_usd': {'type': ['number', 'null']}}}
wallet_sweep
Solana wallet rug-risk sweep
Grade every token a Solana wallet holds for rug risk in one call (up to 40 holdings). Free: totals plus the 3 riskiest holdings. Paid ($1 in SOL, one time per wallet): every holding itemised. This one tool covers the whole paid flow: an unpaid result includes payment.pay_to and payment.amount_sol; send exactly that amount (the amount identifies the wallet), then call wallet_sweep again with the same address and it returns status=full once the payment is seen on chain (usually within 30 s). Use solsnap_scan for a single token. Errors (isError=true): malformed address. Empty wallets return tokens_held=0.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['address'], 'properties': {'address': {'type': 'string', 'pattern': '^[1-9A-HJ-NP-Za-km-z]{32,44}$', 'description': 'Wallet (owner) address, base58 32-44 chars. Not a token mint.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['owner', 'status', 'tokens_held'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'properties': {'mint': {'type': 'string'}, 'flags': {'type': 'array', 'items': {'type': 'object', 'properties': {'msg': {'type': 'string'}, 'severity': {'enum': ['critical', 'high', 'med', 'low', 'info', 'ok'], 'type': 'string'}}}}, 'found': {'type': 'boolean'}, 'grade': {'type': 'string'}, 'score': {'type': ['integer', 'null']}, 'amount': {'type': 'number'}, 'symbol': {'type': 'string'}, 'program': {'enum': ['spl-token', 'token-2022'], 'type': 'string'}}}, 'description': 'every holding, only when status=full'}, 'owner': {'type': 'string'}, 'status': {'enum': ['full', 'summary', 'not_paid'], 'type': 'string', 'description': 'full = every holding itemised; summary = free tier; not_paid = payment not seen yet'}, 'payment': {'type': 'object', 'properties': {'how': {'type': 'string'}, 'pay_to': {'type': 'string'}, 'price_usd': {'type': 'number'}, 'amount_sol': {'type': 'number'}}, 'description': 'How to unlock the full report (absent once paid).'}, 'riskiest': {'type': 'array', 'items': {'type': 'object', 'properties': {'mint': {'type': 'string'}, 'flags': {'type': 'array', 'items': {'type': 'object', 'properties': {'msg': {'type': 'string'}, 'severity': {'enum': ['critical', 'high', 'med', 'low', 'info', 'ok'], 'type': 'string'}}}}, 'found': {'type': 'boolean'}, 'grade': {'type': 'string'}, 'score': {'type': ['integer', 'null']}, 'amount': {'type': 'number'}, 'symbol': {'type': 'string'}, 'program': {'enum': ['spl-token', 'token-2022'], 'type': 'string'}}}, 'description': 'up to 3 lowest-scoring holdings'}, 'truncated': {'type': 'integer', 'description': 'holdings beyond the 40-token cap'}, 'not_scored': {'type': 'integer'}, 'tokens_held': {'type': 'integer'}, 'generated_utc': {'type': 'string'}, 'tokens_scored': {'type': 'integer'}}}
wallet_sweep_pay
Get payment details for a full sweep
Optional helper: returns only the SOL amount and address that unlock the full wallet_sweep report for one wallet (the same details wallet_sweep already includes when unpaid). Send the exact amount; then call wallet_sweep again. Errors (isError=true): malformed address.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['address'], 'properties': {'address': {'type': 'string', 'pattern': '^[1-9A-HJ-NP-Za-km-z]{32,44}$', 'description': 'Wallet address the report is for'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['pay_to', 'amount_sol'], 'properties': {'note': {'type': 'string'}, 'paid': {'type': 'boolean'}, 'pay_to': {'type': 'string'}, 'price_usd': {'type': 'number'}, 'amount_sol': {'type': 'number'}}}
wallet_sweep_report
Fetch a paid sweep report
Legacy alias of wallet_sweep kept for older clients: returns status=full with every holding once the wallet's payment has settled, otherwise status=not_paid with payment details. Prefer wallet_sweep. Errors (isError=true): malformed address.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', 'required': ['address'], 'properties': {'address': {'type': 'string', 'pattern': '^[1-9A-HJ-NP-Za-km-z]{32,44}$', 'description': 'Wallet address the report was requested for'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['owner', 'status', 'tokens_held'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'properties': {'mint': {'type': 'string'}, 'flags': {'type': 'array', 'items': {'type': 'object', 'properties': {'msg': {'type': 'string'}, 'severity': {'enum': ['critical', 'high', 'med', 'low', 'info', 'ok'], 'type': 'string'}}}}, 'found': {'type': 'boolean'}, 'grade': {'type': 'string'}, 'score': {'type': ['integer', 'null']}, 'amount': {'type': 'number'}, 'symbol': {'type': 'string'}, 'program': {'enum': ['spl-token', 'token-2022'], 'type': 'string'}}}, 'description': 'every holding, only when status=full'}, 'owner': {'type': 'string'}, 'status': {'enum': ['full', 'summary', 'not_paid'], 'type': 'string', 'description': 'full = every holding itemised; summary = free tier; not_paid = payment not seen yet'}, 'payment': {'type': 'object', 'properties': {'how': {'type': 'string'}, 'pay_to': {'type': 'string'}, 'price_usd': {'type': 'number'}, 'amount_sol': {'type': 'number'}}, 'description': 'How to unlock the full report (absent once paid).'}, 'riskiest': {'type': 'array', 'items': {'type': 'object', 'properties': {'mint': {'type': 'string'}, 'flags': {'type': 'array', 'items': {'type': 'object', 'properties': {'msg': {'type': 'string'}, 'severity': {'enum': ['critical', 'high', 'med', 'low', 'info', 'ok'], 'type': 'string'}}}}, 'found': {'type': 'boolean'}, 'grade': {'type': 'string'}, 'score': {'type': ['integer', 'null']}, 'amount': {'type': 'number'}, 'symbol': {'type': 'string'}, 'program': {'enum': ['spl-token', 'token-2022'], 'type': 'string'}}}, 'description': 'up to 3 lowest-scoring holdings'}, 'truncated': {'type': 'integer', 'description': 'holdings beyond the 40-token cap'}, 'not_scored': {'type': 'integer'}, 'tokens_held': {'type': 'integer'}, 'generated_utc': {'type': 'string'}, 'tokens_scored': {'type': 'integer'}}}
변경됨
wallet_sweep_report
2026년 9월 29일 2:50 AM
변경됨
wallet_sweep_pay
2026년 9월 29일 2:50 AM
변경됨
wallet_sweep
2026년 9월 29일 2:50 AM
변경됨
solsnap_scan
2026년 9월 29일 2:50 AM
변경됨
wallet_sweep
2026년 9월 25일 2:48 AM
추가됨
wallet_sweep_report
2026년 9월 23일 2:40 AM
추가됨
wallet_sweep_pay
2026년 9월 23일 2:40 AM
추가됨
wallet_sweep
2026년 9월 23일 2:40 AM
추가됨
solsnap_scan
2026년 9월 23일 2:40 AM