@aibtc/mcp-server 1.2.0 → 1.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.
package/dist/index.js CHANGED
@@ -47,8 +47,32 @@ async function installToClaudeCode() {
47
47
  console.log("💡 Tip: Get testnet STX at https://explorer.hiro.so/sandbox/faucet?chain=testnet\n");
48
48
  }
49
49
  }
50
+ // =============================================================================
51
+ // YIELD HUNTER DAEMON
52
+ // =============================================================================
53
+ async function runYieldHunter() {
54
+ // Dynamic import to avoid loading yield-hunter code unless needed
55
+ const { main } = await import("./yield-hunter/index.js");
56
+ // Pass remaining args after "yield-hunter"
57
+ const yieldHunterArgs = process.argv.slice(3);
58
+ await main(yieldHunterArgs);
59
+ }
60
+ // =============================================================================
61
+ // MAIN ROUTING
62
+ // =============================================================================
63
+ // Check for yield-hunter command
64
+ if (process.argv[2] === "yield-hunter") {
65
+ runYieldHunter()
66
+ .then(() => {
67
+ // Don't exit - daemon runs until interrupted
68
+ })
69
+ .catch((error) => {
70
+ console.error("❌ Yield Hunter error:", error.message);
71
+ process.exit(1);
72
+ });
73
+ }
50
74
  // Check for --install flag
51
- if (process.argv.includes("--install") || process.argv.includes("install")) {
75
+ else if (process.argv.includes("--install") || process.argv.includes("install")) {
52
76
  installToClaudeCode()
53
77
  .then(() => process.exit(0))
54
78
  .catch((error) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6CxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBpE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgDxD"}
@@ -14,6 +14,7 @@ import { registerDefiTools } from "./defi.tools.js";
14
14
  // import { registerBitflowTools } from "./bitflow.tools.js";
15
15
  import { registerScaffoldTools } from "./scaffold.tools.js";
16
16
  import { registerOpenRouterTools } from "./openrouter.tools.js";
17
+ import { registerYieldHunterTools } from "./yield-hunter.tools.js";
17
18
  /**
18
19
  * Register all tools with the MCP server
19
20
  */
@@ -48,5 +49,7 @@ export function registerAllTools(server) {
48
49
  registerScaffoldTools(server);
49
50
  // OpenRouter AI (call AI models directly)
50
51
  registerOpenRouterTools(server);
52
+ // Yield Hunter (autonomous sBTC yield farming)
53
+ registerYieldHunterTools(server);
51
54
  }
52
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,+DAA+D;AAC/D,6DAA6D;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,mBAAmB;IACnB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,yDAAyD;IACzD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtC,YAAY;IACZ,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,kBAAkB;IAClB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO;IACP,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,mBAAmB;IACnB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,cAAc;IACd,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,qBAAqB;IACrB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,iCAAiC;IACjC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,+DAA+D;IAC/D,gCAAgC;IAEhC,gDAAgD;IAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,0CAA0C;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,+DAA+D;AAC/D,6DAA6D;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,mBAAmB;IACnB,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,yDAAyD;IACzD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtC,YAAY;IACZ,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,kBAAkB;IAClB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO;IACP,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,mBAAmB;IACnB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,cAAc;IACd,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,qBAAqB;IACrB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3B,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,iCAAiC;IACjC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,+DAA+D;IAC/D,gCAAgC;IAEhC,gDAAgD;IAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,0CAA0C;IAC1C,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEhC,+CAA+C;IAC/C,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerYieldHunterTools(server: McpServer): void;
3
+ //# sourceMappingURL=yield-hunter.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yield-hunter.tools.d.ts","sourceRoot":"","sources":["../../src/tools/yield-hunter.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkWpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsQhE"}
@@ -0,0 +1,574 @@
1
+ import { z } from "zod";
2
+ import { cvToJSON, hexToCV, contractPrincipalCV } from "@stacks/transactions";
3
+ import { getAccount, getWalletAddress, NETWORK } from "../services/x402.service.js";
4
+ import { getZestProtocolService } from "../services/defi.service.js";
5
+ import { getHiroApi } from "../services/hiro-api.js";
6
+ import { ZEST_ASSETS, MAINNET_CONTRACTS } from "../config/contracts.js";
7
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
8
+ // ============================================================================
9
+ // Constants
10
+ // ============================================================================
11
+ /** Buffer to keep for x402 fees + tx costs (in sats). ~0.0005 sBTC = 50k sats */
12
+ const FEE_BUFFER_SATS = 50000n;
13
+ /** Maximum retries for failed transactions */
14
+ const MAX_RETRIES = 3;
15
+ /** Delay between retries (ms) */
16
+ const RETRY_DELAY_MS = 5_000;
17
+ /** Timeout for waiting for tx confirmation (ms) */
18
+ const TX_CONFIRMATION_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
19
+ /** Poll interval for tx confirmation (ms) */
20
+ const TX_POLL_INTERVAL_MS = 10_000; // 10 seconds
21
+ const state = {
22
+ running: false,
23
+ intervalId: null,
24
+ config: {
25
+ minDepositThreshold: 10000n, // 0.0001 sBTC
26
+ feeBuffer: FEE_BUFFER_SATS,
27
+ checkIntervalMs: 10 * 60 * 1000, // 10 minutes
28
+ asset: "sBTC",
29
+ },
30
+ stats: {
31
+ lastCheck: null,
32
+ totalDeposited: 0n,
33
+ checksRun: 0,
34
+ depositsExecuted: 0,
35
+ lastError: null,
36
+ currentApy: null,
37
+ lastApyFetch: null,
38
+ },
39
+ pendingTx: null,
40
+ logs: [],
41
+ };
42
+ const MAX_LOGS = 100;
43
+ function addLog(type, message) {
44
+ state.logs.unshift({
45
+ timestamp: new Date().toISOString(),
46
+ type,
47
+ message,
48
+ });
49
+ // Keep only last N logs
50
+ if (state.logs.length > MAX_LOGS) {
51
+ state.logs = state.logs.slice(0, MAX_LOGS);
52
+ }
53
+ // Also log to stderr for debugging
54
+ console.error(`[YieldHunter] [${type.toUpperCase()}] ${message}`);
55
+ }
56
+ function formatSats(sats) {
57
+ const btc = Number(sats) / 100_000_000;
58
+ return `${btc.toFixed(8)} sBTC`;
59
+ }
60
+ function formatApy(bps) {
61
+ return `${(bps / 100).toFixed(2)}%`;
62
+ }
63
+ // ============================================================================
64
+ // Core Yield Hunting Logic
65
+ // ============================================================================
66
+ async function getSbtcBalance(address) {
67
+ const hiro = getHiroApi(NETWORK);
68
+ const balances = await hiro.getAccountBalances(address);
69
+ const sbtcToken = ZEST_ASSETS.sBTC.token;
70
+ const sbtcKey = Object.keys(balances.fungible_tokens || {}).find((key) => key.startsWith(sbtcToken));
71
+ if (sbtcKey && balances.fungible_tokens[sbtcKey]) {
72
+ return BigInt(balances.fungible_tokens[sbtcKey].balance);
73
+ }
74
+ return 0n;
75
+ }
76
+ /**
77
+ * Fetch live APY from Zest Protocol on-chain
78
+ * Reads from pool-0-reserve get-reserve-state
79
+ */
80
+ async function fetchZestApy() {
81
+ try {
82
+ const hiro = getHiroApi(NETWORK);
83
+ const [reserveAddr, reserveName] = MAINNET_CONTRACTS.ZEST_POOL_RESERVE.split(".");
84
+ const [sbtcAddr, sbtcName] = ZEST_ASSETS.sBTC.token.split(".");
85
+ const result = await hiro.callReadOnlyFunction(MAINNET_CONTRACTS.ZEST_POOL_RESERVE, "get-reserve-state", [contractPrincipalCV(sbtcAddr, sbtcName)], reserveAddr);
86
+ if (!result.okay || !result.result) {
87
+ addLog("warning", "Could not fetch Zest APY from chain");
88
+ return state.stats.currentApy || 0;
89
+ }
90
+ const decoded = cvToJSON(hexToCV(result.result));
91
+ const data = decoded?.value || decoded;
92
+ // Extract liquidity rate (APY in 1e8 scale)
93
+ // e.g., 5000000 = 5% APY
94
+ const liquidityRate = data?.["current-liquidity-rate"]?.value;
95
+ if (liquidityRate) {
96
+ // Convert from 1e8 to basis points: rate / 1e8 * 10000 = rate / 1e4
97
+ const apyBps = Number(BigInt(liquidityRate) / 10000n);
98
+ state.stats.currentApy = apyBps;
99
+ state.stats.lastApyFetch = new Date();
100
+ return apyBps;
101
+ }
102
+ return state.stats.currentApy || 0;
103
+ }
104
+ catch (error) {
105
+ addLog("warning", `Failed to fetch APY: ${error.message}`);
106
+ return state.stats.currentApy || 0;
107
+ }
108
+ }
109
+ /**
110
+ * Wait for transaction confirmation with timeout
111
+ */
112
+ async function waitForTxConfirmation(txid) {
113
+ const hiro = getHiroApi(NETWORK);
114
+ const startTime = Date.now();
115
+ addLog("info", `Waiting for tx confirmation: ${txid}`);
116
+ while (Date.now() - startTime < TX_CONFIRMATION_TIMEOUT_MS) {
117
+ try {
118
+ const status = await hiro.getTransactionStatus(txid);
119
+ if (status.status === "success") {
120
+ addLog("action", `Tx confirmed in block ${status.block_height}: ${txid}`);
121
+ return { success: true };
122
+ }
123
+ if (status.status === "abort_by_response" || status.status === "abort_by_post_condition") {
124
+ const error = `Tx failed: ${status.status}`;
125
+ addLog("error", error);
126
+ return { success: false, error };
127
+ }
128
+ // Still pending, wait and retry
129
+ await sleep(TX_POLL_INTERVAL_MS);
130
+ }
131
+ catch (error) {
132
+ // Network error, retry
133
+ addLog("warning", `Tx status check failed, retrying: ${error.message}`);
134
+ await sleep(TX_POLL_INTERVAL_MS);
135
+ }
136
+ }
137
+ return { success: false, error: "Transaction confirmation timeout" };
138
+ }
139
+ /**
140
+ * Execute with retry logic
141
+ */
142
+ async function executeWithRetry(operation, operationName) {
143
+ let lastError = null;
144
+ for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
145
+ try {
146
+ return await operation();
147
+ }
148
+ catch (error) {
149
+ lastError = error;
150
+ const isLastAttempt = attempt === MAX_RETRIES;
151
+ if (isLastAttempt) {
152
+ addLog("error", `${operationName} failed after ${MAX_RETRIES} attempts: ${error.message}`);
153
+ throw error;
154
+ }
155
+ addLog("warning", `${operationName} attempt ${attempt} failed: ${error.message}. Retrying in ${RETRY_DELAY_MS / 1000}s...`);
156
+ await sleep(RETRY_DELAY_MS * attempt); // Exponential backoff
157
+ }
158
+ }
159
+ throw lastError;
160
+ }
161
+ function sleep(ms) {
162
+ return new Promise((resolve) => setTimeout(resolve, ms));
163
+ }
164
+ async function runYieldCheck() {
165
+ // Skip if there's a pending transaction
166
+ if (state.pendingTx) {
167
+ addLog("info", `Skipping check - waiting for pending tx: ${state.pendingTx.txid}`);
168
+ // Check if pending tx is confirmed
169
+ const result = await waitForTxConfirmation(state.pendingTx.txid);
170
+ if (result.success) {
171
+ state.stats.totalDeposited += state.pendingTx.amount;
172
+ state.stats.depositsExecuted++;
173
+ state.pendingTx = null;
174
+ }
175
+ else if (result.error?.includes("timeout")) {
176
+ addLog("warning", "Pending tx timed out, will retry on next check");
177
+ state.pendingTx = null;
178
+ }
179
+ else {
180
+ addLog("error", `Pending tx failed: ${result.error}`);
181
+ state.pendingTx = null;
182
+ }
183
+ return;
184
+ }
185
+ try {
186
+ const account = await getAccount();
187
+ const zest = getZestProtocolService(NETWORK);
188
+ // Fetch live APY
189
+ const apy = await fetchZestApy();
190
+ addLog("info", `Current Zest sBTC APY: ${formatApy(apy)}`);
191
+ // Get current sBTC balance in wallet
192
+ const walletBalance = await executeWithRetry(() => getSbtcBalance(account.address), "Fetch wallet balance");
193
+ addLog("info", `Wallet sBTC: ${formatSats(walletBalance)}`);
194
+ // Get current Zest position
195
+ const position = await executeWithRetry(() => zest.getUserPosition(ZEST_ASSETS.sBTC.token, account.address), "Fetch Zest position");
196
+ const zestSupplied = position ? BigInt(position.supplied) : 0n;
197
+ addLog("info", `Zest supplied: ${formatSats(zestSupplied)}`);
198
+ // Calculate amount to deposit (keep fee buffer)
199
+ const effectiveThreshold = state.config.minDepositThreshold + state.config.feeBuffer;
200
+ const depositAmount = walletBalance > state.config.feeBuffer
201
+ ? walletBalance - state.config.feeBuffer
202
+ : 0n;
203
+ // Check if we should deposit
204
+ if (walletBalance >= effectiveThreshold && depositAmount > 0n) {
205
+ addLog("action", `Balance (${formatSats(walletBalance)}) above threshold (${formatSats(effectiveThreshold)}). ` +
206
+ `Depositing ${formatSats(depositAmount)}, keeping ${formatSats(state.config.feeBuffer)} as fee buffer...`);
207
+ try {
208
+ const result = await executeWithRetry(() => zest.supply(account, state.config.asset, depositAmount), "Supply to Zest");
209
+ addLog("action", `Deposit tx submitted: ${result.txid}`);
210
+ // Track pending transaction
211
+ state.pendingTx = {
212
+ txid: result.txid,
213
+ type: "deposit",
214
+ amount: depositAmount,
215
+ startedAt: new Date(),
216
+ };
217
+ // Wait for confirmation (non-blocking for next check)
218
+ const confirmation = await waitForTxConfirmation(result.txid);
219
+ if (confirmation.success) {
220
+ state.stats.totalDeposited += depositAmount;
221
+ state.stats.depositsExecuted++;
222
+ state.pendingTx = null;
223
+ }
224
+ else {
225
+ addLog("error", `Deposit confirmation failed: ${confirmation.error}`);
226
+ state.stats.lastError = confirmation.error || "Unknown error";
227
+ state.pendingTx = null;
228
+ }
229
+ }
230
+ catch (error) {
231
+ addLog("error", `Deposit failed: ${error.message}`);
232
+ state.stats.lastError = error.message;
233
+ }
234
+ }
235
+ else if (walletBalance > 0n && walletBalance < effectiveThreshold) {
236
+ addLog("info", `Balance (${formatSats(walletBalance)}) below threshold (${formatSats(effectiveThreshold)}), ` +
237
+ `keeping for fees. Need ${formatSats(effectiveThreshold - walletBalance)} more to deposit.`);
238
+ }
239
+ else {
240
+ addLog("info", `No sBTC in wallet, nothing to deposit`);
241
+ }
242
+ state.stats.lastCheck = new Date();
243
+ state.stats.checksRun++;
244
+ state.stats.lastError = null;
245
+ }
246
+ catch (error) {
247
+ addLog("error", `Check failed: ${error.message}`);
248
+ state.stats.lastError = error.message;
249
+ }
250
+ }
251
+ // ============================================================================
252
+ // MCP Tools
253
+ // ============================================================================
254
+ export function registerYieldHunterTools(server) {
255
+ // Start yield hunting
256
+ server.registerTool("yield_hunter_start", {
257
+ description: `Start autonomous yield hunting.
258
+
259
+ This will:
260
+ 1. Monitor your wallet for sBTC
261
+ 2. Automatically deposit sBTC to Zest Protocol when balance exceeds threshold
262
+ 3. Keep a fee buffer for x402 payments and transaction costs
263
+ 4. Wait for transaction confirmations before proceeding
264
+ 5. Retry failed transactions with exponential backoff
265
+ 6. Run continuously until stopped
266
+
267
+ Requires an unlocked wallet (use wallet_unlock first).
268
+ Only works on mainnet (Zest Protocol is mainnet-only).
269
+
270
+ Default settings:
271
+ - Deposit threshold: 10,000 sats (0.0001 sBTC)
272
+ - Fee buffer: 50,000 sats (0.0005 sBTC) - kept for x402 fees + tx costs
273
+ - Check interval: 10 minutes`,
274
+ inputSchema: {
275
+ threshold: z
276
+ .string()
277
+ .optional()
278
+ .describe("Minimum sBTC balance (in sats) before depositing. Default: 10000"),
279
+ feeBuffer: z
280
+ .string()
281
+ .optional()
282
+ .describe("sBTC (in sats) to keep for fees, never deposited. Default: 50000"),
283
+ interval: z
284
+ .number()
285
+ .optional()
286
+ .describe("Check interval in seconds. Default: 600 (10 minutes)"),
287
+ },
288
+ }, async ({ threshold, feeBuffer, interval }) => {
289
+ try {
290
+ if (NETWORK !== "mainnet") {
291
+ return createJsonResponse({
292
+ success: false,
293
+ error: "Yield hunting only available on mainnet (Zest Protocol)",
294
+ });
295
+ }
296
+ if (state.running) {
297
+ return createJsonResponse({
298
+ success: false,
299
+ error: "Yield hunter is already running",
300
+ status: getStatusObject(),
301
+ });
302
+ }
303
+ // Verify wallet is unlocked
304
+ try {
305
+ await getAccount();
306
+ }
307
+ catch {
308
+ return createJsonResponse({
309
+ success: false,
310
+ error: "Wallet not unlocked. Use wallet_unlock first to enable transactions.",
311
+ });
312
+ }
313
+ // Apply config
314
+ if (threshold) {
315
+ state.config.minDepositThreshold = BigInt(threshold);
316
+ }
317
+ if (feeBuffer) {
318
+ state.config.feeBuffer = BigInt(feeBuffer);
319
+ }
320
+ if (interval) {
321
+ state.config.checkIntervalMs = interval * 1000;
322
+ }
323
+ // Start the yield hunting loop
324
+ state.running = true;
325
+ addLog("info", "Yield hunter started");
326
+ // Fetch initial APY
327
+ const apy = await fetchZestApy();
328
+ addLog("info", `Current Zest sBTC APY: ${formatApy(apy)}`);
329
+ // Run first check immediately
330
+ await runYieldCheck();
331
+ // Schedule periodic checks
332
+ state.intervalId = setInterval(async () => {
333
+ if (state.running) {
334
+ await runYieldCheck();
335
+ }
336
+ }, state.config.checkIntervalMs);
337
+ return createJsonResponse({
338
+ success: true,
339
+ message: "Yield hunter started",
340
+ config: {
341
+ minDepositThreshold: state.config.minDepositThreshold.toString(),
342
+ minDepositThresholdFormatted: formatSats(state.config.minDepositThreshold),
343
+ feeBuffer: state.config.feeBuffer.toString(),
344
+ feeBufferFormatted: formatSats(state.config.feeBuffer),
345
+ effectiveThreshold: (state.config.minDepositThreshold + state.config.feeBuffer).toString(),
346
+ effectiveThresholdFormatted: formatSats(state.config.minDepositThreshold + state.config.feeBuffer),
347
+ checkIntervalMs: state.config.checkIntervalMs,
348
+ asset: state.config.asset,
349
+ },
350
+ currentApy: apy ? formatApy(apy) : "unknown",
351
+ nextCheckIn: `${state.config.checkIntervalMs / 1000} seconds`,
352
+ });
353
+ }
354
+ catch (error) {
355
+ return createErrorResponse(error);
356
+ }
357
+ });
358
+ // Stop yield hunting
359
+ server.registerTool("yield_hunter_stop", {
360
+ description: `Stop autonomous yield hunting.
361
+
362
+ Stops the background process that monitors and deposits sBTC.
363
+ Your existing Zest positions remain untouched.`,
364
+ inputSchema: {},
365
+ }, async () => {
366
+ try {
367
+ if (!state.running) {
368
+ return createJsonResponse({
369
+ success: false,
370
+ error: "Yield hunter is not running",
371
+ });
372
+ }
373
+ // Stop the interval
374
+ if (state.intervalId) {
375
+ clearInterval(state.intervalId);
376
+ state.intervalId = null;
377
+ }
378
+ state.running = false;
379
+ addLog("info", "Yield hunter stopped");
380
+ return createJsonResponse({
381
+ success: true,
382
+ message: "Yield hunter stopped",
383
+ stats: {
384
+ checksRun: state.stats.checksRun,
385
+ depositsExecuted: state.stats.depositsExecuted,
386
+ totalDeposited: state.stats.totalDeposited.toString(),
387
+ },
388
+ });
389
+ }
390
+ catch (error) {
391
+ return createErrorResponse(error);
392
+ }
393
+ });
394
+ // Get yield hunter status
395
+ server.registerTool("yield_hunter_status", {
396
+ description: `Get current yield hunter status.
397
+
398
+ Shows:
399
+ - Whether yield hunting is active
400
+ - Current configuration
401
+ - Statistics (checks run, deposits made)
402
+ - Recent activity logs
403
+ - Current Zest position`,
404
+ inputSchema: {},
405
+ }, async () => {
406
+ try {
407
+ const status = await getFullStatus();
408
+ return createJsonResponse(status);
409
+ }
410
+ catch (error) {
411
+ return createErrorResponse(error);
412
+ }
413
+ });
414
+ // Configure yield hunter
415
+ server.registerTool("yield_hunter_configure", {
416
+ description: `Configure yield hunter settings.
417
+
418
+ Adjust the deposit threshold, fee buffer, or check interval.
419
+ Changes take effect on the next check cycle.`,
420
+ inputSchema: {
421
+ threshold: z
422
+ .string()
423
+ .optional()
424
+ .describe("Minimum sBTC balance (in sats) before depositing"),
425
+ feeBuffer: z
426
+ .string()
427
+ .optional()
428
+ .describe("sBTC (in sats) to keep for fees, never deposited"),
429
+ interval: z
430
+ .number()
431
+ .optional()
432
+ .describe("Check interval in seconds"),
433
+ },
434
+ }, async ({ threshold, feeBuffer, interval }) => {
435
+ try {
436
+ const changes = [];
437
+ if (threshold) {
438
+ state.config.minDepositThreshold = BigInt(threshold);
439
+ changes.push(`Deposit threshold set to ${formatSats(state.config.minDepositThreshold)}`);
440
+ }
441
+ if (feeBuffer) {
442
+ state.config.feeBuffer = BigInt(feeBuffer);
443
+ changes.push(`Fee buffer set to ${formatSats(state.config.feeBuffer)}`);
444
+ }
445
+ if (interval) {
446
+ state.config.checkIntervalMs = interval * 1000;
447
+ changes.push(`Check interval set to ${interval} seconds`);
448
+ // If running, restart the interval with new timing
449
+ if (state.running && state.intervalId) {
450
+ clearInterval(state.intervalId);
451
+ state.intervalId = setInterval(async () => {
452
+ if (state.running) {
453
+ await runYieldCheck();
454
+ }
455
+ }, state.config.checkIntervalMs);
456
+ }
457
+ }
458
+ if (changes.length === 0) {
459
+ return createJsonResponse({
460
+ success: false,
461
+ error: "No configuration changes specified",
462
+ currentConfig: getConfigObject(),
463
+ });
464
+ }
465
+ addLog("info", `Config updated: ${changes.join(", ")}`);
466
+ return createJsonResponse({
467
+ success: true,
468
+ changes,
469
+ config: getConfigObject(),
470
+ });
471
+ }
472
+ catch (error) {
473
+ return createErrorResponse(error);
474
+ }
475
+ });
476
+ }
477
+ function getConfigObject() {
478
+ return {
479
+ minDepositThreshold: state.config.minDepositThreshold.toString(),
480
+ minDepositThresholdFormatted: formatSats(state.config.minDepositThreshold),
481
+ feeBuffer: state.config.feeBuffer.toString(),
482
+ feeBufferFormatted: formatSats(state.config.feeBuffer),
483
+ effectiveThreshold: (state.config.minDepositThreshold + state.config.feeBuffer).toString(),
484
+ effectiveThresholdFormatted: formatSats(state.config.minDepositThreshold + state.config.feeBuffer),
485
+ checkIntervalMs: state.config.checkIntervalMs,
486
+ checkIntervalFormatted: `${state.config.checkIntervalMs / 1000} seconds`,
487
+ asset: state.config.asset,
488
+ };
489
+ }
490
+ // ============================================================================
491
+ // Helpers
492
+ // ============================================================================
493
+ function getStatusObject() {
494
+ return {
495
+ running: state.running,
496
+ config: getConfigObject(),
497
+ stats: {
498
+ lastCheck: state.stats.lastCheck?.toISOString() || null,
499
+ totalDeposited: state.stats.totalDeposited.toString(),
500
+ totalDepositedFormatted: formatSats(state.stats.totalDeposited),
501
+ checksRun: state.stats.checksRun,
502
+ depositsExecuted: state.stats.depositsExecuted,
503
+ lastError: state.stats.lastError,
504
+ currentApy: state.stats.currentApy ? formatApy(state.stats.currentApy) : null,
505
+ currentApyBps: state.stats.currentApy,
506
+ lastApyFetch: state.stats.lastApyFetch?.toISOString() || null,
507
+ },
508
+ pendingTx: state.pendingTx ? {
509
+ txid: state.pendingTx.txid,
510
+ type: state.pendingTx.type,
511
+ amount: state.pendingTx.amount.toString(),
512
+ amountFormatted: formatSats(state.pendingTx.amount),
513
+ startedAt: state.pendingTx.startedAt.toISOString(),
514
+ } : null,
515
+ recentLogs: state.logs.slice(0, 15),
516
+ };
517
+ }
518
+ async function getFullStatus() {
519
+ const status = getStatusObject();
520
+ // Add current positions if on mainnet
521
+ if (NETWORK === "mainnet") {
522
+ try {
523
+ const address = await getWalletAddress();
524
+ const zest = getZestProtocolService(NETWORK);
525
+ // Fetch all data in parallel
526
+ const [position, walletBalance, apy] = await Promise.all([
527
+ zest.getUserPosition(ZEST_ASSETS.sBTC.token, address),
528
+ getSbtcBalance(address),
529
+ fetchZestApy(),
530
+ ]);
531
+ const zestSupplied = BigInt(position?.supplied || "0");
532
+ const availableToDeposit = walletBalance > state.config.feeBuffer
533
+ ? walletBalance - state.config.feeBuffer
534
+ : 0n;
535
+ return {
536
+ ...status,
537
+ network: NETWORK,
538
+ wallet: address,
539
+ currentPosition: {
540
+ walletSbtc: walletBalance.toString(),
541
+ walletSbtcFormatted: formatSats(walletBalance),
542
+ availableToDeposit: availableToDeposit.toString(),
543
+ availableToDepositFormatted: formatSats(availableToDeposit),
544
+ reservedForFees: state.config.feeBuffer.toString(),
545
+ reservedForFeesFormatted: formatSats(state.config.feeBuffer),
546
+ zestSupplied: position?.supplied || "0",
547
+ zestSuppliedFormatted: formatSats(zestSupplied),
548
+ zestBorrowed: position?.borrowed || "0",
549
+ },
550
+ currentApy: apy ? formatApy(apy) : "unknown",
551
+ currentApyBps: apy,
552
+ estimatedDailyYield: zestSupplied > 0n && apy
553
+ ? formatSats((zestSupplied * BigInt(apy)) / (365n * 10000n))
554
+ : "0",
555
+ estimatedAnnualYield: zestSupplied > 0n && apy
556
+ ? formatSats((zestSupplied * BigInt(apy)) / 10000n)
557
+ : "0",
558
+ };
559
+ }
560
+ catch (error) {
561
+ return {
562
+ ...status,
563
+ network: NETWORK,
564
+ walletError: error.message,
565
+ };
566
+ }
567
+ }
568
+ return {
569
+ ...status,
570
+ network: NETWORK,
571
+ note: "Zest Protocol only available on mainnet",
572
+ };
573
+ }
574
+ //# sourceMappingURL=yield-hunter.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yield-hunter.tools.js","sourceRoot":"","sources":["../../src/tools/yield-hunter.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Yield Hunter - Autonomous sBTC yield farming daemon
4
+ *
5
+ * Automatically deposits sBTC to Zest Protocol and compounds earnings.
6
+ * Uses the wallet configured in ~/.aibtc/
7
+ */
8
+ export declare function main(args: string[]): Promise<void>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yield-hunter/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAkTH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDxD"}
@@ -0,0 +1,293 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Yield Hunter - Autonomous sBTC yield farming daemon
4
+ *
5
+ * Automatically deposits sBTC to Zest Protocol and compounds earnings.
6
+ * Uses the wallet configured in ~/.aibtc/
7
+ */
8
+ import { getWalletManager } from "../services/wallet-manager.js";
9
+ import { getZestProtocolService } from "../services/defi.service.js";
10
+ import { getHiroApi } from "../services/hiro-api.js";
11
+ import { ZEST_ASSETS } from "../config/contracts.js";
12
+ import { NETWORK } from "../config/networks.js";
13
+ import fs from "fs/promises";
14
+ import path from "path";
15
+ import os from "os";
16
+ const DEFAULT_CONFIG = {
17
+ minDepositThreshold: 10000n, // 0.0001 sBTC (~$10 at $100k BTC)
18
+ checkIntervalMs: 10 * 60 * 1000, // 10 minutes
19
+ execute: false,
20
+ asset: "sBTC",
21
+ };
22
+ const STATE_FILE = path.join(os.homedir(), ".aibtc", "yield-hunter-state.json");
23
+ // ============================================================================
24
+ // State Management
25
+ // ============================================================================
26
+ async function loadState() {
27
+ try {
28
+ const content = await fs.readFile(STATE_FILE, "utf8");
29
+ return JSON.parse(content);
30
+ }
31
+ catch {
32
+ return {
33
+ lastCheck: null,
34
+ totalDeposited: "0",
35
+ totalEarned: "0",
36
+ transactions: [],
37
+ };
38
+ }
39
+ }
40
+ async function saveState(state) {
41
+ await fs.writeFile(STATE_FILE, JSON.stringify(state, null, 2));
42
+ }
43
+ // ============================================================================
44
+ // Helpers
45
+ // ============================================================================
46
+ function formatSats(sats) {
47
+ const btc = Number(sats) / 100_000_000;
48
+ return `${btc.toFixed(8)} sBTC (${sats.toString()} sats)`;
49
+ }
50
+ function log(message) {
51
+ const timestamp = new Date().toISOString();
52
+ console.log(`[${timestamp}] ${message}`);
53
+ }
54
+ // ============================================================================
55
+ // Core Logic
56
+ // ============================================================================
57
+ async function getSbtcBalance(address) {
58
+ const hiro = getHiroApi(NETWORK);
59
+ const balances = await hiro.getAccountBalances(address);
60
+ // Find sBTC in fungible tokens
61
+ const sbtcToken = ZEST_ASSETS.sBTC.token;
62
+ const sbtcKey = Object.keys(balances.fungible_tokens || {}).find((key) => key.startsWith(sbtcToken));
63
+ if (sbtcKey && balances.fungible_tokens[sbtcKey]) {
64
+ return BigInt(balances.fungible_tokens[sbtcKey].balance);
65
+ }
66
+ return 0n;
67
+ }
68
+ async function runCheck(account, config, state) {
69
+ const zest = getZestProtocolService(NETWORK);
70
+ // Get current sBTC balance in wallet
71
+ const walletBalance = await getSbtcBalance(account.address);
72
+ log(`Wallet sBTC balance: ${formatSats(walletBalance)}`);
73
+ // Get current Zest position
74
+ const position = await zest.getUserPosition(ZEST_ASSETS.sBTC.token, account.address);
75
+ const zestSupplied = position ? BigInt(position.supplied) : 0n;
76
+ log(`Zest supplied: ${formatSats(zestSupplied)}`);
77
+ // Check if we should deposit
78
+ if (walletBalance >= config.minDepositThreshold) {
79
+ log(`Balance above threshold (${formatSats(config.minDepositThreshold)}), depositing...`);
80
+ if (config.execute) {
81
+ try {
82
+ const result = await zest.supply(account, config.asset, walletBalance);
83
+ log(`Deposited ${formatSats(walletBalance)} to Zest. TxID: ${result.txid}`);
84
+ // Update state
85
+ state.totalDeposited = (BigInt(state.totalDeposited) + walletBalance).toString();
86
+ state.transactions.push({
87
+ type: "deposit",
88
+ amount: walletBalance.toString(),
89
+ txid: result.txid,
90
+ timestamp: new Date().toISOString(),
91
+ });
92
+ }
93
+ catch (error) {
94
+ log(`Failed to deposit: ${error.message}`);
95
+ }
96
+ }
97
+ else {
98
+ log(`[DRY RUN] Would deposit ${formatSats(walletBalance)} to Zest`);
99
+ }
100
+ }
101
+ else {
102
+ log(`Balance below threshold, no action needed`);
103
+ }
104
+ // Update state
105
+ state.lastCheck = new Date().toISOString();
106
+ await saveState(state);
107
+ }
108
+ // ============================================================================
109
+ // CLI Commands
110
+ // ============================================================================
111
+ async function startDaemon(config) {
112
+ log("Starting Yield Hunter daemon...");
113
+ log(`Network: ${NETWORK}`);
114
+ log(`Min deposit threshold: ${formatSats(config.minDepositThreshold)}`);
115
+ log(`Check interval: ${config.checkIntervalMs / 1000}s`);
116
+ log(`Execute mode: ${config.execute ? "LIVE" : "DRY RUN"}`);
117
+ if (NETWORK !== "mainnet") {
118
+ log("WARNING: Zest Protocol is only available on mainnet");
119
+ process.exit(1);
120
+ }
121
+ // Get wallet
122
+ const walletManager = getWalletManager();
123
+ const wallets = await walletManager.listWallets();
124
+ if (wallets.length === 0) {
125
+ log("No wallets found. Create one with: npx @aibtc/mcp-server");
126
+ log("Then use wallet_create or wallet_import via Claude");
127
+ process.exit(1);
128
+ }
129
+ const activeWalletId = await walletManager.getActiveWalletId();
130
+ if (!activeWalletId) {
131
+ log("No active wallet. Set one with wallet_switch");
132
+ process.exit(1);
133
+ }
134
+ const activeWallet = wallets.find((w) => w.id === activeWalletId);
135
+ log(`Using wallet: ${activeWallet?.name} (${activeWallet?.address})`);
136
+ // Prompt for password
137
+ const password = await promptPassword();
138
+ let account;
139
+ try {
140
+ account = await walletManager.unlock(activeWalletId, password);
141
+ log(`Wallet unlocked: ${account.address}`);
142
+ }
143
+ catch (error) {
144
+ log(`Failed to unlock wallet: ${error.message}`);
145
+ process.exit(1);
146
+ }
147
+ // Disable auto-lock for daemon mode
148
+ await walletManager.setAutoLockTimeout(0);
149
+ // Load state
150
+ const state = await loadState();
151
+ // Run initial check
152
+ await runCheck(account, config, state);
153
+ // Schedule periodic checks
154
+ log(`\nDaemon running. Press Ctrl+C to stop.\n`);
155
+ const intervalId = setInterval(async () => {
156
+ try {
157
+ await runCheck(account, config, state);
158
+ }
159
+ catch (error) {
160
+ log(`Error during check: ${error.message}`);
161
+ }
162
+ }, config.checkIntervalMs);
163
+ // Handle shutdown
164
+ process.on("SIGINT", () => {
165
+ log("\nShutting down...");
166
+ clearInterval(intervalId);
167
+ walletManager.lock();
168
+ process.exit(0);
169
+ });
170
+ process.on("SIGTERM", () => {
171
+ log("\nShutting down...");
172
+ clearInterval(intervalId);
173
+ walletManager.lock();
174
+ process.exit(0);
175
+ });
176
+ }
177
+ async function showStatus() {
178
+ log("Yield Hunter Status");
179
+ log("=".repeat(50));
180
+ const state = await loadState();
181
+ const walletManager = getWalletManager();
182
+ const wallets = await walletManager.listWallets();
183
+ const activeWalletId = await walletManager.getActiveWalletId();
184
+ const activeWallet = wallets.find((w) => w.id === activeWalletId);
185
+ log(`Network: ${NETWORK}`);
186
+ log(`Wallet: ${activeWallet?.name || "None"} (${activeWallet?.address || "N/A"})`);
187
+ log(`Last check: ${state.lastCheck || "Never"}`);
188
+ log(`Total deposited: ${formatSats(BigInt(state.totalDeposited))}`);
189
+ log(`Total earned: ${formatSats(BigInt(state.totalEarned))}`);
190
+ log(`Transaction count: ${state.transactions.length}`);
191
+ if (activeWallet && NETWORK === "mainnet") {
192
+ const zest = getZestProtocolService(NETWORK);
193
+ const position = await zest.getUserPosition(ZEST_ASSETS.sBTC.token, activeWallet.address);
194
+ if (position) {
195
+ log(`\nCurrent Zest Position:`);
196
+ log(` Supplied: ${formatSats(BigInt(position.supplied))}`);
197
+ log(` Borrowed: ${formatSats(BigInt(position.borrowed))}`);
198
+ }
199
+ const walletBalance = await getSbtcBalance(activeWallet.address);
200
+ log(`\nWallet sBTC: ${formatSats(walletBalance)}`);
201
+ }
202
+ }
203
+ async function promptPassword() {
204
+ return new Promise((resolve) => {
205
+ process.stdout.write("Enter wallet password: ");
206
+ // Disable echo for password input
207
+ if (process.stdin.isTTY) {
208
+ process.stdin.setRawMode(true);
209
+ }
210
+ let password = "";
211
+ const onData = (chunk) => {
212
+ const char = chunk.toString();
213
+ if (char === "\n" || char === "\r" || char === "\u0003") {
214
+ process.stdin.removeListener("data", onData);
215
+ if (process.stdin.isTTY) {
216
+ process.stdin.setRawMode(false);
217
+ }
218
+ console.log(); // New line after password
219
+ if (char === "\u0003") {
220
+ process.exit(0);
221
+ }
222
+ resolve(password);
223
+ }
224
+ else if (char === "\u007F" || char === "\b") {
225
+ // Backspace
226
+ password = password.slice(0, -1);
227
+ }
228
+ else {
229
+ password += char;
230
+ }
231
+ };
232
+ process.stdin.resume();
233
+ process.stdin.on("data", onData);
234
+ });
235
+ }
236
+ // ============================================================================
237
+ // Main Entry Point
238
+ // ============================================================================
239
+ export async function main(args) {
240
+ const command = args[0] || "help";
241
+ const config = { ...DEFAULT_CONFIG };
242
+ // Parse flags
243
+ for (const arg of args) {
244
+ if (arg === "--execute" || arg === "-e") {
245
+ config.execute = true;
246
+ }
247
+ else if (arg.startsWith("--threshold=")) {
248
+ config.minDepositThreshold = BigInt(arg.split("=")[1]);
249
+ }
250
+ else if (arg.startsWith("--interval=")) {
251
+ config.checkIntervalMs = parseInt(arg.split("=")[1]) * 1000;
252
+ }
253
+ }
254
+ switch (command) {
255
+ case "start":
256
+ await startDaemon(config);
257
+ break;
258
+ case "status":
259
+ await showStatus();
260
+ break;
261
+ case "help":
262
+ default:
263
+ console.log(`
264
+ Yield Hunter - Autonomous sBTC yield farming
265
+
266
+ Usage:
267
+ npx @aibtc/mcp-server yield-hunter <command> [options]
268
+
269
+ Commands:
270
+ start Start the yield hunting daemon
271
+ status Show current status and positions
272
+ help Show this help message
273
+
274
+ Options:
275
+ --execute, -e Actually execute transactions (default: dry run)
276
+ --threshold=<sats> Minimum sBTC (in sats) before depositing (default: 10000)
277
+ --interval=<seconds> Check interval in seconds (default: 600)
278
+
279
+ Examples:
280
+ npx @aibtc/mcp-server yield-hunter start
281
+ npx @aibtc/mcp-server yield-hunter start --execute
282
+ npx @aibtc/mcp-server yield-hunter start --execute --threshold=100000
283
+ npx @aibtc/mcp-server yield-hunter status
284
+
285
+ Note: Requires a wallet created via the MCP server. Run:
286
+ npx @aibtc/mcp-server --install
287
+
288
+ Then use Claude to create a wallet with wallet_create or wallet_import.
289
+ `);
290
+ break;
291
+ }
292
+ }
293
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/yield-hunter/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aibtc/mcp-server",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Claude Code MCP server for x402 endpoint discovery and execution with Stacks wallet integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",