mcp-server-madeonsol 1.17.1 → 1.17.2

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
@@ -164,6 +164,7 @@ Add to MCP settings with the same command and env vars.
164
164
  |---|---|
165
165
  | `madeonsol_deployer_alerts` | Pump.fun deployer launches with KOL enrichment. Filter by tier (elite/good/moderate/rising/cold). ULTRA unlocks full pagination. Each alert's `deployers` now includes `deployer_sol_balance` — the deployer wallet's SOL balance at alert time (null for historical rows). |
166
166
  | `madeonsol_deployer_trajectory` | Deployer skill curve — streaks, rolling bond rate, trend — available on all tiers |
167
+ | `madeonsol_deployer_history` | A pump.fun deployer's daily reputation time-series (`bonding_rate`, `recent_bond_rate`, `tier`, `avg_peak_mc` per day) — backtest deployer signals at launch time without look-ahead bias. `limit` 1–365 (default 90) |
167
168
 
168
169
  ### Deshred Sniper Alerts *(new in 1.10 — Pro/Ultra)*
169
170
 
@@ -215,6 +216,7 @@ Scored from 1M+ early-buyer records (wallets seen in the first 20 buyers of Pump
215
216
  | `madeonsol_token_buyer_quality` | All | 0–100 buyer-quality score + full breakdown (5-min cached) |
216
217
  | `madeonsol_token_risk` | PRO+ | Transparent 0–100 rug-risk/safety score with `band`, explainable `factors[]`, and raw `inputs` |
217
218
  | `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
+ | `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) |
218
220
  | `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 |
219
221
  | `madeonsol_token_candles` | PRO+ | Historical OHLCV candles (1m–1d). PRO=OHLCV 30d; ULTRA=+net flow, liquidity delta, MEV volume, full history |
220
222
  | `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 |
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
5
5
  import { z } from "zod";
6
+ import { VERSION } from "./version.js";
6
7
  import { createServer } from "node:http";
7
8
  const BASE_URL = process.env.MADEONSOL_API_URL || "https://madeonsol.com";
8
9
  const MADEONSOL_API_KEY = process.env.MADEONSOL_API_KEY; // Native key from madeonsol.com/pricing
@@ -33,7 +34,7 @@ export function rewritePath(path, mode) {
33
34
  ? path
34
35
  : path.replace("/api/x402/", "/api/v1/");
35
36
  }
36
- const UA = "mcp-server-madeonsol/1.17.1";
37
+ const UA = `mcp-server-madeonsol/${VERSION}`;
37
38
  function apiKeyHeaders() {
38
39
  const h = { "User-Agent": UA };
39
40
  if (authMode === "madeonsol") {
@@ -601,6 +602,20 @@ function registerTools(server) {
601
602
  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 }) => ({
602
603
  content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/bundle`) }],
603
604
  }));
605
+ server.tool("madeonsol_token_pools", "Per-venue liquidity map for a Solana token — every DEX pool it trades in (pump.fun/PumpSwap/Raydium/Meteora/Orca) with per-pool liquidity, live vs parked (is_active), plus a summary (total liquidity, pool/DEX counts, primary/deepest pool, top_pool_share_pct concentration). Shows WHERE liquidity sits and how fragmented it is, vs the single aggregate number from the token endpoint.", { mint: z.string().describe("Token mint address (base58)") }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ mint }) => ({
606
+ content: [{ type: "text", text: await restQuery("GET", `/tokens/${encodeURIComponent(mint)}/pools`) }],
607
+ }));
608
+ server.tool("madeonsol_deployer_history", "A pump.fun deployer's daily reputation time-series (bonding_rate, recent_bond_rate, tier, avg_peak_mc per day). Lets an agent answer 'was this deployer elite AT THE TIME it launched token X?' — backtest deployer signals without look-ahead bias.", {
609
+ wallet: z.string().describe("Deployer wallet address (base58)"),
610
+ limit: z.number().min(1).max(365).default(90).describe("Number of daily snapshots to return (1-365, default 90)"),
611
+ }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ wallet, limit }) => {
612
+ const qs = new URLSearchParams();
613
+ if (limit !== undefined)
614
+ qs.set("limit", String(limit));
615
+ const query = qs.toString();
616
+ const path = `/deployer-hunter/${encodeURIComponent(wallet)}/history${query ? `?${query}` : ""}`;
617
+ return { content: [{ type: "text", text: await restQuery("GET", path) }] };
618
+ });
604
619
  server.tool("madeonsol_token_candles", "Historical OHLCV price candles for a token, aggregated from the on-chain trade firehose. Each candle carries t/open/high/low/close/volume_usd/trades/market_cap_usd. Timeframes: 1m/5m/15m/1h/4h/1d. PRO=OHLCV, last 30 days only. ULTRA adds buy/sell volume + count splits, net flow, MEV volume, open/close liquidity, high/low MC, and full history. PRO/ULTRA only — BASIC receives HTTP 403.", {
605
620
  mint: z.string().describe("Token mint address (base58)"),
606
621
  tf: z.enum(["1m", "5m", "15m", "1h", "4h", "1d"]).optional().describe("Candle timeframe (default 1h)"),
@@ -961,7 +976,7 @@ async function main() {
961
976
  res.end(JSON.stringify({
962
977
  name: "madeonsol",
963
978
  description: "Solana KOL trading intelligence and deployer analytics. Real-time data from 1,000+ KOL wallets, 15,500+ Pump.fun deployers, 25,000+ scored alpha wallets, copy-trade rules, and wallet tracker. Supports MadeOnSol API key (msk_) or x402 micropayments.",
964
- version: "1.17.1",
979
+ version: VERSION,
965
980
  tools: [
966
981
  { name: "madeonsol_kol_feed", description: "Get real-time Solana KOL trades from 1,000+ tracked wallets." },
967
982
  { name: "madeonsol_kol_coordination", description: "Get KOL convergence signals — tokens multiple KOLs are accumulating." },
@@ -1049,7 +1064,7 @@ async function main() {
1049
1064
  transport = new StreamableHTTPServerTransport({
1050
1065
  sessionIdGenerator: undefined,
1051
1066
  });
1052
- const server = new McpServer({ name: "madeonsol", version: "1.17.1" });
1067
+ const server = new McpServer({ name: "madeonsol", version: VERSION });
1053
1068
  registerTools(server);
1054
1069
  await server.connect(transport);
1055
1070
  }
@@ -1087,7 +1102,7 @@ async function main() {
1087
1102
  }
1088
1103
  else {
1089
1104
  // Stdio transport for local use (Claude Desktop, Cursor, Claude Code)
1090
- const server = new McpServer({ name: "madeonsol", version: "1.17.1" });
1105
+ const server = new McpServer({ name: "madeonsol", version: VERSION });
1091
1106
  registerTools(server);
1092
1107
  const transport = new StdioServerTransport();
1093
1108
  await server.connect(transport);
@@ -0,0 +1 @@
1
+ export declare const VERSION = "1.17.2";
@@ -0,0 +1,2 @@
1
+ // AUTO-GENERATED by ../gen-version.mjs (npm prebuild) from package.json. Do not edit.
2
+ export const VERSION = "1.17.2";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-madeonsol",
3
- "version": "1.17.1",
3
+ "version": "1.17.2",
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",
6
6
  "type": "module",
@@ -15,6 +15,7 @@
15
15
  "glama.json"
16
16
  ],
17
17
  "scripts": {
18
+ "prebuild": "node ../gen-version.mjs",
18
19
  "build": "tsc",
19
20
  "test": "vitest run",
20
21
  "preflight": "bash ../../scripts/preflight-publish.sh",