cryptoiz-mcp 4.15.13 → 4.16.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
@@ -1,6 +1,6 @@
1
1
  # CryptoIZ MCP Server
2
2
 
3
- AI-powered Solana DEX smart money signals for Claude Desktop. Pay per call with USDC on Solana via x402 Dexter protocol.
3
+ AI-powered Solana DEX whale intelligence for Claude Desktop. Pay per call with USDC on Solana via x402 Dexter protocol.
4
4
 
5
5
  ## Quick Install (2 commands)
6
6
 
@@ -21,9 +21,11 @@ Auto-detects OS, finds Claude Desktop config (including Windows MSIX), writes co
21
21
 
22
22
  | Tool | Price | Data |
23
23
  |------|-------|------|
24
- | get_alpha_scanner | $0.05 | 20 smart money whale/dolphin signals |
25
- | get_divergence | $0.02 | 20 divergence signals (3 types) |
26
- | get_accumulation | $0.02 | 20 tokens with 4D scoring |
24
+ | get_whale_alpha | $0.05 | 20 smart money whale/dolphin signals |
25
+ | get_whale_divergence | $0.02 | 20 divergence signals (3 types) |
26
+ | get_whale_accumulation | $0.02 | Tokens in accumulation phase |
27
+ | get_whale_neutral | $0.02 | Tokens in neutral phase |
28
+ | get_whale_distribution | $0.02 | Tokens in distribution phase |
27
29
  | get_btc_regime | $0.01 | BTC macro + Fear/Greed + technicals |
28
30
  | get_token_ca | FREE | Contract address lookup |
29
31
  | get_status | FREE | Server health check |
package/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
- // CryptoIZ MCP Server v4.15.0
2
+ // CryptoIZ MCP Server v4.16.0
3
+ // Whale Intelligence Suite: 6 paid tools + 2 free
3
4
  // x402 V2: Dexter facilitator (gas sponsored) + V1 backward compat
4
5
  // ZERO template literals — Windows PowerShell safe
5
6
 
@@ -9,14 +10,21 @@ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprot
9
10
  import { Connection, Keypair, PublicKey, Transaction, SystemProgram, VersionedTransaction, TransactionMessage } from '@solana/web3.js';
10
11
  import bs58 from 'bs58';
11
12
 
12
- var VERSION = 'v4.15.13';
13
+ var VERSION = 'v4.16.0';
13
14
  var GATEWAY = 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-x402-gateway';
14
15
  // Per-tool endpoints for Dexter settlement naming
15
16
  var TOOL_ENDPOINTS = {
17
+ get_whale_alpha: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-alpha-scanner',
18
+ get_whale_divergence: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-divergence',
19
+ get_whale_accumulation: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-accumulation',
20
+ get_whale_neutral: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-neutral',
21
+ get_whale_distribution: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-distribution',
22
+ get_btc_regime: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-btc-regime',
23
+ get_btc_futures_signal: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-btc-futures',
24
+ // Backward compat: old names -> same proxy endpoints
16
25
  get_alpha_scanner: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-alpha-scanner',
17
26
  get_divergence: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-divergence',
18
27
  get_accumulation: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-accumulation',
19
- get_btc_regime: 'https://rehqwsypjnjirhuiapqh.supabase.co/functions/v1/mcp-btc-regime',
20
28
  };
21
29
  var RECIPIENT = 'DsKmdkYx49Xc1WhqMUAztwhdYPTqieyC98VmnnJdgpXX';
22
30
  var USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
@@ -48,12 +56,6 @@ function findATA(wallet, mint) {
48
56
  }
49
57
 
50
58
  // ===== V2: Build partially-signed tx for Dexter facilitator =====
51
- // Reference: @x402/svm exact/client/scheme.ts (Coinbase reference SDK)
52
- // Tx MUST contain exactly 4 instructions in this order:
53
- // 1. SetComputeUnitLimit (20000)
54
- // 2. SetComputeUnitPrice (1 microLamport)
55
- // 3. TransferChecked (SPL Token)
56
- // 4. Memo (random 16-byte nonce hex)
57
59
  var COMPUTE_BUDGET_PROGRAM = 'ComputeBudget111111111111111111111111111111';
58
60
  var MEMO_PROGRAM = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
59
61
 
@@ -69,21 +71,17 @@ async function buildV2PaymentPayload(amount, feePayerAddr) {
69
71
  var tokenProgramPk = new PublicKey(TOKEN_PROGRAM);
70
72
  var usdcMintPk = new PublicKey(USDC_MINT);
71
73
 
72
- // Instruction 1: SetComputeUnitLimit = 20000 (per @x402/svm constants)
73
74
  var setLimitData = Buffer.alloc(5);
74
75
  setLimitData.writeUInt8(2, 0);
75
76
  setLimitData.writeUInt32LE(20000, 1);
76
77
  var setLimitIx = { programId: computeBudgetPk, keys: [], data: setLimitData };
77
78
 
78
- // Instruction 2: SetComputeUnitPrice = 1 microLamport (per @x402/svm constants)
79
79
  var setPriceData = Buffer.alloc(9);
80
80
  setPriceData.writeUInt8(3, 0);
81
81
  setPriceData.writeUInt32LE(1, 1);
82
82
  setPriceData.writeUInt32LE(0, 5);
83
83
  var setPriceIx = { programId: computeBudgetPk, keys: [], data: setPriceData };
84
84
 
85
- // Instruction 3: TransferChecked (SPL Token)
86
- // Accounts order: [source, mint, destination, authority]
87
85
  var transferKeys = [
88
86
  { pubkey: userATA, isSigner: false, isWritable: true },
89
87
  { pubkey: usdcMintPk, isSigner: false, isWritable: false },
@@ -91,15 +89,14 @@ async function buildV2PaymentPayload(amount, feePayerAddr) {
91
89
  { pubkey: kp.publicKey, isSigner: true, isWritable: false },
92
90
  ];
93
91
  var transferData = Buffer.alloc(10);
94
- transferData.writeUInt8(12, 0); // TransferChecked = instruction index 12
92
+ transferData.writeUInt8(12, 0);
95
93
  var lo = amount & 0xFFFFFFFF;
96
94
  var hi = Math.floor(amount / 0x100000000) & 0xFFFFFFFF;
97
95
  transferData.writeUInt32LE(lo, 1);
98
96
  transferData.writeUInt32LE(hi, 5);
99
- transferData.writeUInt8(6, 9); // USDC decimals = 6
97
+ transferData.writeUInt8(6, 9);
100
98
  var transferIx = { programId: tokenProgramPk, keys: transferKeys, data: transferData };
101
99
 
102
- // Instruction 4: Memo with random 16-byte nonce (per @x402/svm reference)
103
100
  var nonceBytes = new Uint8Array(16);
104
101
  for (var i = 0; i < 16; i++) { nonceBytes[i] = Math.floor(Math.random() * 256); }
105
102
  var nonceHex = '';
@@ -110,10 +107,8 @@ async function buildV2PaymentPayload(amount, feePayerAddr) {
110
107
  var memoData = Buffer.from(nonceHex, 'utf8');
111
108
  var memoIx = { programId: memoProgramPk, keys: [], data: memoData };
112
109
 
113
- // Get recent blockhash
114
110
  var bhResult = await conn.getLatestBlockhash('confirmed');
115
111
 
116
- // Build V0 message: feePayer = Dexter, 4 instructions in spec order
117
112
  var message = new TransactionMessage({
118
113
  payerKey: feePayerPk,
119
114
  recentBlockhash: bhResult.blockhash,
@@ -121,8 +116,6 @@ async function buildV2PaymentPayload(amount, feePayerAddr) {
121
116
  }).compileToV0Message();
122
117
 
123
118
  var vtx = new VersionedTransaction(message);
124
-
125
- // Partially sign with user keypair only (Dexter signs as feePayer later)
126
119
  vtx.sign([kp]);
127
120
 
128
121
  var serialized = vtx.serialize();
@@ -187,10 +180,11 @@ async function callTool(toolName, args) {
187
180
  queryParts.push('tool=' + toolName);
188
181
  }
189
182
 
190
- if (toolName === 'get_divergence' && args && args.timeframe) {
183
+ // Handle timeframe for divergence tools (new and old name)
184
+ if ((toolName === 'get_whale_divergence' || toolName === 'get_divergence') && args && args.timeframe) {
191
185
  queryParts.push('tf=' + args.timeframe);
192
186
  }
193
- if (toolName === 'get_token_ca' && args && args.name) {
187
+ if ((toolName === 'get_token_ca') && args && args.name) {
194
188
  queryParts.push('name=' + encodeURIComponent(args.name));
195
189
  }
196
190
 
@@ -253,14 +247,11 @@ async function callTool(toolName, args) {
253
247
  var headerName = '';
254
248
 
255
249
  if (useV2 && paymentRequirements.extra && paymentRequirements.extra.feePayer) {
256
- // V2: Build partially-signed tx with 4 instructions, Dexter pays gas
257
250
  var v2FeePayer = paymentRequirements.extra.feePayer;
258
251
  console.error('[cryptoiz-mcp] V2 mode: 4-ix tx (Limit+Price+TransferChecked+Memo), feePayer=' + v2FeePayer.substring(0, 8) + '...');
259
252
  try {
260
253
  var txB64 = await buildV2PaymentPayload(amount, v2FeePayer);
261
254
 
262
- // Payload per @x402/svm facilitator: must include 'accepted' field
263
- // Facilitator verify() checks payload.accepted.scheme and payload.accepted.network
264
255
  var v2Payload = {
265
256
  x402Version: 2,
266
257
  accepted: {
@@ -280,12 +271,10 @@ async function callTool(toolName, args) {
280
271
  useV2 = false;
281
272
  }
282
273
  } else {
283
- // No feePayer in requirements — force V1
284
274
  useV2 = false;
285
275
  }
286
276
 
287
277
  if (!useV2) {
288
- // V1 fallback: send USDC on-chain, then pass signature
289
278
  console.error('[cryptoiz-mcp] V1 mode: sending USDC on-chain...');
290
279
  var sig = await sendUSDC(amount);
291
280
  console.error('[cryptoiz-mcp] V1 TX confirmed: ' + sig);
@@ -308,7 +297,6 @@ async function callTool(toolName, args) {
308
297
  console.error('[cryptoiz-mcp] Auto-fallback to V1 (sendUSDC on-chain)...');
309
298
 
310
299
  try {
311
- // V1: send USDC on-chain, retry with x-payment
312
300
  var fallbackSig = await sendUSDC(amount);
313
301
  console.error('[cryptoiz-mcp] V1 fallback TX confirmed: ' + fallbackSig);
314
302
 
@@ -327,7 +315,6 @@ async function callTool(toolName, args) {
327
315
  throw new Error('Payment failed (' + resp2.status + '): ' + errBody);
328
316
  }
329
317
 
330
- // Read receipt header (V2 or V1)
331
318
  var receipt = resp2.headers.get('payment-response') || resp2.headers.get('x-payment-response');
332
319
  if (receipt) {
333
320
  try {
@@ -345,13 +332,13 @@ async function callTool(toolName, args) {
345
332
  // ===== MCP SERVER SETUP =====
346
333
  var TOOLS = [
347
334
  {
348
- name: 'get_alpha_scanner',
349
- description: 'Get top 20 smart money alpha signals from CryptoIZ Solana DEX scanner. Shows accumulation patterns, whale/dolphin activity, and entry timing. Cost: $0.05 USDC.',
335
+ name: 'get_whale_alpha',
336
+ description: 'Get top 20 smart money alpha signals from CryptoIZ Solana DEX scanner. Shows whale/dolphin accumulation patterns, entry timing, and risk scores. Cost: $0.05 USDC.',
350
337
  inputSchema: { type: 'object', properties: {}, required: [] },
351
338
  },
352
339
  {
353
- name: 'get_divergence',
354
- description: 'Get divergence signals - hidden accumulation, breakout accumulation, classic divergence between price and smart money. Cost: $0.02 USDC.',
340
+ name: 'get_whale_divergence',
341
+ description: 'Get divergence signals - hidden accumulation, breakout accumulation, classic divergence between price and whale activity. Cost: $0.02 USDC.',
355
342
  inputSchema: {
356
343
  type: 'object',
357
344
  properties: {
@@ -361,8 +348,18 @@ var TOOLS = [
361
348
  },
362
349
  },
363
350
  {
364
- name: 'get_accumulation',
365
- description: 'Get tokens in accumulation phase with holder tier analysis (whale/dolphin/shrimp deltas). Cost: $0.02 USDC.',
351
+ name: 'get_whale_accumulation',
352
+ description: 'Get tokens in accumulation phase with holder tier analysis (whale/dolphin/shrimp deltas). Smart money is entering these tokens. Cost: $0.02 USDC.',
353
+ inputSchema: { type: 'object', properties: {}, required: [] },
354
+ },
355
+ {
356
+ name: 'get_whale_neutral',
357
+ description: 'Get tokens in neutral phase - no clear accumulation or distribution. Watch for phase transitions. Cost: $0.02 USDC.',
358
+ inputSchema: { type: 'object', properties: {}, required: [] },
359
+ },
360
+ {
361
+ name: 'get_whale_distribution',
362
+ description: 'Get tokens in distribution phase - whale selling detected. Smart money is exiting. Consider closing positions or avoiding. Cost: $0.02 USDC.',
366
363
  inputSchema: { type: 'object', properties: {}, required: [] },
367
364
  },
368
365
  {
@@ -370,6 +367,11 @@ var TOOLS = [
370
367
  description: 'Get Bitcoin macro regime, fear/greed index, futures signals, and technicals (RSI, EMA, MACD). Cost: $0.01 USDC.',
371
368
  inputSchema: { type: 'object', properties: {}, required: [] },
372
369
  },
370
+ {
371
+ name: 'get_btc_futures_signal',
372
+ description: 'BTC futures scalping signal (35x leverage). Multi-timeframe: 4h regime filter (bull/bear) + 5m RSI entry trigger. Returns direction, entry, TP, SL, leverage recommendation, conviction score. Backtested 54% WR, PF 1.67, Sharpe 5.0 on 90d. Cost: $0.03 USDC.',
373
+ inputSchema: { type: 'object', properties: {}, required: [] },
374
+ },
373
375
  {
374
376
  name: 'get_token_ca',
375
377
  description: 'Look up a Solana token contract address by name. FREE - no payment required.',
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "cryptoiz-mcp",
3
- "version": "4.15.13",
3
+ "version": "4.16.0",
4
4
  "mcpName": "io.github.dadang11/cryptoiz",
5
- "description": "CryptoIZ MCP Server - Solana DEX trading signals via Claude Desktop with x402 USDC micropayments (V2 Dexter facilitator)",
5
+ "description": "CryptoIZ MCP Server - Solana DEX whale intelligence via Claude Desktop with x402 USDC micropayments (V2 Dexter facilitator)",
6
6
  "main": "index.js",
7
7
  "type": "module",
8
8
  "bin": {
@@ -34,10 +34,12 @@
34
34
  "usdc",
35
35
  "dexter",
36
36
  "whale-tracking",
37
+ "whale-intelligence",
37
38
  "smart-money",
38
39
  "alpha-signals",
39
40
  "divergence",
40
41
  "accumulation",
42
+ "distribution",
41
43
  "defi",
42
44
  "dex"
43
45
  ],
package/server.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json",
3
+ "name": "io.github.dadang11/cryptoiz",
4
+ "description": "AI-powered Solana DEX smart money signals. Get whale/dolphin accumulation alerts, price-volume divergence detection, alpha scanner with 20 top-scoring tokens, and BTC macro regime analysis. Pay-per-call via x402 USDC on Solana — no subscription, no API key needed.",
5
+ "status": "active",
6
+ "repository": {
7
+ "url": "https://github.com/dadang11/cryptoiz-mcp",
8
+ "source": "github"
9
+ },
10
+ "version": "4.15.13",
11
+ "packages": [
12
+ {
13
+ "registry_type": "npm",
14
+ "registry_base_url": "https://registry.npmjs.org",
15
+ "identifier": "cryptoiz-mcp",
16
+ "version": "4.15.13",
17
+ "transport": {
18
+ "type": "stdio"
19
+ },
20
+ "environment_variables": [
21
+ {
22
+ "name": "SVM_PRIVATE_KEY",
23
+ "description": "Your Solana wallet private key (base58) for x402 USDC payments",
24
+ "isRequired": true,
25
+ "isSecret": true
26
+ }
27
+ ]
28
+ }
29
+ ]
30
+ }
package/setup.js CHANGED
@@ -4,7 +4,7 @@ import path from 'path';
4
4
  import os from 'os';
5
5
  import { execSync } from 'child_process';
6
6
 
7
- var VERSION = 'v4.15.13';
7
+ var VERSION = 'v4.15.14';
8
8
  function print(msg) { process.stdout.write(msg + '\n'); }
9
9
 
10
10
  function findConfigPath() {
@@ -12,7 +12,6 @@ function findConfigPath() {
12
12
  if (p === 'darwin') {
13
13
  candidates.push(path.join(os.homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'));
14
14
  } else if (p === 'win32') {
15
- // MSIX path FIRST (priority) — most Windows Claude Desktop installs are MSIX
16
15
  var localAppData = process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local');
17
16
  try {
18
17
  var packagesDir = path.join(localAppData, 'Packages');
@@ -25,7 +24,6 @@ function findConfigPath() {
25
24
  }
26
25
  }
27
26
  } catch(e) {}
28
- // Standard path as fallback
29
27
  var appdata = process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming');
30
28
  candidates.push(path.join(appdata, 'Claude', 'claude_desktop_config.json'));
31
29
  } else {
@@ -76,7 +74,6 @@ function injectConfig(cfgPath, entry) {
76
74
  fs.writeFileSync(cfgPath, JSON.stringify(config, null, 2), 'utf8');
77
75
  }
78
76
 
79
- // Get private key from command line argument
80
77
  var key = (process.argv[2] || '').trim();
81
78
 
82
79
  print('');
@@ -102,7 +99,6 @@ if (!key) {
102
99
  process.exit(1);
103
100
  }
104
101
 
105
- // Validate base58
106
102
  var chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
107
103
  if (key.length < 40 || key.length > 100) { print('ERROR: Invalid key length (' + key.length + ' chars). Expected 44-88.'); process.exit(1); }
108
104
  for (var i = 0; i < key.length; i++) {