mcp-server-madeonsol 1.24.1 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,6 +13,8 @@ MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. U
13
13
 
14
14
  > Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency, 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, every endpoint — no signup payment. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
15
15
 
16
+ > **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`.
17
+
16
18
  > **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.
17
19
 
18
20
  > **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.
@@ -243,6 +245,7 @@ Scored from 1M+ early-buyer records (wallets seen in the first 20 buyers of Pump
243
245
  | `madeonsol_token_unlocks` | **New 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` |
244
246
  | `madeonsol_token_fee_shares` | **New 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** |
245
247
  | `madeonsol_token_fee_claims` | **New 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** |
248
+ | `madeonsol_tokens_surges` | **New 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 |
246
249
  | `madeonsol_tokens_batch_risk` | PRO+ | 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 |
247
250
  | `madeonsol_token_candles` | PRO+ | Historical OHLCV candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, MEV volume, full history |
248
251
  | `madeonsol_token_flow` | PRO+ | 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 |
@@ -319,7 +322,7 @@ CRUD for token dip/recovery price alerts. Fires when a token's market cap crosse
319
322
 
320
323
  | Tool | Description |
321
324
  |---|---|
322
- | `madeonsol_stream_token` | Get 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`) and `token:fee_claims` (pump.fun fee events, event `token:fee_claim`) |
325
+ | `madeonsol_stream_token` | Get 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[]`) |
323
326
  | `madeonsol_stream_sessions_list` | List your live WebSocket sessions — `id`, `service`, `tier`, `channels`, `connected_at`, `remote_ip`, `messages_sent` — PRO/ULTRA |
324
327
  | `madeonsol_stream_session_kill` | Evict a live WebSocket session by id to free its connection slot (e.g. a ghost socket) — PRO/ULTRA |
325
328
  | `madeonsol_create_webhook` | Register a webhook for real-time push notifications — PRO/ULTRA |
package/dist/index.js CHANGED
@@ -575,7 +575,7 @@ function registerTools(server) {
575
575
  }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ webhook_id }) => ({
576
576
  content: [{ type: "text", text: await restQuery("POST", "/webhooks/test", { webhook_id }) }],
577
577
  }));
578
- server.tool("madeonsol_stream_token", "Get your WebSocket streaming token. Stream tokens NEVER EXPIRE: every call returns the same token until your subscription lapses or you pass rotate=true, which replaces it (the previous value keeps working for 60 s). expires_at / next_refresh_at are always null (kept for wire compatibility); the response also carries 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', never a timer. Authenticate the handshake with 'Authorization: Bearer <token>' (?token= still works, masked in logs). Includes ws_url for KOL/deployer streaming (Pro/Ultra) and dex_ws_url for all-DEX trade streaming (Ultra only). PRO+ channels now also include token:locks (event token:lock — every NEW Streamflow / Jupiter Lock / Bonfida lock or vesting contract) and token:fee_claims (event token:fee_claim — every pump.fun fee event: distributions to shareholders, social/X claims, config changes, creator transfers).", { rotate: z.boolean().optional().describe("Replace the current token with a new one (the old value keeps working for 60 s). Default false — returns the existing token.") }, { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ rotate }) => ({
578
+ server.tool("madeonsol_stream_token", "Get your WebSocket streaming token. Stream tokens NEVER EXPIRE: every call returns the same token until your subscription lapses or you pass rotate=true, which replaces it (the previous value keeps working for 60 s). expires_at / next_refresh_at are always null (kept for wire compatibility); the response also carries 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', never a timer. Authenticate the handshake with 'Authorization: Bearer <token>' (?token= still works, masked in logs). Includes ws_url for KOL/deployer streaming (Pro/Ultra) and dex_ws_url for all-DEX trade streaming (Ultra only). PRO+ channels now also include token:locks (event token:lock — every NEW Streamflow / Jupiter Lock / Bonfida lock or vesting contract) and token:fee_claims (event token:fee_claim — every pump.fun fee event: distributions to shareholders, social/X claims, config changes, creator transfers) and token:surges (events token:surge — a token < 30 min old running >= 3x / 6x / 8x its launch MC, tier early / strong / breakout, each once per mint, sustained — and token:revival — no trade candle for >= 24 h, then confirmed buys on the tape; every frame carries tape / kol / early_buyers / deployer / risk_flags[]; subscribe filters kinds[], tiers[], launchpads[], exclude_flags[], min_mc_usd / max_mc_usd, deployer_tier[]).", { rotate: z.boolean().optional().describe("Replace the current token with a new one (the old value keeps working for 60 s). Default false — returns the existing token.") }, { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ rotate }) => ({
579
579
  content: [{ type: "text", text: await restQuery("POST", "/stream/token", rotate ? { rotate: true } : undefined) }],
580
580
  }));
581
581
  server.tool("madeonsol_stream_sessions_list", "List your live WebSocket streaming sessions. Returns sessions[] (each with id, service 'ws-streaming'|'dex-stream', tier, channels[], connected_at, remote_ip, messages_sent) and count. Use it to see which connections are holding your per-tier socket slots before evicting a ghost with madeonsol_stream_session_kill. PRO/ULTRA only.", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => ({
@@ -754,6 +754,30 @@ function registerTools(server) {
754
754
  const query = qs.toString() ? `?${qs.toString()}` : "";
755
755
  return { content: [{ type: "text", text: await restQuery("GET", `/tokens/fee-claims${query}`) }] };
756
756
  });
757
+ server.tool("madeonsol_tokens_surges", "Token SURGES & REVIVALS — token momentum fires, newest first, across all mints. Two kinds share one row shape. kind=surge: a token < 30 min old whose market cap runs hard against its LAUNCH MC (pump.fun launch MC is ~28 SOL by construction, so the multiple is SOL-price-independent), in three tiers that each fire at most once per mint and are independent (a token can go straight to breakout): early (age <= 10 min, MC >= $12k, >= 3x launch) | strong (<= 30 min, >= $30k, >= 6x launch AND >= 2x the lowest sample of the last 3 min — it is climbing NOW) | breakout (<= 2 min, >= $45k, >= 8x). A tier must be SUSTAINED — hold on the current tick and on a sample >= 10 s older — and nothing fires before 20 s of age: a same-slot bundle marked straight to $475k at age 1 s is a spike, not a surge. If the engine first saw the token late (baseline_source=late, restart mid-life) the multiple is NOT applied (USD floor + velocity only). kind=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.5x the pre-dormancy candle close — or >= 20 buys / >= $5k regardless), never by the price mark (a single dust buy into an empty pool marks MC up 300% and is not a revival); tier is null; one fire per dormancy episode (24 h re-fire guard). Hard GATES on both (not flags): liquidity >= $1.5k AND >= 2% of MC when known, MC <= $100B, and the MC gained must be PAID FOR — buy volume on the tape >= 3% x (MC - launch / pre-dormancy MC); a price mark in a spoof pool moves MC on ~$0 of volume. Every row: id, kind, tier, mint, symbol, name, launchpad (venue at birth), primary_dex (venue at fire time), fired_at, birth_at, birth_source (sniper = pre-confirm deshred deploy | deployer = confirmed create | first_seen = first observed trade, credible only on a launchpad curve), age_seconds, market_cap_usd, liquidity_usd, liquidity_to_mc_ratio, price_usd, baseline_mc_usd, baseline_source, mc_multiple, mc_change_3m_pct, dormant_hours / prev_mc_usd / mc_vs_prev_multiple (revival), peak_mc_usd, pct_of_peak, bonding_progress_pct, is_bonded; tape {since, available, source (candles | wallet_trades — the open minute candle lands only at rollover, so a < 90 s-old surge is measured on live wallet trades), buys, sells, trades, buy_volume_usd, sell_volume_usd, volume_usd, mev_volume_usd, unique_buyers / unique_wallets / trades_per_wallet (ONLY where the mint is in token_trades coverage — wallet_data_available=false otherwise, never an inferred zero)}; kol {buyers, buys, sells, names}; early_buyers {count, bundled (same-block), cohort_sol, sold, sniper_wallets}; deployer {wallet, tier, bonding_rate, total_bonded, total_deployed, runner_rate, labeled_tokens, recent}; mint_authority_revoked, freeze_authority_revoked, is_token_2022; risk_flags[] — THE HONEST HALF: bundled_launch (>= 3 same-block early buyers), few_buyers (< 8 unique buyers, else < 10 buys), wash_pattern (>= 4 trades/wallet across < 15 wallets), thin_liquidity (< $3k or < 3% of MC), cold_deployer, sniper_heavy (>= 3 sniper wallets in the cohort), early_buyers_exiting (>= 50% of a >= 5-wallet cohort sold), sell_pressure (sells > buys), no_tape_trades (price moved but no parsed swap on the tape — real but unmeasured), no_prior_price (revival with unknown pre-dormancy MC), mint_authority_active, transfer_fee. An EMPTY risk_flags means no flag raised, NOT verified clean — absence of data never produces a flag. Rows >= 65 min old carry outcome {mc_usd_1h_after, peak_mc_usd_1h_after, low_mc_usd_1h_after, mc_1h_multiple, peak_1h_multiple, priced_after_1h (false = no candle within the hour, the token stopped being priced — NOT zero)}; stats='1' adds stats.rows[] per (kind, tier) over `days`: fires, with_outcome, up_1h_pct, median_peak_multiple, p75_peak_multiple, median_mc_1h_multiple, doubled_1h_pct — out-of-sample by construction (the fire is recorded before the outcome exists); judge the tiers on these numbers, not on their names. Filters are DB-native (no over-fetch): kind, tier (400 with kind=revival), mint, launchpad, deployer_tier, min_mc_usd / max_mc_usd, min_buys, exclude_flags (comma list — rows carrying ANY are dropped; unknown flag -> 400 with known_flags[]), only_clean='1' (no flags at all). Cursors since= (pagination.next_since) / before= (pagination.next_before). The response echoes the live thresholds in definitions (surge / revival / shared / risk_flags / tiers — read straight from the rule engine, so they cannot drift). Pushed live on the WebSocket channel 'token:surges' (events 'token:surge' / 'token:revival', same object minus outcome; 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. Retention 60 days. Keyed API only (no x402 route). PRO+ — BASIC receives HTTP 403.", {
758
+ kind: z.enum(["surge", "revival"]).optional().describe("surge = token < 30 min old running vs its launch MC; revival = dormant >= 24 h then confirmed buys"),
759
+ tier: z.enum(["early", "strong", "breakout"]).optional().describe("Surge tier (surge only — 400 with kind=revival)"),
760
+ mint: z.string().optional().describe("Filter by token mint"),
761
+ since: z.string().optional().describe("ISO 8601 — only fires after this instant (use pagination.next_since to poll)"),
762
+ before: z.string().optional().describe("ISO 8601 — page back: only fires before this instant (pagination.next_before)"),
763
+ min_mc_usd: z.number().min(0).optional().describe("Market cap at fire time >= this USD value"),
764
+ max_mc_usd: z.number().min(0).optional().describe("Market cap at fire time <= this USD value"),
765
+ min_buys: z.number().int().min(0).optional().describe("Tape buys at fire time >="),
766
+ launchpad: z.string().optional().describe("Venue at birth: pumpfun | launchlab | bags | moonshot | meteora_dbc | boop | ..."),
767
+ deployer_tier: z.enum(["elite", "good", "moderate", "rising", "cold", "unranked"]).optional().describe("Deployer reputation tier"),
768
+ exclude_flags: z.string().optional().describe("Comma list of risk flags — rows carrying ANY are dropped (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)"),
769
+ only_clean: z.enum(["1", "0", "true", "false"]).optional().describe("'1' = only rows with no risk flags at all"),
770
+ stats: z.enum(["1", "0", "true", "false"]).optional().describe("'1' = include per-(kind, tier) hit-rates over `days`"),
771
+ days: z.number().int().min(1).max(30).optional().describe("Stats window in days (1-30, default 7)"),
772
+ limit: z.number().min(1).max(200).default(50).describe("Rows per page (1-200, default 50)"),
773
+ }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (params) => {
774
+ const qs = new URLSearchParams();
775
+ for (const [k, v] of Object.entries(params))
776
+ if (v !== undefined && v !== null)
777
+ qs.set(k, String(v));
778
+ const query = qs.toString() ? `?${qs.toString()}` : "";
779
+ return { content: [{ type: "text", text: await restQuery("GET", `/tokens/surges${query}`) }] };
780
+ });
757
781
  server.tool("madeonsol_token_depth", "Per-pool price-impact / slippage for a token — answers 'how much SOL moves this token's price N%' and the impact of each buy size, per pool (NOT router-optimal). Each computable pool returns spot_price_sol, fee_pct, a quotes[] entry per requested SOL 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 = deepest computable pool; found=false means no pools tracked. PRO/ULTRA only — BASIC receives HTTP 403.", {
758
782
  mint: z.string().describe("Token mint address (base58)"),
759
783
  sizes: z.array(z.number().gt(0).max(10000)).min(1).max(8).optional()
@@ -1215,6 +1239,7 @@ async function main() {
1215
1239
  { name: "madeonsol_token_unlocks", description: "Upcoming unlock EVENTS (cliff / period / final / tranche) across all active contracts inside 1h–90d — what locked supply hits the market, how much, from whose lock. PRO+." },
1216
1240
  { name: "madeonsol_token_fee_shares", description: "pump.fun creator-fee SharingConfig on a coin — shareholders (bps, is_admin, is_social_pda / X identity), redirected_bps, distributions rollup + config history (from 2026-08-17). PRO+." },
1217
1241
  { name: "madeonsol_token_fee_claims", description: "pump.fun fee-event feed — distributions to shareholders, social (X) claims, config changes, creator transfers; poll with next_since or WS channel token:fee_claims. History from 2026-08-17. PRO+." },
1242
+ { name: "madeonsol_tokens_surges", description: "Token surges & revivals — momentum fires, newest first: surge tiers early / strong / breakout (vs launch MC, sustained, once per mint) and revivals (dormant >= 24 h, confirmed by tape buys); each row with tape / kol / early_buyers / deployer / risk_flags[] and a +1 h outcome; stats=1 for per-tier hit-rates; poll with next_since or WS channel token:surges. PRO+." },
1218
1243
  { name: "madeonsol_token_buyer_quality", description: "0–100 buyer quality score for a token's first-buyer cohort." },
1219
1244
  { name: "madeonsol_token_depth", description: "Per-pool price impact / slippage — quotes per SOL buy size + SOL to move price 1%/5%/10%; unsupported pools flagged with a reason. PRO+." },
1220
1245
  { name: "madeonsol_token_candles", description: "Historical OHLCV price candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, full history." },
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.24.1";
1
+ export declare const VERSION = "1.25.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // AUTO-GENERATED by ../gen-version.mjs (npm prebuild) from package.json. Do not edit.
2
- export const VERSION = "1.24.1";
2
+ export const VERSION = "1.25.0";
package/glama.json CHANGED
@@ -5,7 +5,7 @@
5
5
  ],
6
6
  "display_name": "MadeOnSol — Solana memecoin intelligence",
7
7
  "description": "Real-time Solana memecoin trading intelligence — track 1,000+ KOL wallets with <3s latency, score 15,500+ Pump.fun deployers, surface multi-KOL coordination signals, run server-side copy-trade rules, and stream every DEX trade across 14 programs. Backtested first-touch scout signal (S-tier scouts attract ≥3 follow-on KOLs ~50% of the time vs 14% baseline). Free tier 200 requests per day, no payment to start; auth via msk_ API key or x402 micropayments.",
8
- "version": "1.24.1",
8
+ "version": "1.25.0",
9
9
  "homepage": "https://madeonsol.com/solana-api",
10
10
  "repository": "https://github.com/madeonsol/mcp-server-madeonsol",
11
11
  "license": "MIT",
@@ -140,6 +140,10 @@
140
140
  "name": "madeonsol_token_trades",
141
141
  "description": "Mint-scoped trade tape — cursor-paginated raw trades for one token, full history from 2026-04-12, pump.fun-pipeline scoped. PRO+."
142
142
  },
143
+ {
144
+ "name": "madeonsol_tokens_surges",
145
+ "description": "Token surges & revivals — momentum fires with tape, KOL, early-buyer, deployer context and risk_flags[]; surge tiers early/strong/breakout vs launch MC, revivals confirmed by tape buys; +1 h outcomes and per-tier hit-rates. PRO+."
146
+ },
143
147
  {
144
148
  "name": "madeonsol_wallet_tracker_watchlist",
145
149
  "description": "List tracked wallets and remaining capacity (Free 10 / Pro 50 / Ultra 100)."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-madeonsol",
3
- "version": "1.24.1",
3
+ "version": "1.25.0",
4
4
  "mcpName": "io.github.MadeOnSol/madeonsol",
5
5
  "description": "MCP server for MadeOnSol Solana KOL intelligence API — use from Claude, Cursor, or any MCP client. Free tier 200 req/day, no payment to start.",
6
6
  "type": "module",