Odel
mcp server madeonsol

mcp server madeonsol

Local
@madeonsol2TypeScriptMITUpdated 4 days ago

Solana KOL trading intelligence & deployer analytics via x402 micropayments or API key.

mcp-server-madeonsol

npm version npm downloads Smithery Glama MCP License: MIT

⚑ Install via Smithery Β· πŸ€– Use in Claude Desktop Β· πŸ–±οΈ Use in Cursor Β· πŸ“š API docs Β· πŸ’° Free API key Β· πŸ”Ž On Glama

MCP server for MadeOnSol Solana KOL intelligence API. Use from Claude Desktop, Cursor, or any MCP-compatible client.

Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency on paid keys and x402 pay-per-call (free-tier live feeds are 5-min delayed), score 23,000+ Pump.fun deployers, surface deshred deploy signals ~500ms before on-chain confirmation, detect multi-KOL coordination, surface bundle-cohort holdings (which same-slot wallets still hold a token's supply), verify any wallet's CURRENT on-chain holdings straight from its token accounts, and stream every DEX trade across 9+ programs. Free tier: 200 requests/day across 40+ endpoints (live feeds 5-min delayed) β€” no signup payment. Get a key at madeonsol.com/pricing.

New in 1.26.0 β€” deployer reputation as-of a date, and creator-fee rewards. Two new tools (PRO+, keyed msk_ API only β€” no x402 route). madeonsol_deployer_as_of binds GET /deployer-hunter/{wallet}/as-of: the deployer's reputation exactly as it stood on date (default today, UTC) β€” the latest write-on-change snapshot at or before it, so an agent backtests without look-ahead bias. snapshot.snapshot_date can predate date (write-on-change); snapshot.carried: true marks that. No snapshot at or before date β†’ as_of: false, snapshot: null β€” nothing is ever synthesized. date must be β‰₯ 2026-04-07 and not in the future. madeonsol_deployer_rewards binds GET /deployer-hunter/{wallet}/rewards: pump.fun creator-fee rewards, answered two ways that are never merged β€” collected (what actually reached the wallet: direct vault claims kept 90 days, social-handle claims, shareholder payouts on any token) and attributed (every payout on the tokens it deployed, split to_self/to_others + redirected_pct). Every money field is {sol, usdc, usd}; usd is null (never a silent 0) when a SOL amount exists and no SOL price was available. top_tokens/top_recipients (≀10, USD-sorted) show where attributed fees went. Works for non-deployers too (is_deployer: false, attributed empty).

New in 1.25.0 β€” token surges & revivals: momentum fires with the honest half attached. The new madeonsol_tokens_surges tool binds GET /tokens/surges (PRO+, keyed msk_ API only β€” no x402 route): every token momentum fire, newest first. Two kinds, one row shape. surge β€” a token < 30 min old whose market cap runs hard against its launch MC, in three tiers that each fire at most once per mint: early (≀10 min, β‰₯$12k, β‰₯3Γ— launch), strong (≀30 min, β‰₯$30k, β‰₯6Γ— launch and β‰₯2Γ— the lowest sample of the last 3 min β€” it is climbing now), breakout (≀2 min, β‰₯$45k, β‰₯8Γ—). A tier must be sustained (current tick and a sample β‰₯10 s older; nothing fires before 20 s of age) β€” a same-slot bundle marked to $475k at age 1 s is a spike, not a surge. revival β€” a token with no 1-minute trade candle for β‰₯24 h that starts trading again, confirmed only by the tape (β‰₯5 buys, β‰₯$500 buy volume, MC β‰₯1.5Γ— the pre-dormancy close), never by the price mark; tier is null. Hard gates on both: liquidity β‰₯$1.5k and β‰₯2 % of MC, and the MC gained must be paid for by buy volume (a price mark in a spoof pool moves MC on ~$0). Every row carries the burst tape (source candles / wallet_trades; unique_buyers only where the mint is in trade coverage β€” wallet_data_available:false otherwise, never an inferred zero), kol buyers, the first-20 early_buyers cohort (bundled / sold / sniper wallets), deployer reputation and risk_flags[] (bundled_launch, few_buyers, wash_pattern, thin_liquidity, cold_deployer, sniper_heavy, early_buyers_exiting, sell_pressure, no_tape_trades, no_prior_price, mint_authority_active, transfer_fee β€” empty means no flag raised, not verified clean). Rows β‰₯65 min old carry the +1 h outcome; stats=1 prints per-(kind, tier) hit-rates (up_1h_pct, median_peak_multiple, doubled_1h_pct) β€” out-of-sample by construction. Filters kind, tier, mint, launchpad, deployer_tier, min_mc_usd / max_mc_usd, min_buys, exclude_flags, only_clean; cursors since / before. Pushed live on the new token:surges WS channel (events token:surge / token:revival; subscribe filters kinds[], tiers[], launchpads[], exclude_flags[], min_mc_usd / max_mc_usd, deployer_tier[]) and accepted by madeonsol_create_webhook as events token:surge / token:revival with the same filters. The response echoes the live thresholds in definitions.

New in 1.24.1 β€” stream tokens never expire. madeonsol_stream_token (POST /stream/token) now returns the same token on every call, forever. It stops working only if your subscription lapses or you call the tool with rotate: true to replace it (the previous value keeps working for 60 s). expires_at and the new next_refresh_at are always null (kept for wire compatibility β€” do not schedule refreshes on them); the response gains rotated (boolean) and lifetime (string). The server never rotates on its own and never sends token_refresh unless you rotated; a 4001 close means "mint again" (lapsed or rotated), never a timer. Prefer Authorization: Bearer <token> on the WebSocket handshake β€” ?token= still works and is masked in access logs.

New in 1.24.0 β€” token locks & vesting, upcoming unlocks, and pump.fun creator-fee sharing / claims. Five new tools (all PRO+, keyed msk_ API only β€” no x402 route). madeonsol_token_locks binds GET /tokens/{mint}/locks: every on-chain lock / vesting contract on a mint (Streamflow, Jupiter Lock, Bonfida vesting) with the schedule, the terms (cancelable_by_sender = the locker can pull it β€” funds are locked against the recipient, not the locker) and a live-derived view (locked_*, claimable_*, next_unlock) plus a summary with 7d / 30d forward unlock totals. madeonsol_token_locks_feed (GET /tokens/locks) is the cross-token feed of NEW contracts (cursor pagination.next_since, or push on WS channel token:locks), madeonsol_token_unlocks (GET /tokens/unlocks) lists upcoming unlock EVENTS (cliff / period / final / tranche) inside a 1h–90d window sorted by soonest / largest_usd / largest_pct. LP locks are not included β€” token/vesting locks only. madeonsol_token_fee_shares (GET /tokens/{mint}/fee-shares) decodes a pump.fun coin's on-chain SharingConfig β€” shareholders with share_bps, is_admin, is_social_pda (fees earmarked for an X identity: social.platform 2 = X, user_id = the numeric platform id, not the handle), redirected_bps, is_default: true = 100% to the creator β€” plus a distributions rollup and config history; madeonsol_token_fee_claims (GET /tokens/fee-claims) is the fee-event feed (distribution with per-address payouts[], social_claim, shares_created/updated/reset, creator_transferred, creator_claim only when asked via type=), pushed on WS channel token:fee_claims. Fee-event history starts 2026-08-17. All base-unit amounts are digit strings; ui / usd / pct are null when decimals or price are unknown.

New in 1.23.0 β€” live holder census: exact holder count, labelled holders, and pools that are named, not just excluded. The new madeonsol_token_holders tool binds GET /tokens/{mint}/holders (PRO+): every token account of the mint read from the ledger at confirmed and merged per owner, so concentration.holder_count is EXACT (distinct non-zero owners minus pools / bonding curves / burns) β€” never a trade-derived estimate; it is null only when the provider refuses the census for a mega-cap, in which case you get the top-20 view and source.census_fallback_reason says so. Each disclosed owner carries our labels (deployer / kol / early_buyer / bundle / bot / dump_cluster β€” empty means unknown to us, not clean), and excluded[] NAMES what was taken out of the circulating denominator: reason = pool (with dex + pool_address), bonding_curve (pump.fun / LaunchLab), burn, or program_account only when we genuinely cannot attribute the PDA; pool_pct / burned_pct / program_pct split the exclusion. Amounts are raw u64 strings. Disclosure: PRO ranks 1–10, ULTRA 1–50, BUSINESS 1–100 β€” the maths is tier-independent. Big tokens take 5–30 s upstream: you get 503 holder_scan_in_progress with retry_after_seconds: 20 while the scan finishes into the cache, and the retry is instant.

New in 1.22.0 β€” two prices on the trade tape, and the right one is now the default. The trade tape now tells you what a trade actually cost. price_sol/price_usd on each trade are THIS trade's executed price β€” sol_amount / token_amount, reconciling exactly with the amounts on the same row and with the PnL endpoints. Because sol_amount is the wallet's net SOL movement, that is the trader's all-in effective rate: swap fee and any account rent included, not the pool mid. The market-cap tracker's canonical pool price moved to the new market_price_sol/market_price_usd fields β€” it is sampled once per token per pool update, so every trade in the same slot shares it. Until now price_sol carried that canonical value and disagreed with the row's own amounts by a 7.9% median (p90 ~74%): a stale market price reads low in a pump and high in a dump, so anything you averaged out of the tape inherited the bias instead of cancelling it. Use price_sol for cost basis, fills and PnL; market_price_sol for a per-token series independent of trade size and direction. Both madeonsol_token_trades and madeonsol_wallet_trades carry all four fields, and both tool descriptions spell out which price to use so an agent does not average the wrong one.

New in 1.21.0 β€” the Deployer Hunter surface completed. Seven new operations that existed on the API but had no SDK binding: madeonsol_deployer_leaderboard, madeonsol_deployer_stats, madeonsol_deployer_profile, madeonsol_deployer_tokens, madeonsol_deployer_alert_stats, madeonsol_deployer_best_tokens and madeonsol_deployer_recent_bonds. Read bonding_rate (lifetime) against recent_bond_rate (rolling) β€” the gap between them is the signal, not either number alone. runner_rate only means something once labeled_tokens >= 3, and an untracked wallet returns a profile with zeroed counters, not a 404, so check total_deployed before reading a 0% bond rate as a track record. Dependency ranges are now bounded to the versions actually tested (@x402/* ^2.x, @solana/kit ^5.5.1) instead of open-ended >=0.0.1, and the lazily-imported x402 peers are marked optional β€” a keyed install no longer pulls the whole Solana stack.

New in 1.20.0 β€” Token depth / price impact + deployer self-activity on risk. New tool madeonsol_token_depth (GET /tokens/{mint}/depth) β€” per-pool price-impact / slippage: "how much SOL moves this token's price N%", per pool (NOT router-optimal). Pass up to 8 SOL buy sizes (each >0 and ≀10000; default [0.5, 1, 5, 10]); every computable pool returns spot_price_sol, fee_pct, a quotes[] entry per size (size_sol, tokens_out, avg_price_sol, price_impact_pct), and to_move_price β€” the SOL required to move price 1% / 5% / 10%. Constant-product AMMs are served from stream reserves (source: "stream" with reserves_age_ms); pump.fun/bonk bonding curves from a live read of the curve's virtual reserves (source: "live_rpc"). Pools that can't be priced honestly β€” concentrated CLMM/Orca/DLMM, Meteora-DBC curves, unclassified models β€” come back in unsupported_pools[] with a reason (e.g. concentrated_liquidity_depth_not_supported, curve_graduated_use_amm_pool) instead of a wrong number; primary_pool names the deepest computable pool, found: false means no pools tracked. PRO/ULTRA only. And madeonsol_token_risk now returns a top-level dev block (deployer self-activity; null when the mint has no deployer-pipeline row): the create-tx self-buy snapshot (buy_sol, buy_tokens, buy_supply_pct), the post-create rollup (bought_tokens_after β€” catches the same-second-separate-tx dev buy the create snapshot reads as 0 β€” sold_tokens, sold_sol, first_sell_at/last_sell_at), live on-chain holdings (holdings_tokens, holdings_supply_pct β€” pump.fun 1B denominator, null elsewhere β€” wallet_empty: is the dev wallet empty NOW), and transferred_out (tokens left without a sell; null = unknown, never a guess), plus as_of. deployer:alert webhook/WS payloads gain dev_buy_sol + dev_buy_supply_pct.

New in 1.19.0 β€” Batch wallet classification + token trade tape + bigger keyless catalog. New tool madeonsol_wallet_batch_classify β€” reputation flags for 1–100 wallets in one call (counts as one request): per wallet is_sniper / is_bundler / is_dumper / is_kol (+ kol_name), bot_confidence (string enum none/low/medium/high, null when not alpha-tracked), and a dump_cluster block (dump_cohorts, runner_cohorts, total_cohorts, as_of). Flags are pump.fun-pipeline scoped β€” false = not observed, NOT verified clean; is_bundler is lifetime, is_dumper is a rolling 42d window. New tool madeonsol_token_trades β€” mint-scoped cursor-paginated trade tape (the backfill complement to the live firehose): tx_signature, wallet_address, action, sol_amount, token_amount, price_sol/price_usd, early_buyer_rank, slot, block_time, traded_at; filters action / wallet / since–until (default FULL history β€” capture starts 2026-04-12), plus a coverage honesty block. Both PRO/ULTRA. madeonsol_wallet_stats flags gain is_sniper/is_bundler/is_dumper + dump_cluster, and bot_confidence is now correctly typed as a string enum (it was documented as a number and always came back null due to a server bug β€” now returns real values). madeonsol_token_risk inputs and madeonsol_sniper_recent deploys gain the slot-window sniper_footprint/footprint rollup (buys, buyers, sol, supply_pct, sniper_wallet_buys, data_available, as_of β€” null = not observable, not zero). The keyless x402 catalog grows 18 β†’ 25 endpoints: token candles ($0.01), almost-bonded ($0.01), top-traders ($0.02), cap-table ($0.02), sniper recent ($0.01), token flow ($0.01), deployer trajectory ($0.01) β€” madeonsol_sniper_recent and madeonsol_deployer_trajectory now work keyless via x402 too.

New in 1.18.0 β€” Verified on-chain wallet holdings. New tool madeonsol_wallet_holdings β€” the wallet's CURRENT holdings read straight from chain: its actual SPL + Token-2022 token accounts and SOL balance, each enriched with our price_usd / value_usd / market_cap_usd / name / symbol / is_bonded, plus transfer_delta (on-chain amount βˆ’ trade-derived net position β€” exposes non-swap flows like airdrops, insider funding, and wallet-hopping). Distinct from madeonsol_wallet_positions (trade-derived FIFO): this is what the wallet actually holds right now. Params: limit (1–500, default 200), min_value_usd (default 0). Returns { address, sol_balance, holdings[], summary, verified_at, trade_window_days, cache_hit, ttl_seconds }. ULTRA only.

New in 1.17.0 β€” Bundle-cohort holdings. New tool madeonsol_token_bundle β€” which same-slot "bundle" wallets bought a token and how much of supply they still hold (the incumbents' "current held %" rug/insider signal, from confirmed on-chain data). Returns a bundle block (wallet_count, bundle_kind atomic_tx/same_slot/none, held_ratio, held_pct_of_supply β€” the headline, net held / circulating supply, null if unknown β€” fully_exited, buy_volume, tokens_held) plus a wallets[] array (rank, wallet, held_ratio, has_sold, atomic, is_kol). BASIC get the bundle block only (empty wallets[]); PRO adds top-10 flags-only wallets; ULTRA returns the full cohort with enriched identities (kol_name, win_rate, bot_confidence, tokens_held).

New in 1.16.0 β€” Batch risk scoring + live stream-session control. New tool madeonsol_tokens_batch_risk β€” bulk rug-risk/safety scoring for up to 50 mints in one call, returning the same per-mint shape as madeonsol_token_risk (0–100 score, band, explainable factors[], raw inputs) plus an as_of timestamp; untracked mints come back as { mint, error: "not_tracked" } without failing the batch, and the whole call counts as one request against quota. Plus two WebSocket session tools: madeonsol_stream_sessions_list (list your live sessions β€” id, service, tier, channels, connected_at, remote_ip, messages_sent) and madeonsol_stream_session_kill (force-disconnect a session by id to free its connection slot, e.g. a ghost socket). PRO/ULTRA only.

New in 1.15.0 β€” Almost-bonded discovery + trending sorts. New tool madeonsol_almost_bonded β€” pre-bond pump.fun tokens near graduation, ranked by velocity (Ξ”progress/min): "95% and accelerating" beats "92% stalled". Each token carries progress_pct, velocity_pct_per_min, eta_minutes, stalled, real_sol_reserves, market_cap_usd, liquidity_usd, authorities_revoked, deployer_tier, and age_minutes. Params: min_progress, max_progress, min_velocity_pct_per_min, max_age_minutes, deployer_tier, authority_revoked, min_liq, sort (velocity_desc / progress_desc / eta_asc), limit. PRO/ULTRA only. Plus madeonsol_tokens_list gains four momentum sorts β€” mc_change_5m_desc, mc_change_1h_desc, volume_1h_desc, and trending (composite recent-volume Γ— positive-momentum rank).

New in 1.14.0 β€” Token trade flow. New tool madeonsol_token_flow β€” a trade-flow aggregate (organic-vs-fake volume) over a 1h/24h window: unique_wallets / unique_buyers / unique_sellers, buy_count / sell_count / total_trades, buy_sol / sell_sol / net_sol (sell βˆ’ buy; positive = net SOL leaving the pool), and trades_per_wallet (wash-trading proxy). PRO/ULTRA only. Deployer alerts (madeonsol_deployer_alerts) now carry deployers.deployer_sol_balance β€” the deployer wallet's SOL balance at alert time (null for historical rows).

New in 1.13.0 β€” Token OHLCV candles. New tool madeonsol_token_candles β€” historical price candles (1m/5m/15m/1h/4h/1d) aggregated from the on-chain trade firehose. Each candle has t/open/high/low/close/volume_usd/trades/market_cap_usd. PRO returns OHLCV for the last 30 days; ULTRA adds buy/sell volume + count splits, net flow, MEV volume, open/close liquidity, high/low MC, and full history. PRO/ULTRA only.

New in 1.12.0 β€” Token risk score. New tool madeonsol_token_risk β€” a transparent 0–100 rug-risk/safety score (higher = riskier) with a band (safe/caution/danger), an explainable factors[] array, and the raw inputs (mint/freeze authority, liquidity, liq-to-MC ratio, transfer fee, launch cohort, deployer bond rate, KOL signal, blacklist). PRO/ULTRA only.

New in 1.11.0 β€” madeonsol_tokens_list gains three new filter params: min_liq_mc_ratio, max_liq_mc_ratio, and deployer_tier. Response items now include liquidity_to_mc_ratio and deployer_tier. New tool: madeonsol_signal_performance β€” evaluate signal efficacy (hit rate, sample size, median outcome) before acting on any signal. KOL leaderboard entries now include median_hold_minutes_30d and percentile_early_entry_30d.

New in 1.10.4 β€” Deployer alerts/profiles now expose runner_rate + labeled_tokens (fraction of a deployer's labeled tokens that ran vs dumped, gate on labeled_tokens β‰₯3) plus avg_time_to_bond_minutes.

New in 1.10.3 β€” Dump-cluster detection. madeonsol_token_buyer_quality breakdown now includes dump_cluster_count (3+ dump-cluster wallets in the first-20 β†’ 94% historical dump rate vs 61% base) and recycled_early_buyer_count. Full breakdown is returned on all tiers. Also: the API now pushes every pump.fun graduation in real time (token:graduations WS channel).

New in 1.10 β€” Deshred Sniper Alerts. madeonsol_sniper_recent surfaces pump.fun deploys from shred-level data ~500ms before on-chain confirmation. PRO: elite/good deployers. ULTRA: all tiers + custom watchlist. Use sniper:deploys WebSocket or sniper:deploy webhook for live push.

New in 1.9 β€” Price alerts, scout leaderboard, coordination history. madeonsol_price_alerts_* CRUD (PRO=5, ULTRA=25). madeonsol_scout_leaderboard ranks top scouts by first-touch follow-on rate. madeonsol_coordination_history and madeonsol_peak_history expose the historical record. madeonsol_wallet_stats now returns derived: win_rate, roi, verdict, biggest_miss.

New in 1.8 β€” Universal Wallet API. madeonsol_wallet_stats, madeonsol_wallet_pnl, madeonsol_wallet_positions, madeonsol_wallet_trades β€” FIFO cost-basis PnL and cursor-paginated raw trades for any Solana wallet. PRO+. Cache hits don't count against quota.

New in 1.7.0 (2026-05-12) β€” Two new tools: madeonsol_me (account/quota introspection β€” read tier, remaining requests, and per-feature usage without parsing rate-limit headers) and madeonsol_tokens_list (PRO+ filtered, sortable token directory β€” MC band, liquidity floor, primary DEX, authority/safety flags, plus computed 1h volume / MEV-share / MC-change deltas). Token responses now expose velocity / MEV-share fields. Token directory defaults to min_liq=2000 to skip phantom-MC dust β€” pass min_liq=0 to opt out. /token/{mint} now returns structured 400 errors (code / reason / example / docs) instead of plain strings. Deprecated avg_entry_mc_usd field fully removed from KOL/alpha leaderboards.

Install via Smithery (one line)

Smithery is the easiest path β€” it writes the config for you and handles the install:

npx -y smithery mcp add madeonsol/solana-kol-intelligence

Smithery prompts for your MADEONSOL_API_KEY (free at madeonsol.com/pricing) and wires up Claude Desktop or your chosen MCP client. Restart the client and ask: "What are KOLs buying right now?"

You can also browse tools from the CLI:

npx -y smithery tool get madeonsol/solana-kol-intelligence madeonsol_kol_feed

Quick start β€” manual config (10 seconds)

npm install -g mcp-server-madeonsol

Add to claude_desktop_config.json or Cursor MCP settings (free tier at https://madeonsol.com/pricing):

{ "mcpServers": { "madeonsol": { "command": "mcp-server-madeonsol", "env": { "MADEONSOL_API_KEY": "msk_..." } } } }

Restart Claude Desktop and ask: "What are KOLs buying right now?"

AI agent quickstart (x402 / pay-per-call)

Building an autonomous agent? Skip the signup. Point a funded Solana wallet at the server and every tool call auto-pays a micropayment over x402 β€” no API key, no account, no rate-limit dance.

{
  "mcpServers": {
    "madeonsol": {
      "command": "mcp-server-madeonsol",
      "env": {
        "SVM_PRIVATE_KEY": "<base58 solana private key>"
      }
    }
  }
}

How it works:

  • The wallet behind SVM_PRIVATE_KEY settles each request as a USDC micropayment on Solana (~$0.005–$0.02 per call, settled on-chain). No subscription, no quota.

  • The keyless catalog covers 25 endpoints β€” the latest additions: token candles ($0.01), almost-bonded ($0.01), top-traders ($0.02), cap-table ($0.02), sniper recent deploys ($0.01), token flow ($0.01), and deployer trajectory ($0.01).

  • The free madeonsol_discovery tool needs no auth and returns every endpoint with its exact per-call price β€” call it first to see what each tool costs.

  • Install the x402 peer deps alongside the server (only required for this mode):

    npm install -g mcp-server-madeonsol @x402/fetch @x402/svm @x402/core @solana/kit @scure/base
    

Data only. MadeOnSol returns trading intelligence β€” it never trades, signs swaps, or takes custody of funds. The only thing your wallet ever pays for is the per-call data fee.

Prefer a fixed monthly bill, free tier, or no wallet? Use the developer path below.

Authentication

Two options (in priority order):

MethodEnv varBest for
MadeOnSol API key (recommended)MADEONSOL_API_KEYDevelopers β€” get a free key
x402 micropaymentsSVM_PRIVATE_KEYAI agents with Solana wallets

v1.0 breaking change: RapidAPI auth (RAPIDAPI_KEY) has been removed. The MadeOnSol RapidAPI marketplace was retired on 2026-04-19. Get a free msk_ key at madeonsol.com/pricing.

Install

npm install -g mcp-server-madeonsol

x402 peer deps (@x402/fetch @x402/svm @x402/core @solana/kit @scure/base) are only needed when using SVM_PRIVATE_KEY.

Configure

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "madeonsol": {
      "command": "mcp-server-madeonsol",
      "env": {
        "MADEONSOL_API_KEY": "msk_your_api_key_here"
      }
    }
  }
}

Cursor

Add to MCP settings with the same command and env vars.

Tools

KOL Intelligence

ToolDescription
madeonsol_kol_feedReal-time KOL trade feed (1,000+ wallets)
madeonsol_kol_coordinationMulti-KOL convergence signals (v1.1) β€” peak-density window, exit detection, 0-100 score
madeonsol_kol_first_touchesFirst-KOL-touch events β€” backtested scout signal. Filter by scout tier, winrate, token age, mint suffix
madeonsol_kol_leaderboardKOL PnL and win rate rankings (180 days of history; periods: today, 7d, 30d, 90d, 180d)
madeonsol_kol_pairsKOL affinity matrix β€” which KOLs co-trade the same tokens
madeonsol_kol_hot_tokensKOL momentum tokens β€” accelerating buy interest
madeonsol_kol_trending_tokensTokens ranked by KOL buy volume (5m–12h windows). ULTRA adds full KOL wallet addresses.
madeonsol_kol_pnlDeep per-wallet PnL: equity curve, risk metrics, closed positions. ULTRA adds open positions (tokens bought but not yet sold).
madeonsol_kol_timingKOL entry/exit timing profile β€” available on all tiers

Deployer Hunter

ToolDescription
madeonsol_deployer_alertsPump.fun deployer launches with KOL enrichment. Filter by tier (elite/good/moderate/rising/cold). ULTRA unlocks full pagination. Each alert's deployers now includes deployer_sol_balance β€” the deployer wallet's SOL balance at alert time (null for historical rows).
madeonsol_deployer_trajectoryDeployer skill curve β€” streaks, rolling bond rate, trend β€” available on all tiers
madeonsol_deployer_historyA pump.fun deployer's daily reputation time-series (bonding_rate, recent_bond_rate, tier, avg_peak_mc per day) β€” backtest deployer signals at launch time without look-ahead bias. limit 1–365 (default 90)

Deshred Sniper Alerts (new in 1.10 β€” Pro/Ultra)

Pre-confirm pump.fun deploy feed reconstructed from shred-level (deshred) data β€” launches surface ~500ms before they confirm on-chain. Pro sees elite/good deployers; Ultra sees every tier.

ToolDescription
madeonsol_sniper_recentNewest-first deshred deploy feed. Pro: elite/good Β· Ultra: all tiers Β· keyless x402: $0.01 (elite/good). watchlist: true (Ultra) narrows to your custom deployer watchlist. New 1.19: each deploy carries footprint β€” the slot-window snipe rollup (buys, buyers, sol, supply_pct, sniper_wallet_buys, data_available, as_of) or null when not yet settled/observable
madeonsol_sniper_by_deployerDeshred deploys for a single deployer wallet (Ultra)

Wallet Tracker

ToolDescription
madeonsol_wallet_tracker_watchlistList your tracked wallets and remaining capacity (Free: 10, Pro: 50, Ultra: 100)
madeonsol_wallet_tracker_addAdd a wallet to your watchlist
madeonsol_wallet_tracker_removeRemove a wallet from your watchlist
madeonsol_wallet_tracker_tradesHistorical swap/transfer events for watched wallets (120-day retention)
madeonsol_wallet_tracker_summaryPer-wallet stats: swap counts, SOL bought/sold, last event

Universal Wallet (new in 1.8 β€” any wallet, not just curated KOLs, PRO+)

ToolDescription
madeonsol_wallet_statsAggregate 90d stats + cross-product flags (is_kol, is_alpha_tracked + bot_confidence none/low/medium/high, is_deployer + tokens_deployed, new 1.19: is_sniper / is_bundler / is_dumper + dump_cluster cohorts) β€” quick sizing-up of an unknown wallet
madeonsol_wallet_batch_classifyNew 1.19 Β· Bulk reputation flags for 1–100 wallets in one call β€” is_sniper/is_bundler/is_dumper/is_kol + kol_name, bot_confidence, dump_cluster. Pump.fun-pipeline scoped: false = not observed, not verified clean
madeonsol_wallet_pnlFull FIFO cost-basis PnL: realized + unrealized SOL, profit factor, max drawdown, avg + median hold minutes, daily UTC PnL curve, closed + open positions hydrated with live mc-tracker prices
madeonsol_wallet_positionsOpen positions only β€” lighter slice of /pnl. Shares the same cache.
madeonsol_wallet_holdingsNew 1.18 Β· Verified CURRENT on-chain holdings (real SPL + Token-2022 accounts + SOL) enriched with price/MC/name, plus transfer_delta vs trade-derived position. ULTRA only.
madeonsol_wallet_tradesCursor-paginated raw trades with action / token / since-until filters

Cached server-side with dynamic TTL (5min / 1h / 24h based on last activity). Cost basis observable only inside the 90-day window.

Alpha Wallet Intelligence

Scored from 1M+ early-buyer records (wallets seen in the first 20 buyers of Pump.fun tokens).

ToolTierDescription
madeonsol_alpha_leaderboardAllTop profitable early-buyer wallets. Up to 100 on Free/Pro; ULTRA unlocks 500 + bot signals
madeonsol_alpha_walletULTRAFull per-token breakdown + bot_signals array
madeonsol_alpha_linkedULTRAWallets behaviorally linked (co-bought 3+ tokens within 2s)

Token Quality

ToolTierDescription
madeonsol_tokens_listPRO+Filtered, sortable token directory β€” MC band, liquidity floor, primary DEX, authority/safety flags, computed 1h volume / MEV-share / MC-change deltas, plus momentum sorts (mc_change_5m_desc, mc_change_1h_desc, volume_1h_desc, trending). Default min_liq=2000 skips phantom-MC dust.
madeonsol_almost_bondedPRO+Pre-bond pump.fun tokens near graduation, ranked by velocity (Ξ”progress/min) β€” progress_pct, velocity_pct_per_min, eta_minutes, stalled, deployer_tier, age_minutes
madeonsol_token_cap_tablePRO+First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20
madeonsol_token_buyer_qualityAll0–100 buyer-quality score + full breakdown (5-min cached)
madeonsol_token_riskPRO+Transparent 0–100 rug-risk/safety score with band, explainable factors[], and raw inputs (new 1.19: inputs.sniper_footprint β€” slot-window snipe rollup, null = not observable; new 1.20: top-level dev block β€” deployer self-buy at create, sells rollup, live on-chain holdings, wallet_empty, transferred_out)
madeonsol_token_bundleAllBundle-cohort holdings β€” which same-slot bundle wallets bought a token and how much of supply they still hold (held_pct_of_supply headline, plus bundle_kind, held_ratio, fully_exited). BASIC: bundle block only. PRO: top-10 flags. ULTRA: full cohort + identities
madeonsol_token_poolsPRO+Per-venue liquidity map β€” every DEX pool a token trades in (pump.fun/PumpSwap/Raydium/Meteora/Orca) with per-pool liquidity_usd, is_active (live vs parked), plus a summary (pool/DEX counts, total_liquidity_usd, primary_pool, top_pool_share_pct concentration)
madeonsol_token_depthNew 1.20 Β· PRO+Per-pool price impact / slippage β€” quotes[] per SOL buy size (tokens_out, avg_price_sol, price_impact_pct) + to_move_price (SOL to move price 1%/5%/10%). sizes max 8, default [0.5, 1, 5, 10]; unsupported pools (CLMM/DLMM/DBC) flagged with a reason
madeonsol_token_holdersNew Β· PRO+Live holder census + concentration β€” who holds NOW (vs madeonsol_token_cap_table = who bought first). concentration.holder_count is EXACT (mint-scoped getProgramAccounts census merged per owner; null only when the provider refuses a mega-cap β†’ top-20 fallback with source.census_fallback_reason, never trade-estimated). Each disclosed owner labelled deployer / kol / early_buyer / bundle / bot / dump_cluster (empty = unknown, not clean). Pools / bonding curves / burns EXCLUDED from the circulating denominator and NAMED in excluded[] (reason: pool + dex + pool_address, bonding_curve, burn, program_account); amount_raw is a raw u64 STRING. Disclosure PRO 10 / ULTRA 50 / BUSINESS 100. Big tokens: first call may be HTTP 503 holder_scan_in_progress (retry_after_seconds: 20) β€” scan continues + cached, retry is instant
madeonsol_token_locksNew 1.24 Β· PRO+Token locks & vesting on a mint β€” every Streamflow / Jupiter Lock / Bonfida contract: program, kind (lock / vesting), derived status, sender / recipient, schedule (start_at / cliff_at / end_at, period_seconds), terms (cancelable_by_sender β€” the locker can pull it), live locked_* / claimable_* / next_unlock, plus summary (locked / deposited totals, unlocking_7d_* / unlocking_30d_*, nearest next_unlock, active_cancelable_by_sender). Filters status, program, limit ≀500. Base-unit amounts are STRINGS; ui/usd/pct null when unknown. LP locks not included
madeonsol_token_locks_feedNew 1.24 Β· PRO+Cross-token feed of NEW lock / vesting contracts, newest first β€” same row shape + token {symbol, price_usd, market_cap_usd}. Cursors since / before (pagination.next_since / next_before); filters mint, sender, recipient, program, kind, status, min_usd, min_pct_of_supply, include_estimated (backfilled Jupiter rows). Push: WS channel token:locks (event token:lock)
madeonsol_token_unlocksNew 1.24 Β· PRO+Upcoming unlock EVENTS across all active contracts inside within = 1h–90d β€” one entry per contract = its next event (cliff / period / final / tranche) with amount_* + window_amount_* (total release over the window), token, lock. sort soonest / largest_usd / largest_pct; filters mint, program, kind, min_usd, min_pct_of_supply; limit ≀200, offset
madeonsol_token_fee_sharesNew 1.24 Β· PRO+pump.fun creator-fee SharingConfig on a coin β€” shareholders[] (share_bps, is_admin, is_social_pda + social {platform (2 = X), user_id, lifetime_claimed}, received_*), redirected_bps, social_bps, is_default (100% to creator), source stream / chain; distributions rollup (recipients, past_recipients), history[], recent_distributions[]. Amounts in quote base units (lamports) as STRINGS. Event history starts 2026-08-17
madeonsol_token_fee_claimsNew 1.24 Β· PRO+pump.fun fee-event feed, newest first β€” type distribution (with payouts[] per shareholder) / social_claim (X identity β†’ wallet, mint null) / shares_created / shares_updated / shares_reset / creator_transferred / creator_claim (excluded unless type= asks). Filters type (comma list), mint, recipient, actor, social_platform, social_user_id, min_sol, since / before. Push: WS channel token:fee_claims (event token:fee_claim). History starts 2026-08-17
madeonsol_tokens_surgesNew 1.25 Β· PRO+Token momentum fires, newest first β€” kind surge (token < 30 min old vs its LAUNCH MC; tier early ≀10 min β‰₯$12k β‰₯3Γ— Β· strong ≀30 min β‰₯$30k β‰₯6Γ— and β‰₯2Γ— the 3-min low Β· breakout ≀2 min β‰₯$45k β‰₯8Γ—; each once per mint, sustained β‰₯10 s) or revival (no trade candle β‰₯24 h, then β‰₯5 buys / β‰₯$500 buy volume / β‰₯1.5Γ— the pre-dormancy MC on the tape β€” never a price mark; tier null). Each row: burst tape (unique_buyers null outside trade coverage), kol, early_buyers (bundled / sold / sniper), deployer, risk_flags[] (empty = no flag raised, not verified clean), and outcome (+1 h MC / peak / low) once β‰₯65 min old. stats=1 = per-(kind, tier) hit-rates over days. Filters kind, tier, mint, launchpad, deployer_tier, min_mc_usd / max_mc_usd, min_buys, exclude_flags (comma list), only_clean; cursors since / before; limit ≀200. Push: WS channel token:surges (events token:surge / token:revival) + webhook registry. Retention 60 d
madeonsol_tokens_batch_riskPRO+Bulk rug-risk/safety scoring for up to 50 mints β€” same shape as madeonsol_token_risk + as_of. Untracked mints return { mint, error: "not_tracked" } without failing the batch; counts as one request
madeonsol_token_candlesPRO+Historical OHLCV candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, MEV volume, full history
madeonsol_token_flowPRO+Trade-flow aggregate (organic-vs-fake volume) over a 1h/24h window β€” unique wallets/buyers/sellers, buy/sell counts + SOL, net_sol, trades_per_wallet wash-trading proxy
madeonsol_token_tradesNew 1.19 Β· PRO+Mint-scoped trade tape β€” cursor-paginated raw trades for one token (action / wallet / since–until filters, default FULL history). History starts 2026-04-12; coverage block marks scope

Copy-Trade Rules (PRO/ULTRA)

Server-side rules that fire signals when a watched source wallet trades. Delivered via webhook (HMAC-signed) and/or WebSocket.

ToolDescription
madeonsol_copytrade_listList your rules
madeonsol_copytrade_createCreate a rule. Returns webhook_secret once β€” store it
madeonsol_copytrade_getGet one rule
madeonsol_copytrade_updateUpdate fields or toggle is_active
madeonsol_copytrade_deleteDelete permanently
madeonsol_copytrade_signalsRecent fired signals (up to 7 days)

KOL Coordination Alerts (PRO/ULTRA β€” v1.1 push signals)

Real-time push alerts when a KOL cluster co-buys the same token. Fires within ~1s (pg_notify push). Delivered via WebSocket (kol:coordination channel, user-scoped) and/or HMAC-signed webhook.

ToolDescription
madeonsol_coordination_alerts_listList your rules (PRO=5, ULTRA=20)
madeonsol_coordination_alerts_createCreate a rule. Returns webhook_secret once β€” store it
madeonsol_coordination_alerts_getGet one rule
madeonsol_coordination_alerts_updateUpdate fields or toggle is_active
madeonsol_coordination_alerts_deleteDelete permanently

KOL Scout Signal β€” first KOL touches (new in 1.3)

Every "first KOL buy on a token mint" event. Filterable by scout tier (S/A/B/C from mv_kol_scout_score), KOL winrate, token age, mint suffix.

Backtest: S-tier scouts attract β‰₯3 follow-on KOLs within 4h ~50% of the time vs ~14% baseline (38d / 491k buys / 72,549 events). Public leaderboard at madeonsol.com/kol/scouts.

ToolDescription
madeonsol_kol_first_touchesRecent first-KOL-touch events. Filters: min_scout_tier, min_kol_winrate_7d, token_age_max_min, mint_suffix, preset, etc.
madeonsol_first_touch_subscriptions_listList your first-touch webhook subscriptions β€” ULTRA
madeonsol_first_touch_subscriptions_createCreate a webhook rule (HMAC-signed). Returns webhook_secret once β€” store it. Up to 10/user β€” ULTRA
madeonsol_first_touch_subscriptions_getGet one subscription β€” ULTRA
madeonsol_first_touch_subscriptions_updateUpdate fields or toggle is_active β€” ULTRA
madeonsol_first_touch_subscriptions_deleteDelete permanently β€” ULTRA

Don't poll β€” push. Median lead time before the second KOL is 12 seconds. WebSocket channel: kol:first_touches (PRO+).

Price Alerts (new in 1.9)

CRUD for token dip/recovery price alerts. Fires when a token's market cap crosses your threshold. PRO=5 rules, ULTRA=25.

ToolDescription
madeonsol_price_alerts_listList your price alert rules
madeonsol_price_alerts_createCreate a dip/recovery alert. Returns webhook_secret once β€” store it
madeonsol_price_alerts_getGet one alert rule by ID
madeonsol_price_alerts_updateUpdate fields or toggle is_active
madeonsol_price_alerts_deleteDelete permanently

Scout Leaderboard & KOL Consensus (new in 1.9)

ToolTierDescription
madeonsol_scout_leaderboardPRO+Top scout-tier KOLs ranked by first-touch follow-on rate, win rate, and ROI
madeonsol_kol_consensusPRO+Tokens with the strongest KOL agreement signal β€” weighted by scout score and recent PnL
madeonsol_peak_historyPRO+Historical peak-density windows for a token β€” every coordination spike with KOL breakdown
madeonsol_coordination_historyPRO+Global coordination event log with token, KOL count, score, and outcome

Wallet Derived Stats (new in 1.9)

madeonsol_wallet_stats now returns a stats object with derived fields: win_rate (0-1), roi, verdict ("strong" | "profitable" | "neutral" | "losing"), and biggest_miss (token with the highest post-exit gain the wallet missed).

Streaming & Webhooks

ToolDescription
madeonsol_stream_tokenGet your WebSocket token for KOL/deployer streaming and DEX trade stream β€” PRO/ULTRA. Never expires (1.24.1): same token on every call; rotate: true replaces it (old value works 60 s more); expires_at / next_refresh_at always null. Channels now also include token:locks (new lock/vesting contracts, event token:lock), token:fee_claims (pump.fun fee events, event token:fee_claim) and token:surges (new 1.25 β€” token momentum fires, events token:surge / token:revival, with risk_flags[]; subscribe filters kinds[], tiers[], launchpads[], exclude_flags[], min_mc_usd / max_mc_usd, deployer_tier[])
madeonsol_stream_sessions_listList your live WebSocket sessions β€” id, service, tier, channels, connected_at, remote_ip, messages_sent β€” PRO/ULTRA
madeonsol_stream_session_killEvict a live WebSocket session by id to free its connection slot (e.g. a ghost socket) β€” PRO/ULTRA
madeonsol_create_webhookRegister a webhook for real-time push notifications β€” PRO/ULTRA
madeonsol_list_webhooksList your registered webhooks β€” PRO/ULTRA
madeonsol_delete_webhookDelete a webhook by ID β€” PRO/ULTRA
madeonsol_test_webhookSend a test payload to verify a webhook β€” PRO/ULTRA

General

ToolDescription
madeonsol_discoveryList all endpoints and prices (free, no auth)
madeonsol_meInspect your account β€” tier, daily/burst quota state, remaining requests, subscription expiry, per-feature usage (webhooks, copy-trade wallets, coordination rules, etc.). Self-throttle without parsing rate-limit headers.

Tiers

TierPriceWallets trackedRequests/day
BASIC (free)$010200
PRO€43/mo (€430/yr) β‰ˆ $495010,000
ULTRA€131/mo (€1310/yr) β‰ˆ $149100 + WS events100,000
BUSINESS€400/mo (€4000/yr) β‰ˆ $449500 + WS events500,000

Free tier returns the full REST response shape on 40+ endpoints β€” real wallets, TX signatures, full precision β€” with live feeds delayed 5 minutes (delayed responses carry delay/as_of and an X-Data-Delay header). Paid tiers are real-time and unlock webhooks, WebSockets, rule engines, and ULTRA-only data depth; x402 pay-per-call is always real-time. Get a key at madeonsol.com/pricing.

Also Available

PlatformPackage
TypeScript SDKmadeonsol on npm
Rust SDKmadeonsol on crates.io
Python (LangChain, CrewAI)madeonsol-x402 on PyPI
ElizaOS@madeonsol/plugin-madeonsol
Solana Agent Kitsolana-agent-kit-plugin-madeonsol

License

MIT