cryptoiz-mcp 4.1.0 β†’ 4.3.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +18 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cryptoiz-mcp",
3
- "version": "4.1.0",
3
+ "version": "4.3.0",
4
4
  "description": "CryptoIZ MCP Server β€” Solana DEX signals with x402 micropayments. Pay $0.01 USDC per call.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/index.js CHANGED
@@ -36,7 +36,8 @@ async function payAndFetch(url) {
36
36
  const N = (v, d=2) => v != null && v !== 'N/A' ? parseFloat(v).toFixed(d) : 'N/A';
37
37
  const sign = v => { const n = parseFloat(v||0); return n > 0 ? `+${n}` : `${n}`; };
38
38
  const shortCA = ca => ca ? `${ca.slice(0,6)}...${ca.slice(-4)}` : 'N/A';
39
- const jupLink = ca => ca ? `[Buy on Jupiter](https://jup.ag/swap?inputCurrency=So11111111111111111111111111111111111111112&outputCurrency=${ca})` : 'N/A';
39
+ const dexLink = ca => ca ? `[Chart πŸ“Š](https://dexscreener.com/solana/${ca})` : 'N/A';
40
+
40
41
 
41
42
  // ══════════════════════════════════════════════════════════════════
42
43
  // ALPHA SCANNER β€” Markdown Table Format
@@ -56,11 +57,13 @@ function formatAlpha(data) {
56
57
  const risk = parseFloat(s.risk_liquidity_pct||0) > 0 || parseFloat(s.risk_trap_pct||0) > 0
57
58
  ? `⚠️ Liq:${N(s.risk_liquidity_pct)}% Trap:${N(s.risk_trap_pct)}%`
58
59
  : 'βœ… Clear';
59
- return `| ${i} | **${s.name}** | \`${s.contract_address||'N/A'}\` | ${N(s.alpha_score)} | ${s.phase||'N/A'} | ${sign(s.whale_delta)} | ${sign(s.dolphin_delta)} | ${s.market_cap_now||'N/A'} | $${s.price_now_usd||'N/A'} | ${N(s.score_safety)} | ${risk} | ${jupLink(s.contract_address)} |`;
60
+ const startMC = s.market_cap_when_signal_formed ? s.market_cap_when_signal_formed : 'N/A';
61
+ const signalTime = s.signal_formed_at ? new Date(s.signal_formed_at).toLocaleDateString('id-ID') : 'N/A';
62
+ return `| ${i} | **${s.name}** | \`${s.contract_address||'N/A'}\` | ${N(s.alpha_score)} | ${s.phase||'N/A'} | ${sign(s.whale_delta)} | ${sign(s.dolphin_delta)} | ${s.market_cap_now||'N/A'} | ${startMC} | ${signalTime} | ${N(s.score_safety)} | ${risk} | ${dexLink(s.contract_address)} |`;
60
63
  };
61
64
 
62
- const tableHeader = `| # | Token | Contract Address (CA) | Score | Phase | Whale Ξ” | Dolphin Ξ” | MC | Price | Safety | Risk | Trade |
63
- |---|-------|----------------------|-------|-------|---------|-----------|-----|-------|--------|------|-------|`;
65
+ const tableHeader = `| # | Token | CA | Score | Phase | Whale Ξ” | Dolphin Ξ” | MC Now | Start MC | Signal Date | Safety | Risk | Chart |
66
+ |---|-------|-----|-------|-------|---------|-----------|--------|----------|-------------|--------|------|-------|`;
64
67
 
65
68
  let out = [];
66
69
 
@@ -79,7 +82,7 @@ function formatAlpha(data) {
79
82
  early.forEach((s, i) => out.push(tableRow(s, i+1)));
80
83
  out.push(``);
81
84
  out.push(`**Full CA for copy-paste:**`);
82
- early.forEach(s => out.push(`- **${s.name}:** \`${s.contract_address}\` β†’ ${jupLink(s.contract_address)}`));
85
+ early.forEach(s => out.push(`- **${s.name}:** \`${s.contract_address}\` β†’ ${dexLink(s.contract_address)}`))
83
86
  out.push(``);
84
87
  }
85
88
 
@@ -90,7 +93,7 @@ function formatAlpha(data) {
90
93
  building.forEach((s, i) => out.push(tableRow(s, i+1)));
91
94
  out.push(``);
92
95
  out.push(`**Full CA for copy-paste:**`);
93
- building.forEach(s => out.push(`- **${s.name}:** \`${s.contract_address}\` β†’ ${jupLink(s.contract_address)}`));
96
+ building.forEach(s => out.push(`- **${s.name}:** \`${s.contract_address}\` β†’ ${dexLink(s.contract_address)}`))
94
97
  out.push(``);
95
98
  }
96
99
 
@@ -122,11 +125,11 @@ function formatDivergence(data) {
122
125
  const date = data.fetched_at?.split('T')[0];
123
126
  const byType = data.signals_by_type || {};
124
127
 
125
- const tableHeader = `| # | Token | Contract Address (CA) | Div Score | Confidence | Whale Now→Prev | Dolphin Δ | Price | MC | Detected | Trade |
126
- |---|-------|----------------------|-----------|------------|----------------|-----------|-------|-----|----------|-------|`;
128
+ const tableHeader = `| # | Token | CA | Div Score | Confidence | Whale Now→Prev | Dolphin Δ | Price | MC | Detected | Chart |
129
+ |---|-------|-----|-----------|------------|----------------|-----------|-------|-----|----------|-------|`;
127
130
 
128
131
  const tableRow = (s, i) =>
129
- `| ${i} | **${s.name||'N/A'}** | \`${s.contract_address||'N/A'}\` | ${N(s.divergence_score)} | ${N(s.confidence_pct)}% | ${s.whale_holders_now||'?'}β†’${s.whale_holders_prev||'?'} (+${s.whale_delta||0}) | ${sign(s.dolphin_delta)} | $${s.price_now_usd||'N/A'} | ${s.market_cap_usd||'N/A'} | ${s.detected||'N/A'} | ${jupLink(s.contract_address)} |`;
132
+ `| ${i} | **${s.name||'N/A'}** | \`${s.contract_address||'N/A'}\` | ${N(s.divergence_score)} | ${N(s.confidence_pct)}% | ${s.whale_holders_now||'?'}β†’${s.whale_holders_prev||'?'} (+${s.whale_delta||0}) | ${sign(s.dolphin_delta)} | $${s.price_now_usd||'N/A'} | ${s.market_cap_usd||'N/A'} | ${s.detected||'N/A'} | ${dexLink(s.contract_address)} |`;
130
133
 
131
134
  let out = [];
132
135
  out.push(`## πŸ“Š CryptoIZ Divergence Scanner`);
@@ -163,7 +166,7 @@ function formatDivergence(data) {
163
166
  sigs.forEach((s, i) => out.push(tableRow(s, i+1)));
164
167
  out.push(``);
165
168
  out.push(`**Full CA for copy-paste:**`);
166
- sigs.forEach(s => out.push(`- **${s.name}:** \`${s.contract_address}\` β†’ ${jupLink(s.contract_address)}`));
169
+ sigs.forEach(s => out.push(`- **${s.name}:** \`${s.contract_address}\` β†’ ${dexLink(s.contract_address)}`));
167
170
  out.push(``);
168
171
  });
169
172
 
@@ -180,11 +183,11 @@ function formatAccumulation(data) {
180
183
  const tokens = data.tokens || [];
181
184
  const date = data.fetched_at?.split('T')[0];
182
185
 
183
- const tableHeader = `| # | Token | Contract Address (CA) | Composite | Strength | Structure | AccDist | Holder | Market | MC | Price | Trade |
184
- |---|-------|----------------------|-----------|----------|-----------|---------|--------|--------|-----|-------|-------|`;
186
+ const tableHeader = `| # | Token | CA | Composite | Strength | Structure | AccDist | Holder | Market | MC | Price | Chart |
187
+ |---|-------|-----|-----------|----------|-----------|---------|--------|--------|-----|-------|-------|`;
185
188
 
186
189
  const tableRow = (t, i) =>
187
- `| ${i} | **${t.name||'N/A'}** | \`${t.contract_address||'N/A'}\` | **${N(t.score_composite)}** | ${t.accumulation_strength||'N/A'} | ${N(t.score_structure)} | ${N(t.score_accdist)} | ${N(t.score_holder)} | ${N(t.score_market)} | ${t.market_cap_now||'N/A'} | $${t.price_now_usd||'N/A'} | ${jupLink(t.contract_address)} |`;
190
+ `| ${i} | **${t.name||'N/A'}** | \`${t.contract_address||'N/A'}\` | **${N(t.score_composite)}** | ${t.accumulation_strength||'N/A'} | ${N(t.score_structure)} | ${N(t.score_accdist)} | ${N(t.score_holder)} | ${N(t.score_market)} | ${t.market_cap_now||'N/A'} | $${t.price_now_usd||'N/A'} | ${dexLink(t.contract_address)} |`;
188
191
 
189
192
  let out = [];
190
193
  out.push(`## πŸ’° CryptoIZ Accumulation Dashboard`);
@@ -199,7 +202,7 @@ function formatAccumulation(data) {
199
202
  tokens.forEach((t, i) => out.push(tableRow(t, i+1)));
200
203
  out.push(``);
201
204
  out.push(`**Full CA for copy-paste:**`);
202
- tokens.slice(0, 10).forEach(t => out.push(`- **${t.name}:** \`${t.contract_address}\` β†’ ${jupLink(t.contract_address)}`));
205
+ tokens.slice(0, 10).forEach(t => out.push(`- **${t.name}:** \`${t.contract_address}\` β†’ ${dexLink(t.contract_address)}`));
203
206
  out.push(``);
204
207
  out.push(`---`);
205
208
  out.push(`⚠️ *Not financial advice. Always DYOR. Data: [CryptoIZ](https://cryptoiz.org) | @cryptoiz_IDN*`);
@@ -375,7 +378,7 @@ const TOOLS = [
375
378
  // ══════════════════════════════════════════════════════════════════
376
379
  // SERVER
377
380
  // ══════════════════════════════════════════════════════════════════
378
- const server = new Server({ name: 'cryptoiz-mcp', version: '4.1.0' }, { capabilities: { tools: {} } });
381
+ const server = new Server({ name: 'cryptoiz-mcp', version: '4.3.0' }, { capabilities: { tools: {} } });
379
382
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
380
383
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
381
384
  const { name, arguments: args } = request.params;