mcp-server-madeonsol 1.24.0 → 1.24.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
@@ -13,6 +13,8 @@ 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, 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.24.1 — stream tokens never expire.** `madeonsol_stream_token` (`POST /stream/token`) now returns the **same token on every call, forever**. It stops working only if your subscription lapses or you call the tool with `rotate: true` to replace it (the previous value keeps working for 60 s). `expires_at` and the new `next_refresh_at` are always `null` (kept for wire compatibility — do not schedule refreshes on them); the response gains `rotated` (boolean) and `lifetime` (string). The server never rotates on its own and never sends `token_refresh` unless you rotated; a `4001` close means "mint again" (lapsed or rotated), never a timer. Prefer `Authorization: Bearer <token>` on the WebSocket handshake — `?token=` still works and is masked in access logs.
17
+
16
18
  > **New in 1.24.0 — token locks & vesting, upcoming unlocks, and pump.fun creator-fee sharing / claims.** Five new tools (all PRO+, keyed `msk_` API only — no x402 route). `madeonsol_token_locks` binds `GET /tokens/{mint}/locks`: every on-chain lock / vesting contract on a mint (Streamflow, Jupiter Lock, Bonfida vesting) with the schedule, the terms (`cancelable_by_sender` = the locker can pull it — funds are locked against the recipient, not the locker) and a live-derived view (`locked_*`, `claimable_*`, `next_unlock`) plus a `summary` with 7d / 30d forward unlock totals. `madeonsol_token_locks_feed` (`GET /tokens/locks`) is the cross-token feed of NEW contracts (cursor `pagination.next_since`, or push on WS channel **`token:locks`**), `madeonsol_token_unlocks` (`GET /tokens/unlocks`) lists upcoming unlock EVENTS (cliff / period / final / tranche) inside a 1h–90d window sorted by soonest / largest_usd / largest_pct. **LP locks are not included** — token/vesting locks only. `madeonsol_token_fee_shares` (`GET /tokens/{mint}/fee-shares`) decodes a pump.fun coin's on-chain `SharingConfig` — shareholders with `share_bps`, `is_admin`, `is_social_pda` (fees earmarked for an X identity: `social.platform` 2 = X, `user_id` = the numeric platform id, not the handle), `redirected_bps`, `is_default: true` = 100% to the creator — plus a distributions rollup and config history; `madeonsol_token_fee_claims` (`GET /tokens/fee-claims`) is the fee-event feed (`distribution` with per-address `payouts[]`, `social_claim`, `shares_created/updated/reset`, `creator_transferred`, `creator_claim` only when asked via `type=`), pushed on WS channel **`token:fee_claims`**. **Fee-event history starts 2026-08-17.** All base-unit amounts are digit **strings**; ui / usd / pct are `null` when decimals or price are unknown.
17
19
 
18
20
  > **New in 1.23.0 — live holder census: exact holder count, labelled holders, and pools that are named, not just excluded.** The new `madeonsol_token_holders` tool binds `GET /tokens/{mint}/holders` (PRO+): every token account of the mint read from the ledger at `confirmed` and merged per owner, so `concentration.holder_count` is EXACT (distinct non-zero owners minus pools / bonding curves / burns) — never a trade-derived estimate; it is `null` only when the provider refuses the census for a mega-cap, in which case you get the top-20 view and `source.census_fallback_reason` says so. Each disclosed owner carries our labels (`deployer` / `kol` / `early_buyer` / `bundle` / `bot` / `dump_cluster` — empty means unknown to us, not clean), and `excluded[]` NAMES what was taken out of the circulating denominator: `reason` = `pool` (with `dex` + `pool_address`), `bonding_curve` (pump.fun / LaunchLab), `burn`, or `program_account` only when we genuinely cannot attribute the PDA; `pool_pct` / `burned_pct` / `program_pct` split the exclusion. Amounts are raw u64 **strings**. Disclosure: PRO ranks 1–10, ULTRA 1–50, BUSINESS 1–100 — the maths is tier-independent. Big tokens take 5–30 s upstream: you get `503 holder_scan_in_progress` with `retry_after_seconds: 20` while the scan finishes into the cache, and the retry is instant.
@@ -317,7 +319,7 @@ CRUD for token dip/recovery price alerts. Fires when a token's market cap crosse
317
319
 
318
320
  | Tool | Description |
319
321
  |---|---|
320
- | `madeonsol_stream_token` | Get a 24h WebSocket token for KOL/deployer streaming and DEX trade stream — PRO/ULTRA. Channels now also include `token:locks` (new lock/vesting contracts, event `token:lock`) and `token:fee_claims` (pump.fun fee events, event `token:fee_claim`) |
322
+ | `madeonsol_stream_token` | Get your WebSocket token for KOL/deployer streaming and DEX trade stream — PRO/ULTRA. **Never expires** (1.24.1): same token on every call; `rotate: true` replaces it (old value works 60 s more); `expires_at` / `next_refresh_at` always `null`. Channels now also include `token:locks` (new lock/vesting contracts, event `token:lock`) and `token:fee_claims` (pump.fun fee events, event `token:fee_claim`) |
321
323
  | `madeonsol_stream_sessions_list` | List your live WebSocket sessions — `id`, `service`, `tier`, `channels`, `connected_at`, `remote_ip`, `messages_sent` — PRO/ULTRA |
322
324
  | `madeonsol_stream_session_kill` | Evict a live WebSocket session by id to free its connection slot (e.g. a ghost socket) — PRO/ULTRA |
323
325
  | `madeonsol_create_webhook` | Register a webhook for real-time push notifications — PRO/ULTRA |
package/dist/index.js CHANGED
@@ -575,8 +575,8 @@ function registerTools(server) {
575
575
  }, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ webhook_id }) => ({
576
576
  content: [{ type: "text", text: await restQuery("POST", "/webhooks/test", { webhook_id }) }],
577
577
  }));
578
- server.tool("madeonsol_stream_token", "Generate a 24h WebSocket streaming token. Includes ws_url for KOL/deployer streaming (Pro/Ultra) and dex_ws_url for all-DEX trade streaming (Ultra only). PRO+ channels now also include token:locks (event token:lock — every NEW Streamflow / Jupiter Lock / Bonfida lock or vesting contract) and token:fee_claims (event token:fee_claim — every pump.fun fee event: distributions to shareholders, social/X claims, config changes, creator transfers).", {}, { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true }, async () => ({
579
- content: [{ type: "text", text: await restQuery("POST", "/stream/token") }],
578
+ server.tool("madeonsol_stream_token", "Get your WebSocket streaming token. Stream tokens NEVER EXPIRE: every call returns the same token until your subscription lapses or you pass rotate=true, which replaces it (the previous value keeps working for 60 s). expires_at / next_refresh_at are always null (kept for wire compatibility); the response also carries rotated (boolean) and lifetime (string). The server never rotates on its own and never sends token_refresh unless you rotated; a 4001 close means 'mint again', never a timer. Authenticate the handshake with 'Authorization: Bearer <token>' (?token= still works, masked in logs). Includes ws_url for KOL/deployer streaming (Pro/Ultra) and dex_ws_url for all-DEX trade streaming (Ultra only). PRO+ channels now also include token:locks (event token:lock — every NEW Streamflow / Jupiter Lock / Bonfida lock or vesting contract) and token:fee_claims (event token:fee_claim — every pump.fun fee event: distributions to shareholders, social/X claims, config changes, creator transfers).", { rotate: z.boolean().optional().describe("Replace the current token with a new one (the old value keeps working for 60 s). Default false — returns the existing token.") }, { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async ({ rotate }) => ({
579
+ content: [{ type: "text", text: await restQuery("POST", "/stream/token", rotate ? { rotate: true } : undefined) }],
580
580
  }));
581
581
  server.tool("madeonsol_stream_sessions_list", "List your live WebSocket streaming sessions. Returns sessions[] (each with id, service 'ws-streaming'|'dex-stream', tier, channels[], connected_at, remote_ip, messages_sent) and count. Use it to see which connections are holding your per-tier socket slots before evicting a ghost with madeonsol_stream_session_kill. PRO/ULTRA only.", {}, { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, async () => ({
582
582
  content: [{ type: "text", text: await restQuery("GET", "/stream/sessions") }],
@@ -1189,7 +1189,7 @@ async function main() {
1189
1189
  { name: "madeonsol_list_webhooks", description: "List your registered webhooks. Pro/Ultra." },
1190
1190
  { name: "madeonsol_delete_webhook", description: "Delete a webhook by ID. Pro/Ultra." },
1191
1191
  { name: "madeonsol_test_webhook", description: "Send a test payload to verify a webhook. Pro/Ultra." },
1192
- { name: "madeonsol_stream_token", description: "Get a 24h WebSocket streaming token. Pro/Ultra." },
1192
+ { name: "madeonsol_stream_token", description: "Get your WebSocket streaming token (never expires; same token on every call, rotate=true to replace it). Pro/Ultra." },
1193
1193
  { name: "madeonsol_stream_sessions_list", description: "List your live WebSocket streaming sessions (id, service, tier, channels, connected_at, messages_sent). PRO/ULTRA." },
1194
1194
  { name: "madeonsol_stream_session_kill", description: "Evict a live WebSocket streaming session by id — frees its connection slot. PRO/ULTRA." },
1195
1195
  { name: "madeonsol_me", description: "Inspect your account — tier, quota state, remaining requests, subscription expiry, per-feature usage." },
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.24.0";
1
+ export declare const VERSION = "1.24.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 = "1.24.0";
2
+ export const VERSION = "1.24.1";
package/glama.json CHANGED
@@ -5,7 +5,7 @@
5
5
  ],
6
6
  "display_name": "MadeOnSol — Solana memecoin intelligence",
7
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, no payment to start; auth via msk_ API key or x402 micropayments.",
8
- "version": "1.20.1",
8
+ "version": "1.24.1",
9
9
  "homepage": "https://madeonsol.com/solana-api",
10
10
  "repository": "https://github.com/madeonsol/mcp-server-madeonsol",
11
11
  "license": "MIT",
@@ -246,7 +246,7 @@
246
246
  },
247
247
  {
248
248
  "name": "madeonsol_stream_token",
249
- "description": "Issue a 24h WebSocket streaming token (Pro/Ultra). Includes dex_ws_url on ULTRA."
249
+ "description": "Issue your WebSocket streaming token (Pro/Ultra) — never expires; same token on every call, rotate=true to replace it. Includes dex_ws_url on ULTRA."
250
250
  },
251
251
  {
252
252
  "name": "madeonsol_stream_sessions_list",
package/package.json CHANGED
@@ -1,87 +1,87 @@
1
- {
2
- "name": "mcp-server-madeonsol",
3
- "version": "1.24.0",
4
- "mcpName": "io.github.MadeOnSol/madeonsol",
5
- "description": "MCP server for MadeOnSol Solana KOL intelligence API — use from Claude, Cursor, or any MCP client. Free tier 200 req/day, no payment to start.",
6
- "type": "module",
7
- "bin": {
8
- "mcp-server-madeonsol": "dist/index.js"
9
- },
10
- "main": "dist/index.js",
11
- "files": [
12
- "dist",
13
- "README.md",
14
- "LICENSE",
15
- "glama.json"
16
- ],
17
- "scripts": {
18
- "prebuild": "node ../gen-version.mjs",
19
- "build": "tsc",
20
- "test": "vitest run",
21
- "preflight": "bash ../../scripts/preflight-publish.sh",
22
- "prepublishOnly": "npm run preflight && npm run build"
23
- },
24
- "keywords": [
25
- "mcp",
26
- "model-context-protocol",
27
- "mcp-server",
28
- "solana",
29
- "x402",
30
- "kol",
31
- "kol-tracker",
32
- "trading",
33
- "claude",
34
- "claude-desktop",
35
- "cursor",
36
- "windsurf",
37
- "ai-agent",
38
- "memecoin",
39
- "memecoin-tracker",
40
- "pumpfun",
41
- "deployer-hunter",
42
- "alpha",
43
- "alpha-bot",
44
- "smart-money",
45
- "copy-trading",
46
- "madeonsol"
47
- ],
48
- "license": "MIT",
49
- "repository": {
50
- "type": "git",
51
- "url": "https://github.com/madeonsol/mcp-server-madeonsol"
52
- },
53
- "homepage": "https://madeonsol.com/solana-api",
54
- "dependencies": {
55
- "@modelcontextprotocol/sdk": "^1.12.1",
56
- "zod": "^4.3.6"
57
- },
58
- "peerDependencies": {
59
- "@x402/fetch": "^2.8.0",
60
- "@x402/core": "^2.8.0",
61
- "@x402/svm": "^2.8.0",
62
- "@solana/kit": "^5.5.1",
63
- "@scure/base": "^2.0.0"
64
- },
65
- "peerDependenciesMeta": {
66
- "@x402/fetch": {
67
- "optional": true
68
- },
69
- "@x402/core": {
70
- "optional": true
71
- },
72
- "@x402/svm": {
73
- "optional": true
74
- },
75
- "@solana/kit": {
76
- "optional": true
77
- },
78
- "@scure/base": {
79
- "optional": true
80
- }
81
- },
82
- "devDependencies": {
83
- "@types/node": "^20",
84
- "typescript": "^5",
85
- "vitest": "^4.1.5"
86
- }
87
- }
1
+ {
2
+ "name": "mcp-server-madeonsol",
3
+ "version": "1.24.1",
4
+ "mcpName": "io.github.MadeOnSol/madeonsol",
5
+ "description": "MCP server for MadeOnSol Solana KOL intelligence API — use from Claude, Cursor, or any MCP client. Free tier 200 req/day, no payment to start.",
6
+ "type": "module",
7
+ "bin": {
8
+ "mcp-server-madeonsol": "dist/index.js"
9
+ },
10
+ "main": "dist/index.js",
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE",
15
+ "glama.json"
16
+ ],
17
+ "scripts": {
18
+ "prebuild": "node ../gen-version.mjs",
19
+ "build": "tsc",
20
+ "test": "vitest run",
21
+ "preflight": "bash ../../scripts/preflight-publish.sh",
22
+ "prepublishOnly": "npm run preflight && npm run build"
23
+ },
24
+ "keywords": [
25
+ "mcp",
26
+ "model-context-protocol",
27
+ "mcp-server",
28
+ "solana",
29
+ "x402",
30
+ "kol",
31
+ "kol-tracker",
32
+ "trading",
33
+ "claude",
34
+ "claude-desktop",
35
+ "cursor",
36
+ "windsurf",
37
+ "ai-agent",
38
+ "memecoin",
39
+ "memecoin-tracker",
40
+ "pumpfun",
41
+ "deployer-hunter",
42
+ "alpha",
43
+ "alpha-bot",
44
+ "smart-money",
45
+ "copy-trading",
46
+ "madeonsol"
47
+ ],
48
+ "license": "MIT",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/madeonsol/mcp-server-madeonsol"
52
+ },
53
+ "homepage": "https://madeonsol.com/solana-api",
54
+ "dependencies": {
55
+ "@modelcontextprotocol/sdk": "^1.12.1",
56
+ "zod": "^4.3.6"
57
+ },
58
+ "peerDependencies": {
59
+ "@x402/fetch": "^2.8.0",
60
+ "@x402/core": "^2.8.0",
61
+ "@x402/svm": "^2.8.0",
62
+ "@solana/kit": "^5.5.1",
63
+ "@scure/base": "^2.0.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "@x402/fetch": {
67
+ "optional": true
68
+ },
69
+ "@x402/core": {
70
+ "optional": true
71
+ },
72
+ "@x402/svm": {
73
+ "optional": true
74
+ },
75
+ "@solana/kit": {
76
+ "optional": true
77
+ },
78
+ "@scure/base": {
79
+ "optional": true
80
+ }
81
+ },
82
+ "devDependencies": {
83
+ "@types/node": "^20",
84
+ "typescript": "^5",
85
+ "vitest": "^4.1.5"
86
+ }
87
+ }