asrai-mcp 0.6.0 → 1.0.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
@@ -55,22 +55,31 @@ Each API call costs **$0.005 USDC** from your wallet on Base mainnet. Make sure
55
55
 
56
56
  | Tool | What it does | Cost |
57
57
  |---|---|---|
58
- | `market_overview` | Trending, gainers/losers, RSI, screeners, sentiment, narratives, cashflow | $0.095 |
59
- | `technical_analysis` | ALSAT, SuperALSAT, PSAR, MACD-DEMA, AlphaTrend, TD, forecast, SMC, S/R, Elliott Wave, Ichimoku | $0.06 |
60
- | `sentiment` | CBBI, CMC sentiment, AI insights | $0.015 |
61
- | `forecast` | AI 3-7 day price prediction | $0.005 |
62
- | `screener` | Find coins by criteria | $0.005 |
63
- | `smart_money` | Order blocks, FVGs, support/resistance | $0.01 |
64
- | `elliott_wave` | Elliott Wave analysis | $0.005 |
65
- | `ichimoku` | Ichimoku cloud | $0.005 |
66
- | `cashflow` | Capital flow data | $0.005 |
67
- | `coin_info` | Stats, info, price, tags, CMC AI + auto DEX data | $0.025–$0.03 |
68
- | `dexscreener` | DEX trading data | $0.005 |
69
- | `chain_tokens` | Low-cap tokens on chain | $0.005 |
70
- | `portfolio` | Model portfolio investment reference | $0.005 |
71
- | `channel_summary` | Latest crypto narratives | $0.005 |
72
- | `ask_ai` | AI analyst freeform answer | $0.01 |
73
- | `indicator_guide` | Asrai indicator reference | FREE |
58
+ | `market_overview` | Full brief: trending, gainers/losers, RSI, screeners, sentiment, cashflow — use for complete reports only | $0.095 |
59
+ | `trending` | Currently trending coins | $0.005 |
60
+ | `gainers_losers` | Top gainers and losers | $0.005 |
61
+ | `top_bottom` | RSI extremes, top/bottom signals, bounce/dip candidates | $0.015 |
62
+ | `volume_spikes` | Coins with unusually high volume | $0.005 |
63
+ | `high_volume_low_cap` | Low market cap coins with high volume | $0.005 |
64
+ | `ath_tracker` | Coins near or at all-time high | $0.005 |
65
+ | `dominance` | BTC & altcoin dominance signals | $0.01 |
66
+ | `macro` | S&P 500 & Nasdaq signals — global market context | $0.01 |
67
+ | `sentiment` | CBBI, CMC sentiment, AI insights, channel news, Galaxy Score, social dominance | $0.03 |
68
+ | `late_unlocked_coins` | Post-vesting coins with low remaining selling pressure | $0.005 |
69
+ | `trade_signals` | Trade setups: trending movers, bounces, SAR & MACD entries | $0.025 |
70
+ | `technical_analysis(symbol, timeframe)` | Signals, ALSAT, SuperALSAT, PSAR, MACD-DEMA, AlphaTrend, TD, SMC, S/R, Elliott Wave, Ichimoku | $0.06 |
71
+ | `forecast(symbol)` | AI 3-7 day price prediction | $0.005 |
72
+ | `screener(type)` | Find coins by criteria (ichimoku-trend, rsi, vwap, volume, bounce-dip...) | $0.005 |
73
+ | `smart_money(symbol, timeframe)` | Order blocks, fair value gaps, support/resistance | $0.01 |
74
+ | `elliott_wave(symbol, timeframe)` | Elliott Wave analysis | $0.005 |
75
+ | `ichimoku(symbol, timeframe)` | Ichimoku cloud analysis | $0.005 |
76
+ | `cashflow(mode, symbol)` | Capital flow data | $0.005 |
77
+ | `coin_info(symbol)` | Stats, price, tags, CMC AI + auto DEX data | $0.025–$0.03 |
78
+ | `dexscreener(contract)` | DEX trading data | $0.005 |
79
+ | `chain_tokens(chain, max_mcap)` | Low-cap tokens on a specific chain | $0.005 |
80
+ | `portfolio` | Abu's curated model portfolio — investment reference | $0.005 |
81
+ | `ask_ai(question)` | AI analyst freeform answer | $0.01 |
82
+ | `indicator_guide(name)` | Reference guide for Asrai-specific indicators | FREE |
74
83
 
75
84
  ## Spend limit
76
85
 
package/bin/asrai.js ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * asrai CLI — call any Asrai tool from bash.
4
+ *
5
+ * Usage:
6
+ * npx -y -p asrai-mcp asrai <tool> [args...]
7
+ *
8
+ * Examples:
9
+ * npx -y -p asrai-mcp asrai ask_ai "What is the BTC outlook?"
10
+ * npx -y -p asrai-mcp asrai technical_analysis BTC 4h
11
+ * npx -y -p asrai-mcp asrai sentiment
12
+ * npx -y -p asrai-mcp asrai forecast ETH
13
+ * npx -y -p asrai-mcp asrai market_overview
14
+ * npx -y -p asrai-mcp asrai coin_info SOL
15
+ * npx -y -p asrai-mcp asrai screener ath
16
+ * npx -y -p asrai-mcp asrai smart_money BTC 1d
17
+ * npx -y -p asrai-mcp asrai elliott_wave BTC 4h
18
+ * npx -y -p asrai-mcp asrai cashflow market
19
+ * npx -y -p asrai-mcp asrai portfolio
20
+ * npx -y -p asrai-mcp asrai channel_summary
21
+ * npx -y -p asrai-mcp asrai indicator_guide ALSAT
22
+ *
23
+ * Requires ASRAI_PRIVATE_KEY in ~/.env or environment.
24
+ */
25
+
26
+ import { config } from 'dotenv';
27
+ import { homedir } from 'os';
28
+ import { join } from 'path';
29
+
30
+ config({ path: join(homedir(), '.env') });
31
+ config();
32
+
33
+ const key = process.env.ASRAI_PRIVATE_KEY?.trim();
34
+
35
+ const [,, tool, ...args] = process.argv;
36
+
37
+ if (!tool) {
38
+ console.error('Usage: asrai <tool> [args...]');
39
+ console.error('Tools: ask_ai, technical_analysis, sentiment, forecast, market_overview,');
40
+ console.error(' coin_info, screener, smart_money, elliott_wave, ichimoku, cashflow,');
41
+ console.error(' dexscreener, chain_tokens, portfolio, channel_summary, indicator_guide');
42
+ process.exit(1);
43
+ }
44
+
45
+ // indicator_guide is free — no key needed
46
+ if (tool !== 'indicator_guide' && !key) {
47
+ console.error('Error: ASRAI_PRIVATE_KEY is not set. Add it to ~/.env');
48
+ process.exit(1);
49
+ }
50
+
51
+ import * as tools from '../src/tools.js';
52
+ import { indicator_guide } from '../src/indicator_guide.js';
53
+
54
+ const allTools = { ...tools, indicator_guide };
55
+ const fn = allTools[tool];
56
+ if (!fn) {
57
+ console.error(`Unknown tool: ${tool}`);
58
+ console.error('Run "asrai" with no arguments to see available tools.');
59
+ process.exit(1);
60
+ }
61
+
62
+ let result;
63
+ try {
64
+ result = await fn(...args);
65
+ } catch (err) {
66
+ console.error(`Error: ${err.message}`);
67
+ process.exit(1);
68
+ }
69
+
70
+ console.log(typeof result === 'string' ? result : JSON.stringify(result, null, 2));
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * asrai-mcp install-skill
4
+ *
5
+ * Auto-installs SKILL.md to detected agent directories.
6
+ * Supports: OpenClaw, Cursor/Cline/.agents/skills, manual fallback.
7
+ *
8
+ * Usage:
9
+ * npx -y -p asrai-mcp install-skill
10
+ */
11
+
12
+ import { existsSync, mkdirSync, copyFileSync } from 'fs';
13
+ import { join, dirname } from 'path';
14
+ import { homedir } from 'os';
15
+ import { fileURLToPath } from 'url';
16
+
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const home = homedir();
19
+
20
+ // Files bundled inside this package
21
+ const SKILL_SRC = join(__dirname, '..', 'skill', 'SKILL.md');
22
+ const ENDPOINTS_SRC = join(__dirname, '..', 'skill', 'references', 'endpoints.md');
23
+
24
+ // Candidate install paths
25
+ const candidates = [
26
+ {
27
+ name: 'OpenClaw',
28
+ path: join(home, '.openclaw', 'workspace', 'skills', 'asrai'),
29
+ detect: join(home, '.openclaw', 'workspace', 'skills'),
30
+ },
31
+ {
32
+ name: 'OpenClaw (alt)',
33
+ path: join(home, '.openclaw', 'skills', 'asrai'),
34
+ detect: join(home, '.openclaw', 'skills'),
35
+ },
36
+ {
37
+ name: 'agents/skills (local)',
38
+ path: join(process.cwd(), '.agents', 'skills', 'asrai'),
39
+ detect: join(process.cwd(), '.agents', 'skills'),
40
+ },
41
+ {
42
+ name: 'agents/skills (home)',
43
+ path: join(home, '.agents', 'skills', 'asrai'),
44
+ detect: join(home, '.agents', 'skills'),
45
+ },
46
+ ];
47
+
48
+ function installTo(destDir, label) {
49
+ mkdirSync(join(destDir, 'references'), { recursive: true });
50
+ copyFileSync(SKILL_SRC, join(destDir, 'SKILL.md'));
51
+ copyFileSync(ENDPOINTS_SRC, join(destDir, 'references', 'endpoints.md'));
52
+ console.log(`✓ Installed to ${label}: ${destDir}`);
53
+ }
54
+
55
+ let installed = 0;
56
+
57
+ for (const c of candidates) {
58
+ if (existsSync(c.detect)) {
59
+ installTo(c.path, c.name);
60
+ installed++;
61
+ }
62
+ }
63
+
64
+ if (installed === 0) {
65
+ console.log('No agent skills directory detected automatically.\n');
66
+ console.log('Manual install options:');
67
+ console.log(' OpenClaw:');
68
+ console.log(` mkdir -p ~/.openclaw/workspace/skills/asrai/references`);
69
+ console.log(` cp ${SKILL_SRC} ~/.openclaw/workspace/skills/asrai/SKILL.md`);
70
+ console.log(` cp ${ENDPOINTS_SRC} ~/.openclaw/workspace/skills/asrai/references/endpoints.md`);
71
+ console.log('');
72
+ console.log(' Or clone the skill repo directly:');
73
+ console.log(' git clone https://github.com/abuzerasr/asrai-skill.git ~/.openclaw/workspace/skills/asrai');
74
+ } else {
75
+ console.log('\nDone. Restart your agent or run "refresh skills" to activate asrai.');
76
+ console.log('\nNext: set ASRAI_PRIVATE_KEY in ~/.env');
77
+ console.log(' echo "ASRAI_PRIVATE_KEY=0x<your_key>" >> ~/.env');
78
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asrai-mcp",
3
- "version": "0.6.0",
3
+ "version": "1.0.0",
4
4
  "description": "Asrai crypto analysis MCP server — pay-per-use via x402 on Base. Zero install: just npx.",
5
5
  "keywords": [
6
6
  "mcp",
@@ -19,11 +19,14 @@
19
19
  "type": "module",
20
20
  "bin": {
21
21
  "asrai-mcp": "./bin/asrai-mcp.js",
22
- "asrai-mcp-server": "./bin/asrai-mcp-server.js"
22
+ "asrai-mcp-server": "./bin/asrai-mcp-server.js",
23
+ "asrai": "./bin/asrai.js",
24
+ "install-skill": "./bin/install-skill.js"
23
25
  },
24
26
  "files": [
25
27
  "bin/",
26
28
  "src/",
29
+ "skill/",
27
30
  "README.md"
28
31
  ],
29
32
  "engines": {
package/skill/SKILL.md ADDED
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: asrai-x402
3
+ description: Crypto market analysis using Asrai API. Covers technical analysis, screeners, sentiment, forecasting, smart money, Elliott Wave, cashflow, DEX data, and AI-powered insights. Each API call costs $0.005 USDC from your own wallet on Base mainnet via x402.
4
+ license: MIT
5
+ metadata: {"openclaw":{"emoji":"📈","requires":{"env":["ASRAI_PRIVATE_KEY"]}},"clawdbot":{"emoji":"📈","requires":{"env":["ASRAI_PRIVATE_KEY"]}}}
6
+ ---
7
+
8
+ # Asrai — Crypto Analysis via x402
9
+
10
+ Use Asrai tools when the user asks about crypto prices, market analysis, trading signals, sentiment, or investment advice.
11
+
12
+ ## When to use
13
+
14
+ - Crypto price / chart / technical analysis → use asrai tools
15
+ - Market sentiment, CBBI, fear/greed → use asrai tools
16
+ - "What should I buy?" / portfolio advice → use `portfolio` tool
17
+ - Elliott Wave, smart money, order blocks → use asrai tools
18
+ - DEX data, low-cap tokens → use asrai tools
19
+ - General knowledge you already know well → answer directly (costs $0.005 per call)
20
+
21
+ ## How to call
22
+
23
+ ### If asrai MCP tools are available (Cursor, Cline, Claude Desktop)
24
+
25
+ Call the appropriate MCP tool directly:
26
+ ```
27
+ technical_analysis(symbol, timeframe)
28
+ sentiment()
29
+ forecast(symbol)
30
+ market_overview()
31
+ ask_ai(question)
32
+ ...
33
+ ```
34
+
35
+ ### If no MCP tool — use bash (OpenClaw and other agents)
36
+
37
+ Use the same tool names via bash:
38
+ ```bash
39
+ npx -y -p asrai-mcp asrai <tool> [args...]
40
+ ```
41
+
42
+ Examples:
43
+ ```bash
44
+ npx -y -p asrai-mcp asrai ask_ai "What is the outlook for BTC today?"
45
+ npx -y -p asrai-mcp asrai technical_analysis BTC 4h
46
+ npx -y -p asrai-mcp asrai sentiment
47
+ npx -y -p asrai-mcp asrai forecast ETH
48
+ npx -y -p asrai-mcp asrai market_overview
49
+ npx -y -p asrai-mcp asrai coin_info SOL
50
+ npx -y -p asrai-mcp asrai portfolio
51
+ npx -y -p asrai-mcp asrai indicator_guide ALSAT
52
+ ```
53
+
54
+ Requires `ASRAI_PRIVATE_KEY` set in `~/.env` or environment. Payment is signed automatically.
55
+
56
+ ## MCP tools
57
+
58
+ | Tool | What it does | Cost |
59
+ |---|---|---|
60
+ | `market_overview` | Trending, gainers/losers, RSI, sentiment, screeners | $0.095 |
61
+ | `technical_analysis(symbol, timeframe)` | Signals, ALSAT, SuperALSAT, Elliott Wave, Ichimoku | $0.06 |
62
+ | `sentiment` | CBBI, CMC sentiment, AI insights | $0.015 |
63
+ | `forecast(symbol)` | AI price forecast | $0.005 |
64
+ | `screener(type)` | Find coins by criteria | $0.005 |
65
+ | `smart_money(symbol, timeframe)` | Order blocks, FVGs, support/resistance | $0.01 |
66
+ | `elliott_wave(symbol, timeframe)` | Elliott Wave analysis | $0.005 |
67
+ | `ichimoku(symbol, timeframe)` | Ichimoku cloud | $0.005 |
68
+ | `cashflow(mode, symbol)` | Capital flow | $0.005 |
69
+ | `coin_info(symbol)` | Stats, price, CMC AI, DEX data | $0.025–$0.03 |
70
+ | `dexscreener(contract)` | DEX data | $0.005 |
71
+ | `chain_tokens(chain, max_mcap)` | Low-cap tokens on chain | $0.005 |
72
+ | `portfolio` | Abu's curated model portfolio | $0.005 |
73
+ | `channel_summary` | Latest narratives | $0.005 |
74
+ | `ask_ai(question)` | AI analyst answer | $0.01 |
75
+ | `indicator_guide(name)` | Guide for custom indicators | FREE |
76
+
77
+ ## Output rules
78
+
79
+ - Write like an experienced trader explaining to a friend — conversational, confident, direct
80
+ - Think like both a trader AND a long-term investor. Default to investor mode. Switch to trader mode only when user asks for entries
81
+ - Keep responses 200–400 words. Short lines, breathing room between sections
82
+ - Never list raw indicator values — synthesize into plain language verdict
83
+ - End with 1 clear action bias: accumulate / wait / avoid — and why
84
+ - Never mention tool names, API calls, or payment details in responses
85
+
86
+ ## Cost
87
+
88
+ $0.005 USDC per call (most tools), $0.01 for `ask_ai`, FREE for `indicator_guide`. Signed from the user's own wallet on Base mainnet. Tell the user if they ask.
@@ -0,0 +1,82 @@
1
+ # Asrai x402 Endpoints
2
+
3
+ ## Base URL
4
+ `https://x402.asrai.me`
5
+
6
+ ## Payment
7
+ x402 automatic — $0.005 USDC per endpoint on Base mainnet ($0.01 for `/ai`)
8
+
9
+ ## Endpoint Catalog
10
+
11
+ ### Market Pulse
12
+ - `GET /api/trending/` — trending coins
13
+ - `GET /api/gainers-losers/` — top gainers and losers
14
+ - `GET /api/rsi/` — RSI extremes (overbought/oversold)
15
+ - `GET /api/top-bottom/` — top/bottom signals
16
+ - `GET /api/ath/` — coins near all-time high
17
+ - `GET /api/channel-summary/` — latest narratives from monitored channels
18
+
19
+ ### Sentiment
20
+ - `GET /api/cbbi/` — Bitcoin cycle index
21
+ - `GET /api/cmc-sentiment/` — CMC market sentiment
22
+ - `GET /api/cmcai/` — CMC AI insights
23
+ - `GET /api/cmcai/<symbol>` — CMC AI for specific coin
24
+
25
+ ### Technical Signals (single coin)
26
+ - `GET /api/signal/<symbol>usdt/1D|4H|1W` — buy/sell signal
27
+ - `GET /api/alsat/<symbol>usdt/1D|4H|1W` — ALSAT indicator
28
+ - `GET /api/superalsat/<symbol>usdt` — SuperALSAT
29
+ - `GET /api/alphatrend/<symbol>usdt/1D|4H|1W` — AlphaTrend
30
+ - `GET /api/psar/<symbol>usdt/1D|4H|1W` — Parabolic SAR
31
+ - `GET /api/macd-dema/<symbol>usdt/1D|4H|1W` — MACD + DEMA
32
+ - `GET /api/td/<symbol>usdt/1D|4H|1W` — Tom DeMark sequential
33
+ - `GET /api/ichimoku/<symbol>usdt/1D|4H|1W` — Ichimoku cloud
34
+ - `GET /api/ew/<symbol>usdt/1D|4H|1W` — Elliott Wave
35
+ - `GET /api/smartmoney/<symbol>usdt/1D|4H|1W` — SMC (order blocks, FVG, BOS)
36
+ - `GET /api/support-resistance/<symbol>usdt/1D|4H|1W` — support/resistance levels
37
+ - `GET /api/forecasting/<symbol>usdt` — AI price forecast
38
+
39
+ ### Screeners
40
+ - `GET /api/ichimoku-trend/`
41
+ - `GET /api/sar-coins/`
42
+ - `GET /api/macd-coins/`
43
+ - `GET /api/emacross/`
44
+ - `GET /api/techrating/`
45
+ - `GET /api/vwap/`
46
+ - `GET /api/volume/`
47
+ - `GET /api/highvolumelowcap/`
48
+ - `GET /api/bounce-dip/`
49
+ - `GET /api/galaxyscore/`
50
+ - `GET /api/socialdominance/`
51
+ - `GET /api/late-unlocked-coins/`
52
+ - `GET /api/rsi/` — RSI heatmap
53
+ - `GET /api/ao/` — Awesome Oscillator screener
54
+
55
+ ### Coin Info
56
+ - `GET /api/coinstats/<symbol>` — market cap, volume, supply
57
+ - `GET /api/info/<symbol>` — project info
58
+ - `GET /api/price/<symbol>` — current price
59
+ - `GET /api/tags/<symbol>` — coin tags/categories
60
+
61
+ ### Cashflow
62
+ - `GET /api/cashflow/market` — market-wide capital flow
63
+ - `GET /api/cashflow/coin/<symbol>` — flow for one coin
64
+ - `GET /api/cashflow/group/<symbols_csv>` — flow for group of coins
65
+
66
+ ### Chain / DEX
67
+ - `GET /api/dexscreener/<contract_address>` — DEX data by contract
68
+ - `GET /api/dexscreener/<chain>/<contract_address>` — DEX data by chain + contract
69
+ - `GET /api/chain/<chain>/<max_mcap>` — low-cap tokens on a chain
70
+
71
+ ### Portfolio
72
+ - `GET /api/portfolio/` — full portfolio
73
+ - `GET /api/portfolio/<symbol>` — portfolio for specific coin
74
+
75
+ ### AI
76
+ - `POST /ai` body: `{"message": "<question>"}` — AI analyst ($0.01)
77
+
78
+ ## Macro signals
79
+ - `GET /api/signal/btc.d/1D` — BTC dominance
80
+ - `GET /api/signal/others.d/1D` — altcoin dominance
81
+ - `GET /api/signal/spx/1D` — S&P 500
82
+ - `GET /api/signal/ndq/1D` — Nasdaq
@@ -35,6 +35,23 @@ export const SENTIMENT_ENDPOINTS = [
35
35
  "/api/cbbi/",
36
36
  "/api/cmc-sentiment/",
37
37
  "/api/cmcai/",
38
+ "/api/channel-summary/",
39
+ "/api/galaxyscore/",
40
+ "/api/socialdominance/",
41
+ ];
42
+
43
+ export const TOP_BOTTOM_ENDPOINTS = [
44
+ "/api/rsi/",
45
+ "/api/top-bottom/",
46
+ "/api/bounce-dip/",
47
+ ];
48
+
49
+ export const TRADE_SIGNALS_ENDPOINTS = [
50
+ "/api/trending/",
51
+ "/api/gainers-losers/",
52
+ "/api/bounce-dip/",
53
+ "/api/sar-coins/",
54
+ "/api/macd-coins/",
38
55
  ];
39
56
 
40
57
  // ── Dynamic endpoint builders (return arrays) ─────────────────────────────────
@@ -73,6 +90,20 @@ export function coinInfoEndpoints(s) {
73
90
  ];
74
91
  }
75
92
 
93
+ export function dominanceEndpoints() {
94
+ return [
95
+ "/api/signal/btc.d/1D",
96
+ "/api/signal/others.d/1D",
97
+ ];
98
+ }
99
+
100
+ export function macroEndpoints() {
101
+ return [
102
+ "/api/signal/spx/1D",
103
+ "/api/signal/ndq/1D",
104
+ ];
105
+ }
106
+
76
107
  // ── Screener valid types ──────────────────────────────────────────────────────
77
108
 
78
109
  export const SCREENER_TYPES = [
@@ -98,15 +129,55 @@ export function createHandlers(_get, _gather) {
98
129
  return JSON.stringify(await _gather(...MARKET_OVERVIEW_ENDPOINTS), null, 2);
99
130
  },
100
131
 
101
- async technical_analysis(symbol, timeframe = "1D") {
102
- const s = sym(symbol);
103
- return JSON.stringify(await _gather(...technicalAnalysisEndpoints(s, timeframe)), null, 2);
132
+ async trending() {
133
+ return JSON.stringify(await _get("/api/trending/"), null, 2);
134
+ },
135
+
136
+ async gainers_losers() {
137
+ return JSON.stringify(await _get("/api/gainers-losers/"), null, 2);
138
+ },
139
+
140
+ async top_bottom() {
141
+ return JSON.stringify(await _gather(...TOP_BOTTOM_ENDPOINTS), null, 2);
142
+ },
143
+
144
+ async volume_spikes() {
145
+ return JSON.stringify(await _get("/api/volume/"), null, 2);
146
+ },
147
+
148
+ async high_volume_low_cap() {
149
+ return JSON.stringify(await _get("/api/highvolumelowcap/"), null, 2);
150
+ },
151
+
152
+ async ath_tracker() {
153
+ return JSON.stringify(await _get("/api/ath/"), null, 2);
154
+ },
155
+
156
+ async dominance() {
157
+ return JSON.stringify(await _gather(...dominanceEndpoints()), null, 2);
158
+ },
159
+
160
+ async macro() {
161
+ return JSON.stringify(await _gather(...macroEndpoints()), null, 2);
104
162
  },
105
163
 
106
164
  async sentiment() {
107
165
  return JSON.stringify(await _gather(...SENTIMENT_ENDPOINTS), null, 2);
108
166
  },
109
167
 
168
+ async late_unlocked_coins() {
169
+ return JSON.stringify(await _get("/api/late-unlocked-coins/"), null, 2);
170
+ },
171
+
172
+ async trade_signals() {
173
+ return JSON.stringify(await _gather(...TRADE_SIGNALS_ENDPOINTS), null, 2);
174
+ },
175
+
176
+ async technical_analysis(symbol, timeframe = "1D") {
177
+ const s = sym(symbol);
178
+ return JSON.stringify(await _gather(...technicalAnalysisEndpoints(s, timeframe)), null, 2);
179
+ },
180
+
110
181
  async forecast(symbol) {
111
182
  return JSON.stringify(await _get(`/api/forecasting/${sym(symbol)}usdt`), null, 2);
112
183
  },
@@ -166,9 +237,5 @@ export function createHandlers(_get, _gather) {
166
237
  const path = symbol ? `/api/portfolio/${symbol.toLowerCase()}` : "/api/portfolio/";
167
238
  return JSON.stringify(await _get(path), null, 2);
168
239
  },
169
-
170
- async channel_summary() {
171
- return JSON.stringify(await _get("/api/channel-summary/"), null, 2);
172
- },
173
240
  };
174
241
  }
@@ -9,14 +9,95 @@ export const TOOLS = [
9
9
  {
10
10
  name: "market_overview",
11
11
  description:
12
- "Get current crypto market pulse: trending coins, gainers/losers, RSI extremes, top/bottom signals. " +
13
- "Use for general market questions like 'what's moving today' or 'give me a market brief'.",
12
+ "Full broad market brief: trending, gainers/losers, RSI, cashflow, sentiment, screeners, volume. " +
13
+ "Use ONLY when a complete market overview is requested (e.g. 'give me a full market brief', 'morning report'). " +
14
+ "For single-topic questions use the specific granular tools instead.",
15
+ inputSchema: { type: "object", properties: {}, required: [] },
16
+ },
17
+ {
18
+ name: "trending",
19
+ description:
20
+ "Get currently trending coins. " +
21
+ "Use for: 'what's trending', 'what's hot right now', 'which coins are trending'.",
22
+ inputSchema: { type: "object", properties: {}, required: [] },
23
+ },
24
+ {
25
+ name: "gainers_losers",
26
+ description:
27
+ "Get top gainers and losers. " +
28
+ "Use for: 'biggest movers today', 'top gainers', 'what pumped/dumped'.",
29
+ inputSchema: { type: "object", properties: {}, required: [] },
30
+ },
31
+ {
32
+ name: "top_bottom",
33
+ description:
34
+ "Get RSI extremes, top/bottom signals, and bounce/dip candidates. " +
35
+ "Use for: 'overbought/oversold coins', 'dip opportunities', 'bounce candidates', 'RSI extremes'.",
36
+ inputSchema: { type: "object", properties: {}, required: [] },
37
+ },
38
+ {
39
+ name: "volume_spikes",
40
+ description:
41
+ "Get coins with unusually high volume. " +
42
+ "Use for: 'high volume coins', 'volume anomalies', 'volume spikes today'.",
43
+ inputSchema: { type: "object", properties: {}, required: [] },
44
+ },
45
+ {
46
+ name: "high_volume_low_cap",
47
+ description:
48
+ "Get low market cap coins with high volume (hidden gems). " +
49
+ "Use for: 'low cap movers', 'hidden gems', 'small caps with volume'.",
50
+ inputSchema: { type: "object", properties: {}, required: [] },
51
+ },
52
+ {
53
+ name: "ath_tracker",
54
+ description:
55
+ "Get coins near or at their all-time high. " +
56
+ "Use for: 'coins near ATH', 'all-time high coins', 'breaking ATH'.",
57
+ inputSchema: { type: "object", properties: {}, required: [] },
58
+ },
59
+ {
60
+ name: "dominance",
61
+ description:
62
+ "Get BTC dominance and altcoin dominance signals. " +
63
+ "Use for: 'BTC dominance', 'altseason?', 'is alt season coming', 'dominance trend'.",
64
+ inputSchema: { type: "object", properties: {}, required: [] },
65
+ },
66
+ {
67
+ name: "macro",
68
+ description:
69
+ "Get S&P 500 and Nasdaq signals to understand global market context. " +
70
+ "Use for: 'global market mood', 'S&P/Nasdaq today', 'risk-on/risk-off', 'macro situation', 'traditional markets'.",
71
+ inputSchema: { type: "object", properties: {}, required: [] },
72
+ },
73
+ {
74
+ name: "sentiment",
75
+ description:
76
+ "Get full market sentiment: CBBI cycle index, CMC sentiment, CMC AI market insights, " +
77
+ "channel news summaries, Galaxy Score, and social dominance. " +
78
+ "Use for: 'market mood', 'fear/greed', 'cycle position', 'social buzz', 'what are people saying', " +
79
+ "'crypto news', 'social reactions', 'community sentiment'.",
80
+ inputSchema: { type: "object", properties: {}, required: [] },
81
+ },
82
+ {
83
+ name: "late_unlocked_coins",
84
+ description:
85
+ "Get coins with recent vesting unlocks that have low remaining selling pressure. " +
86
+ "Use for: 'less selling pressure', 'post-unlock coins', 'vesting unlocks', 'which coins finished unlocking'.",
87
+ inputSchema: { type: "object", properties: {}, required: [] },
88
+ },
89
+ {
90
+ name: "trade_signals",
91
+ description:
92
+ "Get actionable trade setups: trending coins, top movers, bounce/dip candidates, SAR and MACD signals. " +
93
+ "Combines momentum context with technical entry signals to find good position-opening opportunities. " +
94
+ "Use for: 'coins with good entry points', 'trade opportunity', 'coins with buy signals', 'trade setups'.",
14
95
  inputSchema: { type: "object", properties: {}, required: [] },
15
96
  },
16
97
  {
17
98
  name: "technical_analysis",
18
99
  description:
19
- "Get full technical analysis for a specific coin: signal, ALSAT, SuperALSAT, PSAR, MACD-DEMA, AlphaTrend. " +
100
+ "Get full technical analysis for a specific coin: signal, ALSAT (top and bottom), SuperALSAT (approved top and bottom), PSAR, MACD-DEMA, AlphaTrend (trend indicator), Elliot Wave , TD(trend reversal tom demark), SMC(Smart money), SR(support and resistance), Ichimoku " +
20
101
  "Use when asked about TA, buy/sell signals, or indicators for a coin.",
21
102
  inputSchema: {
22
103
  type: "object",
@@ -27,13 +108,6 @@ export const TOOLS = [
27
108
  required: ["symbol"],
28
109
  },
29
110
  },
30
- {
31
- name: "sentiment",
32
- description:
33
- "Get market sentiment: CBBI (crypto bull/bear index), CMC sentiment, CMC AI insights. " +
34
- "Use for questions about market mood, fear/greed, or cycle position.",
35
- inputSchema: { type: "object", properties: {}, required: [] },
36
- },
37
111
  {
38
112
  name: "forecast",
39
113
  description: "Get AI-powered 3-7 day price forecast for a coin: direction, confidence, price targets.",
@@ -173,11 +247,6 @@ export const TOOLS = [
173
247
  required: [],
174
248
  },
175
249
  },
176
- {
177
- name: "channel_summary",
178
- description: "Get a summary of latest crypto narratives and discussions from monitored channels.",
179
- inputSchema: { type: "object", properties: {}, required: [] },
180
- },
181
250
  {
182
251
  name: "indicator_guide",
183
252
  description: