mcp-server-madeonsol 1.1.2 → 1.2.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.
package/README.md CHANGED
@@ -165,6 +165,7 @@ Free tier returns the full REST response shape on every endpoint — real wallet
165
165
  | Platform | Package |
166
166
  |---|---|
167
167
  | TypeScript SDK | [`madeonsol`](https://www.npmjs.com/package/madeonsol) on npm |
168
+ | Rust SDK | [`madeonsol`](https://crates.io/crates/madeonsol) on crates.io |
168
169
  | Python (LangChain, CrewAI) | [`madeonsol-x402`](https://pypi.org/project/madeonsol-x402/) on PyPI |
169
170
  | ElizaOS | [`@madeonsol/plugin-madeonsol`](https://www.npmjs.com/package/@madeonsol/plugin-madeonsol) |
170
171
  | Solana Agent Kit | [`solana-agent-kit-plugin-madeonsol`](https://www.npmjs.com/package/solana-agent-kit-plugin-madeonsol) |
package/dist/index.d.ts CHANGED
File without changes
package/dist/index.js CHANGED
@@ -72,15 +72,18 @@ function registerTools(server) {
72
72
  const readOnlyAnnotations = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true };
73
73
  server.tool("madeonsol_kol_feed", "Get real-time Solana KOL trades from 1,000+ tracked wallets. PRO+ adds size/age/strategy/winrate filters.", {
74
74
  limit: z.number().min(1).max(100).default(10).describe("Number of trades to return (1-100)"),
75
+ before: z.string().optional().describe("Cursor — ISO 8601 timestamp; returns trades strictly older than this. Pass next_before from the previous response for polling."),
75
76
  action: z.enum(["buy", "sell"]).optional().describe("Filter by trade type: buy or sell"),
76
77
  kol: z.string().optional().describe("Filter by specific KOL wallet address (base58)"),
77
78
  min_sol: z.number().optional().describe("PRO+: minimum SOL size per trade"),
78
79
  token_age_max_min: z.number().optional().describe("PRO+: max token age in minutes at time of trade"),
79
80
  exclude_sells: z.boolean().optional().describe("PRO+: drop sell-side trades"),
80
81
  min_kol_winrate: z.number().optional().describe("PRO+: minimum 7d winrate of the KOL (0-100)"),
81
- strategy: z.enum(["sniper", "flipper", "swinger", "holder", "mixed"]).optional().describe("PRO+: filter by auto-tagged strategy"),
82
- }, readOnlyAnnotations, async ({ limit, action, kol, min_sol, token_age_max_min, exclude_sells, min_kol_winrate, strategy }) => {
82
+ strategy: z.enum(["scalper", "day_trader", "swing_trader", "hodler", "mixed"]).optional().describe("PRO+: filter by auto-tagged strategy"),
83
+ }, readOnlyAnnotations, async ({ limit, before, action, kol, min_sol, token_age_max_min, exclude_sells, min_kol_winrate, strategy }) => {
83
84
  const params = { limit };
85
+ if (before)
86
+ params.before = before;
84
87
  if (action)
85
88
  params.action = action;
86
89
  if (kol)
@@ -136,13 +139,31 @@ function registerTools(server) {
136
139
  params.min_winrate = min_winrate;
137
140
  return { content: [{ type: "text", text: await query("/api/x402/kol/leaderboard", params) }] };
138
141
  });
139
- 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).", {
142
+ server.tool("madeonsol_deployer_alerts", "Get real-time alerts from Pump.fun deployers with KOL buy enrichment. Filters: deployer tier, alert_type, priority, and min_kol_buys to gate out noise. Cursor-paginated via 'before' (preferred over 'offset' at scale).", {
140
143
  limit: z.number().min(1).max(100).default(10).describe("Number of deployer alerts to return (1-100)"),
141
- offset: z.number().min(0).default(0).describe("Pagination offset for deployer alerts"),
144
+ offset: z.number().min(0).default(0).describe("Legacy offset pagination (prefer 'before' for polling)"),
145
+ before: z.string().optional().describe("Cursor — ISO 8601 timestamp; returns alerts strictly older than this. Pass next_before from the previous response."),
146
+ since: z.string().optional().describe("Only alerts after this ISO 8601 timestamp."),
142
147
  tier: z.enum(["elite", "good", "moderate", "rising", "cold"]).optional().describe("Filter by deployer tier. PRO/ULTRA only — BASIC callers receive HTTP 403."),
143
- }, readOnlyAnnotations, async ({ limit, offset, tier }) => ({
144
- content: [{ type: "text", text: await query("/api/x402/deployer-hunter/alerts", { limit, offset, ...(tier ? { tier } : {}) }) }],
145
- }));
148
+ alert_type: z.string().optional().describe("Filter by alert_type (e.g. 'new_deploy', 'bonded')."),
149
+ priority: z.enum(["high", "medium", "low"]).optional().describe("Filter by alert priority."),
150
+ min_kol_buys: z.number().min(1).max(100).optional().describe("Only alerts where at least N KOLs bought the token (1-100)."),
151
+ }, readOnlyAnnotations, async ({ limit, offset, before, since, tier, alert_type, priority, min_kol_buys }) => {
152
+ const params = { limit, offset };
153
+ if (before)
154
+ params.before = before;
155
+ if (since)
156
+ params.since = since;
157
+ if (tier)
158
+ params.tier = tier;
159
+ if (alert_type)
160
+ params.alert_type = alert_type;
161
+ if (priority)
162
+ params.priority = priority;
163
+ if (min_kol_buys !== undefined)
164
+ params.min_kol_buys = min_kol_buys;
165
+ return { content: [{ type: "text", text: await query("/api/x402/deployer-hunter/alerts", params) }] };
166
+ });
146
167
  server.tool("madeonsol_kol_pairs", "KOL affinity matrix — discover which KOLs frequently co-trade the same tokens within a time window.", {
147
168
  period: z.enum(["7d", "30d"]).default("7d").describe("Time period: 7d or 30d"),
148
169
  min_shared: z.number().min(1).max(20).default(3).describe("Minimum number of shared tokens to qualify as a pair"),
@@ -399,6 +420,16 @@ function registerTools(server) {
399
420
  server.tool("madeonsol_token_buyer_quality", "0–100 buyer-quality score for a token's first-buyer cohort. 5-min cached. BASIC: score+signal only. PRO/ULTRA: full breakdown.", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
400
421
  content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/buyer-quality`) }],
401
422
  }));
423
+ server.tool("madeonsol_tokens_batch_buyer_quality", "Bulk buyer-quality scoring for up to 50 mints in one call. Shares the 5-min LRU cache with the single-mint endpoint — already-warm mints return at ~zero cost. Response includes cache_hits counter.", { mints: z.array(z.string()).min(1).max(50).describe("1–50 base58 Solana token mints") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mints }) => ({
424
+ content: [{ type: "text", text: await restQuery("POST", "/tokens/batch/buyer-quality", { mints }) }],
425
+ }));
426
+ // ── Token intelligence (/token/{mint} + batch) ──
427
+ server.tool("madeonsol_token_get", "Comprehensive per-mint snapshot: price (VWAP), market cap, 24h volume, deployer reputation, KOL smart-money activity, first_seen_at + age_seconds, and blacklist status — all in one call. ULTRA adds individual KOL wallet addresses in top_buyers[].", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
428
+ content: [{ type: "text", text: await restQuery("GET", `/token/${encodeURIComponent(mint)}`) }],
429
+ }));
430
+ server.tool("madeonsol_token_batch", "Bulk lookup of up to 50 mints in one request. Returns the same per-mint shape as madeonsol_token_get. DB queries batched with IN(...); dex-stream + RPC fan-outs run in parallel. ~10-20× cheaper than N sequential calls — ideal for sniper pipelines scoring many tokens at once.", { mints: z.array(z.string()).min(1).max(50).describe("1–50 base58 Solana token mints") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mints }) => ({
431
+ content: [{ type: "text", text: await restQuery("POST", "/token/batch", { mints }) }],
432
+ }));
402
433
  // ── Copy-Trade rules (PRO/ULTRA) ──
403
434
  server.tool("madeonsol_copytrade_list", "List your copy-trade rules. PRO=3 rules, ULTRA=20 rules.", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => ({
404
435
  content: [{ type: "text", text: await restQuery("GET", "/copytrade/subscriptions") }],
@@ -581,6 +612,9 @@ async function main() {
581
612
  { name: "madeonsol_alpha_linked", description: "Behaviorally linked wallets (co-bought 3+ tokens within 2s). ULTRA only." },
582
613
  { name: "madeonsol_token_cap_table", description: "First non-deployer early buyers for a token, enriched. PRO=10, ULTRA=20." },
583
614
  { name: "madeonsol_token_buyer_quality", description: "0–100 buyer quality score for a token's first-buyer cohort." },
615
+ { name: "madeonsol_tokens_batch_buyer_quality", description: "Bulk buyer-quality scoring for up to 50 mints. Shares the LRU cache." },
616
+ { name: "madeonsol_token_get", description: "Comprehensive per-mint snapshot: price, MC, volume, deployer, KOL, age, blacklist." },
617
+ { name: "madeonsol_token_batch", description: "Bulk token snapshot for up to 50 mints — ~10-20× cheaper than N sequential calls." },
584
618
  { name: "madeonsol_copytrade_list", description: "List your copy-trade rules. PRO/ULTRA." },
585
619
  { name: "madeonsol_copytrade_create", description: "Create a copy-trade rule with webhook + WS delivery. PRO/ULTRA." },
586
620
  { name: "madeonsol_copytrade_get", description: "Get one copy-trade rule. PRO/ULTRA." },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-madeonsol",
3
- "version": "1.1.2",
3
+ "version": "1.2.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",
package/glama.json DELETED
@@ -1,50 +0,0 @@
1
- {
2
- "name": "mcp-server-madeonsol",
3
- "display_name": "MadeOnSol",
4
- "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, server-side copy-trade rules, and wallet tracker. Supports free MadeOnSol API key (msk_) or x402 micropayments.",
5
- "version": "1.0.0",
6
- "homepage": "https://madeonsol.com/solana-api",
7
- "repository": "https://github.com/LamboPoewert/mcp-server-madeonsol",
8
- "license": "MIT",
9
- "categories": ["blockchain", "finance", "web3"],
10
- "tags": ["solana", "kol", "trading", "x402", "micropayments", "defi", "api", "deployer", "pump-fun", "copy-trade"],
11
- "tools": [
12
- { "name": "madeonsol_kol_feed", "description": "Get real-time Solana KOL trades from 1,000+ tracked wallets." },
13
- { "name": "madeonsol_kol_coordination", "description": "Get KOL convergence signals — tokens multiple KOLs are accumulating." },
14
- { "name": "madeonsol_kol_leaderboard", "description": "Get KOL performance rankings by PnL and win rate." },
15
- { "name": "madeonsol_deployer_alerts", "description": "Get Pump.fun deployer alerts with KOL enrichment." },
16
- { "name": "madeonsol_kol_pairs", "description": "KOL affinity matrix — which KOLs co-trade the same tokens." },
17
- { "name": "madeonsol_kol_timing", "description": "KOL entry/exit timing profile. Pro/Ultra." },
18
- { "name": "madeonsol_deployer_trajectory", "description": "Deployer skill curve — streaks, trend. Pro/Ultra." },
19
- { "name": "madeonsol_kol_hot_tokens", "description": "KOL momentum tokens — accelerating buy interest." },
20
- { "name": "madeonsol_kol_pnl", "description": "Deep per-wallet PnL: equity curve, risk metrics, positions." },
21
- { "name": "madeonsol_kol_trending_tokens", "description": "Tokens ranked by KOL buy volume (5m–12h windows)." },
22
- { "name": "madeonsol_kol_token_entry_order", "description": "Ranked KOL first-buyers for a specific token." },
23
- { "name": "madeonsol_kol_compare_wallets", "description": "Side-by-side comparison of 2-5 KOL wallets (overlap in PRO+)." },
24
- { "name": "madeonsol_kol_alerts_recent", "description": "Unified live KOL alert feed: clusters, fresh buys, heating-up." },
25
- { "name": "madeonsol_discovery", "description": "List all available endpoints with prices. Free, no auth required." },
26
- { "name": "madeonsol_create_webhook", "description": "Register a webhook for real-time push notifications. Pro/Ultra." },
27
- { "name": "madeonsol_list_webhooks", "description": "List your registered webhooks. Pro/Ultra." },
28
- { "name": "madeonsol_delete_webhook", "description": "Delete a webhook by ID. Pro/Ultra." },
29
- { "name": "madeonsol_test_webhook", "description": "Send a test payload to verify a webhook. Pro/Ultra." },
30
- { "name": "madeonsol_stream_token", "description": "Get a 24h WebSocket streaming token. Pro/Ultra." },
31
- { "name": "madeonsol_wallet_tracker_watchlist", "description": "List your tracked wallets and remaining capacity." },
32
- { "name": "madeonsol_wallet_tracker_add", "description": "Add a wallet to your watchlist." },
33
- { "name": "madeonsol_wallet_tracker_remove", "description": "Remove a wallet from your watchlist." },
34
- { "name": "madeonsol_wallet_tracker_trades", "description": "Historical swap/transfer events for watched wallets." },
35
- { "name": "madeonsol_wallet_tracker_summary", "description": "Per-wallet stats: swap counts, SOL bought/sold." },
36
- { "name": "madeonsol_alpha_leaderboard", "description": "Top profitable early-buyer wallets — 47,000+ scored. BASIC=25, PRO=100, ULTRA=500." },
37
- { "name": "madeonsol_alpha_wallet", "description": "Full alpha profile + bot signals for one wallet. ULTRA only." },
38
- { "name": "madeonsol_alpha_linked", "description": "Behaviorally linked wallets (co-bought 3+ tokens within 2s). ULTRA only." },
39
- { "name": "madeonsol_token_cap_table", "description": "First non-deployer early buyers for a token, enriched. PRO=10, ULTRA=20." },
40
- { "name": "madeonsol_token_buyer_quality", "description": "0–100 buyer quality score for a token's first-buyer cohort." },
41
- { "name": "madeonsol_copytrade_list", "description": "List your copy-trade rules. PRO/ULTRA." },
42
- { "name": "madeonsol_copytrade_create", "description": "Create a copy-trade rule with webhook + WS delivery. PRO/ULTRA." },
43
- { "name": "madeonsol_copytrade_get", "description": "Get one copy-trade rule. PRO/ULTRA." },
44
- { "name": "madeonsol_copytrade_update", "description": "Update a copy-trade rule. PRO/ULTRA." },
45
- { "name": "madeonsol_copytrade_delete", "description": "Delete a copy-trade rule. PRO/ULTRA." },
46
- { "name": "madeonsol_copytrade_signals", "description": "Recent fired copy-trade signals (up to 7 days). PRO/ULTRA." }
47
- ],
48
- "transports": ["stdio", "http"],
49
- "runtime": "node"
50
- }