mcp-server-madeonsol 1.17.2 → 1.19.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 +14 -4
- package/dist/index.d.ts +0 -0
- package/dist/index.js +61 -33
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/glama.json +241 -59
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,8 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. Use from Claude Desktop, Cursor, or any MCP-compatible client.
|
|
13
13
|
|
|
14
|
-
> Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency, score 23,000+ Pump.fun deployers, surface deshred deploy signals **~500ms before on-chain confirmation**, detect multi-KOL coordination, surface bundle-cohort holdings (which same-slot wallets still hold a token's supply), and stream every DEX trade across 9+ programs. Free tier: 200 requests/day, every endpoint — no signup payment. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
|
|
14
|
+
> Real-time Solana trading intelligence: track 1,069 KOL wallets with <3s latency, score 23,000+ Pump.fun deployers, surface deshred deploy signals **~500ms before on-chain confirmation**, detect multi-KOL coordination, surface bundle-cohort holdings (which same-slot wallets still hold a token's supply), verify any wallet's CURRENT on-chain holdings straight from its token accounts, and stream every DEX trade across 9+ programs. Free tier: 200 requests/day, every endpoint — no signup payment. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
|
|
15
15
|
|
|
16
|
+
> **New in 1.19.0** — **Batch wallet classification + token trade tape + bigger keyless catalog.** New tool `madeonsol_wallet_batch_classify` — reputation flags for 1–100 wallets in one call (counts as one request): per wallet `is_sniper` / `is_bundler` / `is_dumper` / `is_kol` (+ `kol_name`), `bot_confidence` (string enum `none`/`low`/`medium`/`high`, `null` when not alpha-tracked), and a `dump_cluster` block (`dump_cohorts`, `runner_cohorts`, `total_cohorts`, `as_of`). Flags are pump.fun-pipeline scoped — `false` = not observed, NOT verified clean; `is_bundler` is lifetime, `is_dumper` is a rolling 42d window. New tool `madeonsol_token_trades` — mint-scoped cursor-paginated trade tape (the backfill complement to the live firehose): `tx_signature`, `wallet_address`, `action`, `sol_amount`, `token_amount`, `price_sol`/`price_usd`, `early_buyer_rank`, `slot`, `block_time`, `traded_at`; filters `action` / `wallet` / `since`–`until` (default FULL history — capture starts 2026-04-12), plus a `coverage` honesty block. Both PRO/ULTRA. `madeonsol_wallet_stats` flags gain `is_sniper`/`is_bundler`/`is_dumper` + `dump_cluster`, and `bot_confidence` is now correctly typed as a string enum (it was documented as a number and always came back `null` due to a server bug — now returns real values). `madeonsol_token_risk` inputs and `madeonsol_sniper_recent` deploys gain the slot-window `sniper_footprint`/`footprint` rollup (`buys`, `buyers`, `sol`, `supply_pct`, `sniper_wallet_buys`, `data_available`, `as_of` — `null` = not observable, not zero). The **keyless x402 catalog grows 18 → 25 endpoints**: token candles ($0.01), almost-bonded ($0.01), top-traders ($0.02), cap-table ($0.02), sniper recent ($0.01), token flow ($0.01), deployer trajectory ($0.01) — `madeonsol_sniper_recent` and `madeonsol_deployer_trajectory` now work keyless via x402 too.
|
|
17
|
+
>
|
|
18
|
+
> **New in 1.18.0** — **Verified on-chain wallet holdings.** New tool `madeonsol_wallet_holdings` — the wallet's CURRENT holdings read straight from chain: its actual SPL + Token-2022 token accounts and SOL balance, each enriched with our `price_usd` / `value_usd` / `market_cap_usd` / `name` / `symbol` / `is_bonded`, plus `transfer_delta` (on-chain amount − trade-derived net position — exposes non-swap flows like airdrops, insider funding, and wallet-hopping). Distinct from `madeonsol_wallet_positions` (trade-derived FIFO): this is what the wallet *actually* holds right now. Params: `limit` (1–500, default 200), `min_value_usd` (default 0). Returns `{ address, sol_balance, holdings[], summary, verified_at, trade_window_days, cache_hit, ttl_seconds }`. ULTRA only.
|
|
19
|
+
>
|
|
16
20
|
> **New in 1.17.0** — **Bundle-cohort holdings.** New tool `madeonsol_token_bundle` — which same-slot "bundle" wallets bought a token and how much of supply they *still* hold (the incumbents' "current held %" rug/insider signal, from confirmed on-chain data). Returns a `bundle` block (`wallet_count`, `bundle_kind` atomic_tx/same_slot/none, `held_ratio`, `held_pct_of_supply` — the headline, net held / circulating supply, null if unknown — `fully_exited`, `buy_volume`, `tokens_held`) plus a `wallets[]` array (`rank`, `wallet`, `held_ratio`, `has_sold`, `atomic`, `is_kol`). BASIC get the bundle block only (empty `wallets[]`); PRO adds top-10 flags-only wallets; ULTRA returns the full cohort with enriched identities (`kol_name`, `win_rate`, `bot_confidence`, `tokens_held`).
|
|
17
21
|
>
|
|
18
22
|
> **New in 1.16.0** — **Batch risk scoring + live stream-session control.** New tool `madeonsol_tokens_batch_risk` — bulk rug-risk/safety scoring for up to 50 mints in one call, returning the same per-mint shape as `madeonsol_token_risk` (0–100 score, `band`, explainable `factors[]`, raw `inputs`) plus an `as_of` timestamp; untracked mints come back as `{ mint, error: "not_tracked" }` without failing the batch, and the whole call counts as one request against quota. Plus two WebSocket session tools: `madeonsol_stream_sessions_list` (list your live sessions — `id`, `service`, `tier`, `channels`, `connected_at`, `remote_ip`, `messages_sent`) and `madeonsol_stream_session_kill` (force-disconnect a session by id to free its connection slot, e.g. a ghost socket). PRO/ULTRA only.
|
|
@@ -89,6 +93,7 @@ Building an autonomous agent? Skip the signup. Point a **funded Solana wallet**
|
|
|
89
93
|
How it works:
|
|
90
94
|
|
|
91
95
|
- The wallet behind `SVM_PRIVATE_KEY` settles each request as a **USDC micropayment on Solana** (~$0.005–$0.02 per call, settled on-chain). No subscription, no quota.
|
|
96
|
+
- The keyless catalog covers **25 endpoints** — the latest additions: token candles ($0.01), almost-bonded ($0.01), top-traders ($0.02), cap-table ($0.02), sniper recent deploys ($0.01), token flow ($0.01), and deployer trajectory ($0.01).
|
|
92
97
|
- The free **`madeonsol_discovery`** tool needs no auth and returns every endpoint with its exact per-call price — call it first to see what each tool costs.
|
|
93
98
|
- Install the x402 peer deps alongside the server (only required for this mode):
|
|
94
99
|
|
|
@@ -172,7 +177,7 @@ Pre-confirm pump.fun deploy feed reconstructed from shred-level (**deshred**) da
|
|
|
172
177
|
|
|
173
178
|
| Tool | Description |
|
|
174
179
|
|---|---|
|
|
175
|
-
| `madeonsol_sniper_recent` | Newest-first deshred deploy feed. Pro: elite/good · Ultra: all tiers. `watchlist: true` (Ultra) narrows to your custom deployer watchlist |
|
|
180
|
+
| `madeonsol_sniper_recent` | Newest-first deshred deploy feed. Pro: elite/good · Ultra: all tiers · keyless x402: $0.01 (elite/good). `watchlist: true` (Ultra) narrows to your custom deployer watchlist. **New 1.19:** each deploy carries `footprint` — the slot-window snipe rollup (`buys`, `buyers`, `sol`, `supply_pct`, `sniper_wallet_buys`, `data_available`, `as_of`) or `null` when not yet settled/observable |
|
|
176
181
|
| `madeonsol_sniper_by_deployer` | Deshred deploys for a single deployer wallet (Ultra) |
|
|
177
182
|
|
|
178
183
|
### Wallet Tracker
|
|
@@ -189,9 +194,11 @@ Pre-confirm pump.fun deploy feed reconstructed from shred-level (**deshred**) da
|
|
|
189
194
|
|
|
190
195
|
| Tool | Description |
|
|
191
196
|
|---|---|
|
|
192
|
-
| `madeonsol_wallet_stats` | Aggregate 90d stats + cross-product flags (is_kol, is_alpha_tracked + bot_confidence
|
|
197
|
+
| `madeonsol_wallet_stats` | Aggregate 90d stats + cross-product flags (is_kol, is_alpha_tracked + bot_confidence `none`/`low`/`medium`/`high`, is_deployer + tokens_deployed, **new 1.19:** is_sniper / is_bundler / is_dumper + `dump_cluster` cohorts) — quick sizing-up of an unknown wallet |
|
|
198
|
+
| `madeonsol_wallet_batch_classify` | **New 1.19** · Bulk reputation flags for 1–100 wallets in one call — is_sniper/is_bundler/is_dumper/is_kol + kol_name, bot_confidence, dump_cluster. Pump.fun-pipeline scoped: `false` = not observed, not verified clean |
|
|
193
199
|
| `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 |
|
|
194
200
|
| `madeonsol_wallet_positions` | Open positions only — lighter slice of /pnl. Shares the same cache. |
|
|
201
|
+
| `madeonsol_wallet_holdings` | **New 1.18** · Verified CURRENT on-chain holdings (real SPL + Token-2022 accounts + SOL) enriched with price/MC/name, plus `transfer_delta` vs trade-derived position. ULTRA only. |
|
|
195
202
|
| `madeonsol_wallet_trades` | Cursor-paginated raw trades with action / token / since-until filters |
|
|
196
203
|
|
|
197
204
|
Cached server-side with dynamic TTL (5min / 1h / 24h based on last activity). Cost basis observable only inside the 90-day window.
|
|
@@ -214,12 +221,13 @@ Scored from 1M+ early-buyer records (wallets seen in the first 20 buyers of Pump
|
|
|
214
221
|
| `madeonsol_almost_bonded` | PRO+ | Pre-bond pump.fun tokens near graduation, ranked by velocity (Δprogress/min) — `progress_pct`, `velocity_pct_per_min`, `eta_minutes`, `stalled`, `deployer_tier`, `age_minutes` |
|
|
215
222
|
| `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
|
|
216
223
|
| `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
|
|
217
|
-
| `madeonsol_token_risk` | PRO+ | Transparent 0–100 rug-risk/safety score with `band`, explainable `factors[]`, and raw `inputs` |
|
|
224
|
+
| `madeonsol_token_risk` | PRO+ | Transparent 0–100 rug-risk/safety score with `band`, explainable `factors[]`, and raw `inputs` (**new 1.19:** `inputs.sniper_footprint` — slot-window snipe rollup, `null` = not observable) |
|
|
218
225
|
| `madeonsol_token_bundle` | All | Bundle-cohort holdings — which same-slot bundle wallets bought a token and how much of supply they still hold (`held_pct_of_supply` headline, plus `bundle_kind`, `held_ratio`, `fully_exited`). BASIC: bundle block only. PRO: top-10 flags. ULTRA: full cohort + identities |
|
|
219
226
|
| `madeonsol_token_pools` | PRO+ | Per-venue liquidity map — every DEX pool a token trades in (pump.fun/PumpSwap/Raydium/Meteora/Orca) with per-pool `liquidity_usd`, `is_active` (live vs parked), plus a `summary` (pool/DEX counts, `total_liquidity_usd`, `primary_pool`, `top_pool_share_pct` concentration) |
|
|
220
227
|
| `madeonsol_tokens_batch_risk` | PRO+ | Bulk rug-risk/safety scoring for up to 50 mints — same shape as `madeonsol_token_risk` + `as_of`. Untracked mints return `{ mint, error: "not_tracked" }` without failing the batch; counts as one request |
|
|
221
228
|
| `madeonsol_token_candles` | PRO+ | Historical OHLCV candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, MEV volume, full history |
|
|
222
229
|
| `madeonsol_token_flow` | PRO+ | Trade-flow aggregate (organic-vs-fake volume) over a 1h/24h `window` — unique wallets/buyers/sellers, buy/sell counts + SOL, `net_sol`, `trades_per_wallet` wash-trading proxy |
|
|
230
|
+
| `madeonsol_token_trades` | **New 1.19** · PRO+ | Mint-scoped trade tape — cursor-paginated raw trades for one token (action / wallet / since–until filters, default FULL history). History starts 2026-04-12; `coverage` block marks scope |
|
|
223
231
|
|
|
224
232
|
### Copy-Trade Rules (PRO/ULTRA)
|
|
225
233
|
|
|
@@ -317,6 +325,8 @@ CRUD for token dip/recovery price alerts. Fires when a token's market cap crosse
|
|
|
317
325
|
|
|
318
326
|
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).
|
|
319
327
|
|
|
328
|
+
New customers get a 5-day free trial of Pro or Ultra when you pay by card — full access, nothing charged during the trial, cancel anytime. Start at https://madeonsol.com/pricing
|
|
329
|
+
|
|
320
330
|
## Also Available
|
|
321
331
|
|
|
322
332
|
| Platform | Package |
|
package/dist/index.d.ts
CHANGED
|
File without changes
|
package/dist/index.js
CHANGED
|
@@ -210,20 +210,11 @@ function registerTools(server) {
|
|
|
210
210
|
}
|
|
211
211
|
return { content: [{ type: "text", text: "KOL timing requires MADEONSOL_API_KEY (msk_) — get one free at madeonsol.com/pricing." }] };
|
|
212
212
|
});
|
|
213
|
-
server.tool("madeonsol_deployer_trajectory", "Deployer skill curve — streaks, rolling bond rate, improvement trend, and deployment cadence for a Pump.fun deployer.", {
|
|
213
|
+
server.tool("madeonsol_deployer_trajectory", "Deployer skill curve — streaks, rolling bond rate, improvement trend, and deployment cadence for a Pump.fun deployer. Works with an msk_ key (Pro/Ultra) or keyless via x402 ($0.01/call).", {
|
|
214
214
|
wallet: z.string().describe("Deployer wallet address (base58)"),
|
|
215
|
-
}, readOnlyAnnotations, async ({ wallet }) => {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const res = await fetch(`${BASE_URL}/api/v1/deployer-hunter/${wallet}/trajectory`, { headers });
|
|
219
|
-
if (!res.ok) {
|
|
220
|
-
const body = await res.text().catch(() => "");
|
|
221
|
-
return { content: [{ type: "text", text: `Error ${res.status}: ${body}` }] };
|
|
222
|
-
}
|
|
223
|
-
return { content: [{ type: "text", text: JSON.stringify(await res.json(), null, 2) }] };
|
|
224
|
-
}
|
|
225
|
-
return { content: [{ type: "text", text: "Deployer trajectory requires MADEONSOL_API_KEY (msk_, Pro/Ultra) — get one at madeonsol.com/pricing." }] };
|
|
226
|
-
});
|
|
215
|
+
}, readOnlyAnnotations, async ({ wallet }) => ({
|
|
216
|
+
content: [{ type: "text", text: await query(`/api/x402/deployer-hunter/${encodeURIComponent(wallet)}/trajectory`) }],
|
|
217
|
+
}));
|
|
227
218
|
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.", {
|
|
228
219
|
period: z.enum(["1h", "6h"]).default("6h").describe("Time period: 1h or 6h"),
|
|
229
220
|
min_kols: z.number().min(1).max(20).default(1).describe("Minimum KOL buyers to include a token"),
|
|
@@ -284,30 +275,23 @@ function registerTools(server) {
|
|
|
284
275
|
}, readOnlyAnnotations, async ({ period, min_kols, limit }) => ({
|
|
285
276
|
content: [{ type: "text", text: await query("/api/x402/kol/tokens/trending", { period, min_kols, limit }) }],
|
|
286
277
|
}));
|
|
287
|
-
server.tool("madeonsol_sniper_recent", "Deshred pre-confirm pump.fun deploy feed — new launches surface ~500ms before they confirm on-chain (reconstructed from shred-level data). PRO sees elite/good deployers; ULTRA sees every tier
|
|
278
|
+
server.tool("madeonsol_sniper_recent", "Deshred pre-confirm pump.fun deploy feed — new launches surface ~500ms before they confirm on-chain (reconstructed from shred-level data). Each deploy now carries footprint — the slot-window snipe rollup ({ buys, buyers, sol, supply_pct|null, sniper_wallet_buys, data_available, as_of } | null; buys in slots deploy-1..deploy+3). footprint is null for deploys younger than the ~10-min settle window or outside the trade-pipeline write-gate — absent, not zero. PRO (msk_ key) sees elite/good deployers; ULTRA sees every tier; also callable keyless via x402 ($0.01/call, elite/good scope).", {
|
|
288
279
|
deployer_tier: z.enum(["elite", "good", "moderate", "rising", "cold", "unranked"]).optional().describe("Filter by deployer reputation tier (ULTRA)"),
|
|
289
280
|
min_bond_rate: z.number().min(0).max(1).optional().describe("Minimum deployer lifetime bond rate (0-1)"),
|
|
290
281
|
since: z.string().optional().describe("ISO-8601 — only deploys detected after this timestamp"),
|
|
291
|
-
watchlist: z.boolean().optional().describe("ULTRA: narrow to your custom deployer watchlist (any tier)"),
|
|
282
|
+
watchlist: z.boolean().optional().describe("ULTRA (msk_ key only): narrow to your custom deployer watchlist (any tier)"),
|
|
292
283
|
limit: z.number().min(1).max(200).default(50).describe("Max results"),
|
|
293
284
|
}, readOnlyAnnotations, async ({ deployer_tier, min_bond_rate, since, watchlist, limit }) => {
|
|
294
|
-
|
|
295
|
-
return { content: [{ type: "text", text: "Sniper feed requires MADEONSOL_API_KEY (msk_, Pro/Ultra) — get one at madeonsol.com/pricing." }] };
|
|
296
|
-
const qs = new URLSearchParams({ limit: String(limit) });
|
|
285
|
+
const params = { limit };
|
|
297
286
|
if (deployer_tier)
|
|
298
|
-
|
|
287
|
+
params.deployer_tier = deployer_tier;
|
|
299
288
|
if (min_bond_rate != null)
|
|
300
|
-
|
|
289
|
+
params.min_bond_rate = min_bond_rate;
|
|
301
290
|
if (since)
|
|
302
|
-
|
|
291
|
+
params.since = since;
|
|
303
292
|
if (watchlist)
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
if (!res.ok) {
|
|
307
|
-
const body = await res.text().catch(() => "");
|
|
308
|
-
return { content: [{ type: "text", text: `Error ${res.status}: ${body}` }] };
|
|
309
|
-
}
|
|
310
|
-
return { content: [{ type: "text", text: JSON.stringify(await res.json(), null, 2) }] };
|
|
293
|
+
params.watchlist = "true";
|
|
294
|
+
return { content: [{ type: "text", text: await query("/api/x402/sniper/recent", params) }] };
|
|
311
295
|
});
|
|
312
296
|
server.tool("madeonsol_sniper_by_deployer", "Deshred pre-confirm deploys filtered to a single deployer wallet — audit a deployer's recent launches before tracking them. ULTRA only.", {
|
|
313
297
|
wallet: z.string().describe("Deployer wallet address (base58)"),
|
|
@@ -322,7 +306,7 @@ function registerTools(server) {
|
|
|
322
306
|
}
|
|
323
307
|
return { content: [{ type: "text", text: JSON.stringify(await res.json(), null, 2) }] };
|
|
324
308
|
});
|
|
325
|
-
server.tool("madeonsol_discovery", "List all available MadeOnSol API endpoints with prices and parameter docs. Free, no auth required.", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }, async () => {
|
|
309
|
+
server.tool("madeonsol_discovery", "List all available MadeOnSol API endpoints with prices and parameter docs. Free, no auth required. The keyless x402 catalog now covers 25 endpoints — recent additions: token candles ($0.01), almost-bonded ($0.01), top-traders ($0.02), cap-table ($0.02), sniper recent deploys ($0.01), token flow ($0.01), and deployer trajectory ($0.01).", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }, async () => {
|
|
326
310
|
const res = await fetch(new URL("/api/x402", BASE_URL).toString());
|
|
327
311
|
const data = await res.json();
|
|
328
312
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
@@ -397,7 +381,7 @@ function registerTools(server) {
|
|
|
397
381
|
return { content: [{ type: "text", text }] };
|
|
398
382
|
});
|
|
399
383
|
// ── Universal wallet endpoints (PRO+, any wallet — not just curated KOLs) ──
|
|
400
|
-
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+.", {
|
|
384
|
+
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). flags now also carries reputation flags — is_sniper, is_bundler, is_dumper — plus a dump_cluster block ({ dump_cohorts, runner_cohorts, total_cohorts, as_of } | null). bot_confidence is a string enum 'none'|'low'|'medium'|'high' (null when not alpha-tracked; earlier versions documented it as a number and it always serialized null — fixed). Scope caveat: reputation flags are pump.fun-pipeline scoped — false = not observed, NOT verified clean; is_bundler is lifetime, is_dumper is a rolling 42d window. Use this before drilling into PnL to size up an unknown wallet quickly. PRO+.", {
|
|
401
385
|
address: z.string().describe("Solana wallet address (base58)"),
|
|
402
386
|
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ address }) => {
|
|
403
387
|
const res = await fetch(`${BASE_URL}/api/v1/wallet/${encodeURIComponent(address)}`, {
|
|
@@ -424,6 +408,18 @@ function registerTools(server) {
|
|
|
424
408
|
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
425
409
|
return { content: [{ type: "text", text }] };
|
|
426
410
|
});
|
|
411
|
+
server.tool("madeonsol_wallet_holdings", "Verified CURRENT on-chain holdings for any wallet — reads the wallet's actual SPL + Token-2022 token accounts and SOL balance directly from chain, enriches each with our price/MC/name/symbol, and computes transfer_delta (on-chain amount − trade-derived net position, which exposes non-swap flows: airdrops, insider funding, wallet-hopping). Distinct from madeonsol_wallet_positions (trade-derived FIFO): holdings = what the wallet actually holds right now. Returns { address, sol_balance, holdings[], summary (token_accounts, non_zero, returned, priced, total_value_usd, truncated), verified_at, trade_window_days, cache_hit, ttl_seconds }; each holding: mint, symbol, name, amount, amount_raw, decimals, token_program (spl|token2022), price_usd, value_usd, market_cap_usd, is_bonded, trade_derived_amount, transfer_delta. ULTRA only.", {
|
|
412
|
+
address: z.string().describe("Solana wallet address (base58)"),
|
|
413
|
+
limit: z.number().min(1).max(500).default(200).describe("Max holdings to return (1-500, default 200)"),
|
|
414
|
+
min_value_usd: z.number().min(0).default(0).describe("Only return holdings worth at least this many USD (default 0)"),
|
|
415
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ address, limit, min_value_usd }) => {
|
|
416
|
+
const url = new URL(`${BASE_URL}/api/v1/wallet/${encodeURIComponent(address)}/holdings`);
|
|
417
|
+
url.searchParams.set("limit", String(limit));
|
|
418
|
+
url.searchParams.set("min_value_usd", String(min_value_usd));
|
|
419
|
+
const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } });
|
|
420
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
421
|
+
return { content: [{ type: "text", text }] };
|
|
422
|
+
});
|
|
427
423
|
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+.", {
|
|
428
424
|
address: z.string().describe("Solana wallet address (base58)"),
|
|
429
425
|
limit: z.number().min(1).max(500).default(100).describe("Trades per page (1-500)"),
|
|
@@ -449,8 +445,13 @@ function registerTools(server) {
|
|
|
449
445
|
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
450
446
|
return { content: [{ type: "text", text }] };
|
|
451
447
|
});
|
|
448
|
+
server.tool("madeonsol_wallet_batch_classify", "Bulk wallet reputation flags for 1-100 wallets in ONE call (counts as one request). Per wallet: is_sniper / is_bundler / is_dumper / is_kol (+ kol_name), bot_confidence (string enum 'none'|'low'|'medium'|'high', null when the wallet isn't alpha-tracked), and dump_cluster ({ dump_cohorts, runner_cohorts, total_cohorts, as_of } | null). Same semantics as the flags block on madeonsol_wallet_stats. IMPORTANT scope caveat: all three reputation flags derive from the pump.fun trade pipeline — false means 'not observed', NOT verified clean. is_sniper is behavior-updated (~12min cron) and can clear if the wallet reforms; is_bundler is a LIFETIME flag (bought >1 token in the same block, ever); is_dumper uses a rolling 42-day window (recomputed daily, up to ~48h stale). Response: { wallets[], count, as_of }. PRO/ULTRA only.", {
|
|
449
|
+
wallets: z.array(z.string()).min(1).max(100).describe("1-100 base58 Solana wallet addresses"),
|
|
450
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ wallets }) => ({
|
|
451
|
+
content: [{ type: "text", text: await walletTrackerRequest("POST", "/wallet/batch/classify", { wallets }) }],
|
|
452
|
+
}));
|
|
452
453
|
console.error("[madeonsol-mcp] Wallet tracker tools enabled");
|
|
453
|
-
console.error("[madeonsol-mcp] Universal wallet tools enabled (stats / pnl / positions / trades)");
|
|
454
|
+
console.error("[madeonsol-mcp] Universal wallet tools enabled (stats / pnl / positions / holdings / trades / batch classify)");
|
|
454
455
|
}
|
|
455
456
|
else {
|
|
456
457
|
console.error("[madeonsol-mcp] Wallet tracker tools disabled (requires MADEONSOL_API_KEY)");
|
|
@@ -596,7 +597,7 @@ function registerTools(server) {
|
|
|
596
597
|
server.tool("madeonsol_token_buyer_quality", "0–100 buyer-quality score for a token's first-buyer cohort. 5-min cached. Full breakdown on all tiers, incl. dump_cluster_count (3+ dump-cluster wallets in the first-20 → 94% historical dump rate vs 61% base) and recycled_early_buyer_count.", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
|
|
597
598
|
content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/buyer-quality`) }],
|
|
598
599
|
}));
|
|
599
|
-
server.tool("madeonsol_token_risk", "Transparent 0–100 token rug-risk/safety score (higher = riskier). Returns a band (safe/caution/danger), an explainable factors[] array (mint authority, freeze authority, liquidity, transfer fee, token-2022, burn, launch cohort, deployer bond rate, KOL signal, blacklist) each with status/points/detail, and the raw inputs that produced the score. PRO/ULTRA only — BASIC receives HTTP 403.", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
|
|
600
|
+
server.tool("madeonsol_token_risk", "Transparent 0–100 token rug-risk/safety score (higher = riskier). Returns a band (safe/caution/danger), an explainable factors[] array (mint authority, freeze authority, liquidity, transfer fee, token-2022, burn, launch cohort, deployer bond rate, KOL signal, blacklist) each with status/points/detail, and the raw inputs that produced the score. inputs now includes sniper_footprint — the slot-window launch-snipe rollup ({ buys, buyers, sol, supply_pct|null, sniper_wallet_buys, data_available, as_of } | null; buys landing in slots deploy-1..deploy+3). data_available=false means the mint isn't observable in the trade pipeline — NOT zero snipes; null means no rollup yet. PRO/ULTRA only — BASIC receives HTTP 403.", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
|
|
600
601
|
content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/risk`) }],
|
|
601
602
|
}));
|
|
602
603
|
server.tool("madeonsol_token_bundle", "Bundle-cohort holdings for a token — which same-slot bundle wallets bought it and how much of supply they still hold (held_pct_of_supply). Rug/insider signal. Returns a `bundle` block (wallet_count, bundle_kind atomic_tx/same_slot/none, held_ratio, held_pct_of_supply [the headline — net held / circulating supply, null if unknown], fully_exited, buy_volume, tokens_held) plus a `wallets[]` array (rank, wallet, held_ratio, has_sold, atomic, is_kol). BASIC get the bundle block only (empty wallets[]); PRO adds top-10 flags-only wallets; ULTRA returns the full cohort with enriched identities (kol_name, win_rate, bot_confidence, tokens_held).", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
|
|
@@ -647,6 +648,31 @@ function registerTools(server) {
|
|
|
647
648
|
const path = `/tokens/${encodeURIComponent(mint)}/flow${query ? `?${query}` : ""}`;
|
|
648
649
|
return { content: [{ type: "text", text: await restQuery("GET", path) }] };
|
|
649
650
|
});
|
|
651
|
+
server.tool("madeonsol_token_trades", "Mint-scoped trade tape — cursor-paginated raw trades for one token, newest first (the backfill/history complement to the live DEX firehose stream). Each trade: tx_signature, wallet_address, action (buy|sell), sol_amount, token_amount, price_sol|null, price_usd|null, early_buyer_rank|null, slot|null, block_time (unix sec), traded_at (ISO). Filters: action, wallet, since/until (unix seconds — defaults to FULL history, not 90d). Pass next_cursor from the previous response to page older trades; has_more tells you when to stop. Coverage honesty: capture starts 2026-04-12 and is pump.fun-pipeline scoped — the response carries coverage.history_start + coverage.scope so agents can reason about gaps. PRO/ULTRA only.", {
|
|
652
|
+
mint: z.string().describe("Token mint address (base58)"),
|
|
653
|
+
limit: z.number().min(1).max(500).default(100).describe("Trades per page (1-500, default 100)"),
|
|
654
|
+
cursor: z.string().optional().describe("Cursor from previous response's next_cursor field"),
|
|
655
|
+
action: z.enum(["buy", "sell"]).optional().describe("Filter to buys or sells only"),
|
|
656
|
+
wallet: z.string().optional().describe("Filter to a single wallet address (base58)"),
|
|
657
|
+
since: z.number().optional().describe("Unix epoch seconds — default full history (2026-04-12 onward)"),
|
|
658
|
+
until: z.number().optional().describe("Unix epoch seconds — default now"),
|
|
659
|
+
}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint, limit, cursor, action, wallet, since, until }) => {
|
|
660
|
+
const url = new URL(`${BASE_URL}/api/v1/tokens/${encodeURIComponent(mint)}/trades`);
|
|
661
|
+
url.searchParams.set("limit", String(limit));
|
|
662
|
+
if (cursor)
|
|
663
|
+
url.searchParams.set("cursor", cursor);
|
|
664
|
+
if (action)
|
|
665
|
+
url.searchParams.set("action", action);
|
|
666
|
+
if (wallet)
|
|
667
|
+
url.searchParams.set("wallet", wallet);
|
|
668
|
+
if (since !== undefined)
|
|
669
|
+
url.searchParams.set("since", String(since));
|
|
670
|
+
if (until !== undefined)
|
|
671
|
+
url.searchParams.set("until", String(until));
|
|
672
|
+
const res = await fetch(url.toString(), { headers: { "Content-Type": "application/json", ...apiKeyHeaders() } });
|
|
673
|
+
const text = res.ok ? JSON.stringify(await res.json(), null, 2) : `Error ${res.status}: ${await res.text().catch(() => "")}`;
|
|
674
|
+
return { content: [{ type: "text", text }] };
|
|
675
|
+
});
|
|
650
676
|
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 }) => ({
|
|
651
677
|
content: [{ type: "text", text: await restQuery("POST", "/tokens/batch/buyer-quality", { mints }) }],
|
|
652
678
|
}));
|
|
@@ -1007,7 +1033,8 @@ async function main() {
|
|
|
1007
1033
|
{ name: "madeonsol_wallet_tracker_remove", description: "Remove a wallet from your watchlist." },
|
|
1008
1034
|
{ name: "madeonsol_wallet_tracker_trades", description: "Historical swap/transfer events for watched wallets." },
|
|
1009
1035
|
{ name: "madeonsol_wallet_tracker_summary", description: "Per-wallet stats: swap counts, SOL bought/sold." },
|
|
1010
|
-
{ name: "madeonsol_wallet_stats", description: "Aggregate stats + cross-product flags (is_kol/alpha/deployer) for any Solana wallet. PRO+." },
|
|
1036
|
+
{ name: "madeonsol_wallet_stats", description: "Aggregate stats + cross-product flags (is_kol/alpha/deployer, is_sniper/is_bundler/is_dumper + dump_cluster) for any Solana wallet. PRO+." },
|
|
1037
|
+
{ name: "madeonsol_wallet_batch_classify", description: "Bulk reputation flags for 1-100 wallets in one call — is_sniper/is_bundler/is_dumper/is_kol, bot_confidence, dump_cluster. PRO+." },
|
|
1011
1038
|
{ name: "madeonsol_wallet_pnl", description: "Full FIFO cost-basis PnL for any wallet: realized + unrealized, profit factor, drawdown, daily curve, closed + open positions. PRO+." },
|
|
1012
1039
|
{ name: "madeonsol_wallet_positions", description: "Open positions only for any wallet — lighter slice of /pnl. Live unrealized SOL from mc-tracker. PRO+." },
|
|
1013
1040
|
{ name: "madeonsol_wallet_trades", description: "Cursor-paginated raw trades for any wallet. Filter by action / token_mint / time window. PRO+." },
|
|
@@ -1017,6 +1044,7 @@ async function main() {
|
|
|
1017
1044
|
{ name: "madeonsol_token_cap_table", description: "First non-deployer early buyers for a token, enriched. PRO=10, ULTRA=20." },
|
|
1018
1045
|
{ name: "madeonsol_token_buyer_quality", description: "0–100 buyer quality score for a token's first-buyer cohort." },
|
|
1019
1046
|
{ name: "madeonsol_token_candles", description: "Historical OHLCV price candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, full history." },
|
|
1047
|
+
{ name: "madeonsol_token_trades", description: "Mint-scoped trade tape — cursor-paginated raw trades for one token, full history from 2026-04-12. PRO+." },
|
|
1020
1048
|
{ name: "madeonsol_tokens_batch_buyer_quality", description: "Bulk buyer-quality scoring for up to 50 mints. Shares the LRU cache." },
|
|
1021
1049
|
{ name: "madeonsol_tokens_batch_risk", description: "Bulk rug-risk/safety scoring for up to 50 mints — same shape as madeonsol_token_risk + as_of; untracked mints don't fail the batch. PRO+." },
|
|
1022
1050
|
{ name: "madeonsol_token_get", description: "Comprehensive per-mint snapshot: price, MC, volume, deployer, KOL, age, blacklist." },
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "1.
|
|
1
|
+
export declare const VERSION = "1.19.0";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// AUTO-GENERATED by ../gen-version.mjs (npm prebuild) from package.json. Do not edit.
|
|
2
|
-
export const VERSION = "1.
|
|
2
|
+
export const VERSION = "1.19.0";
|
package/glama.json
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-server-madeonsol",
|
|
3
|
-
"maintainers": [
|
|
3
|
+
"maintainers": [
|
|
4
|
+
"madeonsol"
|
|
5
|
+
],
|
|
4
6
|
"display_name": "MadeOnSol — Solana memecoin intelligence",
|
|
5
7
|
"description": "Real-time Solana memecoin trading intelligence — track 1,000+ KOL wallets with <3s latency, score 15,500+ Pump.fun deployers, surface multi-KOL coordination signals, run server-side copy-trade rules, and stream every DEX trade across 14 programs. Backtested first-touch scout signal (S-tier scouts attract ≥3 follow-on KOLs ~50% of the time vs 14% baseline). Free tier 200 requests per day; auth via msk_ API key or x402 micropayments.",
|
|
6
|
-
"version": "1.
|
|
8
|
+
"version": "1.19.0",
|
|
7
9
|
"homepage": "https://madeonsol.com/solana-api",
|
|
8
10
|
"repository": "https://github.com/madeonsol/mcp-server-madeonsol",
|
|
9
11
|
"license": "MIT",
|
|
10
|
-
"categories": [
|
|
12
|
+
"categories": [
|
|
13
|
+
"blockchain",
|
|
14
|
+
"finance",
|
|
15
|
+
"web3"
|
|
16
|
+
],
|
|
11
17
|
"tags": [
|
|
12
18
|
"mcp",
|
|
13
19
|
"claude",
|
|
@@ -30,62 +36,238 @@
|
|
|
30
36
|
"api"
|
|
31
37
|
],
|
|
32
38
|
"tools": [
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
{
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
|
|
87
|
-
|
|
39
|
+
{
|
|
40
|
+
"name": "madeonsol_kol_feed",
|
|
41
|
+
"description": "Real-time Solana KOL trade feed from 1,000+ tracked wallets."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "madeonsol_kol_coordination",
|
|
45
|
+
"description": "Multi-KOL convergence with 0-100 score, peak-density window, exits."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "madeonsol_kol_first_touches",
|
|
49
|
+
"description": "First-KOL-touch events — backtested scout signal, filter by tier S/A/B/C."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "madeonsol_kol_leaderboard",
|
|
53
|
+
"description": "KOL PnL + win-rate rankings over today, 7d, 30d, 90d, 180d."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "madeonsol_kol_pairs",
|
|
57
|
+
"description": "KOL affinity matrix — which KOLs co-trade the same tokens."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "madeonsol_kol_hot_tokens",
|
|
61
|
+
"description": "KOL momentum tokens — accelerating buy interest."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "madeonsol_kol_trending_tokens",
|
|
65
|
+
"description": "Tokens ranked by KOL buy volume across 5m–12h windows."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "madeonsol_kol_token_entry_order",
|
|
69
|
+
"description": "Ranked KOL first-buyers for a specific token."
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "madeonsol_kol_compare_wallets",
|
|
73
|
+
"description": "Side-by-side comparison of 2-5 KOL wallets with overlap analysis."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "madeonsol_kol_alerts_recent",
|
|
77
|
+
"description": "Unified live KOL alert feed: clusters, fresh buys, heating-up wallets."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "madeonsol_kol_pnl",
|
|
81
|
+
"description": "Deep per-wallet PnL: equity curve, risk metrics, closed + open positions."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "madeonsol_kol_timing",
|
|
85
|
+
"description": "KOL entry/exit timing profile — average hold, win rate by hour."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "madeonsol_deployer_alerts",
|
|
89
|
+
"description": "Pump.fun deployer alerts with KOL enrichment, filter by tier."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "madeonsol_deployer_trajectory",
|
|
93
|
+
"description": "Deployer skill curve — streaks, rolling bond rate, trend."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "madeonsol_alpha_leaderboard",
|
|
97
|
+
"description": "Top profitable early-buyer wallets — 25,000+ scored, up to 500 on ULTRA."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "madeonsol_alpha_wallet",
|
|
101
|
+
"description": "Full alpha profile + bot-signal flags for one wallet."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "madeonsol_alpha_linked",
|
|
105
|
+
"description": "Behaviorally linked wallets (co-bought 3+ tokens within 2s)."
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "madeonsol_tokens_list",
|
|
109
|
+
"description": "Filtered token directory — MC band, liquidity, MEV-share, velocity, primary DEX, authority flags, momentum/trending sorts."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "madeonsol_almost_bonded",
|
|
113
|
+
"description": "Pre-bond pump.fun tokens near graduation, ranked by velocity (Δprogress/min) — progress, eta, stalled, deployer tier."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "madeonsol_token_get",
|
|
117
|
+
"description": "Single token detail — MC, holders, velocity, MEV-share, history age."
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"name": "madeonsol_token_batch",
|
|
121
|
+
"description": "Bulk token detail fetch — up to 50 mints per call."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"name": "madeonsol_token_cap_table",
|
|
125
|
+
"description": "First non-deployer early buyers for a token, enriched with PnL/KOL/bot flags."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "madeonsol_token_buyer_quality",
|
|
129
|
+
"description": "0-100 buyer-quality score for a token's first-buyer cohort."
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "madeonsol_tokens_batch_buyer_quality",
|
|
133
|
+
"description": "Bulk buyer-quality scoring — up to 50 mints per call."
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "madeonsol_tokens_batch_risk",
|
|
137
|
+
"description": "Bulk rug-risk/safety scoring — up to 50 mints per call, same shape as madeonsol_token_risk + as_of; untracked mints don't fail the batch."
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"name": "madeonsol_token_trades",
|
|
141
|
+
"description": "Mint-scoped trade tape — cursor-paginated raw trades for one token, full history from 2026-04-12, pump.fun-pipeline scoped. PRO+."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "madeonsol_wallet_tracker_watchlist",
|
|
145
|
+
"description": "List tracked wallets and remaining capacity (Free 10 / Pro 50 / Ultra 100)."
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "madeonsol_wallet_tracker_add",
|
|
149
|
+
"description": "Add a wallet to your watchlist with optional label."
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "madeonsol_wallet_tracker_remove",
|
|
153
|
+
"description": "Remove a wallet from your watchlist."
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "madeonsol_wallet_tracker_trades",
|
|
157
|
+
"description": "Historical swap/transfer events for watched wallets (120-day retention)."
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"name": "madeonsol_wallet_tracker_summary",
|
|
161
|
+
"description": "Per-wallet stats: swap counts, SOL bought/sold, last event."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "madeonsol_wallet_batch_classify",
|
|
165
|
+
"description": "Bulk reputation flags for 1-100 wallets in one call — is_sniper/is_bundler/is_dumper/is_kol, bot_confidence (none/low/medium/high), dump_cluster cohorts. PRO+."
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "madeonsol_copytrade_list",
|
|
169
|
+
"description": "List your copy-trade rules."
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "madeonsol_copytrade_create",
|
|
173
|
+
"description": "Create a copy-trade rule with webhook + WS delivery (HMAC-signed)."
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "madeonsol_copytrade_get",
|
|
177
|
+
"description": "Get one copy-trade rule."
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "madeonsol_copytrade_update",
|
|
181
|
+
"description": "Update or toggle a copy-trade rule."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "madeonsol_copytrade_delete",
|
|
185
|
+
"description": "Delete a copy-trade rule."
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "madeonsol_copytrade_signals",
|
|
189
|
+
"description": "Recent fired copy-trade signals (up to 7 days, 1-500)."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "madeonsol_coordination_alerts_list",
|
|
193
|
+
"description": "List your KOL coordination alert rules (PRO=5, ULTRA=20)."
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"name": "madeonsol_coordination_alerts_create",
|
|
197
|
+
"description": "Create a coordination alert rule — pg_notify push, sub-second delivery."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "madeonsol_coordination_alerts_get",
|
|
201
|
+
"description": "Get one coordination alert rule."
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"name": "madeonsol_coordination_alerts_update",
|
|
205
|
+
"description": "Update or toggle a coordination alert rule."
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"name": "madeonsol_coordination_alerts_delete",
|
|
209
|
+
"description": "Delete a coordination alert rule."
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "madeonsol_first_touch_subscriptions_list",
|
|
213
|
+
"description": "List your first-touch webhook subscriptions (ULTRA, up to 10)."
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "madeonsol_first_touch_subscriptions_create",
|
|
217
|
+
"description": "Create a first-touch webhook subscription — push on every S-tier scout buy."
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "madeonsol_first_touch_subscriptions_get",
|
|
221
|
+
"description": "Get one first-touch subscription."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"name": "madeonsol_first_touch_subscriptions_update",
|
|
225
|
+
"description": "Update or toggle a first-touch subscription."
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"name": "madeonsol_first_touch_subscriptions_delete",
|
|
229
|
+
"description": "Delete a first-touch subscription."
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "madeonsol_create_webhook",
|
|
233
|
+
"description": "Register a webhook for real-time push notifications (PRO/ULTRA)."
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "madeonsol_list_webhooks",
|
|
237
|
+
"description": "List your registered webhooks (PRO/ULTRA)."
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"name": "madeonsol_delete_webhook",
|
|
241
|
+
"description": "Delete a webhook by ID (PRO/ULTRA)."
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"name": "madeonsol_test_webhook",
|
|
245
|
+
"description": "Send a test payload to verify a webhook (PRO/ULTRA)."
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "madeonsol_stream_token",
|
|
249
|
+
"description": "Issue a 24h WebSocket streaming token (Pro/Ultra). Includes dex_ws_url on ULTRA."
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"name": "madeonsol_stream_sessions_list",
|
|
253
|
+
"description": "List live WebSocket streaming sessions — id, service, tier, channels, connected_at, messages_sent (Pro/Ultra)."
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"name": "madeonsol_stream_session_kill",
|
|
257
|
+
"description": "Evict a live WebSocket streaming session by id — frees its connection slot (Pro/Ultra)."
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"name": "madeonsol_me",
|
|
261
|
+
"description": "Account/quota introspection — tier, remaining requests, per-feature usage."
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"name": "madeonsol_discovery",
|
|
265
|
+
"description": "List all available endpoints with x402 prices (free, no auth)."
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
"transports": [
|
|
269
|
+
"stdio",
|
|
270
|
+
"http"
|
|
88
271
|
],
|
|
89
|
-
"transports": ["stdio", "http"],
|
|
90
272
|
"runtime": "node"
|
|
91
273
|
}
|
package/package.json
CHANGED