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.
Files changed (4) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/index.js +95 -0
  4. 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
+ [![npm](https://img.shields.io/npm/v/cabal-hunter-mcp?color=cb3837&logo=npm)](https://www.npmjs.com/package/cabal-hunter-mcp)
6
+ [![MCP server](https://img.shields.io/badge/MCP-server-7c3aed)](https://api.cabal-hunter.com/mcp)
7
+ [![Solana](https://img.shields.io/badge/Solana-on--chain-14F195)](https://api.cabal-hunter.com)
8
+ [![Free tier](https://img.shields.io/badge/250%2Fmo%20free-no%20API%20key-10b981)](https://api.cabal-hunter.com/api/info)
9
+ [![License: MIT](https://img.shields.io/badge/license-MIT-94a3b8)](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
+ }