coin-scout
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HELIUS_HTTP2 | No | Disable to force HTTP/1.1. | true |
| HELIUS_API_KEY | Yes | Your Helius API key. Required. | |
| HELIUS_NETWORK | No | Either `mainnet` or `devnet`. | mainnet |
| HELIUS_MAX_RETRIES | No | Retries for single (non-batched) requests. | 6 |
| COIN_SCOUT_CASES_DIR | No | Where case files are stored. | ~/.coin-scout/cases |
| COIN_SCOUT_MAX_PAGES | No | Hard cap on pagination loops. | 20 |
| HELIUS_CACHE_ENTRIES | No | LRU cache capacity. | 20000 |
| HELIUS_MAX_BATCH_SIZE | No | Upper bound for JSON-RPC batching. | 20 |
| HELIUS_BATCH_WINDOW_MS | No | Coalescing window for JSON-RPC micro-batching. | 4 |
| HELIUS_MAX_CONCURRENCY | No | Ceiling on in-flight HTTP requests. | 24 |
| COIN_SCOUT_MAX_TRACE_NODES | No | Hard cap on `trace_funds` graph size. | 400 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
coin-scout is a read-only Solana data server backed by Helius. It never signs or submits transactions.
Routing guide:
Wallet question -> analyze_wallet, then find_counterparties for detail.
"Where did the money go / come from" -> trace_funds (direction out / in).
Token safety, rug risk, holder concentration -> analyze_token.
"Are these the same person" -> compare_wallets. "Who else does this wallet control" -> find_cluster.
Funds left Solana or arrived from another chain -> follow_bridge. trace_funds resolves bridge crossings it meets; pass followEvm to keep tracing on the EVM side, or call trace_evm.
Who owns an address (exchange, deposit address, hot wallet) -> identify_addresses. trace_funds labels its terminals the same way.
Fake volume, bots trading with themselves -> detect_wash_trading.
Profit, cost basis, "did this wallet profit from the rug" -> wallet_pnl (pass mint for one token).
One signature to understand -> investigate_transaction, or get_transactions for a plain parse.
Movement of value with filters (counterparty, mint, direction, time) -> get_transfers. Prefer it over paging signatures.
Anything not covered -> solana_rpc.
Case files persist investigations across sessions. Call case_read with an address first to see whether an earlier case already covers it. Pass case= to trace_funds, find_cluster or follow_bridge to save results; record findings with case_update (label confidence: established, high, medium, low, or supplied for claims you were told but have not verified); case_export writes a Markdown report and SVG fund-flow diagrams. Case labels show up in every tool's label field.
Timestamps are unix seconds; amounts are decimal-adjusted UI amounts unless the field name says raw. Current USD values come from Helius pricing; usdAtTime values come from DefiLlama historical prices. Both only cover traded tokens; treat a missing price as unknown, not zero. Analysis tools sample recent history — when a result reports truncation, its counts are lower bounds.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| chain_statusA | Current Solana slot, epoch, block height and recommended priority fee. Cheap orientation call — use it to anchor timestamps and confirm the RPC is healthy. |
| get_balancesA | SOL and SPL token balances for one or more wallets, with USD value where Helius prices the token. Use this before any transfer or portfolio question. |
| get_accountB | Raw + parsed on-chain account state for any address: lamports, owning program, executable flag and parsed data (mint config, token account, stake, etc). Use this to tell a wallet from a PDA, a mint or a program. |
| get_transactionsA | Helius enhanced (human-readable) parse of up to 100 signatures: type, source protocol, description, native + token transfers, swap events and per-account balance deltas. This is the primary way to understand what a transaction actually did. |
| get_transaction_rawA | Full raw jsonParsed transaction including logMessages, inner instructions, compute units and pre/post balances. Use only when the enhanced parse in get_transactions is not enough (custom programs, failure debugging). |
| get_transfersA | Parsed SOL + SPL transfer feed for a wallet with server-side filters: counterparty, direction, mint, time and slot range. The fastest primitive for fund-movement questions — prefer it over walking signatures. |
| get_transaction_historyA | Signature-level history for an address with slot/time/status filters and cursor pagination. Use when you need coverage of every transaction touching an address, not just transfers. |
| get_swapsA | Normalized DEX swap history for a wallet: what was sold, what was bought, venue and fee per trade, plus a per-mint net-position summary. Use for trading behaviour, wash-trading and PnL groundwork. |
| get_token_holdersA | Paginated list of every token account for a mint with owner and balance. Use for holder-distribution work beyond the top-20 that analyze_token returns. |
| get_assetsB | Digital Asset Standard lookup: one asset by mint, or every asset held by an owner. Covers NFTs, compressed NFTs, fungible tokens and Token-2022, with metadata, authorities, creators, royalties and price. |
| search_assetsA | Flexible DAS query across owner, creator, collection, compression state and token type. Use to enumerate a scammer's mints, a collection's supply, or every token a wallet ever created. |
| get_asset_activityA | Every transaction signature that touched a COMPRESSED NFT (Bubblegum tree asset), oldest to newest. Use to reconstruct a cNFT's mint-and-sale chain of custody. Fungible mints and standard NFTs are not indexed here — use get_transaction_history or get_transfers for those. |
| solana_rpcA | Escape hatch: call any read-only Solana JSON-RPC or Helius DAS method directly when no dedicated tool fits. Only get*, is*, search*, minimumLedgerSlot and simulateTransaction are forwarded; anything that could submit or sign (sendTransaction, requestAirdrop, sendBundle) is rejected. |
| server_metricsA | coin-scout transport stats: HTTP requests issued, JSON-RPC batch compression, retries, cache hit rate and adaptive rate-limit state. Use to explain slow responses or confirm caching is working. |
| analyze_walletA | One-call wallet profile: portfolio value, holdings, first/last activity, in/out flow shape, top counterparties, earliest funders and heuristic risk flags (fresh wallet, single funder, fan-in/fan-out, frozen assets). Start every wallet investigation here. |
| analyze_tokenA | Rug-pull and manipulation screen for an SPL mint: live mint/freeze authority, metadata mutability, supply, FDV, holder count, top-holder concentration (top1/top10/HHI) with program-owned pools separated from real holders, plus a 0-100 risk score and explicit flags. |
| trace_fundsA | Breadth-first fund-flow graph from a wallet, forwards (where money went) or backwards (where money came from), up to N hops. Returns nodes, weighted edges, terminal sinks and detected circular flows. The core tool for following stolen or laundered funds. |
| find_clusterA | Start from one wallet and discover the other wallets likely controlled by the same actor: who pays its fees, who co-signs with it, where its token-account rent goes, which wallets share its funder, plus same-slot activity, creation time and timing similarity. Returns scored members with the signature evidence for each signal. Use compare_wallets instead when you already have the candidate list. |
| follow_bridgeA | Resolve where funds went when they left Solana (or where they came from when they arrived) through Wormhole, deBridge, Mayan or Circle CCTP: other chain, recipient address, amounts and the transaction hash on the other chain. Pass signatures, or an address to scan its recent history for bridge transactions. trace_funds already resolves the crossings it meets. |
| wallet_pnlA | Realized and unrealized PnL per token from a wallet's DEX swaps, valued in USD at the time of each swap (average-cost basis). Answers "did this wallet profit from the rug" (pass mint), sniper/insider profit, and overall trading results. Sales of tokens never bought in the sample (airdropped, sent by a dev wallet, bought before the sample) are reported as unmatchedProceedsUsd and realizedPnlIfUnboughtFreeUsd instead of realized PnL — check those for insiders. With mint set, receivedWithoutSwap lists who sent the wallet that token for free. |
| find_counterpartiesA | Rank every address a wallet transacted with over a transfer sample, split by inbound/outbound count and per-mint volume, with first/last contact. Use to spot the funder, the sink, or the one address a wallet keeps cycling with. |
| compare_walletsA | Sybil / co-ownership check across 2-10 wallets: direct transfers between them, shared funders, counterparty-set Jaccard overlap and a 0-100 link strength per pair. Use to test whether separate addresses are the same actor. |
| investigate_transactionA | Deep dive on one signature: enhanced parse, net SOL/token delta per account, every mint involved screened for rug risk, and a profile of the fee payer. Use when a single transaction is the starting point of an investigation. |
| identify_addressesB | Who is behind these Solana addresses: built-in exchange wallets (OKX proof-of-reserves addresses, ownership signature verified), Helius wallet identity when the API key has access, case labels, program labels, and a deposit-address check that flags addresses sweeping their funds to an exchange or a high fan-in hot wallet. Each label says its source and confidence. |
| detect_wash_tradingA | Read a token's recent trades straight from its highest-volume AMM pools or bonding curve (found through DexScreener and the top holders, each checked on-chain) and score them for wash trading: wallets whose buys and sells cancel out, same-slot buy+sell, quick round trips of the same size, volume concentration, and traders funded by a common wallet. Returns a 0-100 score, flags, the suspicious traders with a sample signature each, and funder groups. |
| trace_evmA | Follow funds forward from an address on an EVM chain, usually the destination of a bridge crossing that trace_funds or follow_bridge found. Reads native and ERC-20 transfers, values them in USD at the time, expands the largest recipients and stops at contracts and labelled addresses. Chains: Ethereum, BNB Chain, Polygon, Avalanche, Arbitrum, Optimism, Base, Fantom, Celo, Moonbeam, Scroll, Mantle, Linea. Ethereum works without a key through Blockscout; the rest need ETHERSCAN_API_KEY. |
| case_updateA | Create a case or add to it: summary, address labels with confidence and evidence signatures, and dated notes (findings, leads, retractions). Labels are shown by every other tool from then on, across sessions and cases. |
| case_readA | With no arguments, list every case. With address, search all cases for prior labels, notes and saved traces mentioning it — do this before starting on any address. With case, return that case's labels, notes and an index of saved artifacts; add artifactId to get one saved trace, cluster or bridge result in full. |
| case_exportA | Write the case to disk as report.md (labels, notes, tables, Mermaid diagrams) plus one standalone SVG fund-flow diagram per saved trace or cluster, ready to drop into a report. Returns the file paths. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| investigate_address | Structured fraud/AML workflow for a suspicious Solana wallet |
| screen_token | Pre-trade due diligence workflow for an SPL mint |
| trace_stolen_funds | Follow funds out of an exploited account toward cash-out points |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Most tools have distinct forensic purposes, and the descriptions clearly separate wallet profiling, token screening, tracing, clustering, asset lookup, and case management. Residual overlap exists among transaction-level tools such as get_transactions, get_transaction_history, get_transfers, and investigate_transaction, and solana_rpc is a deliberate catch-all, but the boundaries are usually explained.
Names are consistently snake_case and mostly follow verb_noun patterns such as get_*, analyze_*, find_*, trace_*, and identify_*. However, several topic-first names such as wallet_pnl, chain_status, case_update, case_read, and case_export break the strict verb-first convention, though the set remains readable.
At 29 tools, the surface is heavy for an agent to select from reliably, even if each tool maps to a real forensic capability. The rubric treats 25+ tools as too many for practical scoping, and this set would benefit from consolidation or clearer grouping.
The surface covers an end-to-end investigation lifecycle: orientation, wallet/token analysis, transfers, transactions, swaps, cross-chain tracing, clustering, DAS asset lookup, and case update/read/export. Minor gaps exist around deeper non-EVM follow-up after bridges and case deletion, but core workflows have workarounds.