mcp-server-madeonsol 1.0.1 → 1.1.1

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.
Files changed (3) hide show
  1. package/README.md +25 -13
  2. package/dist/index.js +65 -5
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -67,26 +67,26 @@ Add to MCP settings with the same command and env vars.
67
67
  | Tool | Description |
68
68
  |---|---|
69
69
  | `madeonsol_kol_feed` | Real-time KOL trade feed (1,000+ wallets) |
70
- | `madeonsol_kol_coordination` | Multi-KOL convergence signals — tokens multiple KOLs are accumulating |
70
+ | `madeonsol_kol_coordination` | Multi-KOL convergence signals (v1.1) peak-density window, exit detection, 0-100 score |
71
71
  | `madeonsol_kol_leaderboard` | KOL PnL and win rate rankings (180 days of history; periods: today, 7d, 30d, 90d, 180d) |
72
72
  | `madeonsol_kol_pairs` | KOL affinity matrix — which KOLs co-trade the same tokens |
73
73
  | `madeonsol_kol_hot_tokens` | KOL momentum tokens — accelerating buy interest |
74
- | `madeonsol_kol_trending_tokens` | Tokens ranked by KOL buy volume (5m–12h windows). Sub-hour periods PRO/ULTRA only. |
75
- | `madeonsol_kol_pnl` | Deep per-wallet PnL: equity curve, risk metrics, closed + open positions. BASIC=summary, PRO=+curve+closed, ULTRA=+open. |
76
- | `madeonsol_kol_timing` | KOL entry/exit timing profile — PRO/ULTRA |
74
+ | `madeonsol_kol_trending_tokens` | Tokens ranked by KOL buy volume (5m–12h windows). ULTRA adds full KOL wallet addresses. |
75
+ | `madeonsol_kol_pnl` | Deep per-wallet PnL: equity curve, risk metrics, closed positions. ULTRA adds open positions (tokens bought but not yet sold). |
76
+ | `madeonsol_kol_timing` | KOL entry/exit timing profile — available on all tiers |
77
77
 
78
78
  ### Deployer Hunter
79
79
 
80
80
  | Tool | Description |
81
81
  |---|---|
82
- | `madeonsol_deployer_alerts` | Pump.fun deployer launches with KOL enrichment. PRO/ULTRA: filter by tier (elite/good/moderate/rising/cold). |
83
- | `madeonsol_deployer_trajectory` | Deployer skill curve — streaks, rolling bond rate, trend — PRO/ULTRA |
82
+ | `madeonsol_deployer_alerts` | Pump.fun deployer launches with KOL enrichment. Filter by tier (elite/good/moderate/rising/cold). ULTRA unlocks full pagination. |
83
+ | `madeonsol_deployer_trajectory` | Deployer skill curve — streaks, rolling bond rate, trend — available on all tiers |
84
84
 
85
85
  ### Wallet Tracker
86
86
 
87
87
  | Tool | Description |
88
88
  |---|---|
89
- | `madeonsol_wallet_tracker_watchlist` | List your tracked wallets and remaining capacity (BASIC: 10, PRO: 50, ULTRA: 100) |
89
+ | `madeonsol_wallet_tracker_watchlist` | List your tracked wallets and remaining capacity (Free: 10, Pro: 50, Ultra: 100) |
90
90
  | `madeonsol_wallet_tracker_add` | Add a wallet to your watchlist |
91
91
  | `madeonsol_wallet_tracker_remove` | Remove a wallet from your watchlist |
92
92
  | `madeonsol_wallet_tracker_trades` | Historical swap/transfer events for watched wallets (120-day retention) |
@@ -98,7 +98,7 @@ Scored from 47,000+ early-buyer records (wallets seen in the first 20 buyers of
98
98
 
99
99
  | Tool | Tier | Description |
100
100
  |---|---|---|
101
- | `madeonsol_alpha_leaderboard` | BASIC+ | Top profitable early-buyer wallets. BASIC=25 (truncated), PRO=100, ULTRA=500 + bot signals |
101
+ | `madeonsol_alpha_leaderboard` | All | Top profitable early-buyer wallets. Up to 100 on Free/Pro; ULTRA unlocks 500 + bot signals |
102
102
  | `madeonsol_alpha_wallet` | ULTRA | Full per-token breakdown + bot_signals array |
103
103
  | `madeonsol_alpha_linked` | ULTRA | Wallets behaviorally linked (co-bought 3+ tokens within 2s) |
104
104
 
@@ -107,7 +107,7 @@ Scored from 47,000+ early-buyer records (wallets seen in the first 20 buyers of
107
107
  | Tool | Tier | Description |
108
108
  |---|---|---|
109
109
  | `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
110
- | `madeonsol_token_buyer_quality` | BASIC+ | 0–100 buyer-quality score (5-min cached). BASIC=score+signal only |
110
+ | `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
111
111
 
112
112
  ### Copy-Trade Rules (PRO/ULTRA)
113
113
 
@@ -122,6 +122,18 @@ Server-side rules that fire signals when a watched source wallet trades. Deliver
122
122
  | `madeonsol_copytrade_delete` | Delete permanently |
123
123
  | `madeonsol_copytrade_signals` | Recent fired signals (up to 7 days) |
124
124
 
125
+ ### KOL Coordination Alerts (PRO/ULTRA — v1.1 push signals)
126
+
127
+ 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.
128
+
129
+ | Tool | Description |
130
+ |---|---|
131
+ | `madeonsol_coordination_alerts_list` | List your rules (PRO=5, ULTRA=20) |
132
+ | `madeonsol_coordination_alerts_create` | Create a rule. Returns `webhook_secret` once — store it |
133
+ | `madeonsol_coordination_alerts_get` | Get one rule |
134
+ | `madeonsol_coordination_alerts_update` | Update fields or toggle `is_active` |
135
+ | `madeonsol_coordination_alerts_delete` | Delete permanently |
136
+
125
137
  ### Streaming & Webhooks
126
138
 
127
139
  | Tool | Description |
@@ -142,11 +154,11 @@ Server-side rules that fire signals when a watched source wallet trades. Deliver
142
154
 
143
155
  | Tier | Price | Wallets tracked | Requests/day |
144
156
  |------|-------|-----------------|--------------|
145
- | BASIC | Free | 10 | 200 |
146
- | PRO | $49/mo | 50 | 10,000 |
147
- | ULTRA | $149/mo | 100 + WS events | 100,000 |
157
+ | Free | $0 | 10 | 200 |
158
+ | Pro | $49/mo | 50 | 10,000 |
159
+ | Ultra | $149/mo | 100 + WS events | 100,000 |
148
160
 
149
- Get a key at [madeonsol.com/developer](https://madeonsol.com/developer).
161
+ Free tier returns the full REST response shape on every endpoint — real wallets, TX signatures, full precision. Paid tiers unlock webhooks, WebSockets, rule engines, and ULTRA-only data depth. Get a key at [madeonsol.com/developer](https://madeonsol.com/developer).
150
162
 
151
163
  ## Also Available
152
164
 
package/dist/index.js CHANGED
@@ -97,18 +97,27 @@ function registerTools(server) {
97
97
  params.strategy = strategy;
98
98
  return { content: [{ type: "text", text: await query("/api/x402/kol/feed", params) }] };
99
99
  });
100
- server.tool("madeonsol_kol_coordination", "Get KOL convergence signals — tokens being accumulated by multiple KOLs simultaneously. PRO+ adds cluster quality filters.", {
100
+ server.tool("madeonsol_kol_coordination", "KOL convergence signals (v1.1) — tokens being accumulated by multiple KOLs. Response includes peak_kols/peak_buys (busiest window slice), exited_count (net-flow-negative wallets), and a 0-100 coordination_score. Blacklist filters WIF/BONK/stables by default.", {
101
101
  period: z.enum(["1h", "6h", "24h", "7d"]).default("24h").describe("Time period for coordination analysis"),
102
102
  min_kols: z.number().min(2).max(50).default(3).describe("Minimum number of KOLs converging on the same token"),
103
103
  limit: z.number().min(1).max(50).default(20).describe("Number of coordination signals to return"),
104
104
  min_avg_winrate: z.number().optional().describe("PRO+: require cluster avg winrate_7d >= N (0-100)"),
105
105
  unique_strategies: z.number().optional().describe("PRO+: require >= N distinct strategies in cluster"),
106
- }, readOnlyAnnotations, async ({ period, min_kols, limit, min_avg_winrate, unique_strategies }) => {
106
+ include_majors: z.boolean().optional().describe("v1.1: include major memecoins (WIF/BONK/POPCAT). Default false."),
107
+ window_minutes: z.number().min(1).max(60).optional().describe("v1.1: peak-density window (1-60). Default 15."),
108
+ min_score: z.number().min(0).max(100).optional().describe("v1.1: minimum composite coordination_score (0-100)."),
109
+ }, readOnlyAnnotations, async ({ period, min_kols, limit, min_avg_winrate, unique_strategies, include_majors, window_minutes, min_score }) => {
107
110
  const params = { period, min_kols, limit };
108
111
  if (min_avg_winrate !== undefined)
109
112
  params.min_avg_winrate = min_avg_winrate;
110
113
  if (unique_strategies !== undefined)
111
114
  params.unique_strategies = unique_strategies;
115
+ if (include_majors !== undefined)
116
+ params.include_majors = include_majors ? "true" : "false";
117
+ if (window_minutes !== undefined)
118
+ params.window_minutes = window_minutes;
119
+ if (min_score !== undefined)
120
+ params.min_score = min_score;
112
121
  return { content: [{ type: "text", text: await query("/api/x402/kol/coordination", params) }] };
113
122
  });
114
123
  server.tool("madeonsol_kol_leaderboard", "Get KOL performance rankings by PnL and win rate. PRO+ can sort by alternative axes (winrate/roi/profit_factor/early_entry).", {
@@ -451,6 +460,52 @@ function registerTools(server) {
451
460
  const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
452
461
  return { content: [{ type: "text", text }] };
453
462
  });
463
+ // ── Coordination alerts (PRO/ULTRA, v1.1) ──
464
+ server.tool("madeonsol_coordination_alerts_list", "List your coordination alert rules. PRO=5 rules, ULTRA=20.", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => ({
465
+ content: [{ type: "text", text: await restQuery("GET", "/kol/coordination/alerts") }],
466
+ }));
467
+ server.tool("madeonsol_coordination_alerts_create", "Create a coordination alert rule. Fires within ~1s when a KOL cluster meets thresholds (peak-density scored). Delivered via WebSocket (kol:coordination channel) and/or HMAC-signed webhook. Returns webhook_secret ONCE when delivery_mode includes 'webhook' — store it.", {
468
+ name: z.string().optional().describe("Optional label"),
469
+ min_kols: z.number().min(2).max(50).optional().describe("Minimum distinct KOLs in the window (default 3)"),
470
+ window_minutes: z.number().min(1).max(60).optional().describe("Peak-density window size in minutes (default 15)"),
471
+ min_score: z.number().min(0).max(100).optional().describe("Minimum composite score 0-100 (default 60)"),
472
+ include_majors: z.boolean().optional().describe("Include WIF/BONK/POPCAT etc. Default false."),
473
+ cooldown_min: z.number().min(1).optional().describe("Silence per (rule, token) in minutes (default 60)"),
474
+ score_jump_break: z.number().min(1).max(100).optional().describe("Re-fire early when score jumps by N points vs last fire (default 10)"),
475
+ delivery_mode: z.enum(["websocket", "webhook", "both"]).optional().describe("Where to deliver fires"),
476
+ webhook_url: z.string().url().optional().describe("Required when delivery_mode includes 'webhook'"),
477
+ }, { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }, async (args) => {
478
+ const body = {};
479
+ for (const [k, v] of Object.entries(args))
480
+ if (v !== undefined)
481
+ body[k] = v;
482
+ return { content: [{ type: "text", text: await restQuery("POST", "/kol/coordination/alerts", body) }] };
483
+ });
484
+ server.tool("madeonsol_coordination_alerts_get", "Get one coordination alert rule by id.", { id: z.string().describe("Rule UUID") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ id }) => ({
485
+ content: [{ type: "text", text: await restQuery("GET", `/kol/coordination/alerts/${encodeURIComponent(id)}`) }],
486
+ }));
487
+ server.tool("madeonsol_coordination_alerts_update", "Update fields on a coordination alert rule, including is_active toggle.", {
488
+ id: z.string().describe("Rule UUID"),
489
+ name: z.string().nullable().optional(),
490
+ min_kols: z.number().min(2).max(50).optional(),
491
+ window_minutes: z.number().min(1).max(60).optional(),
492
+ min_score: z.number().min(0).max(100).optional(),
493
+ include_majors: z.boolean().optional(),
494
+ cooldown_min: z.number().min(1).optional(),
495
+ score_jump_break: z.number().min(1).max(100).optional(),
496
+ delivery_mode: z.enum(["websocket", "webhook", "both"]).optional(),
497
+ webhook_url: z.string().url().nullable().optional(),
498
+ is_active: z.boolean().optional(),
499
+ }, { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }, async ({ id, ...patch }) => {
500
+ const body = {};
501
+ for (const [k, v] of Object.entries(patch))
502
+ if (v !== undefined)
503
+ body[k] = v;
504
+ return { content: [{ type: "text", text: await restQuery("PATCH", `/kol/coordination/alerts/${encodeURIComponent(id)}`, body) }] };
505
+ });
506
+ server.tool("madeonsol_coordination_alerts_delete", "Delete a coordination alert rule permanently.", { id: z.string().describe("Rule UUID") }, { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true }, async ({ id }) => ({
507
+ content: [{ type: "text", text: await restQuery("DELETE", `/kol/coordination/alerts/${encodeURIComponent(id)}`) }],
508
+ }));
454
509
  console.error("[madeonsol-mcp] Webhook & streaming tools enabled");
455
510
  }
456
511
  else {
@@ -495,7 +550,7 @@ async function main() {
495
550
  res.end(JSON.stringify({
496
551
  name: "madeonsol",
497
552
  description: "Solana KOL trading intelligence and deployer analytics. Real-time data from 1,000+ KOL wallets, 6,700+ Pump.fun deployers, 47,000+ scored alpha wallets, copy-trade rules, and wallet tracker. Supports MadeOnSol API key (msk_) or x402 micropayments.",
498
- version: "1.0.0",
553
+ version: "1.1.0",
499
554
  tools: [
500
555
  { name: "madeonsol_kol_feed", description: "Get real-time Solana KOL trades from 1,000+ tracked wallets." },
501
556
  { name: "madeonsol_kol_coordination", description: "Get KOL convergence signals — tokens multiple KOLs are accumulating." },
@@ -532,6 +587,11 @@ async function main() {
532
587
  { name: "madeonsol_copytrade_update", description: "Update a copy-trade rule. PRO/ULTRA." },
533
588
  { name: "madeonsol_copytrade_delete", description: "Delete a copy-trade rule. PRO/ULTRA." },
534
589
  { name: "madeonsol_copytrade_signals", description: "Recent fired copy-trade signals (up to 7 days). PRO/ULTRA." },
590
+ { name: "madeonsol_coordination_alerts_list", description: "List your KOL coordination alert rules. PRO/ULTRA." },
591
+ { name: "madeonsol_coordination_alerts_create", description: "Create a coordination alert rule (push via WS + webhook, <1s latency). PRO/ULTRA." },
592
+ { name: "madeonsol_coordination_alerts_get", description: "Get one coordination alert rule. PRO/ULTRA." },
593
+ { name: "madeonsol_coordination_alerts_update", description: "Update fields on a coordination alert rule. PRO/ULTRA." },
594
+ { name: "madeonsol_coordination_alerts_delete", description: "Delete a coordination alert rule. PRO/ULTRA." },
535
595
  ],
536
596
  homepage: "https://madeonsol.com/solana-api",
537
597
  repository: "https://github.com/LamboPoewert/mcp-server-madeonsol",
@@ -547,7 +607,7 @@ async function main() {
547
607
  transport = new StreamableHTTPServerTransport({
548
608
  sessionIdGenerator: undefined,
549
609
  });
550
- const server = new McpServer({ name: "madeonsol", version: "1.0.0" });
610
+ const server = new McpServer({ name: "madeonsol", version: "1.1.0" });
551
611
  registerTools(server);
552
612
  await server.connect(transport);
553
613
  }
@@ -585,7 +645,7 @@ async function main() {
585
645
  }
586
646
  else {
587
647
  // Stdio transport for local use (Claude Desktop, Cursor, Claude Code)
588
- const server = new McpServer({ name: "madeonsol", version: "1.0.0" });
648
+ const server = new McpServer({ name: "madeonsol", version: "1.1.0" });
589
649
  registerTools(server);
590
650
  const transport = new StdioServerTransport();
591
651
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-madeonsol",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
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",