mcp-server-madeonsol 3.1.0 → 3.1.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 +4 -2
- package/dist/index.js +5 -5
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,6 +15,8 @@ MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. U
|
|
|
15
15
|
|
|
16
16
|
> Real-time Solana trading intelligence: track 2,000+ KOL wallets with <3s latency on paid keys and x402 pay-per-call (free-tier live feeds are 5-min delayed), score 85K+ 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 across 40+ endpoints (live feeds 5-min delayed) — no signup payment. Get a key at [madeonsol.com/pricing](https://madeonsol.com/pricing).
|
|
17
17
|
|
|
18
|
+
> **New in 3.1.1: tool descriptions match the API.** `madeonsol_token_risk` and `madeonsol_tokens_batch_risk` describe risk evidence for your own policy, not a verdict. `madeonsol_deployer_profile` names the real response: `is_deployer`, the nested `deployer` object (`total_tokens_deployed`, `total_bonded`, ...), `pump_stats`, `pump_tokens`, `launchpad_tokens`; an untracked wallet returns `is_deployer: false` and `deployer: null`. No tool added or removed.
|
|
19
|
+
|
|
18
20
|
> **New in 3.1.0 — copy-trade and Wallet Tracker tools match the API.** `madeonsol_copytrade_create` / `_update` accept up to 250 `source_wallets` (the BUSINESS per-rule limit; before, the tool refused anything over 50 before the server could answer). The server still enforces your own tier's limit (PRO 5, ULTRA 50, BUSINESS 250). Create, update and `madeonsol_copytrade_signals` gain the market-cap band `min_mc_usd` / `max_mc_usd`. The `only_action` description now states the real default (`buy`), and the tool descriptions say that signals fire only for tracked KOL wallets. `madeonsol_wallet_tracker_trades` gains `order` (`slot` | `block_time`) and the `before_slot` cursor, and its `action` filter is `buy` | `sell` only: `transfer_in` / `transfer_out` were always rejected by the API with 400. Use `event_type: "transfer"` for transfers. `madeonsol_copytrade_update` documents that a PATCH which sets a `webhook_url` on a rule without a signing secret returns `webhook_secret` once, and the copy-trade tools describe the `source_wallets_untracked` / `warnings[]` fields newer servers return. `madeonsol_test_webhook` gains an optional `event` (which subscribed event to sample).
|
|
19
21
|
|
|
20
22
|
> **New in 3.0.0 — BREAKING for x402 (keyless) mode only: five env vars are now required and startup FAILS instead of silently degrading (security fix, SDK-01).** Set `X402_PAY_TO`, `X402_FEE_PAYER`, `X402_MAX_AMOUNT_ATOMIC`, `X402_MAX_TOTAL_AMOUNT_ATOMIC` and `SVM_RPC_URL` alongside `SVM_PRIVATE_KEY`. Before, keyless mode signed whatever Solana USDC amount, recipient and fee payer a 402 challenge asked for. Now every challenge is checked BEFORE signing against a trusted merchant `payTo`, a trusted facilitator `feePayer` (which must differ from your wallet), the USDC mint, `solana:5eykt…` mainnet, the `exact` scheme, a per-call cap and a lifetime cap. Use the canonical values in the keyless section below; caps must be at least `20000` (0.02 USDC) per call to reach every endpoint. The budget is per client instance / process: not wallet-wide, not shared between processes, reset on a new instance or restart. Keyless requires the base URL exactly `https://madeonsol.com`. **API-key (`msk_`) users: no change, no new config.** HTTP mode still refuses wallet signers (SEC-02, unchanged).
|
|
@@ -300,7 +302,7 @@ Scored from 1.5M+ early-buyer records (wallets seen in the first 20 buyers of Pu
|
|
|
300
302
|
| `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` |
|
|
301
303
|
| `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
|
|
302
304
|
| `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
|
|
303
|
-
| `madeonsol_token_risk` | PRO+ | Transparent 0–100
|
|
305
|
+
| `madeonsol_token_risk` | PRO+ | Transparent 0–100 risk score (evidence, not a verdict) with `band`, explainable `factors[]`, and raw `inputs` (**new 1.19:** `inputs.sniper_footprint` — slot-window snipe rollup, `null` = not observable; **new 1.20:** top-level `dev` block — deployer self-buy at create, sells rollup, live on-chain holdings, `wallet_empty`, `transferred_out`) |
|
|
304
306
|
| `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 |
|
|
305
307
|
| `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) |
|
|
306
308
|
| `madeonsol_token_depth` | **New 1.20** · PRO+ | Per-pool price impact / slippage — `quotes[]` per SOL buy size (`tokens_out`, `avg_price_sol`, `price_impact_pct`) + `to_move_price` (SOL to move price 1%/5%/10%). `sizes` max 8, default `[0.5, 1, 5, 10]`; unsupported pools (CLMM/DLMM/DBC) flagged with a `reason` |
|
|
@@ -311,7 +313,7 @@ Scored from 1.5M+ early-buyer records (wallets seen in the first 20 buyers of Pu
|
|
|
311
313
|
| `madeonsol_token_fee_shares` | **New 1.24** · PRO+ | pump.fun creator-fee `SharingConfig` on a coin — `shareholders[]` (`share_bps`, `is_admin`, `is_social_pda` + `social {platform (2 = X), user_id, lifetime_claimed}`, `received_*`), `redirected_bps`, `social_bps`, `is_default` (100% to creator), `source` stream / chain; `distributions` rollup (recipients, past_recipients), `history[]`, `recent_distributions[]`. Amounts in quote base units (lamports) as STRINGS. **Event history starts 2026-08-17** |
|
|
312
314
|
| `madeonsol_token_fee_claims` | **New 1.24** · PRO+ | pump.fun fee-event feed, newest first — `type` distribution (with `payouts[]` per shareholder) / social_claim (X identity → wallet, `mint` null) / shares_created / shares_updated / shares_reset / creator_transferred / creator_claim (excluded unless `type=` asks). Filters `type` (comma list), `mint`, `recipient`, `actor`, `social_platform`, `social_user_id`, `min_sol`, `since` / `before`. Push: WS channel `token:fee_claims` (event `token:fee_claim`). **History starts 2026-08-17** |
|
|
313
315
|
| `madeonsol_tokens_surges` | **New 1.25** · PRO+ | Token momentum fires, newest first — `kind` `surge` (token < 30 min old vs its LAUNCH MC; `tier` `early` ≤10 min ≥$12k ≥3× · `strong` ≤30 min ≥$30k ≥6× and ≥2× the 3-min low · `breakout` ≤2 min ≥$45k ≥8×; each once per mint, sustained ≥10 s) or `revival` (no trade candle ≥24 h, then ≥5 buys / ≥$500 buy volume / ≥1.5× the pre-dormancy MC on the tape — never a price mark; `tier` null). Each row: burst `tape` (`unique_buyers` null outside trade coverage), `kol`, `early_buyers` (bundled / sold / sniper), `deployer`, `risk_flags[]` (empty = no flag raised, not verified clean), and `outcome` (+1 h MC / peak / low) once ≥65 min old. `stats=1` = per-(kind, tier) hit-rates over `days`. Filters `kind`, `tier`, `mint`, `launchpad`, `deployer_tier`, `min_mc_usd` / `max_mc_usd`, `min_buys`, `exclude_flags` (comma list), `only_clean`; cursors `since` / `before`; `limit` ≤200. Push: WS channel `token:surges` (events `token:surge` / `token:revival`) + webhook registry. Retention 60 d |
|
|
314
|
-
| `madeonsol_tokens_batch_risk` | PRO+ | Bulk
|
|
316
|
+
| `madeonsol_tokens_batch_risk` | PRO+ | Bulk risk scoring (evidence, not a verdict) 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 |
|
|
315
317
|
| `madeonsol_token_candles` | PRO+ | Historical OHLCV candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, MEV volume, full history |
|
|
316
318
|
| `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 |
|
|
317
319
|
| `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 |
|
package/dist/index.js
CHANGED
|
@@ -236,7 +236,7 @@ function registerTools(server) {
|
|
|
236
236
|
params[k] = v;
|
|
237
237
|
return { content: [{ type: "text", text: await query("/api/v1/deployer-hunter/leaderboard", params) }] };
|
|
238
238
|
});
|
|
239
|
-
server.tool("madeonsol_deployer_profile", "One Pump.fun deployer's profile
|
|
239
|
+
server.tool("madeonsol_deployer_profile", "One Pump.fun deployer's profile. Returns is_deployer, deployer (tier, lifetime bonding_rate, recent_bond_rate, total_tokens_deployed, total_bonded, first_seen_at, last_deploy_at, avg_time_to_bond_minutes, runner_rate, labeled_tokens), pump_stats, pump_tokens and launchpad_tokens. NOTE: an untracked wallet returns HTTP 200 with is_deployer=false and deployer=null, NOT a 404, so check is_deployer and deployer.total_tokens_deployed before concluding anything about a wallet. Gate runner_rate on labeled_tokens >= 3. Requires an msk_ key.", {
|
|
240
240
|
wallet: z.string().describe("Deployer wallet address (base58)"),
|
|
241
241
|
}, readOnlyAnnotations, async ({ wallet }) => ({
|
|
242
242
|
content: [{ type: "text", text: await query(`/api/v1/deployer-hunter/${encodeURIComponent(wallet)}`) }],
|
|
@@ -737,7 +737,7 @@ function registerTools(server) {
|
|
|
737
737
|
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 }) => ({
|
|
738
738
|
content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/buyer-quality`) }],
|
|
739
739
|
}));
|
|
740
|
-
server.tool("madeonsol_token_risk", "Transparent 0–100 token
|
|
740
|
+
server.tool("madeonsol_token_risk", "Transparent 0–100 token risk score (higher = riskier): risk evidence for your own policy, not a verdict. Returns a band (enum values 'safe'/'caution'/'danger' label score ranges; they are not a safety guarantee), 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. Also returns a top-level dev block (deployer self-activity, null when the mint has no deployer-pipeline row): wallet, launchpad, deployed_at, create-tx self-buy snapshot (buy_sol / buy_tokens / buy_supply_pct), post-create rollup (bought_tokens_after — catches the same-second-separate-tx dev buy — sold_tokens, sold_sol, first_sell_at, last_sell_at), LIVE on-chain holdings (holdings_tokens, holdings_supply_pct — pump.fun 1B denominator, null elsewhere — wallet_empty: is the dev wallet empty NOW), and transfer_status (suspected / none_detected / unknown; transferred_out is its deprecated boolean view). score_version v2 (2026-09-21): the LP factor is 'unknown' unless LP custody is verified — a token-supply burn (token_supply_burn_detected, alias burn_detected) is never LP evidence; assessment.unknown_inputs lists inputs that could not be observed (the band is then never 'safe') and assessment.not_assessed lists dimensions not measured for this token. A failed score-critical read returns HTTP 503 code risk_inputs_unavailable (retry) instead of a 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 }) => ({
|
|
741
741
|
content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/risk`) }],
|
|
742
742
|
}));
|
|
743
743
|
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 }) => ({
|
|
@@ -968,7 +968,7 @@ function registerTools(server) {
|
|
|
968
968
|
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 }) => ({
|
|
969
969
|
content: [{ type: "text", text: await restQuery("POST", "/tokens/batch/buyer-quality", { mints }) }],
|
|
970
970
|
}));
|
|
971
|
-
server.tool("madeonsol_tokens_batch_risk", "Bulk token
|
|
971
|
+
server.tool("madeonsol_tokens_batch_risk", "Bulk token risk scoring (evidence, not a verdict) for up to 50 mints in one call — same per-mint shape as madeonsol_token_risk (0–100 score, band, explainable factors[], raw inputs) plus an as_of ISO timestamp. Untracked mints come back as { mint, error: 'not_tracked' } and do NOT fail the batch; per-mint failures come back as { mint, error: 'error' }. Response preserves de-duplicated input order and carries count (number of unique mints). Counts as ONE request against your quota. PRO/ULTRA only.", { 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 }) => ({
|
|
972
972
|
content: [{ type: "text", text: await restQuery("POST", "/tokens/batch/risk", { mints }) }],
|
|
973
973
|
}));
|
|
974
974
|
// ── Token intelligence (/token/{mint} + batch) ──
|
|
@@ -1323,7 +1323,7 @@ async function main() {
|
|
|
1323
1323
|
{ name: "madeonsol_deployer_trajectory", description: "Deployer skill curve — streaks, trend. Pro/Ultra." },
|
|
1324
1324
|
{ name: "madeonsol_deployer_stats", description: "Chain-wide deployer stats — tracked count, bonds detected, bond rate, tier counts." },
|
|
1325
1325
|
{ name: "madeonsol_deployer_leaderboard", description: "Deployer reputation leaderboard; compare lifetime vs recent bond rate." },
|
|
1326
|
-
{ name: "madeonsol_deployer_profile", description: "One deployer's tier, bond rates,
|
|
1326
|
+
{ name: "madeonsol_deployer_profile", description: "One deployer's tier, bond rates, total_tokens_deployed/total_bonded, runner_rate. Untracked returns is_deployer=false, deployer=null (not 404)." },
|
|
1327
1327
|
{ name: "madeonsol_deployer_tokens", description: "Every token one deployer launched, with time-to-bond and peak MC." },
|
|
1328
1328
|
{ name: "madeonsol_deployer_alert_stats", description: "Alert volume + per-tier bond-rate and MC-multiplier distributions." },
|
|
1329
1329
|
{ name: "madeonsol_deployer_best_tokens", description: "Best recent tokens from ranked deployers, by peak MC multiple." },
|
|
@@ -1372,7 +1372,7 @@ async function main() {
|
|
|
1372
1372
|
{ name: "madeonsol_token_top_traders", description: "The wallets that made or lost the most on a token, ranked by PnL or ROI, enriched with KOL/alpha-wallet identity. PRO/ULTRA." },
|
|
1373
1373
|
{ name: "madeonsol_token_trades", description: "Mint-scoped trade tape — cursor-paginated raw trades for one token, full history from 2026-04-12. PRO+." },
|
|
1374
1374
|
{ name: "madeonsol_tokens_batch_buyer_quality", description: "Bulk buyer-quality scoring for up to 50 mints. Shares the LRU cache." },
|
|
1375
|
-
{ name: "madeonsol_tokens_batch_risk", description: "Bulk
|
|
1375
|
+
{ name: "madeonsol_tokens_batch_risk", description: "Bulk risk scoring (evidence, not a verdict) for up to 50 mints — same shape as madeonsol_token_risk + as_of; untracked mints don't fail the batch. PRO+." },
|
|
1376
1376
|
{ name: "madeonsol_token_get", description: "Comprehensive per-mint snapshot: price, MC, volume, deployer, KOL, age, blacklist." },
|
|
1377
1377
|
{ name: "madeonsol_token_batch", description: "Bulk token snapshot for up to 50 mints — ~10-20× cheaper than N sequential calls." },
|
|
1378
1378
|
{ name: "madeonsol_copytrade_list", description: "List your copy-trade rules. PRO+." },
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "3.1.
|
|
1
|
+
export declare const VERSION = "3.1.1";
|
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 = "3.1.
|
|
2
|
+
export const VERSION = "3.1.1";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-server-madeonsol",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"mcpName": "io.github.MadeOnSol/madeonsol",
|
|
5
5
|
"description": "MCP server for MadeOnSol Solana KOL intelligence API — use from Claude, Cursor, or any MCP client. Free tier 200 req/day (live feeds 5-min delayed; paid is real-time), no payment to start.",
|
|
6
6
|
"type": "module",
|