mcp-server-madeonsol 1.5.0 → 1.7.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 +4 -0
- package/dist/index.js +37 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@ MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. U
|
|
|
4
4
|
|
|
5
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
|
+
> **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
|
+
|
|
7
9
|
## Quick start (10 seconds)
|
|
8
10
|
|
|
9
11
|
```bash
|
|
@@ -107,6 +109,7 @@ Scored from 47,000+ early-buyer records (wallets seen in the first 20 buyers of
|
|
|
107
109
|
|
|
108
110
|
| Tool | Tier | Description |
|
|
109
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. |
|
|
110
113
|
| `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
|
|
111
114
|
| `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
|
|
112
115
|
|
|
@@ -167,6 +170,7 @@ Every "first KOL buy on a token mint" event. Filterable by **scout tier** (S/A/B
|
|
|
167
170
|
| Tool | Description |
|
|
168
171
|
|---|---|
|
|
169
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. |
|
|
170
174
|
|
|
171
175
|
## Tiers
|
|
172
176
|
|
package/dist/index.js
CHANGED
|
@@ -123,7 +123,7 @@ function registerTools(server) {
|
|
|
123
123
|
params.min_score = min_score;
|
|
124
124
|
return { content: [{ type: "text", text: await query("/api/x402/kol/coordination", params) }] };
|
|
125
125
|
});
|
|
126
|
-
server.tool("madeonsol_kol_leaderboard", "Get KOL performance rankings by PnL and win rate.
|
|
126
|
+
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).", {
|
|
127
127
|
period: z.enum(["today", "7d", "30d", "90d", "180d"]).default("7d").describe("Time period (trade retention is 180d)"),
|
|
128
128
|
limit: z.number().min(1).max(50).default(20).describe("Number of KOLs to return in ranking"),
|
|
129
129
|
sort: z.enum(["pnl", "winrate", "profit_factor", "roi", "early_entry"]).optional().describe("PRO+: sort axis (default 'pnl')"),
|
|
@@ -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