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 +6 -4
- package/index.js +37 -35
- package/package.json +4 -2
- package/server.json +30 -0
- package/setup.js +1 -5
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CryptoIZ MCP Server
|
|
2
2
|
|
|
3
|
-
AI-powered Solana DEX
|
|
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
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
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.
|
|
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.
|
|
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);
|
|
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);
|
|
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
|
-
|
|
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: '
|
|
349
|
-
description: 'Get top 20 smart money alpha signals from CryptoIZ Solana DEX scanner. Shows accumulation patterns,
|
|
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: '
|
|
354
|
-
description: 'Get divergence signals - hidden accumulation, breakout accumulation, classic divergence between price and
|
|
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: '
|
|
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.
|
|
3
|
+
"version": "4.16.0",
|
|
4
4
|
"mcpName": "io.github.dadang11/cryptoiz",
|
|
5
|
-
"description": "CryptoIZ MCP Server - Solana DEX
|
|
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.
|
|
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++) {
|