mcp-server-madeonsol 1.7.3 โ 1.8.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 +31 -2
- package/dist/index.js +61 -3
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/mcp-server-madeonsol)
|
|
4
4
|
[](https://www.npmjs.com/package/mcp-server-madeonsol)
|
|
5
|
+
[](https://smithery.ai/servers/madeonsol/solana-kol-intelligence)
|
|
6
|
+
[](https://glama.ai/mcp/servers/LamboPoewert/mcp-server-madeonsol)
|
|
5
7
|
[](https://modelcontextprotocol.io/)
|
|
6
8
|
[](LICENSE)
|
|
7
9
|
|
|
8
|
-
> ๐ค **[Use in Claude Desktop](#claude-desktop)** ยท ๐ฑ๏ธ **[Use in Cursor](#cursor)** ยท ๐ **[API docs](https://madeonsol.com/api-docs)** ยท ๐ฐ **[Free API key](https://madeonsol.com/pricing)**
|
|
10
|
+
> โก **[Install via Smithery](#install-via-smithery-one-line)** ยท ๐ค **[Use in Claude Desktop](#claude-desktop)** ยท ๐ฑ๏ธ **[Use in Cursor](#cursor)** ยท ๐ **[API docs](https://madeonsol.com/api-docs)** ยท ๐ฐ **[Free API key](https://madeonsol.com/pricing)** ยท ๐ **[On Glama](https://glama.ai/mcp/servers/LamboPoewert/mcp-server-madeonsol)**
|
|
9
11
|
|
|
10
12
|
MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. Use from Claude Desktop, Cursor, or any MCP-compatible client.
|
|
11
13
|
|
|
@@ -13,7 +15,23 @@ MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. U
|
|
|
13
15
|
|
|
14
16
|
> **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.
|
|
15
17
|
|
|
16
|
-
##
|
|
18
|
+
## Install via Smithery (one line)
|
|
19
|
+
|
|
20
|
+
[Smithery](https://smithery.ai/servers/madeonsol/solana-kol-intelligence) is the easiest path โ it writes the config for you and handles the install:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx -y smithery mcp add madeonsol/solana-kol-intelligence
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Smithery prompts for your `MADEONSOL_API_KEY` ([free at madeonsol.com/pricing](https://madeonsol.com/pricing)) and wires up Claude Desktop or your chosen MCP client. Restart the client and ask: *"What are KOLs buying right now?"*
|
|
27
|
+
|
|
28
|
+
You can also browse tools from the CLI:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx -y smithery tool get madeonsol/solana-kol-intelligence madeonsol_kol_feed
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Quick start โ manual config (10 seconds)
|
|
17
35
|
|
|
18
36
|
```bash
|
|
19
37
|
npm install -g mcp-server-madeonsol
|
|
@@ -102,6 +120,17 @@ Add to MCP settings with the same command and env vars.
|
|
|
102
120
|
| `madeonsol_wallet_tracker_trades` | Historical swap/transfer events for watched wallets (120-day retention) |
|
|
103
121
|
| `madeonsol_wallet_tracker_summary` | Per-wallet stats: swap counts, SOL bought/sold, last event |
|
|
104
122
|
|
|
123
|
+
### Universal Wallet *(new in 1.8 โ any wallet, not just curated KOLs, PRO+)*
|
|
124
|
+
|
|
125
|
+
| Tool | Description |
|
|
126
|
+
|---|---|
|
|
127
|
+
| `madeonsol_wallet_stats` | Aggregate 90d stats + cross-product flags (is_kol, is_alpha_tracked + bot_confidence + win_rate + net_pnl, is_deployer + tokens_deployed) โ quick sizing-up of an unknown wallet |
|
|
128
|
+
| `madeonsol_wallet_pnl` | Full 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 |
|
|
129
|
+
| `madeonsol_wallet_positions` | Open positions only โ lighter slice of /pnl. Shares the same cache. |
|
|
130
|
+
| `madeonsol_wallet_trades` | Cursor-paginated raw trades with action / token / since-until filters |
|
|
131
|
+
|
|
132
|
+
Cached server-side with dynamic TTL (5min / 1h / 24h based on last activity). Cost basis observable only inside the 90-day window.
|
|
133
|
+
|
|
105
134
|
### Alpha Wallet Intelligence
|
|
106
135
|
|
|
107
136
|
Scored from 47,000+ early-buyer records (wallets seen in the first 20 buyers of Pump.fun tokens).
|
package/dist/index.js
CHANGED
|
@@ -334,7 +334,61 @@ function registerTools(server) {
|
|
|
334
334
|
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
335
335
|
return { content: [{ type: "text", text }] };
|
|
336
336
|
});
|
|
337
|
+
// โโ Universal wallet endpoints (PRO+, any wallet โ not just curated KOLs) โโ
|
|
338
|
+
server.tool("madeonsol_wallet_stats", "Aggregate stats for any Solana wallet over the last 90 days plus cross-product flags (is_kol, is_alpha_tracked with bot_confidence + win_rate + net_pnl, is_deployer with tokens_deployed + bonding_rate). Use this before drilling into PnL to size up an unknown wallet quickly. PRO+.", {
|
|
339
|
+
address: z.string().describe("Solana wallet address (base58)"),
|
|
340
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ address }) => {
|
|
341
|
+
const res = await fetch(`${BASE_URL}/api/v1/wallet/${encodeURIComponent(address)}`, {
|
|
342
|
+
headers: { "Content-Type": "application/json", ...apiKeyHeaders() },
|
|
343
|
+
});
|
|
344
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
345
|
+
return { content: [{ type: "text", text }] };
|
|
346
|
+
});
|
|
347
|
+
server.tool("madeonsol_wallet_pnl", "Full FIFO cost-basis PnL for any wallet: realized + unrealized SOL, profit factor, max drawdown, avg + median hold minutes, daily UTC PnL curve, closed positions sorted by pnl desc (with ROI %, hold time, win/loss), and open positions hydrated with live current prices from the market-cap tracker. Cached with dynamic TTL (5min active / 1h recent / 24h dormant). Cache hits don't count against your daily quota. Cost basis only observable inside the 90-day data window โ overflow sells are silently discarded rather than fabricated. PRO+.", {
|
|
348
|
+
address: z.string().describe("Solana wallet address (base58)"),
|
|
349
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ address }) => {
|
|
350
|
+
const res = await fetch(`${BASE_URL}/api/v1/wallet/${encodeURIComponent(address)}/pnl`, {
|
|
351
|
+
headers: { "Content-Type": "application/json", ...apiKeyHeaders() },
|
|
352
|
+
});
|
|
353
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
354
|
+
return { content: [{ type: "text", text }] };
|
|
355
|
+
});
|
|
356
|
+
server.tool("madeonsol_wallet_positions", "Open positions only for any wallet โ lighter slice of madeonsol_wallet_pnl for use cases that don't need the full PnL summary or curve. Each position: token_mint, token_amount, cost_basis_sol, avg_entry_price_sol, current_price_sol (live from mc-tracker; null if delisted), current_value_sol, unrealized_sol, unrealized_pct, first_buy_at. Shares the /pnl cache. PRO+.", {
|
|
357
|
+
address: z.string().describe("Solana wallet address (base58)"),
|
|
358
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ address }) => {
|
|
359
|
+
const res = await fetch(`${BASE_URL}/api/v1/wallet/${encodeURIComponent(address)}/positions`, {
|
|
360
|
+
headers: { "Content-Type": "application/json", ...apiKeyHeaders() },
|
|
361
|
+
});
|
|
362
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
363
|
+
return { content: [{ type: "text", text }] };
|
|
364
|
+
});
|
|
365
|
+
server.tool("madeonsol_wallet_trades", "Cursor-paginated raw trades for any wallet. Filter by action (buy/sell), specific token_mint, time window via since/until (Unix seconds; default last 90 days). Cursor encodes (block_time, id) for stable DESC pagination โ pass next_cursor from the previous response to fetch older trades. Limit 1-500 (default 100). PRO+.", {
|
|
366
|
+
address: z.string().describe("Solana wallet address (base58)"),
|
|
367
|
+
limit: z.number().min(1).max(500).default(100).describe("Trades per page (1-500)"),
|
|
368
|
+
cursor: z.string().optional().describe("Cursor from previous response's next_cursor field"),
|
|
369
|
+
action: z.enum(["buy", "sell"]).optional().describe("Filter to buys or sells only"),
|
|
370
|
+
token_mint: z.string().optional().describe("Filter to a single token mint"),
|
|
371
|
+
since: z.number().optional().describe("Unix epoch seconds โ default now-90d"),
|
|
372
|
+
until: z.number().optional().describe("Unix epoch seconds โ default now"),
|
|
373
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ address, limit, cursor, action, token_mint, since, until }) => {
|
|
374
|
+
const url = new URL(`${BASE_URL}/api/v1/wallet/${encodeURIComponent(address)}/trades`);
|
|
375
|
+
url.searchParams.set("limit", String(limit));
|
|
376
|
+
if (cursor)
|
|
377
|
+
url.searchParams.set("cursor", cursor);
|
|
378
|
+
if (action)
|
|
379
|
+
url.searchParams.set("action", action);
|
|
380
|
+
if (token_mint)
|
|
381
|
+
url.searchParams.set("token_mint", token_mint);
|
|
382
|
+
if (since !== undefined)
|
|
383
|
+
url.searchParams.set("since", String(since));
|
|
384
|
+
if (until !== undefined)
|
|
385
|
+
url.searchParams.set("until", String(until));
|
|
386
|
+
const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } });
|
|
387
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
388
|
+
return { content: [{ type: "text", text }] };
|
|
389
|
+
});
|
|
337
390
|
console.error("[madeonsol-mcp] Wallet tracker tools enabled");
|
|
391
|
+
console.error("[madeonsol-mcp] Universal wallet tools enabled (stats / pnl / positions / trades)");
|
|
338
392
|
}
|
|
339
393
|
else {
|
|
340
394
|
console.error("[madeonsol-mcp] Wallet tracker tools disabled (requires MADEONSOL_API_KEY)");
|
|
@@ -681,7 +735,7 @@ async function main() {
|
|
|
681
735
|
res.end(JSON.stringify({
|
|
682
736
|
name: "madeonsol",
|
|
683
737
|
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.",
|
|
684
|
-
version: "1.
|
|
738
|
+
version: "1.8.0",
|
|
685
739
|
tools: [
|
|
686
740
|
{ name: "madeonsol_kol_feed", description: "Get real-time Solana KOL trades from 1,000+ tracked wallets." },
|
|
687
741
|
{ name: "madeonsol_kol_coordination", description: "Get KOL convergence signals โ tokens multiple KOLs are accumulating." },
|
|
@@ -709,6 +763,10 @@ async function main() {
|
|
|
709
763
|
{ name: "madeonsol_wallet_tracker_remove", description: "Remove a wallet from your watchlist." },
|
|
710
764
|
{ name: "madeonsol_wallet_tracker_trades", description: "Historical swap/transfer events for watched wallets." },
|
|
711
765
|
{ name: "madeonsol_wallet_tracker_summary", description: "Per-wallet stats: swap counts, SOL bought/sold." },
|
|
766
|
+
{ name: "madeonsol_wallet_stats", description: "Aggregate stats + cross-product flags (is_kol/alpha/deployer) for any Solana wallet. PRO+." },
|
|
767
|
+
{ name: "madeonsol_wallet_pnl", description: "Full FIFO cost-basis PnL for any wallet: realized + unrealized, profit factor, drawdown, daily curve, closed + open positions. PRO+." },
|
|
768
|
+
{ name: "madeonsol_wallet_positions", description: "Open positions only for any wallet โ lighter slice of /pnl. Live unrealized SOL from mc-tracker. PRO+." },
|
|
769
|
+
{ name: "madeonsol_wallet_trades", description: "Cursor-paginated raw trades for any wallet. Filter by action / token_mint / time window. PRO+." },
|
|
712
770
|
{ name: "madeonsol_alpha_leaderboard", description: "Top profitable early-buyer wallets โ 47,000+ scored. BASIC=25, PRO=100, ULTRA=500." },
|
|
713
771
|
{ name: "madeonsol_alpha_wallet", description: "Full alpha profile + bot signals for one wallet. ULTRA only." },
|
|
714
772
|
{ name: "madeonsol_alpha_linked", description: "Behaviorally linked wallets (co-bought 3+ tokens within 2s). ULTRA only." },
|
|
@@ -749,7 +807,7 @@ async function main() {
|
|
|
749
807
|
transport = new StreamableHTTPServerTransport({
|
|
750
808
|
sessionIdGenerator: undefined,
|
|
751
809
|
});
|
|
752
|
-
const server = new McpServer({ name: "madeonsol", version: "1.
|
|
810
|
+
const server = new McpServer({ name: "madeonsol", version: "1.8.0" });
|
|
753
811
|
registerTools(server);
|
|
754
812
|
await server.connect(transport);
|
|
755
813
|
}
|
|
@@ -787,7 +845,7 @@ async function main() {
|
|
|
787
845
|
}
|
|
788
846
|
else {
|
|
789
847
|
// Stdio transport for local use (Claude Desktop, Cursor, Claude Code)
|
|
790
|
-
const server = new McpServer({ name: "madeonsol", version: "1.
|
|
848
|
+
const server = new McpServer({ name: "madeonsol", version: "1.8.0" });
|
|
791
849
|
registerTools(server);
|
|
792
850
|
const transport = new StdioServerTransport();
|
|
793
851
|
await server.connect(transport);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-server-madeonsol",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.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",
|
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
"url": "https://github.com/LamboPoewert/mcp-server-madeonsol"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
52
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
53
|
+
"zod": "^4.3.6"
|
|
53
54
|
},
|
|
54
55
|
"peerDependencies": {
|
|
55
56
|
"@x402/fetch": ">=0.1.0",
|
|
@@ -57,5 +58,9 @@
|
|
|
57
58
|
"@x402/svm": ">=0.1.0",
|
|
58
59
|
"@solana/kit": ">=2.0.0",
|
|
59
60
|
"@scure/base": ">=1.0.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/node": "^20",
|
|
64
|
+
"typescript": "^5"
|
|
60
65
|
}
|
|
61
66
|
}
|