@aibtc/mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +340 -0
  2. package/dist/api.d.ts +9 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +79 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/config/contracts.d.ts +169 -0
  7. package/dist/config/contracts.d.ts.map +1 -0
  8. package/dist/config/contracts.js +250 -0
  9. package/dist/config/contracts.js.map +1 -0
  10. package/dist/config/index.d.ts +3 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +3 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/config/networks.d.ts +11 -0
  15. package/dist/config/networks.d.ts.map +1 -0
  16. package/dist/config/networks.js +21 -0
  17. package/dist/config/networks.js.map +1 -0
  18. package/dist/endpoints/index.d.ts +2 -0
  19. package/dist/endpoints/index.d.ts.map +1 -0
  20. package/dist/endpoints/index.js +2 -0
  21. package/dist/endpoints/index.js.map +1 -0
  22. package/dist/endpoints/registry.d.ts +38 -0
  23. package/dist/endpoints/registry.d.ts.map +1 -0
  24. package/dist/endpoints/registry.js +935 -0
  25. package/dist/endpoints/registry.js.map +1 -0
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +79 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/services/bitflow.service.d.ts +159 -0
  31. package/dist/services/bitflow.service.d.ts.map +1 -0
  32. package/dist/services/bitflow.service.js +325 -0
  33. package/dist/services/bitflow.service.js.map +1 -0
  34. package/dist/services/bns.service.d.ts +87 -0
  35. package/dist/services/bns.service.d.ts.map +1 -0
  36. package/dist/services/bns.service.js +312 -0
  37. package/dist/services/bns.service.js.map +1 -0
  38. package/dist/services/defi.service.d.ts +146 -0
  39. package/dist/services/defi.service.d.ts.map +1 -0
  40. package/dist/services/defi.service.js +461 -0
  41. package/dist/services/defi.service.js.map +1 -0
  42. package/dist/services/hiro-api.d.ts +438 -0
  43. package/dist/services/hiro-api.d.ts.map +1 -0
  44. package/dist/services/hiro-api.js +376 -0
  45. package/dist/services/hiro-api.js.map +1 -0
  46. package/dist/services/nft.service.d.ts +70 -0
  47. package/dist/services/nft.service.d.ts.map +1 -0
  48. package/dist/services/nft.service.js +148 -0
  49. package/dist/services/nft.service.js.map +1 -0
  50. package/dist/services/sbtc.service.d.ts +44 -0
  51. package/dist/services/sbtc.service.d.ts.map +1 -0
  52. package/dist/services/sbtc.service.js +100 -0
  53. package/dist/services/sbtc.service.js.map +1 -0
  54. package/dist/services/scaffold.service.d.ts +41 -0
  55. package/dist/services/scaffold.service.d.ts.map +1 -0
  56. package/dist/services/scaffold.service.js +1055 -0
  57. package/dist/services/scaffold.service.js.map +1 -0
  58. package/dist/services/stacking.service.d.ts +58 -0
  59. package/dist/services/stacking.service.d.ts.map +1 -0
  60. package/dist/services/stacking.service.js +153 -0
  61. package/dist/services/stacking.service.js.map +1 -0
  62. package/dist/services/tokens.service.d.ts +62 -0
  63. package/dist/services/tokens.service.d.ts.map +1 -0
  64. package/dist/services/tokens.service.js +119 -0
  65. package/dist/services/tokens.service.js.map +1 -0
  66. package/dist/services/wallet-manager.d.ts +107 -0
  67. package/dist/services/wallet-manager.d.ts.map +1 -0
  68. package/dist/services/wallet-manager.js +389 -0
  69. package/dist/services/wallet-manager.js.map +1 -0
  70. package/dist/services/x402.service.d.ts +26 -0
  71. package/dist/services/x402.service.d.ts.map +1 -0
  72. package/dist/services/x402.service.js +125 -0
  73. package/dist/services/x402.service.js.map +1 -0
  74. package/dist/tools/bitflow.tools.d.ts +3 -0
  75. package/dist/tools/bitflow.tools.d.ts.map +1 -0
  76. package/dist/tools/bitflow.tools.js +501 -0
  77. package/dist/tools/bitflow.tools.js.map +1 -0
  78. package/dist/tools/bns.tools.d.ts +3 -0
  79. package/dist/tools/bns.tools.d.ts.map +1 -0
  80. package/dist/tools/bns.tools.js +164 -0
  81. package/dist/tools/bns.tools.js.map +1 -0
  82. package/dist/tools/contract.tools.d.ts +3 -0
  83. package/dist/tools/contract.tools.d.ts.map +1 -0
  84. package/dist/tools/contract.tools.js +126 -0
  85. package/dist/tools/contract.tools.js.map +1 -0
  86. package/dist/tools/defi.tools.d.ts +3 -0
  87. package/dist/tools/defi.tools.d.ts.map +1 -0
  88. package/dist/tools/defi.tools.js +425 -0
  89. package/dist/tools/defi.tools.js.map +1 -0
  90. package/dist/tools/endpoint.tools.d.ts +3 -0
  91. package/dist/tools/endpoint.tools.d.ts.map +1 -0
  92. package/dist/tools/endpoint.tools.js +157 -0
  93. package/dist/tools/endpoint.tools.js.map +1 -0
  94. package/dist/tools/index.d.ts +6 -0
  95. package/dist/tools/index.d.ts.map +1 -0
  96. package/dist/tools/index.js +52 -0
  97. package/dist/tools/index.js.map +1 -0
  98. package/dist/tools/nft.tools.d.ts +3 -0
  99. package/dist/tools/nft.tools.d.ts.map +1 -0
  100. package/dist/tools/nft.tools.js +154 -0
  101. package/dist/tools/nft.tools.js.map +1 -0
  102. package/dist/tools/openrouter.tools.d.ts +3 -0
  103. package/dist/tools/openrouter.tools.d.ts.map +1 -0
  104. package/dist/tools/openrouter.tools.js +664 -0
  105. package/dist/tools/openrouter.tools.js.map +1 -0
  106. package/dist/tools/query.tools.d.ts +3 -0
  107. package/dist/tools/query.tools.d.ts.map +1 -0
  108. package/dist/tools/query.tools.js +209 -0
  109. package/dist/tools/query.tools.js.map +1 -0
  110. package/dist/tools/sbtc.tools.d.ts +3 -0
  111. package/dist/tools/sbtc.tools.d.ts.map +1 -0
  112. package/dist/tools/sbtc.tools.js +103 -0
  113. package/dist/tools/sbtc.tools.js.map +1 -0
  114. package/dist/tools/scaffold.tools.d.ts +3 -0
  115. package/dist/tools/scaffold.tools.d.ts.map +1 -0
  116. package/dist/tools/scaffold.tools.js +216 -0
  117. package/dist/tools/scaffold.tools.js.map +1 -0
  118. package/dist/tools/stacking.tools.d.ts +3 -0
  119. package/dist/tools/stacking.tools.d.ts.map +1 -0
  120. package/dist/tools/stacking.tools.js +112 -0
  121. package/dist/tools/stacking.tools.js.map +1 -0
  122. package/dist/tools/tokens.tools.d.ts +3 -0
  123. package/dist/tools/tokens.tools.d.ts.map +1 -0
  124. package/dist/tools/tokens.tools.js +154 -0
  125. package/dist/tools/tokens.tools.js.map +1 -0
  126. package/dist/tools/transfer.tools.d.ts +3 -0
  127. package/dist/tools/transfer.tools.d.ts.map +1 -0
  128. package/dist/tools/transfer.tools.js +62 -0
  129. package/dist/tools/transfer.tools.js.map +1 -0
  130. package/dist/tools/wallet-management.tools.d.ts +6 -0
  131. package/dist/tools/wallet-management.tools.d.ts.map +1 -0
  132. package/dist/tools/wallet-management.tools.js +390 -0
  133. package/dist/tools/wallet-management.tools.js.map +1 -0
  134. package/dist/tools/wallet.tools.d.ts +3 -0
  135. package/dist/tools/wallet.tools.d.ts.map +1 -0
  136. package/dist/tools/wallet.tools.js +105 -0
  137. package/dist/tools/wallet.tools.js.map +1 -0
  138. package/dist/transactions/builder.d.ts +56 -0
  139. package/dist/transactions/builder.d.ts.map +1 -0
  140. package/dist/transactions/builder.js +134 -0
  141. package/dist/transactions/builder.js.map +1 -0
  142. package/dist/transactions/clarity-values.d.ts +67 -0
  143. package/dist/transactions/clarity-values.d.ts.map +1 -0
  144. package/dist/transactions/clarity-values.js +169 -0
  145. package/dist/transactions/clarity-values.js.map +1 -0
  146. package/dist/transactions/post-conditions.d.ts +27 -0
  147. package/dist/transactions/post-conditions.d.ts.map +1 -0
  148. package/dist/transactions/post-conditions.js +101 -0
  149. package/dist/transactions/post-conditions.js.map +1 -0
  150. package/dist/utils/encryption.d.ts +33 -0
  151. package/dist/utils/encryption.d.ts.map +1 -0
  152. package/dist/utils/encryption.js +110 -0
  153. package/dist/utils/encryption.js.map +1 -0
  154. package/dist/utils/errors.d.ts +84 -0
  155. package/dist/utils/errors.d.ts.map +1 -0
  156. package/dist/utils/errors.js +132 -0
  157. package/dist/utils/errors.js.map +1 -0
  158. package/dist/utils/formatting.d.ts +51 -0
  159. package/dist/utils/formatting.d.ts.map +1 -0
  160. package/dist/utils/formatting.js +114 -0
  161. package/dist/utils/formatting.js.map +1 -0
  162. package/dist/utils/index.d.ts +6 -0
  163. package/dist/utils/index.d.ts.map +1 -0
  164. package/dist/utils/index.js +6 -0
  165. package/dist/utils/index.js.map +1 -0
  166. package/dist/utils/storage.d.ts +90 -0
  167. package/dist/utils/storage.d.ts.map +1 -0
  168. package/dist/utils/storage.js +196 -0
  169. package/dist/utils/storage.js.map +1 -0
  170. package/dist/utils/validation.d.ts +67 -0
  171. package/dist/utils/validation.d.ts.map +1 -0
  172. package/dist/utils/validation.js +74 -0
  173. package/dist/utils/validation.js.map +1 -0
  174. package/dist/wallet.d.ts +86 -0
  175. package/dist/wallet.d.ts.map +1 -0
  176. package/dist/wallet.js +279 -0
  177. package/dist/wallet.js.map +1 -0
  178. package/package.json +58 -0
@@ -0,0 +1,390 @@
1
+ import { z } from "zod";
2
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
3
+ import { getWalletManager } from "../services/wallet-manager.js";
4
+ import { NETWORK } from "../config/networks.js";
5
+ /**
6
+ * Register wallet management tools
7
+ */
8
+ export function registerWalletManagementTools(server) {
9
+ /**
10
+ * Create a new wallet with BIP39 mnemonic
11
+ */
12
+ server.registerTool("wallet_create", {
13
+ description: `Create a new wallet for the agent with a generated BIP39 24-word mnemonic.
14
+ The wallet is encrypted locally and stored in ~/.aibtc/.
15
+ IMPORTANT: Save the mnemonic securely - it will only be shown once!`,
16
+ inputSchema: {
17
+ name: z.string().describe("Name for the wallet (e.g., 'main', 'trading')"),
18
+ password: z
19
+ .string()
20
+ .min(8)
21
+ .describe("Password to protect the wallet (minimum 8 characters)"),
22
+ network: z
23
+ .enum(["mainnet", "testnet"])
24
+ .optional()
25
+ .describe("Network for the wallet (default: current network)"),
26
+ },
27
+ }, async ({ name, password, network }) => {
28
+ try {
29
+ const walletManager = getWalletManager();
30
+ const result = await walletManager.createWallet(name, password, network);
31
+ return createJsonResponse({
32
+ success: true,
33
+ message: "I now have a wallet! Here are the details. Please save the mnemonic securely.",
34
+ walletId: result.walletId,
35
+ address: result.address,
36
+ network: network || NETWORK,
37
+ mnemonic: result.mnemonic,
38
+ warning: "CRITICAL: Save this mnemonic phrase securely! It will NOT be shown again. " +
39
+ "This is the only way to recover the wallet if the password is forgotten.",
40
+ });
41
+ }
42
+ catch (error) {
43
+ return createErrorResponse(error);
44
+ }
45
+ });
46
+ /**
47
+ * Import an existing wallet from mnemonic
48
+ */
49
+ server.registerTool("wallet_import", {
50
+ description: `Import an existing wallet for the agent using a BIP39 mnemonic phrase.
51
+ The wallet is encrypted locally and stored in ~/.aibtc/.`,
52
+ inputSchema: {
53
+ name: z.string().describe("Name for the wallet"),
54
+ mnemonic: z.string().describe("24-word BIP39 mnemonic phrase"),
55
+ password: z
56
+ .string()
57
+ .min(8)
58
+ .describe("Password to protect the wallet (minimum 8 characters)"),
59
+ network: z
60
+ .enum(["mainnet", "testnet"])
61
+ .optional()
62
+ .describe("Network for the wallet (default: current network)"),
63
+ },
64
+ }, async ({ name, mnemonic, password, network }) => {
65
+ try {
66
+ const walletManager = getWalletManager();
67
+ const result = await walletManager.importWallet(name, mnemonic, password, network);
68
+ return createJsonResponse({
69
+ success: true,
70
+ message: "I now have access to this wallet and I'm ready to perform transactions.",
71
+ walletId: result.walletId,
72
+ address: result.address,
73
+ network: network || NETWORK,
74
+ });
75
+ }
76
+ catch (error) {
77
+ return createErrorResponse(error);
78
+ }
79
+ });
80
+ /**
81
+ * Unlock a wallet for use
82
+ */
83
+ server.registerTool("wallet_unlock", {
84
+ description: `Unlock the agent's wallet to enable transactions.
85
+ If no wallet ID is provided, unlocks the active wallet.`,
86
+ inputSchema: {
87
+ walletId: z
88
+ .string()
89
+ .optional()
90
+ .describe("Wallet ID to unlock (uses active wallet if not specified)"),
91
+ password: z.string().describe("Wallet password"),
92
+ },
93
+ }, async ({ walletId, password }) => {
94
+ try {
95
+ const walletManager = getWalletManager();
96
+ // Get wallet ID to unlock
97
+ let targetWalletId = walletId;
98
+ if (!targetWalletId) {
99
+ const activeId = await walletManager.getActiveWalletId();
100
+ if (!activeId) {
101
+ return createErrorResponse(new Error("I don't have a wallet yet. Use wallet_create to give me one, or wallet_list to see available wallets."));
102
+ }
103
+ targetWalletId = activeId;
104
+ }
105
+ const account = await walletManager.unlock(targetWalletId, password);
106
+ return createJsonResponse({
107
+ success: true,
108
+ message: "My wallet is now unlocked. I can perform transactions.",
109
+ walletId: targetWalletId,
110
+ address: account.address,
111
+ network: account.network,
112
+ });
113
+ }
114
+ catch (error) {
115
+ return createErrorResponse(error);
116
+ }
117
+ });
118
+ /**
119
+ * Lock the wallet (clear from memory)
120
+ */
121
+ server.registerTool("wallet_lock", {
122
+ description: "Lock the agent's wallet, clearing sensitive data from memory.",
123
+ }, async () => {
124
+ try {
125
+ const walletManager = getWalletManager();
126
+ const wasUnlocked = walletManager.isUnlocked();
127
+ walletManager.lock();
128
+ return createJsonResponse({
129
+ success: true,
130
+ message: wasUnlocked
131
+ ? "My wallet is now locked. I'll need it unlocked again to perform transactions."
132
+ : "My wallet was already locked.",
133
+ });
134
+ }
135
+ catch (error) {
136
+ return createErrorResponse(error);
137
+ }
138
+ });
139
+ /**
140
+ * List available wallets
141
+ */
142
+ server.registerTool("wallet_list", {
143
+ description: "List all wallets available for the agent to use.",
144
+ }, async () => {
145
+ try {
146
+ const walletManager = getWalletManager();
147
+ const wallets = await walletManager.listWallets();
148
+ const activeWalletId = await walletManager.getActiveWalletId();
149
+ const sessionInfo = walletManager.getSessionInfo();
150
+ if (wallets.length === 0) {
151
+ return createJsonResponse({
152
+ message: "I don't have any wallets yet. Use wallet_create to give me one.",
153
+ wallets: [],
154
+ totalCount: 0,
155
+ });
156
+ }
157
+ return createJsonResponse({
158
+ message: `I have ${wallets.length} wallet(s) available.`,
159
+ wallets: wallets.map((w) => ({
160
+ id: w.id,
161
+ name: w.name,
162
+ address: w.address,
163
+ network: w.network,
164
+ createdAt: w.createdAt,
165
+ lastUsed: w.lastUsed,
166
+ isActive: w.id === activeWalletId,
167
+ isUnlocked: sessionInfo?.walletId === w.id,
168
+ })),
169
+ totalCount: wallets.length,
170
+ });
171
+ }
172
+ catch (error) {
173
+ return createErrorResponse(error);
174
+ }
175
+ });
176
+ /**
177
+ * Switch active wallet
178
+ */
179
+ server.registerTool("wallet_switch", {
180
+ description: `Switch to a different wallet.
181
+ Note: The new wallet will need to be unlocked before use.`,
182
+ inputSchema: {
183
+ walletId: z.string().describe("Wallet ID to switch to"),
184
+ },
185
+ }, async ({ walletId }) => {
186
+ try {
187
+ const walletManager = getWalletManager();
188
+ await walletManager.switchWallet(walletId);
189
+ // Get wallet info
190
+ const wallets = await walletManager.listWallets();
191
+ const wallet = wallets.find((w) => w.id === walletId);
192
+ return createJsonResponse({
193
+ success: true,
194
+ activeWalletId: walletId,
195
+ address: wallet?.address,
196
+ network: wallet?.network,
197
+ message: "Switched to wallet. Use wallet_unlock to unlock it for transactions.",
198
+ });
199
+ }
200
+ catch (error) {
201
+ return createErrorResponse(error);
202
+ }
203
+ });
204
+ /**
205
+ * Delete a wallet
206
+ */
207
+ server.registerTool("wallet_delete", {
208
+ description: `Permanently delete a wallet.
209
+ WARNING: This cannot be undone! Make sure you have backed up your mnemonic.`,
210
+ inputSchema: {
211
+ walletId: z.string().describe("Wallet ID to delete"),
212
+ password: z.string().describe("Wallet password for confirmation"),
213
+ confirm: z
214
+ .literal("DELETE")
215
+ .describe("Type 'DELETE' to confirm deletion"),
216
+ },
217
+ }, async ({ walletId, password, confirm }) => {
218
+ try {
219
+ if (confirm !== "DELETE") {
220
+ return createErrorResponse(new Error("Confirmation required: set confirm to 'DELETE'"));
221
+ }
222
+ const walletManager = getWalletManager();
223
+ // Get wallet info before deletion
224
+ const wallets = await walletManager.listWallets();
225
+ const wallet = wallets.find((w) => w.id === walletId);
226
+ await walletManager.deleteWallet(walletId, password);
227
+ return createJsonResponse({
228
+ success: true,
229
+ deletedWalletId: walletId,
230
+ deletedAddress: wallet?.address,
231
+ message: "Wallet deleted permanently.",
232
+ });
233
+ }
234
+ catch (error) {
235
+ return createErrorResponse(error);
236
+ }
237
+ });
238
+ /**
239
+ * Export mnemonic (with security warning)
240
+ */
241
+ server.registerTool("wallet_export", {
242
+ description: `Export the mnemonic phrase for a wallet.
243
+ WARNING: Only use this in a secure environment! Anyone with the mnemonic can access your funds.`,
244
+ inputSchema: {
245
+ walletId: z
246
+ .string()
247
+ .optional()
248
+ .describe("Wallet ID to export (uses active wallet if not specified)"),
249
+ password: z.string().describe("Wallet password"),
250
+ confirm: z
251
+ .literal("I_UNDERSTAND_THE_RISKS")
252
+ .describe("Type 'I_UNDERSTAND_THE_RISKS' to confirm"),
253
+ },
254
+ }, async ({ walletId, password, confirm }) => {
255
+ try {
256
+ if (confirm !== "I_UNDERSTAND_THE_RISKS") {
257
+ return createErrorResponse(new Error("Confirmation required: set confirm to 'I_UNDERSTAND_THE_RISKS'"));
258
+ }
259
+ const walletManager = getWalletManager();
260
+ // Get wallet ID
261
+ let targetWalletId = walletId;
262
+ if (!targetWalletId) {
263
+ const activeId = await walletManager.getActiveWalletId();
264
+ if (!activeId) {
265
+ return createErrorResponse(new Error("No wallet specified and no active wallet set."));
266
+ }
267
+ targetWalletId = activeId;
268
+ }
269
+ const mnemonic = await walletManager.exportMnemonic(targetWalletId, password);
270
+ return createJsonResponse({
271
+ walletId: targetWalletId,
272
+ mnemonic,
273
+ warning: "SECURITY WARNING: This mnemonic provides full access to your wallet. " +
274
+ "Store it securely and never share it with anyone.",
275
+ });
276
+ }
277
+ catch (error) {
278
+ return createErrorResponse(error);
279
+ }
280
+ });
281
+ /**
282
+ * Set auto-lock timeout
283
+ */
284
+ server.registerTool("wallet_set_timeout", {
285
+ description: "Set how long the agent's wallet stays unlocked before automatically locking. Set to 0 to disable auto-lock.",
286
+ inputSchema: {
287
+ minutes: z
288
+ .number()
289
+ .min(0)
290
+ .describe("Minutes until auto-lock (0 = never auto-lock)"),
291
+ },
292
+ }, async ({ minutes }) => {
293
+ try {
294
+ const walletManager = getWalletManager();
295
+ await walletManager.setAutoLockTimeout(minutes);
296
+ const message = minutes === 0
297
+ ? "Auto-lock disabled. My wallet will stay unlocked until manually locked."
298
+ : `Auto-lock set to ${minutes} minutes. My wallet will lock automatically after ${minutes} minutes of inactivity.`;
299
+ return createJsonResponse({
300
+ success: true,
301
+ message,
302
+ autoLockMinutes: minutes,
303
+ });
304
+ }
305
+ catch (error) {
306
+ return createErrorResponse(error);
307
+ }
308
+ });
309
+ /**
310
+ * Get wallet status
311
+ */
312
+ server.registerTool("wallet_status", {
313
+ description: "Get the agent's wallet status - whether it has a wallet, if it's unlocked, and what it can do.",
314
+ }, async () => {
315
+ try {
316
+ const walletManager = getWalletManager();
317
+ const sessionInfo = walletManager.getSessionInfo();
318
+ const activeWalletId = await walletManager.getActiveWalletId();
319
+ const hasWallets = await walletManager.hasWallets();
320
+ const hasMnemonic = !!process.env.CLIENT_MNEMONIC;
321
+ // Determine source and ready state
322
+ let readyForTransactions = false;
323
+ let message;
324
+ let nextAction = null;
325
+ if (sessionInfo) {
326
+ readyForTransactions = true;
327
+ message = "I have a wallet and it's unlocked. I can perform transactions.";
328
+ }
329
+ else if (hasMnemonic) {
330
+ readyForTransactions = true;
331
+ message = "I have a wallet configured and I'm ready to perform transactions.";
332
+ }
333
+ else if (hasWallets) {
334
+ message = "I have a wallet but it's locked. Please unlock it so I can perform transactions.";
335
+ nextAction = "Use wallet_unlock with the wallet password.";
336
+ }
337
+ else {
338
+ message = "I don't have a wallet yet. Please assign me one so I can perform transactions.";
339
+ nextAction = "Use wallet_create to give me a new wallet, or wallet_import to assign an existing one.";
340
+ }
341
+ // Get active wallet info if exists
342
+ let activeWallet = null;
343
+ if (activeWalletId) {
344
+ const wallets = await walletManager.listWallets();
345
+ const wallet = wallets.find((w) => w.id === activeWalletId);
346
+ if (wallet) {
347
+ activeWallet = {
348
+ id: wallet.id,
349
+ name: wallet.name,
350
+ address: wallet.address,
351
+ network: wallet.network,
352
+ };
353
+ }
354
+ }
355
+ // Build response
356
+ const response = {
357
+ message,
358
+ readyForTransactions,
359
+ isUnlocked: !!sessionInfo,
360
+ currentNetwork: NETWORK,
361
+ };
362
+ if (sessionInfo) {
363
+ response.wallet = {
364
+ id: sessionInfo.walletId,
365
+ address: sessionInfo.address,
366
+ sessionExpiresAt: sessionInfo.expiresAt?.toISOString() || "never",
367
+ };
368
+ }
369
+ else if (activeWallet) {
370
+ response.wallet = activeWallet;
371
+ }
372
+ if (hasWallets && !sessionInfo && !hasMnemonic) {
373
+ const wallets = await walletManager.listWallets();
374
+ response.availableWallets = wallets.map((w) => ({
375
+ id: w.id,
376
+ name: w.name,
377
+ address: w.address,
378
+ }));
379
+ }
380
+ if (nextAction) {
381
+ response.nextAction = nextAction;
382
+ }
383
+ return createJsonResponse(response);
384
+ }
385
+ catch (error) {
386
+ return createErrorResponse(error);
387
+ }
388
+ });
389
+ }
390
+ //# sourceMappingURL=wallet-management.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-management.tools.js","sourceRoot":"","sources":["../../src/tools/wallet-management.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerWalletTools(server: McpServer): void;
3
+ //# sourceMappingURL=wallet.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.tools.d.ts","sourceRoot":"","sources":["../../src/tools/wallet.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+G3D"}
@@ -0,0 +1,105 @@
1
+ import { z } from "zod";
2
+ import { getWalletAddress, NETWORK, API_URL } from "../services/x402.service.js";
3
+ import { getStxBalance } from "../services/hiro-api.js";
4
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
5
+ import { getWalletManager } from "../services/wallet-manager.js";
6
+ export function registerWalletTools(server) {
7
+ // Get wallet info
8
+ server.registerTool("get_wallet_info", {
9
+ description: "Get the agent's wallet address and status. " +
10
+ "If the agent doesn't have a wallet yet, provides guidance on how to assign one.",
11
+ }, async () => {
12
+ try {
13
+ const walletManager = getWalletManager();
14
+ const hasWallets = await walletManager.hasWallets();
15
+ const sessionInfo = walletManager.getSessionInfo();
16
+ const hasMnemonic = !!process.env.CLIENT_MNEMONIC;
17
+ // Try to get wallet address
18
+ try {
19
+ const address = await getWalletAddress();
20
+ return createJsonResponse({
21
+ status: "ready",
22
+ message: "I have a wallet and I'm ready to perform transactions.",
23
+ address,
24
+ network: NETWORK,
25
+ apiUrl: API_URL,
26
+ });
27
+ }
28
+ catch {
29
+ // No wallet available - provide helpful guidance
30
+ if (hasWallets) {
31
+ // Has wallets but not unlocked
32
+ const wallets = await walletManager.listWallets();
33
+ return createJsonResponse({
34
+ status: "locked",
35
+ message: "I have a wallet but it's locked. Please unlock it so I can perform transactions.",
36
+ wallets: wallets.map((w) => ({
37
+ id: w.id,
38
+ name: w.name,
39
+ address: w.address,
40
+ network: w.network,
41
+ })),
42
+ network: NETWORK,
43
+ hint: "Use wallet_unlock with the wallet password to unlock.",
44
+ });
45
+ }
46
+ else {
47
+ // No wallets at all
48
+ return createJsonResponse({
49
+ status: "no_wallet",
50
+ message: "I don't have a wallet yet. Would you like to assign me one? " +
51
+ "You can create a fresh wallet for me or import an existing one.",
52
+ network: NETWORK,
53
+ options: [
54
+ {
55
+ action: "wallet_create",
56
+ description: "Create a new wallet for the agent (generates a secure 24-word mnemonic)",
57
+ },
58
+ {
59
+ action: "wallet_import",
60
+ description: "Import an existing wallet for the agent to use",
61
+ },
62
+ ],
63
+ hint: "Use wallet_create with a name and password to give me a wallet.",
64
+ });
65
+ }
66
+ }
67
+ }
68
+ catch (error) {
69
+ return createErrorResponse(error);
70
+ }
71
+ });
72
+ // Get STX balance
73
+ server.registerTool("get_stx_balance", {
74
+ description: "Get the STX balance for a wallet address.",
75
+ inputSchema: {
76
+ address: z
77
+ .string()
78
+ .optional()
79
+ .describe("Wallet address to check. Uses configured wallet if not provided."),
80
+ },
81
+ }, async ({ address }) => {
82
+ try {
83
+ const walletAddress = address || (await getWalletAddress());
84
+ const balance = await getStxBalance(walletAddress, NETWORK);
85
+ const stxBalance = (BigInt(balance.stx) / BigInt(1000000)).toString();
86
+ const stxLocked = (BigInt(balance.stxLocked) / BigInt(1000000)).toString();
87
+ return createJsonResponse({
88
+ address: walletAddress,
89
+ network: NETWORK,
90
+ balance: {
91
+ stx: stxBalance + " STX",
92
+ microStx: balance.stx,
93
+ },
94
+ locked: {
95
+ stx: stxLocked + " STX",
96
+ microStx: balance.stxLocked,
97
+ },
98
+ });
99
+ }
100
+ catch (error) {
101
+ return createErrorResponse(error);
102
+ }
103
+ });
104
+ }
105
+ //# sourceMappingURL=wallet.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.tools.js","sourceRoot":"","sources":["../../src/tools/wallet.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { ClarityValue, PostConditionMode, PostCondition } from "@stacks/transactions";
2
+ import { type Network } from "../config/networks.js";
3
+ export interface Account {
4
+ address: string;
5
+ privateKey: string;
6
+ network: Network;
7
+ }
8
+ export interface TransferResult {
9
+ txid: string;
10
+ rawTx: string;
11
+ }
12
+ export interface ContractCallOptions {
13
+ contractAddress: string;
14
+ contractName: string;
15
+ functionName: string;
16
+ functionArgs: ClarityValue[];
17
+ postConditionMode?: PostConditionMode;
18
+ postConditions?: PostCondition[];
19
+ }
20
+ export interface ContractDeployOptions {
21
+ contractName: string;
22
+ codeBody: string;
23
+ }
24
+ /**
25
+ * Transfer STX tokens to a recipient
26
+ */
27
+ export declare function transferStx(account: Account, recipient: string, amount: bigint, memo?: string): Promise<TransferResult>;
28
+ /**
29
+ * Call a smart contract function
30
+ */
31
+ export declare function callContract(account: Account, options: ContractCallOptions): Promise<TransferResult>;
32
+ /**
33
+ * Deploy a smart contract
34
+ */
35
+ export declare function deployContract(account: Account, options: ContractDeployOptions): Promise<TransferResult>;
36
+ /**
37
+ * Sign a transaction without broadcasting (for offline signing)
38
+ */
39
+ export declare function signStxTransfer(account: Account, recipient: string, amount: bigint, memo?: string): Promise<{
40
+ signedTx: string;
41
+ txid: string;
42
+ }>;
43
+ /**
44
+ * Sign a contract call without broadcasting
45
+ */
46
+ export declare function signContractCall(account: Account, options: ContractCallOptions): Promise<{
47
+ signedTx: string;
48
+ txid: string;
49
+ }>;
50
+ /**
51
+ * Broadcast a pre-signed transaction
52
+ */
53
+ export declare function broadcastSignedTransaction(signedTx: string, network: Network): Promise<{
54
+ txid: string;
55
+ }>;
56
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAyBzB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAe7C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB7C;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB3B"}