cabal-hunter-mcp 0.1.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/LICENSE +21 -0
- package/README.md +95 -0
- package/index.js +95 -0
- package/package.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Cabal-Hunter
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# cabal-hunter-mcp
|
|
2
|
+
|
|
3
|
+
**On-chain Solana cabal & rug detection as an MCP server.** One tool — `check_cabal_risk` — scans any Solana token mint *before your agent buys* and returns an **Exit-Liquidity Risk** verdict (`SAFE | REVIEW | AVOID`), a 0–100 cabal score, funding-cluster detection, same-block Jito-bundle detection, coordinated-dump detection, serial-rug **deployer history** ("launched 14, 13 dead"), and a Solana-native **honeypot** check (freeze authority + Token-2022 traps). Every flag links to its on-chain evidence transaction.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/cabal-hunter-mcp)
|
|
6
|
+
[](https://api.cabal-hunter.com/mcp)
|
|
7
|
+
[](https://api.cabal-hunter.com)
|
|
8
|
+
[](https://api.cabal-hunter.com/api/info)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
|
|
11
|
+
Contract-clean is **not** cabal-clean. RugCheck-style scanners tell you the mint/freeze/LP are fine — they don't tell you that 15 wallets funded from one source are holding 30% of supply, waiting to dump on you. That's what this catches.
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx cabal-hunter-mcp
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
No install, no signup, no API key — **250 free scans/month per IP**. That's the whole setup; the command below is what you drop into any MCP client.
|
|
20
|
+
|
|
21
|
+
### Claude Desktop / Claude Code / Cursor / VS Code / ElizaOS
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"mcpServers": {
|
|
26
|
+
"cabal-hunter": {
|
|
27
|
+
"command": "npx",
|
|
28
|
+
"args": ["-y", "cabal-hunter-mcp"]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Prefer a remote HTTP server (no local process)? Point straight at the hosted endpoint instead:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{ "mcpServers": { "cabal-hunter": { "url": "https://api.cabal-hunter.com/mcp" } } }
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## The tool
|
|
41
|
+
|
|
42
|
+
**`check_cabal_risk({ mint })`** — pass a Solana token mint (contract) address. Returns the full forensic JSON:
|
|
43
|
+
|
|
44
|
+
```jsonc
|
|
45
|
+
{
|
|
46
|
+
"recommendation": "AVOID", // SAFE | REVIEW | AVOID ← the headline
|
|
47
|
+
"risk": "HIGH", // exit-liquidity risk
|
|
48
|
+
"cabal_score": 100, // 0-100
|
|
49
|
+
"honeypot_risk": "LOW", // freeze authority + Token-2022 traps
|
|
50
|
+
"mint_authority_revoked": true,
|
|
51
|
+
"freeze_authority_revoked": true,
|
|
52
|
+
"deployer": { "verdict": "SERIAL_RUGGER", "tokens_launched": 14, "dead": 13 },
|
|
53
|
+
"coordinated_clusters": [
|
|
54
|
+
{ "wallets": 5, "combined_pct": 23.1, "evidence_tx": "https://solscan.io/tx/…" }
|
|
55
|
+
],
|
|
56
|
+
"time_sync": true, // same-block (Jito-bundled) buys
|
|
57
|
+
"coordinated_exit": false, // ≥2 holders dumped together
|
|
58
|
+
"top_reasons": ["..."],
|
|
59
|
+
"wallets_checked": 15,
|
|
60
|
+
"scan_complete": true
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`scan_complete` / `wallets_checked` are included on purpose so your agent can apply **its own** risk tolerance instead of inheriting ours — the score is a starting point you can verify (every cluster carries an `evidence_tx`), not a verdict you take on faith.
|
|
65
|
+
|
|
66
|
+
### Gate a buy in your agent
|
|
67
|
+
|
|
68
|
+
> "Before buying any token, call `check_cabal_risk` with the mint. If `recommendation` is `AVOID` or `cabal_score >= 65` or `honeypot_risk` is `HIGH`, skip the trade and say why."
|
|
69
|
+
|
|
70
|
+
## Pricing
|
|
71
|
+
|
|
72
|
+
- **250 scans/month per IP — free, no key.**
|
|
73
|
+
- After that: **$9/month for Unlimited** (fair use), or pay-as-you-go at **$0.001 USDC per scan** (priced at cost). No signup, no card.
|
|
74
|
+
- Prepaid key: send USDC, `POST /api/buy-key`, then set `CABAL_HUNTER_API_KEY` (sent as the `X-API-Key` header). Full details: [api.cabal-hunter.com/pricing](https://api.cabal-hunter.com/pricing).
|
|
75
|
+
|
|
76
|
+
## Configuration
|
|
77
|
+
|
|
78
|
+
| Env var | Default | Purpose |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| `CABAL_HUNTER_API_KEY` | *(none)* | Prepaid key for unlimited / metered use (`X-API-Key`). |
|
|
81
|
+
| `CABAL_HUNTER_API` | `https://api.cabal-hunter.com` | Override the API base URL. |
|
|
82
|
+
|
|
83
|
+
## Other ways to use Cabal-Hunter
|
|
84
|
+
|
|
85
|
+
- **REST:** `curl "https://api.cabal-hunter.com/api/scan-cabal?mintAddress=<MINT>"` — [OpenAPI spec](https://api.cabal-hunter.com/openapi.json)
|
|
86
|
+
- **ElizaOS plugin:** [`elizaos-plugin-cabal-hunter`](https://github.com/paulf280-ui/plugin-cabal-hunter) (`npm install elizaos-plugin-cabal-hunter`)
|
|
87
|
+
- **Human?** Free interactive bubble map — wallets, Solscan receipts, live chart + trade links on one screen: [api.cabal-hunter.com/map](https://api.cabal-hunter.com/map)
|
|
88
|
+
|
|
89
|
+
## What it detects (why "contract-clean" misses it)
|
|
90
|
+
|
|
91
|
+
A cabal is 15 fresh wallets — all funded from the same master wallet, all buying in the first seconds of launch — quietly accumulating 25–40% of supply before your bot sees the first candle. Contract clean. LP burned. Everything green. Then they dump, simultaneously, into your liquidity. Cabal-Hunter traces the funding graph on-chain and answers the only question that matters before you sign a swap: **are you the exit liquidity?**
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
MIT licensed. Powered by [Cabal-Hunter](https://api.cabal-hunter.com). This package is a thin MCP wrapper over the hosted API — the detection runs server-side against live Solana on-chain data (Helius RPC).
|
package/index.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* cabal-hunter-mcp — local MCP server for on-chain Solana cabal/rug detection.
|
|
4
|
+
*
|
|
5
|
+
* Exposes one tool, `check_cabal_risk`, that scans any Solana token mint and
|
|
6
|
+
* returns an exit-liquidity risk verdict (SAFE / REVIEW / AVOID), a 0-100 cabal
|
|
7
|
+
* score, funding-cluster + same-block-bundle + coordinated-dump detection,
|
|
8
|
+
* serial-rug deployer history, and a honeypot (freeze / Token-2022) check.
|
|
9
|
+
*
|
|
10
|
+
* It is a thin stdio wrapper over the hosted Cabal-Hunter API
|
|
11
|
+
* (https://api.cabal-hunter.com) so any MCP client — Claude Desktop, Claude
|
|
12
|
+
* Code, Cursor, VS Code, ElizaOS — can run it with `npx cabal-hunter-mcp`.
|
|
13
|
+
*
|
|
14
|
+
* Free tier: 250 scans/month per IP, no signup, no key. To use a prepaid key
|
|
15
|
+
* (e.g. $9/mo unlimited), set CABAL_HUNTER_API_KEY.
|
|
16
|
+
*/
|
|
17
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
18
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
19
|
+
import {
|
|
20
|
+
ListToolsRequestSchema,
|
|
21
|
+
CallToolRequestSchema,
|
|
22
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
23
|
+
|
|
24
|
+
const API = (process.env.CABAL_HUNTER_API || "https://api.cabal-hunter.com").replace(/\/+$/, "");
|
|
25
|
+
const API_KEY = process.env.CABAL_HUNTER_API_KEY || "";
|
|
26
|
+
|
|
27
|
+
const TOOL = {
|
|
28
|
+
name: "check_cabal_risk",
|
|
29
|
+
description:
|
|
30
|
+
"Real-time on-chain coordinated-wallet (cabal) and rug detection for any " +
|
|
31
|
+
"Solana token mint. One call returns an Exit-Liquidity Risk verdict " +
|
|
32
|
+
"(SAFE | REVIEW | AVOID), a 0-100 cabal score, funding-cluster detection " +
|
|
33
|
+
"(top holders funded by the same source), same-block Jito-bundle detection, " +
|
|
34
|
+
"coordinated-dump detection, serial-rug deployer history (e.g. 'launched 14, " +
|
|
35
|
+
"13 dead'), a honeypot check (freeze authority + Token-2022 traps), and " +
|
|
36
|
+
"on-chain evidence transactions for every flag. Use it before an agent buys a " +
|
|
37
|
+
"pump.fun / PumpSwap / Raydium token to answer: are you the exit liquidity? " +
|
|
38
|
+
"Free: 250 scans/month, no API key required.",
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: "object",
|
|
41
|
+
properties: {
|
|
42
|
+
mint: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description:
|
|
45
|
+
"The Solana token mint (contract) address to scan, e.g. " +
|
|
46
|
+
"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ["mint"],
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const server = new Server(
|
|
54
|
+
{ name: "cabal-hunter", version: "0.1.0" },
|
|
55
|
+
{ capabilities: { tools: {} } }
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [TOOL] }));
|
|
59
|
+
|
|
60
|
+
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
61
|
+
const { name, arguments: args } = req.params;
|
|
62
|
+
if (name !== TOOL.name) {
|
|
63
|
+
return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true };
|
|
64
|
+
}
|
|
65
|
+
const mint = String(args?.mint || "").trim();
|
|
66
|
+
if (!mint) {
|
|
67
|
+
return {
|
|
68
|
+
content: [{ type: "text", text: "Error: 'mint' (a Solana token mint address) is required." }],
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const url = `${API}/api/scan-cabal?mintAddress=${encodeURIComponent(mint)}`;
|
|
73
|
+
const headers = { Accept: "application/json" };
|
|
74
|
+
if (API_KEY) headers["X-API-Key"] = API_KEY;
|
|
75
|
+
try {
|
|
76
|
+
const res = await fetch(url, { headers });
|
|
77
|
+
const text = await res.text();
|
|
78
|
+
if (!res.ok) {
|
|
79
|
+
return {
|
|
80
|
+
content: [{ type: "text", text: `Cabal-Hunter API error ${res.status}: ${text.slice(0, 800)}` }],
|
|
81
|
+
isError: true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return { content: [{ type: "text", text }] };
|
|
85
|
+
} catch (e) {
|
|
86
|
+
return {
|
|
87
|
+
content: [{ type: "text", text: `Request to Cabal-Hunter failed: ${e?.message || String(e)}` }],
|
|
88
|
+
isError: true,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
const transport = new StdioServerTransport();
|
|
94
|
+
await server.connect(transport);
|
|
95
|
+
console.error(`cabal-hunter MCP server running on stdio → ${API}`);
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cabal-hunter-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for on-chain Solana cabal & rug detection — exit-liquidity risk verdict, funding-cluster + same-block-bundle + coordinated-dump detection, serial-rug deployer history, and honeypot check for any token mint. Run with npx, no API key. 250 free scans/month.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"cabal-hunter-mcp": "index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "index.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"index.js",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=18"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"start": "node index.js"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"mcp",
|
|
26
|
+
"model-context-protocol",
|
|
27
|
+
"mcp-server",
|
|
28
|
+
"solana",
|
|
29
|
+
"rug-check",
|
|
30
|
+
"rug-detection",
|
|
31
|
+
"rugcheck",
|
|
32
|
+
"cabal-detection",
|
|
33
|
+
"memecoin",
|
|
34
|
+
"pump-fun",
|
|
35
|
+
"pumpfun",
|
|
36
|
+
"token-safety",
|
|
37
|
+
"honeypot-detection",
|
|
38
|
+
"exit-liquidity",
|
|
39
|
+
"trading-bot",
|
|
40
|
+
"ai-agent",
|
|
41
|
+
"ai-agents",
|
|
42
|
+
"web3",
|
|
43
|
+
"defi",
|
|
44
|
+
"claude",
|
|
45
|
+
"cursor",
|
|
46
|
+
"elizaos"
|
|
47
|
+
],
|
|
48
|
+
"license": "MIT",
|
|
49
|
+
"author": "Cabal-Hunter (https://api.cabal-hunter.com)",
|
|
50
|
+
"homepage": "https://api.cabal-hunter.com",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/paulf280-ui/cabal-hunter-mcp.git"
|
|
54
|
+
},
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/paulf280-ui/cabal-hunter-mcp/issues"
|
|
57
|
+
}
|
|
58
|
+
}
|