mcp-server-madeonsol 1.6.0 → 1.7.2
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 +8 -6
- package/dist/index.js +41 -8
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
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, monitor any Solana wallet for swaps and transfers, and stream every DEX trade. Free tier: 200 requests/day at [madeonsol.com/
|
|
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/pricing](https://madeonsol.com/pricing) — no credit card required.
|
|
6
6
|
|
|
7
|
-
> **New in 1.
|
|
7
|
+
> **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.
|
|
8
8
|
|
|
9
9
|
## Quick start (10 seconds)
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. U
|
|
|
12
12
|
npm install -g mcp-server-madeonsol
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Add to `claude_desktop_config.json` or Cursor MCP settings (free
|
|
15
|
+
Add to `claude_desktop_config.json` or Cursor MCP settings (free tier at https://madeonsol.com/pricing):
|
|
16
16
|
|
|
17
17
|
```json
|
|
18
18
|
{ "mcpServers": { "madeonsol": { "command": "mcp-server-madeonsol", "env": { "MADEONSOL_API_KEY": "msk_..." } } } }
|
|
@@ -26,10 +26,10 @@ Two options (in priority order):
|
|
|
26
26
|
|
|
27
27
|
| Method | Env var | Best for |
|
|
28
28
|
|---|---|---|
|
|
29
|
-
| **MadeOnSol API key** (recommended) | `MADEONSOL_API_KEY` | Developers — [get a free key](https://madeonsol.com/
|
|
29
|
+
| **MadeOnSol API key** (recommended) | `MADEONSOL_API_KEY` | Developers — [get a free key](https://madeonsol.com/pricing) |
|
|
30
30
|
| x402 micropayments | `SVM_PRIVATE_KEY` | AI agents with Solana wallets |
|
|
31
31
|
|
|
32
|
-
> **v1.0 breaking change:** RapidAPI auth (`RAPIDAPI_KEY`) has been removed. The MadeOnSol RapidAPI marketplace was retired on 2026-04-19. Get a free `msk_` key at [madeonsol.com/
|
|
32
|
+
> **v1.0 breaking change:** RapidAPI auth (`RAPIDAPI_KEY`) has been removed. The MadeOnSol RapidAPI marketplace was retired on 2026-04-19. Get a free `msk_` key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
|
|
33
33
|
|
|
34
34
|
## Install
|
|
35
35
|
|
|
@@ -109,6 +109,7 @@ Scored from 47,000+ early-buyer records (wallets seen in the first 20 buyers of
|
|
|
109
109
|
|
|
110
110
|
| Tool | Tier | Description |
|
|
111
111
|
|---|---|---|
|
|
112
|
+
| `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. |
|
|
112
113
|
| `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
|
|
113
114
|
| `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
|
|
114
115
|
|
|
@@ -169,6 +170,7 @@ Every "first KOL buy on a token mint" event. Filterable by **scout tier** (S/A/B
|
|
|
169
170
|
| Tool | Description |
|
|
170
171
|
|---|---|
|
|
171
172
|
| `madeonsol_discovery` | List all endpoints and prices (free, no auth) |
|
|
173
|
+
| `madeonsol_me` | Inspect your account — tier, daily/burst quota state, remaining requests, subscription expiry, per-feature usage (webhooks, copy-trade wallets, coordination rules, etc.). Self-throttle without parsing rate-limit headers. |
|
|
172
174
|
|
|
173
175
|
## Tiers
|
|
174
176
|
|
|
@@ -178,7 +180,7 @@ Every "first KOL buy on a token mint" event. Filterable by **scout tier** (S/A/B
|
|
|
178
180
|
| Pro | $49/mo | 50 | 10,000 |
|
|
179
181
|
| Ultra | $149/mo | 100 + WS events | 100,000 |
|
|
180
182
|
|
|
181
|
-
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/
|
|
183
|
+
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/pricing](https://madeonsol.com/pricing).
|
|
182
184
|
|
|
183
185
|
## Also Available
|
|
184
186
|
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/
|
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { createServer } from "node:http";
|
|
7
7
|
const BASE_URL = process.env.MADEONSOL_API_URL || "https://madeonsol.com";
|
|
8
|
-
const MADEONSOL_API_KEY = process.env.MADEONSOL_API_KEY; // Native key from madeonsol.com/
|
|
8
|
+
const MADEONSOL_API_KEY = process.env.MADEONSOL_API_KEY; // Native key from madeonsol.com/pricing
|
|
9
9
|
const PRIVATE_KEY = process.env.SVM_PRIVATE_KEY; // x402 micropayments (for AI agents)
|
|
10
10
|
const PORT = parseInt(process.env.PORT || "3100", 10);
|
|
11
11
|
const MODE = process.env.MCP_TRANSPORT || "stdio"; // "stdio" or "http"
|
|
@@ -43,7 +43,7 @@ async function initAuth() {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
console.error("\n[madeonsol-mcp] No auth configured — every tool call will fail.\n" +
|
|
46
|
-
" → Get a free MADEONSOL_API_KEY (200 req/day, no card) at https://madeonsol.com/
|
|
46
|
+
" → Get a free MADEONSOL_API_KEY (200 req/day, no card) at https://madeonsol.com/pricing\n" +
|
|
47
47
|
" → Or set SVM_PRIVATE_KEY for x402 micropayments.\n");
|
|
48
48
|
}
|
|
49
49
|
async function query(path, params) {
|
|
@@ -184,7 +184,7 @@ function registerTools(server) {
|
|
|
184
184
|
}
|
|
185
185
|
return { content: [{ type: "text", text: JSON.stringify(await res.json(), null, 2) }] };
|
|
186
186
|
}
|
|
187
|
-
return { content: [{ type: "text", text: "KOL timing requires MADEONSOL_API_KEY (msk_) — get one free at madeonsol.com/
|
|
187
|
+
return { content: [{ type: "text", text: "KOL timing requires MADEONSOL_API_KEY (msk_) — get one free at madeonsol.com/pricing." }] };
|
|
188
188
|
});
|
|
189
189
|
server.tool("madeonsol_deployer_trajectory", "Deployer skill curve — streaks, rolling bond rate, improvement trend, and deployment cadence for a Pump.fun deployer.", {
|
|
190
190
|
wallet: z.string().describe("Deployer wallet address (base58)"),
|
|
@@ -198,7 +198,7 @@ function registerTools(server) {
|
|
|
198
198
|
}
|
|
199
199
|
return { content: [{ type: "text", text: JSON.stringify(await res.json(), null, 2) }] };
|
|
200
200
|
}
|
|
201
|
-
return { content: [{ type: "text", text: "Deployer trajectory requires MADEONSOL_API_KEY (msk_, Pro/Ultra) — get one at madeonsol.com/
|
|
201
|
+
return { content: [{ type: "text", text: "Deployer trajectory requires MADEONSOL_API_KEY (msk_, Pro/Ultra) — get one at madeonsol.com/pricing." }] };
|
|
202
202
|
});
|
|
203
203
|
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.", {
|
|
204
204
|
period: z.enum(["1h", "6h"]).default("6h").describe("Time period: 1h or 6h"),
|
|
@@ -251,7 +251,7 @@ function registerTools(server) {
|
|
|
251
251
|
}
|
|
252
252
|
return { content: [{ type: "text", text: JSON.stringify(await res.json(), null, 2) }] };
|
|
253
253
|
}
|
|
254
|
-
return { content: [{ type: "text", text: "KOL PnL requires MADEONSOL_API_KEY (msk_) — get one free at madeonsol.com/
|
|
254
|
+
return { content: [{ type: "text", text: "KOL PnL requires MADEONSOL_API_KEY (msk_) — get one free at madeonsol.com/pricing." }] };
|
|
255
255
|
});
|
|
256
256
|
server.tool("madeonsol_kol_trending_tokens", "Tokens ranked by KOL buy volume — pure capital-flow signal. Sub-hour periods (5m/15m/30m) require PRO/ULTRA.", {
|
|
257
257
|
period: z.enum(["5m", "15m", "30m", "1h", "2h", "4h", "12h"]).default("1h").describe("Time window"),
|
|
@@ -392,6 +392,37 @@ function registerTools(server) {
|
|
|
392
392
|
server.tool("madeonsol_stream_token", "Generate a 24h WebSocket streaming token. Includes ws_url for KOL/deployer streaming (Pro/Ultra) and dex_ws_url for all-DEX trade streaming (Ultra only).", {}, { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }, async () => ({
|
|
393
393
|
content: [{ type: "text", text: await restQuery("POST", "/stream/token") }],
|
|
394
394
|
}));
|
|
395
|
+
// ── Account / quota introspection ──
|
|
396
|
+
server.tool("madeonsol_me", "Inspect your MadeOnSol API account — current tier, daily/burst quota state, remaining requests, subscription expiry, and per-feature usage (webhooks, copy-trade wallets, coordination rules, etc.). Use to self-throttle without parsing rate-limit headers.", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => ({
|
|
397
|
+
content: [{ type: "text", text: await restQuery("GET", "/me") }],
|
|
398
|
+
}));
|
|
399
|
+
// ── Token directory (PRO+) ──
|
|
400
|
+
server.tool("madeonsol_tokens_list", "Filtered, sortable token directory. Browse all tracked Solana tokens by market-cap band, liquidity floor, recent-activity window, primary DEX, authority/safety flags, and computed 1h volume / MEV-share / MC-change deltas. Default min_liq=2000 skips phantom-MC dust (low-liquidity pools producing absurd VWAP×supply products) — pass min_liq=0 to opt out. Computed filters (min_volume_1h_usd, max_mev_share_pct, mc_change_1h_min_pct, mc_change_1h_max_pct) over-fetch and post-filter — pagination.post_filtered=true on the response means page size may be < limit. PRO+ only.", {
|
|
401
|
+
min_mc: z.number().optional().describe("Minimum market cap in USD"),
|
|
402
|
+
max_mc: z.number().optional().describe("Maximum market cap in USD"),
|
|
403
|
+
min_liq: z.number().optional().describe("Minimum quote-side liquidity in USD (default 2000 — pass 0 to opt out of phantom-MC filter)"),
|
|
404
|
+
active_h: z.number().optional().describe("Only tokens with a trade in the last N hours"),
|
|
405
|
+
primary_dex: z.enum(["pumpfun", "pumpswap", "raydium", "meteora", "orca", "raydium_clmm"]).optional().describe("Filter by primary DEX"),
|
|
406
|
+
authority_revoked: z.boolean().optional().describe("Only tokens whose mint+freeze authority is revoked"),
|
|
407
|
+
exclude_token2022: z.boolean().optional().describe("Exclude Token-2022 mints (transfer-fee / hook risk)"),
|
|
408
|
+
min_lp_burnt_pct: z.number().optional().describe("Minimum % of LP supply burned (0-100)"),
|
|
409
|
+
min_volume_1h_usd: z.number().optional().describe("Minimum trailing 1h volume in USD (post-filter — may shrink page size)"),
|
|
410
|
+
max_mev_share_pct: z.number().optional().describe("Maximum MEV-share % of 1h volume (post-filter)"),
|
|
411
|
+
mc_change_1h_min_pct: z.number().optional().describe("Minimum 1h MC change % (post-filter; negative allowed)"),
|
|
412
|
+
mc_change_1h_max_pct: z.number().optional().describe("Maximum 1h MC change % (post-filter)"),
|
|
413
|
+
sort: z.enum(["mc_desc", "mc_asc", "last_trade_desc", "liquidity_desc", "cumulative_volume_desc"]).optional().describe("Sort axis (default mc_desc)"),
|
|
414
|
+
limit: z.number().min(1).max(100).optional().describe("Page size (max 100)"),
|
|
415
|
+
offset: z.number().min(0).optional().describe("Pagination offset"),
|
|
416
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async (args) => {
|
|
417
|
+
const url = new URL(`${BASE_URL}/api/v1/tokens`);
|
|
418
|
+
for (const [k, v] of Object.entries(args)) {
|
|
419
|
+
if (v !== undefined)
|
|
420
|
+
url.searchParams.set(k, typeof v === "boolean" ? (v ? "true" : "false") : String(v));
|
|
421
|
+
}
|
|
422
|
+
const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } });
|
|
423
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
424
|
+
return { content: [{ type: "text", text }] };
|
|
425
|
+
});
|
|
395
426
|
// ── Alpha wallet intelligence ──
|
|
396
427
|
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.", {
|
|
397
428
|
period: z.enum(["7d", "30d", "all"]).default("30d").describe("Time window"),
|
|
@@ -650,7 +681,7 @@ async function main() {
|
|
|
650
681
|
res.end(JSON.stringify({
|
|
651
682
|
name: "madeonsol",
|
|
652
683
|
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.",
|
|
653
|
-
version: "1.
|
|
684
|
+
version: "1.7.0",
|
|
654
685
|
tools: [
|
|
655
686
|
{ name: "madeonsol_kol_feed", description: "Get real-time Solana KOL trades from 1,000+ tracked wallets." },
|
|
656
687
|
{ name: "madeonsol_kol_coordination", description: "Get KOL convergence signals — tokens multiple KOLs are accumulating." },
|
|
@@ -671,6 +702,8 @@ async function main() {
|
|
|
671
702
|
{ name: "madeonsol_delete_webhook", description: "Delete a webhook by ID. Pro/Ultra." },
|
|
672
703
|
{ name: "madeonsol_test_webhook", description: "Send a test payload to verify a webhook. Pro/Ultra." },
|
|
673
704
|
{ name: "madeonsol_stream_token", description: "Get a 24h WebSocket streaming token. Pro/Ultra." },
|
|
705
|
+
{ name: "madeonsol_me", description: "Inspect your account — tier, quota state, remaining requests, subscription expiry, per-feature usage." },
|
|
706
|
+
{ 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+." },
|
|
674
707
|
{ name: "madeonsol_wallet_tracker_watchlist", description: "List your tracked wallets and remaining capacity." },
|
|
675
708
|
{ name: "madeonsol_wallet_tracker_add", description: "Add a wallet to your watchlist." },
|
|
676
709
|
{ name: "madeonsol_wallet_tracker_remove", description: "Remove a wallet from your watchlist." },
|
|
@@ -716,7 +749,7 @@ async function main() {
|
|
|
716
749
|
transport = new StreamableHTTPServerTransport({
|
|
717
750
|
sessionIdGenerator: undefined,
|
|
718
751
|
});
|
|
719
|
-
const server = new McpServer({ name: "madeonsol", version: "1.
|
|
752
|
+
const server = new McpServer({ name: "madeonsol", version: "1.7.0" });
|
|
720
753
|
registerTools(server);
|
|
721
754
|
await server.connect(transport);
|
|
722
755
|
}
|
|
@@ -754,7 +787,7 @@ async function main() {
|
|
|
754
787
|
}
|
|
755
788
|
else {
|
|
756
789
|
// Stdio transport for local use (Claude Desktop, Cursor, Claude Code)
|
|
757
|
-
const server = new McpServer({ name: "madeonsol", version: "1.
|
|
790
|
+
const server = new McpServer({ name: "madeonsol", version: "1.7.0" });
|
|
758
791
|
registerTools(server);
|
|
759
792
|
const transport = new StdioServerTransport();
|
|
760
793
|
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.7.2",
|
|
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",
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
],
|
|
17
17
|
"scripts": {
|
|
18
18
|
"build": "tsc",
|
|
19
|
-
"
|
|
19
|
+
"preflight": "bash ../../scripts/preflight-publish.sh",
|
|
20
|
+
"prepublishOnly": "npm run preflight && npm run build"
|
|
20
21
|
},
|
|
21
22
|
"keywords": [
|
|
22
23
|
"mcp",
|