mcp-server-madeonsol 0.8.0 → 0.9.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 +52 -14
- package/dist/index.js +80 -14
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. Use from Claude Desktop, Cursor, or any MCP-compatible client.
|
|
4
4
|
|
|
5
|
-
> Real-time Solana trading intelligence: track 1,000+ KOL wallets with <3s latency, score 6,700+ Pump.fun deployers by reputation, detect multi-KOL coordination signals, and stream every DEX trade. Free tier: 200 requests/day at [madeonsol.com/developer](https://madeonsol.com/developer) — no credit card required.
|
|
5
|
+
> Real-time Solana trading intelligence: track 1,000+ KOL wallets with <3s latency, score 6,700+ Pump.fun deployers by reputation, detect multi-KOL coordination signals, monitor any Solana wallet for swaps and transfers, and stream every DEX trade. Free tier: 200 requests/day at [madeonsol.com/developer](https://madeonsol.com/developer) — no credit card required.
|
|
6
6
|
|
|
7
7
|
## Authentication
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Two options (in priority order):
|
|
10
10
|
|
|
11
11
|
| Method | Env var | Best for |
|
|
12
12
|
|---|---|---|
|
|
13
13
|
| **MadeOnSol API key** (recommended) | `MADEONSOL_API_KEY` | Developers — [get a free key](https://madeonsol.com/developer) |
|
|
14
|
-
| RapidAPI key | `RAPIDAPI_KEY` | RapidAPI subscribers |
|
|
15
14
|
| x402 micropayments | `SVM_PRIVATE_KEY` | AI agents with Solana wallets |
|
|
16
15
|
|
|
17
16
|
## Install
|
|
@@ -47,29 +46,68 @@ Add to MCP settings with the same command and env vars.
|
|
|
47
46
|
|
|
48
47
|
## Tools
|
|
49
48
|
|
|
49
|
+
### KOL Intelligence
|
|
50
|
+
|
|
50
51
|
| Tool | Description |
|
|
51
52
|
|---|---|
|
|
52
53
|
| `madeonsol_kol_feed` | Real-time KOL trade feed (1,000+ wallets) |
|
|
53
|
-
| `madeonsol_kol_coordination` | Multi-KOL convergence signals |
|
|
54
|
-
| `madeonsol_kol_leaderboard` | KOL PnL and win rate rankings (180 days of
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
54
|
+
| `madeonsol_kol_coordination` | Multi-KOL convergence signals — tokens multiple KOLs are accumulating |
|
|
55
|
+
| `madeonsol_kol_leaderboard` | KOL PnL and win rate rankings (180 days of history; periods: today, 7d, 30d, 90d, 180d) |
|
|
56
|
+
| `madeonsol_kol_pairs` | KOL affinity matrix — which KOLs co-trade the same tokens |
|
|
57
|
+
| `madeonsol_kol_hot_tokens` | KOL momentum tokens — accelerating buy interest |
|
|
58
|
+
| `madeonsol_kol_trending_tokens` | Tokens ranked by KOL buy volume (5m–12h windows). Sub-hour periods PRO/ULTRA only. |
|
|
59
|
+
| `madeonsol_kol_pnl` | Deep per-wallet PnL: equity curve, risk metrics, closed + open positions. BASIC=summary, PRO=+curve+closed, ULTRA=+open. |
|
|
60
|
+
| `madeonsol_kol_timing` | KOL entry/exit timing profile — PRO/ULTRA |
|
|
61
|
+
|
|
62
|
+
### Deployer Hunter
|
|
63
|
+
|
|
64
|
+
| Tool | Description |
|
|
65
|
+
|---|---|
|
|
66
|
+
| `madeonsol_deployer_alerts` | Pump.fun deployer launches with KOL enrichment. PRO/ULTRA: filter by tier (elite/good/moderate/rising/cold). |
|
|
67
|
+
| `madeonsol_deployer_trajectory` | Deployer skill curve — streaks, rolling bond rate, trend — PRO/ULTRA |
|
|
68
|
+
|
|
69
|
+
### Wallet Tracker
|
|
70
|
+
|
|
71
|
+
| Tool | Description |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `madeonsol_wallet_tracker_watchlist` | List your tracked wallets and remaining capacity (BASIC: 10, PRO: 50, ULTRA: 100) |
|
|
74
|
+
| `madeonsol_wallet_tracker_add` | Add a wallet to your watchlist |
|
|
75
|
+
| `madeonsol_wallet_tracker_remove` | Remove a wallet from your watchlist |
|
|
76
|
+
| `madeonsol_wallet_tracker_trades` | Historical swap/transfer events for watched wallets (120-day retention) |
|
|
77
|
+
| `madeonsol_wallet_tracker_summary` | Per-wallet stats: swap counts, SOL bought/sold, last event |
|
|
78
|
+
|
|
79
|
+
### Streaming & Webhooks
|
|
80
|
+
|
|
81
|
+
| Tool | Description |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `madeonsol_stream_token` | Get a 24h WebSocket token for KOL/deployer streaming and DEX trade stream — PRO/ULTRA |
|
|
84
|
+
| `madeonsol_create_webhook` | Register a webhook for real-time push notifications — PRO/ULTRA |
|
|
85
|
+
| `madeonsol_list_webhooks` | List your registered webhooks — PRO/ULTRA |
|
|
86
|
+
| `madeonsol_delete_webhook` | Delete a webhook by ID — PRO/ULTRA |
|
|
87
|
+
| `madeonsol_test_webhook` | Send a test payload to verify a webhook — PRO/ULTRA |
|
|
59
88
|
|
|
60
|
-
|
|
89
|
+
### General
|
|
61
90
|
|
|
62
91
|
| Tool | Description |
|
|
63
92
|
|---|---|
|
|
64
|
-
| `
|
|
65
|
-
|
|
93
|
+
| `madeonsol_discovery` | List all endpoints and prices (free, no auth) |
|
|
94
|
+
|
|
95
|
+
## Tiers
|
|
96
|
+
|
|
97
|
+
| Tier | Price | Wallets tracked | Requests/day |
|
|
98
|
+
|------|-------|-----------------|--------------|
|
|
99
|
+
| BASIC | Free | 10 | 200 |
|
|
100
|
+
| PRO | $49/mo | 50 | 10,000 |
|
|
101
|
+
| ULTRA | $199/mo | 100 + WS events | 100,000 |
|
|
102
|
+
|
|
103
|
+
Get a key at [madeonsol.com/developer](https://madeonsol.com/developer).
|
|
66
104
|
|
|
67
105
|
## Also Available
|
|
68
106
|
|
|
69
107
|
| Platform | Package |
|
|
70
108
|
|---|---|
|
|
71
|
-
| TypeScript SDK | [`madeonsol
|
|
72
|
-
| Python (LangChain, CrewAI) | [`madeonsol-x402`](https://
|
|
109
|
+
| TypeScript SDK | [`madeonsol`](https://www.npmjs.com/package/madeonsol) on npm |
|
|
110
|
+
| Python (LangChain, CrewAI) | [`madeonsol-x402`](https://pypi.org/project/madeonsol-x402/) on PyPI |
|
|
73
111
|
| ElizaOS | [`@madeonsol/plugin-madeonsol`](https://www.npmjs.com/package/@madeonsol/plugin-madeonsol) |
|
|
74
112
|
| Solana Agent Kit | [`solana-agent-kit-plugin-madeonsol`](https://www.npmjs.com/package/solana-agent-kit-plugin-madeonsol) |
|
|
75
113
|
|
package/dist/index.js
CHANGED
|
@@ -80,31 +80,63 @@ async function query(path, params) {
|
|
|
80
80
|
}
|
|
81
81
|
function registerTools(server) {
|
|
82
82
|
const readOnlyAnnotations = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true };
|
|
83
|
-
server.tool("madeonsol_kol_feed", "Get real-time Solana KOL trades from 1,000+ tracked wallets.", {
|
|
83
|
+
server.tool("madeonsol_kol_feed", "Get real-time Solana KOL trades from 1,000+ tracked wallets. PRO+ adds size/age/strategy/winrate filters.", {
|
|
84
84
|
limit: z.number().min(1).max(100).default(10).describe("Number of trades to return (1-100)"),
|
|
85
85
|
action: z.enum(["buy", "sell"]).optional().describe("Filter by trade type: buy or sell"),
|
|
86
86
|
kol: z.string().optional().describe("Filter by specific KOL wallet address (base58)"),
|
|
87
|
-
|
|
87
|
+
min_sol: z.number().optional().describe("PRO+: minimum SOL size per trade"),
|
|
88
|
+
token_age_max_min: z.number().optional().describe("PRO+: max token age in minutes at time of trade"),
|
|
89
|
+
exclude_sells: z.boolean().optional().describe("PRO+: drop sell-side trades"),
|
|
90
|
+
min_kol_winrate: z.number().optional().describe("PRO+: minimum 7d winrate of the KOL (0-100)"),
|
|
91
|
+
strategy: z.enum(["sniper", "flipper", "swinger", "holder", "mixed"]).optional().describe("PRO+: filter by auto-tagged strategy"),
|
|
92
|
+
}, readOnlyAnnotations, async ({ limit, action, kol, min_sol, token_age_max_min, exclude_sells, min_kol_winrate, strategy }) => {
|
|
88
93
|
const params = { limit };
|
|
89
94
|
if (action)
|
|
90
95
|
params.action = action;
|
|
91
96
|
if (kol)
|
|
92
97
|
params.kol = kol;
|
|
98
|
+
if (min_sol !== undefined)
|
|
99
|
+
params.min_sol = min_sol;
|
|
100
|
+
if (token_age_max_min !== undefined)
|
|
101
|
+
params.token_age_max_min = token_age_max_min;
|
|
102
|
+
if (exclude_sells)
|
|
103
|
+
params.exclude_sells = "true";
|
|
104
|
+
if (min_kol_winrate !== undefined)
|
|
105
|
+
params.min_kol_winrate = min_kol_winrate;
|
|
106
|
+
if (strategy)
|
|
107
|
+
params.strategy = strategy;
|
|
93
108
|
return { content: [{ type: "text", text: await query("/api/x402/kol/feed", params) }] };
|
|
94
109
|
});
|
|
95
|
-
server.tool("madeonsol_kol_coordination", "Get KOL convergence signals — tokens being accumulated by multiple KOLs simultaneously.", {
|
|
110
|
+
server.tool("madeonsol_kol_coordination", "Get KOL convergence signals — tokens being accumulated by multiple KOLs simultaneously. PRO+ adds cluster quality filters.", {
|
|
96
111
|
period: z.enum(["1h", "6h", "24h", "7d"]).default("24h").describe("Time period for coordination analysis"),
|
|
97
112
|
min_kols: z.number().min(2).max(50).default(3).describe("Minimum number of KOLs converging on the same token"),
|
|
98
113
|
limit: z.number().min(1).max(50).default(20).describe("Number of coordination signals to return"),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
|
|
114
|
+
min_avg_winrate: z.number().optional().describe("PRO+: require cluster avg winrate_7d >= N (0-100)"),
|
|
115
|
+
unique_strategies: z.number().optional().describe("PRO+: require >= N distinct strategies in cluster"),
|
|
116
|
+
}, readOnlyAnnotations, async ({ period, min_kols, limit, min_avg_winrate, unique_strategies }) => {
|
|
117
|
+
const params = { period, min_kols, limit };
|
|
118
|
+
if (min_avg_winrate !== undefined)
|
|
119
|
+
params.min_avg_winrate = min_avg_winrate;
|
|
120
|
+
if (unique_strategies !== undefined)
|
|
121
|
+
params.unique_strategies = unique_strategies;
|
|
122
|
+
return { content: [{ type: "text", text: await query("/api/x402/kol/coordination", params) }] };
|
|
123
|
+
});
|
|
124
|
+
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).", {
|
|
125
|
+
period: z.enum(["today", "7d", "30d", "90d", "180d"]).default("7d").describe("Time period (trade retention is 180d)"),
|
|
104
126
|
limit: z.number().min(1).max(50).default(20).describe("Number of KOLs to return in ranking"),
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
127
|
+
sort: z.enum(["pnl", "winrate", "profit_factor", "roi", "early_entry"]).optional().describe("PRO+: sort axis (default 'pnl')"),
|
|
128
|
+
strategy: z.enum(["sniper", "flipper", "swinger", "holder", "mixed"]).optional().describe("PRO+: filter by strategy tag"),
|
|
129
|
+
min_winrate: z.number().optional().describe("PRO+: minimum winrate cutoff (0-100)"),
|
|
130
|
+
}, readOnlyAnnotations, async ({ period, limit, sort, strategy, min_winrate }) => {
|
|
131
|
+
const params = { period, limit };
|
|
132
|
+
if (sort)
|
|
133
|
+
params.sort = sort;
|
|
134
|
+
if (strategy)
|
|
135
|
+
params.strategy = strategy;
|
|
136
|
+
if (min_winrate !== undefined)
|
|
137
|
+
params.min_winrate = min_winrate;
|
|
138
|
+
return { content: [{ type: "text", text: await query("/api/x402/kol/leaderboard", params) }] };
|
|
139
|
+
});
|
|
108
140
|
server.tool("madeonsol_deployer_alerts", "Get real-time alerts from Pump.fun deployers with KOL buy enrichment. PRO/ULTRA subscribers can filter by deployer tier (elite/good/moderate/rising/cold).", {
|
|
109
141
|
limit: z.number().min(1).max(100).default(10).describe("Number of deployer alerts to return (1-100)"),
|
|
110
142
|
offset: z.number().min(0).default(0).describe("Pagination offset for deployer alerts"),
|
|
@@ -150,13 +182,44 @@ function registerTools(server) {
|
|
|
150
182
|
}
|
|
151
183
|
return { content: [{ type: "text", text: "Deployer trajectory requires API key or RapidAPI key auth (Pro/Ultra)." }] };
|
|
152
184
|
});
|
|
153
|
-
server.tool("madeonsol_kol_hot_tokens", "KOL momentum tokens — tokens with accelerating KOL buy interest, early signals before coordination triggers.", {
|
|
185
|
+
server.tool("madeonsol_kol_hot_tokens", "KOL momentum tokens — tokens with accelerating KOL buy interest, early signals before coordination triggers. PRO+ adds buyer-quality filters.", {
|
|
154
186
|
period: z.enum(["1h", "6h"]).default("6h").describe("Time period: 1h or 6h"),
|
|
155
187
|
min_kols: z.number().min(1).max(20).default(1).describe("Minimum KOL buyers to include a token"),
|
|
156
188
|
limit: z.number().min(1).max(50).default(20).describe("Number of hot tokens to return"),
|
|
157
|
-
|
|
158
|
-
|
|
189
|
+
min_avg_winrate: z.number().optional().describe("PRO+: require avg winrate_7d of buyers >= N (0-100)"),
|
|
190
|
+
unique_strategies: z.number().optional().describe("PRO+: require >= N distinct strategies among buyers"),
|
|
191
|
+
}, readOnlyAnnotations, async ({ period, min_kols, limit, min_avg_winrate, unique_strategies }) => {
|
|
192
|
+
const params = { period, min_kols, limit };
|
|
193
|
+
if (min_avg_winrate !== undefined)
|
|
194
|
+
params.min_avg_winrate = min_avg_winrate;
|
|
195
|
+
if (unique_strategies !== undefined)
|
|
196
|
+
params.unique_strategies = unique_strategies;
|
|
197
|
+
return { content: [{ type: "text", text: await query("/api/x402/kol/tokens/hot", params) }] };
|
|
198
|
+
});
|
|
199
|
+
server.tool("madeonsol_kol_token_entry_order", "Ranked KOL first-buyers for a specific token, ordered by entry timestamp. PRO+ adds percentile_pnl_7d per entry.", {
|
|
200
|
+
mint: z.string().describe("Token mint address (base58)"),
|
|
201
|
+
limit: z.number().min(1).max(200).default(50).describe("Max ranked entries to return"),
|
|
202
|
+
}, readOnlyAnnotations, async ({ mint, limit }) => ({
|
|
203
|
+
content: [{ type: "text", text: await query(`/api/x402/kol/tokens/${encodeURIComponent(mint)}/entry-order`, { limit }) }],
|
|
159
204
|
}));
|
|
205
|
+
server.tool("madeonsol_kol_compare_wallets", "Side-by-side comparison of 2-5 KOL wallets — strategy, winrates, ROI, percentile. PRO+ adds 30d overlap tokens (bought by 2+ of the wallets).", {
|
|
206
|
+
wallets: z.array(z.string()).min(2).max(5).describe("2-5 wallet addresses. BASIC=2, PRO=4, ULTRA=5."),
|
|
207
|
+
}, readOnlyAnnotations, async ({ wallets }) => ({
|
|
208
|
+
content: [{ type: "text", text: await query("/api/x402/kol/compare", { wallets: wallets.join(",") }) }],
|
|
209
|
+
}));
|
|
210
|
+
server.tool("madeonsol_kol_alerts_recent", "Live KOL alert feed — consensus clusters, fresh-token KOL buys, and heating-up wallets in one unified stream.", {
|
|
211
|
+
window: z.enum(["5m", "15m", "1h", "6h", "24h"]).default("15m").describe("Lookback window"),
|
|
212
|
+
types: z.array(z.enum(["consensus_cluster", "fresh_token_kol_buy", "heating_up"])).optional().describe("Filter to specific alert types"),
|
|
213
|
+
min_severity: z.enum(["low", "medium", "high"]).optional().describe("Minimum severity to include"),
|
|
214
|
+
limit: z.number().min(1).max(200).default(50).describe("Max alerts to return"),
|
|
215
|
+
}, readOnlyAnnotations, async ({ window, types, min_severity, limit }) => {
|
|
216
|
+
const params = { window, limit };
|
|
217
|
+
if (types && types.length > 0)
|
|
218
|
+
params.types = types.join(",");
|
|
219
|
+
if (min_severity)
|
|
220
|
+
params.min_severity = min_severity;
|
|
221
|
+
return { content: [{ type: "text", text: await query("/api/x402/kol/alerts/recent", params) }] };
|
|
222
|
+
});
|
|
160
223
|
server.tool("madeonsol_kol_pnl", "Deep per-wallet PnL breakdown — realized PnL, win rate, profit factor, max drawdown, daily equity curve, closed/open positions. BASIC: summary only. PRO: + curve + closed. ULTRA: + open positions.", {
|
|
161
224
|
wallet: z.string().describe("KOL wallet address (base58)"),
|
|
162
225
|
period: z.enum(["7d", "30d", "90d", "180d"]).default("30d").describe("Time period for PnL calculation"),
|
|
@@ -368,6 +431,9 @@ async function main() {
|
|
|
368
431
|
{ name: "madeonsol_kol_hot_tokens", description: "KOL momentum tokens — accelerating buy interest." },
|
|
369
432
|
{ name: "madeonsol_kol_pnl", description: "Deep per-wallet PnL: equity curve, risk metrics, positions." },
|
|
370
433
|
{ name: "madeonsol_kol_trending_tokens", description: "Tokens ranked by KOL buy volume (5m–12h windows)." },
|
|
434
|
+
{ name: "madeonsol_kol_token_entry_order", description: "Ranked KOL first-buyers for a specific token." },
|
|
435
|
+
{ name: "madeonsol_kol_compare_wallets", description: "Side-by-side comparison of 2-5 KOL wallets (overlap in PRO+)." },
|
|
436
|
+
{ name: "madeonsol_kol_alerts_recent", description: "Unified live KOL alert feed: clusters, fresh buys, heating-up." },
|
|
371
437
|
{ name: "madeonsol_discovery", description: "List all available endpoints with prices. Free." },
|
|
372
438
|
{ name: "madeonsol_create_webhook", description: "Register a webhook for real-time push notifications. Pro/Ultra." },
|
|
373
439
|
{ name: "madeonsol_list_webhooks", description: "List your registered webhooks. Pro/Ultra." },
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-server-madeonsol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"mcpName": "io.github.lambopoewert/madeonsol",
|
|
5
|
-
"description": "MCP server for MadeOnSol Solana KOL intelligence API
|
|
5
|
+
"description": "MCP server for MadeOnSol Solana KOL intelligence API — use from Claude, Cursor, or any MCP client",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"mcp-server-madeonsol": "dist/index.js"
|