mcp-server-madeonsol 1.13.0 → 1.15.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,10 @@ 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, and stream every DEX trade across 9+ programs. Free tier: 200 requests/day at [madeonsol.com/pricing](https://madeonsol.com/pricing) — no credit card required.
15
15
 
16
+ > **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).
17
+ >
18
+ > **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).
19
+ >
16
20
  > **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.
17
21
  >
18
22
  > **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.
@@ -123,7 +127,7 @@ Add to MCP settings with the same command and env vars.
123
127
 
124
128
  | Tool | Description |
125
129
  |---|---|
126
- | `madeonsol_deployer_alerts` | Pump.fun deployer launches with KOL enrichment. Filter by tier (elite/good/moderate/rising/cold). ULTRA unlocks full pagination. |
130
+ | `madeonsol_deployer_alerts` | Pump.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). |
127
131
  | `madeonsol_deployer_trajectory` | Deployer skill curve — streaks, rolling bond rate, trend — available on all tiers |
128
132
 
129
133
  ### Deshred Sniper Alerts *(new in 1.10 — Pro/Ultra)*
@@ -170,11 +174,13 @@ Scored from 1M+ early-buyer records (wallets seen in the first 20 buyers of Pump
170
174
 
171
175
  | Tool | Tier | Description |
172
176
  |---|---|---|
173
- | `madeonsol_tokens_list` | PRO+ | Filtered, sortable token directory — MC band, liquidity floor, primary DEX, authority/safety flags, computed 1h volume / MEV-share / MC-change deltas. Default `min_liq=2000` skips phantom-MC dust. |
177
+ | `madeonsol_tokens_list` | PRO+ | 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. |
178
+ | `madeonsol_almost_bonded` | PRO+ | 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` |
174
179
  | `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
175
180
  | `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
176
181
  | `madeonsol_token_risk` | PRO+ | Transparent 0–100 rug-risk/safety score with `band`, explainable `factors[]`, and raw `inputs` |
177
182
  | `madeonsol_token_candles` | PRO+ | Historical OHLCV candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, MEV volume, full history |
183
+ | `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 |
178
184
 
179
185
  ### Copy-Trade Rules (PRO/ULTRA)
180
186
 
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ const PORT = parseInt(process.env.PORT || "3100", 10);
11
11
  const MODE = process.env.MCP_TRANSPORT || "stdio"; // "stdio" or "http"
12
12
  let authMode = "none";
13
13
  let paidFetch = fetch;
14
- const UA = "mcp-server-madeonsol/1.13.0";
14
+ const UA = "mcp-server-madeonsol/1.14.0";
15
15
  function apiKeyHeaders() {
16
16
  const h = { "User-Agent": UA };
17
17
  if (authMode === "madeonsol") {
@@ -507,7 +507,7 @@ function registerTools(server) {
507
507
  min_liq_mc_ratio: z.number().optional().describe("Minimum liquidity-to-MC ratio (0-1). Filters out tokens where liquidity is thin relative to market cap."),
508
508
  max_liq_mc_ratio: z.number().optional().describe("Maximum liquidity-to-MC ratio (0-1)."),
509
509
  deployer_tier: z.enum(["elite", "good", "moderate", "rising", "cold", "unranked"]).optional().describe("Filter by deployer reputation tier."),
510
- sort: z.enum(["mc_desc", "mc_asc", "last_trade_desc", "liquidity_desc", "cumulative_volume_desc"]).optional().describe("Sort axis (default mc_desc)"),
510
+ sort: z.enum(["mc_desc", "mc_asc", "last_trade_desc", "liquidity_desc", "cumulative_volume_desc", "mc_change_5m_desc", "mc_change_1h_desc", "volume_1h_desc", "trending"]).optional().describe("Sort axis (default mc_desc). Momentum sorts: mc_change_5m_desc, mc_change_1h_desc, volume_1h_desc, trending (composite recent-volume × positive-momentum rank)."),
511
511
  limit: z.number().min(1).max(100).optional().describe("Page size (max 100)"),
512
512
  offset: z.number().min(0).optional().describe("Pagination offset"),
513
513
  }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (args) => {
@@ -520,6 +520,26 @@ function registerTools(server) {
520
520
  const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
521
521
  return { content: [{ type: "text", text }] };
522
522
  });
523
+ server.tool("madeonsol_almost_bonded", "Pre-bond pump.fun tokens approaching graduation, ranked by VELOCITY (Δprogress/min) — '95% and accelerating' beats '92% stalled'. Each token is enriched with its deployer's reputation tier. progress_pct comes from on-chain real_token_reserves depletion; velocity_pct_per_min is null until a 5-minute snapshot exists; eta_minutes is a linear projection from current velocity. Returns tokens[] with mint, symbol, name, progress_pct, velocity_pct_per_min, eta_minutes, stalled, real_sol_reserves, market_cap_usd, liquidity_usd, authorities_revoked, deployer_tier, age_minutes. PRO/ULTRA only.", {
524
+ min_progress: z.number().min(0).max(100).optional().describe("Lower bound on bonding progress % (default 80)"),
525
+ max_progress: z.number().min(0).max(100).optional().describe("Upper bound on bonding progress % (default 99.99 — already-bonded excluded)"),
526
+ min_velocity_pct_per_min: z.number().optional().describe("Minimum Δprogress/min; tokens without a 5m-ago snapshot are dropped when set"),
527
+ max_age_minutes: z.number().min(1).optional().describe("Max minutes since deploy (post-filter)"),
528
+ deployer_tier: z.enum(["elite", "good", "moderate", "rising", "cold", "unranked"]).optional().describe("Filter by deployer reputation tier"),
529
+ authority_revoked: z.boolean().optional().describe("Only tokens whose mint+freeze authorities are revoked"),
530
+ min_liq: z.number().min(0).optional().describe("Minimum liquidity in USD"),
531
+ sort: z.enum(["velocity_desc", "progress_desc", "eta_asc"]).optional().describe("Sort axis (default velocity_desc)"),
532
+ limit: z.number().min(1).max(100).optional().describe("Page size (1-100, default 50)"),
533
+ }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (args) => {
534
+ const url = new URL(`${BASE_URL}/api/v1/tokens/almost-bonded`);
535
+ for (const [k, v] of Object.entries(args)) {
536
+ if (v !== undefined)
537
+ url.searchParams.set(k, typeof v === "boolean" ? (v ? "true" : "false") : String(v));
538
+ }
539
+ const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } });
540
+ const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
541
+ return { content: [{ type: "text", text }] };
542
+ });
523
543
  // ── Alpha wallet intelligence ──
524
544
  server.tool("madeonsol_alpha_leaderboard", "Top statistically profitable early-buyer wallets, scored from 47,000+ early-buyer records. BASIC=25 (truncated), PRO=100, ULTRA=500 + bot signals.", {
525
545
  period: z.enum(["7d", "30d", "all"]).default("30d").describe("Time window"),
@@ -571,6 +591,17 @@ function registerTools(server) {
571
591
  const path = `/tokens/${encodeURIComponent(mint)}/candles${query ? `?${query}` : ""}`;
572
592
  return { content: [{ type: "text", text: await restQuery("GET", path) }] };
573
593
  });
594
+ server.tool("madeonsol_token_flow", "Trade-flow aggregate for a token — an organic-vs-fake volume read over a 1h/24h window. Returns 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: high = a small set of wallets churning volume). PRO/ULTRA only — BASIC receives HTTP 403.", {
595
+ mint: z.string().describe("Token mint address (base58)"),
596
+ window: z.enum(["1h", "24h"]).optional().describe("Lookback window (default 1h)"),
597
+ }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint, window }) => {
598
+ const qs = new URLSearchParams();
599
+ if (window !== undefined)
600
+ qs.set("window", window);
601
+ const query = qs.toString();
602
+ const path = `/tokens/${encodeURIComponent(mint)}/flow${query ? `?${query}` : ""}`;
603
+ return { content: [{ type: "text", text: await restQuery("GET", path) }] };
604
+ });
574
605
  server.tool("madeonsol_tokens_batch_buyer_quality", "Bulk buyer-quality scoring for up to 50 mints in one call. Shares the 5-min LRU cache with the single-mint endpoint — already-warm mints return at ~zero cost. Response includes cache_hits counter.", { mints: z.array(z.string()).min(1).max(50).describe("1–50 base58 Solana token mints") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mints }) => ({
575
606
  content: [{ type: "text", text: await restQuery("POST", "/tokens/batch/buyer-quality", { mints }) }],
576
607
  }));
@@ -919,7 +950,8 @@ async function main() {
919
950
  { name: "madeonsol_test_webhook", description: "Send a test payload to verify a webhook. Pro/Ultra." },
920
951
  { name: "madeonsol_stream_token", description: "Get a 24h WebSocket streaming token. Pro/Ultra." },
921
952
  { name: "madeonsol_me", description: "Inspect your account — tier, quota state, remaining requests, subscription expiry, per-feature usage." },
922
- { name: "madeonsol_tokens_list", description: "Filtered, sortable token directory — MC band, liquidity floor, primary DEX, authority/safety flags, computed 1h volume / MEV-share / MC-change. PRO+." },
953
+ { name: "madeonsol_tokens_list", description: "Filtered, sortable token directory — MC band, liquidity floor, primary DEX, authority/safety flags, computed 1h volume / MEV-share / MC-change, plus momentum sorts (mc_change_5m_desc, mc_change_1h_desc, volume_1h_desc, trending). PRO+." },
954
+ { name: "madeonsol_almost_bonded", description: "Pre-bond pump.fun tokens near graduation, ranked by velocity (Δprogress/min) — progress_pct, velocity_pct_per_min, eta_minutes, stalled, deployer_tier. PRO+." },
923
955
  { name: "madeonsol_wallet_tracker_watchlist", description: "List your tracked wallets and remaining capacity." },
924
956
  { name: "madeonsol_wallet_tracker_add", description: "Add a wallet to your watchlist." },
925
957
  { name: "madeonsol_wallet_tracker_remove", description: "Remove a wallet from your watchlist." },
package/glama.json CHANGED
@@ -46,7 +46,8 @@
46
46
  { "name": "madeonsol_alpha_leaderboard", "description": "Top profitable early-buyer wallets — 47,000+ scored, up to 500 on ULTRA." },
47
47
  { "name": "madeonsol_alpha_wallet", "description": "Full alpha profile + bot-signal flags for one wallet." },
48
48
  { "name": "madeonsol_alpha_linked", "description": "Behaviorally linked wallets (co-bought 3+ tokens within 2s)." },
49
- { "name": "madeonsol_tokens_list", "description": "Filtered token directory — MC band, liquidity, MEV-share, velocity, primary DEX, authority flags." },
49
+ { "name": "madeonsol_tokens_list", "description": "Filtered token directory — MC band, liquidity, MEV-share, velocity, primary DEX, authority flags, momentum/trending sorts." },
50
+ { "name": "madeonsol_almost_bonded", "description": "Pre-bond pump.fun tokens near graduation, ranked by velocity (Δprogress/min) — progress, eta, stalled, deployer tier." },
50
51
  { "name": "madeonsol_token_get", "description": "Single token detail — MC, holders, velocity, MEV-share, history age." },
51
52
  { "name": "madeonsol_token_batch", "description": "Bulk token detail fetch — up to 50 mints per call." },
52
53
  { "name": "madeonsol_token_cap_table", "description": "First non-deployer early buyers for a token, enriched with PnL/KOL/bot flags." },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-madeonsol",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "mcpName": "io.github.LamboPoewert/madeonsol",
5
5
  "description": "MCP server for MadeOnSol Solana KOL intelligence API — use from Claude, Cursor, or any MCP client",
6
6
  "type": "module",