mcp-server-madeonsol 1.10.4 → 1.12.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 CHANGED
@@ -13,6 +13,10 @@ MCP server for [MadeOnSol](https://madeonsol.com) Solana KOL intelligence API. U
13
13
 
14
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, and stream every DEX trade across 9+ programs. Free tier: 200 requests/day at [madeonsol.com/pricing](https://madeonsol.com/pricing) — no credit card required.
15
15
 
16
+ > **New in 1.12.0** — **Token risk score.** New tool `madeonsol_token_risk` — a transparent 0–100 rug-risk/safety score (higher = riskier) with a `band` (safe/caution/danger), an explainable `factors[]` array, and the raw `inputs` (mint/freeze authority, liquidity, liq-to-MC ratio, transfer fee, launch cohort, deployer bond rate, KOL signal, blacklist). PRO/ULTRA only.
17
+ >
18
+ > **New in 1.11.0** — `madeonsol_tokens_list` gains three new filter params: `min_liq_mc_ratio`, `max_liq_mc_ratio`, and `deployer_tier`. Response items now include `liquidity_to_mc_ratio` and `deployer_tier`. New tool: `madeonsol_signal_performance` — evaluate signal efficacy (hit rate, sample size, median outcome) before acting on any signal. KOL leaderboard entries now include `median_hold_minutes_30d` and `percentile_early_entry_30d`.
19
+ >
16
20
  > **New in 1.10.4** — Deployer alerts/profiles now expose `runner_rate` + `labeled_tokens` (fraction of a deployer's labeled tokens that ran vs dumped, gate on `labeled_tokens` ≥3) plus `avg_time_to_bond_minutes`.
17
21
 
18
22
  > **New in 1.10.3** — **Dump-cluster detection.** `madeonsol_token_buyer_quality` breakdown now includes `dump_cluster_count` (3+ dump-cluster wallets in the first-20 → 94% historical dump rate vs 61% base) and `recycled_early_buyer_count`. Full breakdown is returned on all tiers. Also: the API now pushes every pump.fun graduation in real time (`token:graduations` WS channel).
@@ -167,6 +171,7 @@ Scored from 1M+ early-buyer records (wallets seen in the first 20 buyers of Pump
167
171
  | `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. |
168
172
  | `madeonsol_token_cap_table` | PRO+ | First non-deployer early buyers, enriched with PnL/KOL/bot flags. PRO=10, ULTRA=20 |
169
173
  | `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
174
+ | `madeonsol_token_risk` | PRO+ | Transparent 0–100 rug-risk/safety score with `band`, explainable `factors[]`, and raw `inputs` |
170
175
 
171
176
  ### Copy-Trade Rules (PRO/ULTRA)
172
177
 
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ const PORT = parseInt(process.env.PORT || "3100", 10);
11
11
  const MODE = process.env.MCP_TRANSPORT || "stdio"; // "stdio" or "http"
12
12
  let authMode = "none";
13
13
  let paidFetch = fetch;
14
- const UA = "mcp-server-madeonsol/1.10.2";
14
+ const UA = "mcp-server-madeonsol/1.12.0";
15
15
  function apiKeyHeaders() {
16
16
  const h = { "User-Agent": UA };
17
17
  if (authMode === "madeonsol") {
@@ -504,6 +504,9 @@ function registerTools(server) {
504
504
  max_mev_share_pct: z.number().optional().describe("Maximum MEV-share % of 1h volume (post-filter)"),
505
505
  mc_change_1h_min_pct: z.number().optional().describe("Minimum 1h MC change % (post-filter; negative allowed)"),
506
506
  mc_change_1h_max_pct: z.number().optional().describe("Maximum 1h MC change % (post-filter)"),
507
+ min_liq_mc_ratio: z.number().optional().describe("Minimum liquidity-to-MC ratio (0-1). Filters out tokens where liquidity is thin relative to market cap."),
508
+ max_liq_mc_ratio: z.number().optional().describe("Maximum liquidity-to-MC ratio (0-1)."),
509
+ deployer_tier: z.enum(["elite", "good", "moderate", "rising", "cold", "unranked"]).optional().describe("Filter by deployer reputation tier."),
507
510
  sort: z.enum(["mc_desc", "mc_asc", "last_trade_desc", "liquidity_desc", "cumulative_volume_desc"]).optional().describe("Sort axis (default mc_desc)"),
508
511
  limit: z.number().min(1).max(100).optional().describe("Page size (max 100)"),
509
512
  offset: z.number().min(0).optional().describe("Pagination offset"),
@@ -545,6 +548,9 @@ function registerTools(server) {
545
548
  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 }) => ({
546
549
  content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/buyer-quality`) }],
547
550
  }));
551
+ 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 }) => ({
552
+ content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/risk`) }],
553
+ }));
548
554
  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 }) => ({
549
555
  content: [{ type: "text", text: await restQuery("POST", "/tokens/batch/buyer-quality", { mints }) }],
550
556
  }));
@@ -822,6 +828,11 @@ function registerTools(server) {
822
828
  }, readOnlyAnnotations, async ({ mint }) => ({
823
829
  content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/peak-history`) }],
824
830
  }));
831
+ server.tool("madeonsol_signal_performance", "Signal performance stats for a named signal — hit rate, sample size, median outcome, and confidence window. Use this to evaluate how well a signal (e.g. 'kol_coordination', 'first_touch') has been predicting token moves before acting on it.", {
832
+ name: z.string().describe("Signal name (e.g. 'kol_coordination', 'first_touch', 'deployer_alert')"),
833
+ }, readOnlyAnnotations, async ({ name }) => ({
834
+ content: [{ type: "text", text: await restQuery("GET", `/signals/${encodeURIComponent(name)}/performance`) }],
835
+ }));
825
836
  console.error("[madeonsol-mcp] Webhook & streaming tools enabled");
826
837
  }
827
838
  else {
@@ -866,7 +877,7 @@ async function main() {
866
877
  res.end(JSON.stringify({
867
878
  name: "madeonsol",
868
879
  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.",
869
- version: "1.10.2",
880
+ version: "1.11.0",
870
881
  tools: [
871
882
  { name: "madeonsol_kol_feed", description: "Get real-time Solana KOL trades from 1,000+ tracked wallets." },
872
883
  { name: "madeonsol_kol_coordination", description: "Get KOL convergence signals — tokens multiple KOLs are accumulating." },
@@ -933,6 +944,7 @@ async function main() {
933
944
  { name: "madeonsol_coordination_history", description: "Past coordination alert fires with score and timing. ULTRA." },
934
945
  { name: "madeonsol_kol_consensus", description: "KOL consensus on a token: buyers/sellers, exit rate, net flow. ULTRA gets wallet arrays." },
935
946
  { name: "madeonsol_peak_history", description: "Peak MC history: ATH, decline %, MC at bond, MC at 1h/6h/24h/7d after bond." },
947
+ { name: "madeonsol_signal_performance", description: "Signal performance stats for a named signal — hit rate, sample size, median outcome, confidence window." },
936
948
  ],
937
949
  homepage: "https://madeonsol.com/solana-api",
938
950
  repository: "https://github.com/LamboPoewert/mcp-server-madeonsol",
@@ -948,7 +960,7 @@ async function main() {
948
960
  transport = new StreamableHTTPServerTransport({
949
961
  sessionIdGenerator: undefined,
950
962
  });
951
- const server = new McpServer({ name: "madeonsol", version: "1.10.2" });
963
+ const server = new McpServer({ name: "madeonsol", version: "1.11.0" });
952
964
  registerTools(server);
953
965
  await server.connect(transport);
954
966
  }
@@ -986,7 +998,7 @@ async function main() {
986
998
  }
987
999
  else {
988
1000
  // Stdio transport for local use (Claude Desktop, Cursor, Claude Code)
989
- const server = new McpServer({ name: "madeonsol", version: "1.10.2" });
1001
+ const server = new McpServer({ name: "madeonsol", version: "1.11.0" });
990
1002
  registerTools(server);
991
1003
  const transport = new StdioServerTransport();
992
1004
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-madeonsol",
3
- "version": "1.10.4",
3
+ "version": "1.12.0",
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",