@0xprotovox/deficlaw 0.4.1 → 0.6.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,291 +1,286 @@
1
+ [![npm version](https://img.shields.io/npm/v/@0xprotovox/deficlaw.svg)](https://www.npmjs.com/package/@0xprotovox/deficlaw)
2
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
3
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org)
4
+ [![MCP](https://img.shields.io/badge/MCP-compatible-purple.svg)](https://modelcontextprotocol.io)
5
+
1
6
  # deficlaw
2
7
 
3
8
  **The first open-source DeFi MCP server for Claude Code.**
4
9
 
5
- Analyze any Solana token in seconds. Holder intelligence, risk scoring, smart money tracking, KOL detection. Zero API keys required.
10
+ Analyze any token in seconds. Holder intelligence, risk scoring, smart money tracking, KOL detection, slippage estimation, contract security. Zero API keys required.
6
11
 
7
12
  ```
8
- > "analyze token 3oQwNvAfZMuPWjVPC12ukY7RPA9JiGwLod6Pr4Lkpump"
13
+ > "analyze Jupiter token"
9
14
 
10
- === SUMMARY ===
11
- POKE6900 is a 9mo old PumpSwap token with $25.9K liquidity and $34.5K market cap.
12
- 53 diamond hands (53.0%), strong holder conviction.
13
- Only 18.0% of holders are in profit, most are underwater with avg loss of $844 per wallet.
14
- Buy pressure is strong at 3.3:1 ratio (1093 buys vs 395 sells), accumulation phase.
15
+ JUP is a 2.2y old Meteora token with $1.2M liquidity and $525.1M market cap.
16
+ Top 5 wallets control 61.5% of supply, very concentrated.
17
+ 30 diamond hands among holders, decent conviction.
15
18
  Contract looks safe: mint and freeze authorities revoked.
16
- Lower risk profile based on available data.
19
+ 10 KOLs tracked: 5 holding, 5 selling.
20
+
21
+ Risk: 18/100 [LOW]
22
+ VERDICT: NEUTRAL — Mixed signals: 2 bull vs 2 bear.
23
+ Sources: dexscreener + gmgn + solana-rpc | 1.1s
17
24
  ```
18
25
 
19
26
  ## Why deficlaw?
20
27
 
21
28
  Claude Code can write code, fix bugs, deploy apps. But ask it "what's the price of BONK?" and it says *"I don't have real-time data."*
22
29
 
23
- **deficlaw fixes that.** It gives Claude Code real-time access to DeFi data across Solana and 10+ chains.
30
+ **deficlaw fixes that.** 9 tools, 3 data sources, zero config.
24
31
 
25
- - **Token Analysis** with holder intelligence, risk scoring, KOL tracking
26
- - **Token Search** by name or symbol across all chains
27
- - **New Launches** detection with age, mcap, liquidity data
28
- - **Real-time Prices** from DexScreener across all major chains
29
- - **Trending Tokens** with volume, liquidity, and boost data
30
- - **Top Traders** showing who made and lost money on any token
31
- - **Contract Security** checking mint/freeze authority on Solana
32
- - **Actionable Verdicts** (BUY/SELL/NEUTRAL/AVOID) based on combined data signals
33
- - **~1.5 second** full analysis (not 11 seconds like browser-based scrapers)
34
- - **Zero config** - no API keys, no wallets, no accounts needed
32
+ | Feature | Details |
33
+ |---------|---------|
34
+ | **Token Analysis** | Holder intelligence, risk scoring, KOL tracking, actionable verdicts |
35
+ | **Real-time Prices** | Sub-second lookups across Solana, Ethereum, Base, BSC, Arbitrum |
36
+ | **Trending Tokens** | Volume, liquidity, and boost data from DexScreener |
37
+ | **New Launches** | Recently created tokens with age, mcap, liquidity |
38
+ | **Top Traders** | Who made and lost money on any token with PnL breakdown |
39
+ | **Token Search** | Find any token by name or symbol across all chains |
40
+ | **Slippage Estimation** | Jupiter-based price impact for $50-$1000 buys |
41
+ | **Token Comparison** | Side-by-side analysis of two tokens |
42
+ | **Contract Security** | Mint/freeze authority, supply checks on Solana |
35
43
 
36
44
  ## Install
37
45
 
38
- ### Option A: npm (recommended)
39
-
40
46
  ```bash
41
47
  npm install -g @0xprotovox/deficlaw
42
48
  claude mcp add defi -- deficlaw
43
49
  ```
44
50
 
45
- ### Option B: From source
51
+ That's it. No API keys, no config files, no accounts needed.
52
+
53
+ <details>
54
+ <summary>Install from source</summary>
46
55
 
47
56
  ```bash
48
57
  git clone https://github.com/0xprotovox/deficlaw.git
49
- cd deficlaw
50
- npm install && npm run build
58
+ cd deficlaw && npm install && npm run build
51
59
  claude mcp add defi -- node /path/to/deficlaw/dist/index.js
52
60
  ```
61
+ </details>
53
62
 
54
- That's it. No API keys, no config files, no accounts needed.
63
+ ## Quick Start
55
64
 
56
- ## Quick Start Guide
65
+ Once installed, just type naturally in Claude Code:
57
66
 
58
- Once installed, open Claude Code and try these commands. Just type naturally:
59
-
60
- ### Check a token price (fastest, ~300ms)
67
+ ### Prices (fastest, ~50ms cached / ~300ms first call)
61
68
  ```
62
69
  > what's the price of BONK?
63
70
  > price of JUP
64
71
  > how much is SOL right now?
65
72
  ```
66
73
 
67
- ### Quick token scan (~350ms, no holder data)
68
- ```
69
- > quick analyze So11111...
70
- > give me a quick look at this token: 3oQw...pump
71
- ```
72
-
73
- ### Full deep analysis (~1.5s, with holders + risk + verdict)
74
+ ### Full Analysis (~1.1s with holders + risk + verdict)
74
75
  ```
75
- > analyze token 3oQwNvAfZMuPWjVPC12ukY7RPA9JiGwLod6Pr4Lkpump
76
- > deep analyze JUP token
76
+ > analyze token JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN
77
+ > deep analyze BONK
77
78
  > is this token safe? EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
78
79
  ```
79
80
 
80
- ### Compact analysis (small response, top 5 holders only)
81
+ ### Quick Scan (~350ms, price + risk only, no holders)
81
82
  ```
82
- > compact analyze 3oQw...pump
83
- > give me a brief analysis of BONK
83
+ > quick analyze So11111...
84
+ > give me a quick look at this token
84
85
  ```
85
86
 
86
- ### Search tokens by name
87
+ ### Search, Trending, New Launches
87
88
  ```
88
89
  > search for BONK
89
- > find tokens named "dog"
90
- > search Jupiter token
91
- ```
92
-
93
- ### Trending tokens
94
- ```
95
90
  > what's trending on solana?
96
- > show me trending tokens on ethereum
97
- > top tokens on base right now
91
+ > show new launches on solana in the last 30 minutes
98
92
  ```
99
93
 
100
- ### New launches
94
+ ### Top Traders & Comparison
101
95
  ```
102
- > show new launches on solana in the last 30 minutes
103
- > any new tokens launched in the last hour?
96
+ > who profited on this token?
97
+ > compare JUP vs BONK
104
98
  ```
105
99
 
106
- ### Who made money?
100
+ ### Slippage & Security
107
101
  ```
108
- > who profited on this token: 3oQw...pump?
109
- > show me top traders on JUP
110
- > who lost money on BONK?
102
+ > estimate slippage for buying this token
103
+ > is this token contract safe?
111
104
  ```
112
105
 
113
- ### Pro tips
114
- - Use **quick mode** for fast scans when you just need price + risk
115
- - Use **compact mode** when you want holder data but don't need the full 20-holder table
116
- - **Paste any Solana token address** and ask "is this safe?" for instant security + risk check
117
- - Chain commands: "analyze this token and tell me if I should buy it"
118
- - Works with **any chain** for prices: solana, ethereum, base, bsc, arbitrum
119
-
120
- ## Tools
106
+ ## Tools Reference
121
107
 
122
108
  ### `analyze_token`
123
109
 
124
110
  Full token analysis with holder intelligence, risk scoring, and human-readable summary.
125
111
 
126
- **Input:**
127
112
  | Parameter | Type | Default | Description |
128
113
  |-----------|------|---------|-------------|
129
- | `address` | string | required | Token contract address |
114
+ | `address` | string | *required* | Token contract address |
130
115
  | `chain` | string | `"solana"` | Blockchain (solana, ethereum, bsc, base, arbitrum) |
131
116
  | `include_holders` | boolean | `true` | Include GMGN holder analysis |
117
+ | `quick` | boolean | `false` | Quick mode: skip holders, price/market/risk only (<1s) |
118
+ | `compact` | boolean | `false` | Compact response: summary, price, risk, top 5 holders only |
132
119
 
133
- **Output includes:**
134
- - Token info (name, symbol, age, socials)
135
- - Price with 5m/1h/6h/24h changes
136
- - Market data (mcap, fdv, volume, liquidity, vol/liq ratio)
137
- - Contract security (mint authority, freeze authority, supply)
138
- - Risk score (0-100) with detailed flags
139
- - Holder concentration (top 5/10/20)
140
- - Holder categories (diamond hands, snipers, KOLs, fresh wallets, insiders)
141
- - Buy/sell pressure ratio
142
- - Sentiment (profitable vs underwater holders, avg PnL)
143
- - Dev wallet detection and status
144
- - Top 20 holders table with PnL and tags
145
- - KOL list with Twitter handles
146
- - Human-readable summary with actionable insights
120
+ **Returns:** Token info, price (5m/1h/6h/24h), market data (mcap, fdv, volume, liquidity), contract security, risk score (0-100), holder concentration, holder categories (diamond hands, snipers, KOLs, fresh wallets, insiders, smart money), buy/sell pressure, dev wallet status, top 20 holders with PnL, KOL list, socials, actionable verdict (BUY/SELL/NEUTRAL/AVOID).
147
121
 
148
- ### `search_token`
122
+ ### `get_price`
149
123
 
150
- Search for tokens by name or symbol. Returns top matches across all chains.
124
+ Sub-second price lookup. Accepts both addresses and name/symbol searches.
151
125
 
152
- ```
153
- > "search for BONK"
126
+ | Parameter | Type | Default | Description |
127
+ |-----------|------|---------|-------------|
128
+ | `token` | string | *required* | Token address or search query |
129
+ | `chain` | string | `"solana"` | Blockchain |
154
130
 
155
- Results:
156
- 1. Bonk (BONK) -- solana -- $0.000024 -- $1.8B mcap
157
- 2. BonkBot (BONK) -- ethereum -- $0.00001 -- $2M mcap
158
- ```
131
+ ### `search_token`
132
+
133
+ Search tokens by name or symbol across all chains.
159
134
 
160
- **Input:**
161
135
  | Parameter | Type | Default | Description |
162
136
  |-----------|------|---------|-------------|
163
- | `query` | string | required | Token name or symbol |
137
+ | `query` | string | *required* | Token name or symbol (e.g. "BONK", "Jupiter") |
164
138
  | `chain` | string | all | Filter by chain |
165
139
  | `limit` | number | `10` | Results to return (1-20) |
166
140
 
167
- ### `get_new_launches`
141
+ ### `get_trending`
168
142
 
169
- Get recently created tokens on a blockchain, sorted by creation time.
143
+ Trending and boosted tokens with price enrichment.
170
144
 
171
- ```
172
- > "new launches on solana last 30 minutes"
145
+ | Parameter | Type | Default | Description |
146
+ |-----------|------|---------|-------------|
147
+ | `chain` | string | `"solana"` | Blockchain |
148
+ | `limit` | number | `20` | Number of tokens (1-50) |
173
149
 
174
- 1. NEWTOKEN -- 12m old -- $0.001 -- $50K mcap -- $15K liq
175
- 2. LAUNCH2 -- 25m old -- $0.0005 -- $20K mcap -- $8K liq
176
- ```
150
+ ### `get_new_launches`
151
+
152
+ Recently created tokens sorted by creation time.
177
153
 
178
- **Input:**
179
154
  | Parameter | Type | Default | Description |
180
155
  |-----------|------|---------|-------------|
181
156
  | `chain` | string | `"solana"` | Blockchain |
182
157
  | `max_age_minutes` | number | `60` | Max token age in minutes (5-1440) |
183
158
  | `limit` | number | `20` | Tokens to return (1-50) |
184
159
 
185
- ### `get_price`
186
-
187
- Quick price lookup. Sub-second response. Supports both token addresses and name/symbol search.
188
-
189
- ```
190
- > "price of So11111112222..."
191
-
192
- BONK -- $0.000024 (+5.2% 24h)
193
- Volume: $142M | Liquidity: $12M | MCap: $1.8B
194
- ```
195
-
196
- ### `get_trending`
197
-
198
- Trending and boosted tokens on any chain.
199
-
200
- ```
201
- > "trending tokens on solana"
202
-
203
- 1. BONK -- $0.000024 (+12%) -- $142M volume
204
- 2. WIF -- $0.89 (-2.1%) -- $89M volume
205
- 3. JUP -- $0.94 (+3.5%) -- $45M volume
206
- ...
207
- ```
208
-
209
160
  ### `get_top_traders`
210
161
 
211
- Who made and lost money on a token. Winners, losers, PnL, tags.
162
+ Who made and lost money on a token. Shows winners and losers with PnL, tags, and Twitter handles.
212
163
 
213
- ```
214
- > "who profited on this token?"
164
+ | Parameter | Type | Default | Description |
165
+ |-----------|------|---------|-------------|
166
+ | `address` | string | *required* | Token contract address |
167
+ | `limit` | number | `10` | Number of top winners/losers (1-50) |
215
168
 
216
- Top Winners:
217
- 1. CR5N... -- +$680 (+124%) still holding
218
- 2. EsRB... -- +$166 (+16%) diamond hands
169
+ ### `estimate_slippage`
219
170
 
220
- Top Losers:
221
- 1. BgeeV... -- -$7,548 (-65%) diamond hands (!)
222
- 2. 5vqid... -- -$5,420 (-50%) gmgn user
223
- ```
171
+ Jupiter-based price impact estimation for $50, $100, $500, $1000 buys. Solana only.
224
172
 
225
- ## Data Sources
173
+ | Parameter | Type | Default | Description |
174
+ |-----------|------|---------|-------------|
175
+ | `address` | string | *required* | Solana token mint address |
226
176
 
227
- All free, no API keys required:
177
+ ### `compare_tokens`
228
178
 
229
- | Source | Data | Speed |
230
- |--------|------|-------|
231
- | **DexScreener** | Prices, volume, liquidity, pairs, trending | <0.5s |
232
- | **GMGN** | Holders, tags, KOLs, PnL, dev wallet, snipers | ~1s |
233
- | **Solana RPC** | Mint authority, freeze authority, supply | <0.5s |
179
+ Side-by-side comparison of two tokens: price, mcap, volume, liquidity, age, holders.
234
180
 
235
- **Total analysis time: ~1.5 seconds**
181
+ | Parameter | Type | Default | Description |
182
+ |-----------|------|---------|-------------|
183
+ | `address_a` | string | *required* | First token address |
184
+ | `address_b` | string | *required* | Second token address |
185
+ | `chain` | string | `"solana"` | Blockchain |
236
186
 
237
- ## Supported Chains
187
+ ### `get_token_security`
238
188
 
239
- Prices and trending work on all DexScreener chains:
189
+ Quick contract security check. Solana only.
240
190
 
241
- Solana, Ethereum, Base, BSC, Arbitrum, Polygon, Avalanche, Optimism, Fantom, and more.
191
+ | Parameter | Type | Default | Description |
192
+ |-----------|------|---------|-------------|
193
+ | `address` | string | *required* | Solana token mint address |
242
194
 
243
- Holder analysis (GMGN) currently supports **Solana** tokens.
195
+ **Returns:** Mint authority status, freeze authority status, total supply, decimals, and a SAFE/CAUTION/DANGEROUS verdict.
244
196
 
245
- ## Risk Scoring
197
+ ## Architecture
246
198
 
247
- The risk scorer analyzes 8 dimensions to produce a 0-100 score:
199
+ ```
200
+ Claude Code
201
+ |
202
+ | MCP stdio
203
+ v
204
+ +------------------+
205
+ | deficlaw |
206
+ | MCP Server |
207
+ | |
208
+ | +-- Cache ----+ | +--------------+
209
+ | | TTL-based | | ---> | DexScreener | prices, volume,
210
+ | | in-memory | | | (free API) | liquidity, pairs
211
+ | +-------------+ | +--------------+
212
+ | |
213
+ | +-- Risk ----+ | +--------------+
214
+ | | 8-dimension | | ---> | GMGN | holders, KOLs,
215
+ | | scorer | | | (curl/PW) | tags, PnL
216
+ | +-------------+ | +--------------+
217
+ | |
218
+ | +-- Summary --+ | +--------------+
219
+ | | Rule-based | | ---> | Solana RPC | mint/freeze auth,
220
+ | | generator | | | (free) | supply, LP detect
221
+ | +-------------+ | +--------------+
222
+ | |
223
+ | +-- Jupiter --+ | +--------------+
224
+ | | Quote API | | ---> | Jupiter | slippage quotes,
225
+ | | client | | | (free API) | route planning
226
+ | +-------------+ | +--------------+
227
+ +------------------+
228
+ ```
229
+
230
+ **Key design decisions:**
231
+ - **curl-based GMGN fetcher** bypasses Cloudflare TLS fingerprinting (Playwright fallback if curl is blocked)
232
+ - **TTL-based in-memory cache** with automatic cleanup prevents rate limiting and keeps responses fast
233
+ - **Rate limiter** with exponential backoff and retry logic for DexScreener (200ms min interval)
234
+ - **Parallel fetching** where possible (holders + security run simultaneously)
235
+ - **All free APIs**, no keys needed
236
+
237
+ ## Performance
238
+
239
+ Benchmarked on real tokens (BONK), averaged across multiple runs:
240
+
241
+ | Operation | Time | Notes |
242
+ |-----------|------|-------|
243
+ | `get_price` | ~54ms | Cached: near-instant |
244
+ | `search_token` | ~340ms | DexScreener search API |
245
+ | `analyze_token` (quick) | ~410ms | Price + market + risk, no holders |
246
+ | `analyze_token` (full) | ~1.1-1.5s | All sources: DexScreener + GMGN + Solana RPC |
247
+ | `get_token_security` | ~300ms | Single Solana RPC call |
248
+ | `estimate_slippage` | ~500ms | 4 Jupiter quotes in parallel |
248
249
 
249
- | Dimension | Max Points | What it checks |
250
- |-----------|-----------|----------------|
251
- | Liquidity | 22 | Pool depth in USD |
252
- | Token Age | 10 | Time since creation |
253
- | Volume Anomalies | 8 | Wash trading signals, vol/mcap ratio |
254
- | Holder Concentration | 18 | Top 10 holder % |
255
- | Dev Wallet | 15 | Dev holdings and selling behavior |
256
- | Fresh Wallets | 12 | New wallet % (possible wash/bundle) |
257
- | Sniper Activity | 10 | Bot/sniper wallets in top holders |
258
- | Contract Security | 5 | Mint/freeze authority status |
250
+ ## Risk Scoring
259
251
 
260
- **Levels:** LOW (0-19) | MEDIUM (20-44) | HIGH (45-69) | CRITICAL (70-100)
252
+ The composite risk scorer analyzes **8 dimensions** to produce a 0-100 score:
261
253
 
262
- ## Architecture
254
+ | # | Dimension | Max Points | What It Checks |
255
+ |---|-----------|-----------|----------------|
256
+ | 1 | **Liquidity** | 22 | Pool depth in USD. <$1K = critical, <$5K = extreme, <$25K = high |
257
+ | 2 | **Token Age** | 10 | Time since pair creation. <1h = critical, <6h = high, <24h = medium |
258
+ | 3 | **Volume Anomalies** | 8 | Vol/mcap ratio for wash trading signals. >5x = suspicious |
259
+ | 4 | **Holder Concentration** | 18 | Top 10 holder supply %. >60% = critical, >40% = high |
260
+ | 5 | **Dev Wallet** | 15 | Dev holdings % and selling behavior. >20% = rug risk |
261
+ | 6 | **Fresh Wallets** | 12 | New wallet % among holders. >40% = likely bundled/wash |
262
+ | 7 | **Sniper Activity** | 10 | Bot/sniper/sandwich wallets in top holders |
263
+ | 8 | **Contract Security** | 5 | Mint authority (3pts) + freeze authority (2pts) |
263
264
 
264
- ```
265
- Claude Code <-> MCP stdio <-> deficlaw server
266
- |
267
- +------------+------------+
268
- | | |
269
- DexScreener GMGN API Solana RPC
270
- (prices) (holders) (security)
271
- ```
265
+ **Risk Levels:**
272
266
 
273
- - **MCP SDK** for Claude Code integration
274
- - **curl-based GMGN fetcher** bypasses Cloudflare (Playwright fallback if needed)
275
- - **In-memory TTL cache** with automatic cleanup prevents rate limiting
276
- - **Rate limiter** with retry logic for DexScreener (150 req/min)
277
- - **TypeScript** with full type safety
267
+ | Level | Score Range | Meaning |
268
+ |-------|------------|---------|
269
+ | LOW | 0-19 | Few concerns, safer relative to peers |
270
+ | MEDIUM | 20-44 | Some concerns, do your own research |
271
+ | HIGH | 45-69 | Multiple red flags, elevated caution |
272
+ | CRITICAL | 70-100 | Extreme risk, likely scam or rug-pull |
278
273
 
279
274
  ## Configuration
280
275
 
281
- ### Environment Variables (all optional)
276
+ All environment variables are optional. deficlaw works out of the box with zero config.
282
277
 
283
278
  | Variable | Default | Description |
284
279
  |----------|---------|-------------|
285
- | `SOLANA_RPC_URL` | `https://api.mainnet-beta.solana.com` | Custom Solana RPC endpoint |
280
+ | `SOLANA_RPC_URL` | `https://api.mainnet-beta.solana.com` | Custom Solana RPC endpoint (use a private RPC for better reliability) |
286
281
  | `DEFICLAW_CACHE_TTL` | `120000` (2 min) | GMGN holder cache TTL in milliseconds |
287
282
  | `DEFICLAW_PRICE_CACHE_TTL` | `30000` (30s) | Price cache TTL in milliseconds |
288
- | `DEBUG` | (unset) | Set to `deficlaw` to enable debug logging to stderr |
283
+ | `DEBUG` | *(unset)* | Set to `deficlaw` to enable debug logging to stderr |
289
284
 
290
285
  ### Claude Code Config
291
286
 
@@ -296,56 +291,89 @@ Add to your project's `.mcp.json`:
296
291
  "mcpServers": {
297
292
  "defi": {
298
293
  "command": "npx",
299
- "args": ["-y", "@0xprotovox/deficlaw"],
300
- "env": {
301
- "SOLANA_RPC_URL": "https://your-rpc.com",
302
- "DEFICLAW_CACHE_TTL": "120000",
303
- "DEFICLAW_PRICE_CACHE_TTL": "30000",
304
- "DEBUG": "deficlaw"
305
- }
294
+ "args": ["-y", "@0xprotovox/deficlaw"]
306
295
  }
307
296
  }
308
297
  }
309
298
  ```
310
299
 
311
- Or if installed from source:
300
+ <details>
301
+ <summary>With custom environment variables</summary>
312
302
 
313
303
  ```json
314
304
  {
315
305
  "mcpServers": {
316
306
  "defi": {
317
- "command": "node",
318
- "args": ["/path/to/deficlaw/dist/index.js"]
307
+ "command": "npx",
308
+ "args": ["-y", "@0xprotovox/deficlaw"],
309
+ "env": {
310
+ "SOLANA_RPC_URL": "https://your-rpc.com",
311
+ "DEFICLAW_CACHE_TTL": "120000",
312
+ "DEFICLAW_PRICE_CACHE_TTL": "30000",
313
+ "DEBUG": "deficlaw"
314
+ }
319
315
  }
320
316
  }
321
317
  }
322
318
  ```
319
+ </details>
320
+
321
+ ## Supported Chains
322
+
323
+ **Prices and trending** work on all DexScreener-supported chains: Solana, Ethereum, Base, BSC, Arbitrum, Polygon, Avalanche, Optimism, Fantom, and more.
324
+
325
+ **Holder analysis** (GMGN) currently supports **Solana** tokens.
326
+
327
+ **Slippage estimation** (Jupiter) supports **Solana** tokens.
323
328
 
324
329
  ## Roadmap
325
330
 
326
331
  - [x] Token analysis with holder intelligence
327
- - [x] Risk scoring (8 dimensions)
328
- - [x] Contract security checks
332
+ - [x] Risk scoring (8 dimensions, 0-100)
333
+ - [x] Contract security checks (mint/freeze authority)
329
334
  - [x] KOL detection with Twitter handles
330
- - [x] Human-readable AI summary
331
- - [x] Top traders (winners/losers)
332
- - [x] npm package (`npm install -g @0xprotovox/deficlaw`)
335
+ - [x] Human-readable AI summary with actionable insights
336
+ - [x] Top traders (winners/losers with PnL)
333
337
  - [x] Token search by name/symbol
334
338
  - [x] New launches detection
335
339
  - [x] Actionable verdict (BUY/SELL/NEUTRAL/AVOID)
340
+ - [x] Slippage estimation (Jupiter quotes)
341
+ - [x] Token comparison (side by side)
336
342
  - [x] Configurable cache TTL via env vars
337
343
  - [x] Debug logging (DEBUG=deficlaw)
338
- - [x] Non-blocking async GMGN fetches
339
- - [ ] Slippage estimation (Jupiter quotes)
340
- - [ ] Token comparison (side by side)
341
- - [ ] Multi-chain holder analysis
344
+ - [x] LP pool detection in top holders
345
+ - [ ] Multi-chain holder analysis (Ethereum, Base)
342
346
  - [ ] Price alerts via MCP resources
347
+ - [ ] Wallet portfolio analysis
348
+ - [ ] Historical price charts
349
+ - [ ] DEX aggregator integration for trade execution
350
+
351
+ ## Contributing
352
+
353
+ Contributions welcome! Here's how:
354
+
355
+ 1. Fork the repo
356
+ 2. Create your branch (`git checkout -b feature/my-feature`)
357
+ 3. Make changes and ensure `npx tsc --noEmit` passes with zero errors
358
+ 4. Run benchmarks (`npm test`) to verify nothing regressed
359
+ 5. Commit and open a PR
360
+
361
+ **Development setup:**
362
+ ```bash
363
+ git clone https://github.com/0xprotovox/deficlaw.git
364
+ cd deficlaw
365
+ npm install
366
+ npm run build # compile TypeScript
367
+ npm test # run speed benchmarks
368
+ npm run dev # run from source with tsx
369
+ ```
343
370
 
344
371
  ## Built With
345
372
 
346
373
  - [Model Context Protocol SDK](https://github.com/modelcontextprotocol/typescript-sdk) - MCP server framework
347
374
  - [DexScreener API](https://docs.dexscreener.com) - Price and market data
348
375
  - [GMGN](https://gmgn.ai) - Holder intelligence
376
+ - [Jupiter Quote API](https://station.jup.ag/docs/apis/swap-api) - Slippage estimation
349
377
  - TypeScript, Zod, Node.js 18+
350
378
 
351
379
  ## License
@@ -160,7 +160,9 @@ export function formatAnalysis(data) {
160
160
  lines.push(` Sell TX: ${h.pressure.totalSellTx}`);
161
161
  const ratioStr = h.pressure.buySellRatio === Infinity
162
162
  ? 'all buys'
163
- : `${h.pressure.buySellRatio.toFixed(2)}:1`;
163
+ : h.pressure.buySellRatio > 10000
164
+ ? `${Math.round(h.pressure.buySellRatio).toLocaleString()}:1 (unreliable, low tx count)`
165
+ : `${h.pressure.buySellRatio.toFixed(2)}:1`;
164
166
  const ratioIndicator = h.pressure.buySellRatio > 1.5 ? ' (bullish)'
165
167
  : h.pressure.buySellRatio < 0.7 ? ' (bearish)'
166
168
  : ' (neutral)';
@@ -1 +1 @@
1
- {"version":3,"file":"formatOutput.js","sourceRoot":"","sources":["../../src/analysis/formatOutput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatOutput.js","sourceRoot":"","sources":["../../src/analysis/formatOutput.ts"],"names":[],"mappings":"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"}