@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,164 @@
1
+ import { z } from "zod";
2
+ import { getWalletAddress, NETWORK } from "../services/x402.service.js";
3
+ import { getBnsService } from "../services/bns.service.js";
4
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
5
+ export function registerBnsTools(server) {
6
+ // Lookup BNS name
7
+ server.registerTool("lookup_bns_name", {
8
+ description: "Resolve a .btc domain name to its Stacks address.",
9
+ inputSchema: {
10
+ name: z.string().describe("BNS name to lookup (e.g., 'alice.btc' or 'alice')"),
11
+ },
12
+ }, async ({ name }) => {
13
+ try {
14
+ const bnsService = getBnsService(NETWORK);
15
+ const result = await bnsService.lookupName(name);
16
+ if (!result) {
17
+ return createJsonResponse({
18
+ name,
19
+ found: false,
20
+ message: "Name not found or not registered",
21
+ });
22
+ }
23
+ return createJsonResponse({
24
+ name: result.name,
25
+ found: true,
26
+ address: result.address,
27
+ namespace: result.namespace,
28
+ expireBlock: result.expireBlock,
29
+ network: NETWORK,
30
+ });
31
+ }
32
+ catch (error) {
33
+ return createErrorResponse(error);
34
+ }
35
+ });
36
+ // Reverse BNS lookup
37
+ server.registerTool("reverse_bns_lookup", {
38
+ description: "Get the BNS domain names owned by an address.",
39
+ inputSchema: {
40
+ address: z
41
+ .string()
42
+ .optional()
43
+ .describe("Stacks address to lookup. Uses configured wallet if not provided."),
44
+ },
45
+ }, async ({ address }) => {
46
+ try {
47
+ const bnsService = getBnsService(NETWORK);
48
+ const walletAddress = address || (await getWalletAddress());
49
+ const names = await bnsService.reverseLookup(walletAddress);
50
+ return createJsonResponse({
51
+ address: walletAddress,
52
+ network: NETWORK,
53
+ namesCount: names.length,
54
+ names,
55
+ });
56
+ }
57
+ catch (error) {
58
+ return createErrorResponse(error);
59
+ }
60
+ });
61
+ // Get BNS name info
62
+ server.registerTool("get_bns_info", {
63
+ description: "Get detailed information about a BNS domain name.",
64
+ inputSchema: {
65
+ name: z.string().describe("BNS name to lookup (e.g., 'alice.btc')"),
66
+ },
67
+ }, async ({ name }) => {
68
+ try {
69
+ const bnsService = getBnsService(NETWORK);
70
+ const info = await bnsService.getNameInfo(name);
71
+ if (!info) {
72
+ return createJsonResponse({
73
+ name,
74
+ found: false,
75
+ message: "Name not found",
76
+ });
77
+ }
78
+ return createJsonResponse({
79
+ network: NETWORK,
80
+ found: true,
81
+ ...info,
82
+ });
83
+ }
84
+ catch (error) {
85
+ return createErrorResponse(error);
86
+ }
87
+ });
88
+ // Check BNS availability
89
+ server.registerTool("check_bns_availability", {
90
+ description: "Check if a BNS domain name is available for registration.",
91
+ inputSchema: {
92
+ name: z.string().describe("BNS name to check (e.g., 'alice')"),
93
+ },
94
+ }, async ({ name }) => {
95
+ try {
96
+ const bnsService = getBnsService(NETWORK);
97
+ const available = await bnsService.checkAvailability(name);
98
+ return createJsonResponse({
99
+ name: name.endsWith(".btc") ? name : `${name}.btc`,
100
+ available,
101
+ network: NETWORK,
102
+ });
103
+ }
104
+ catch (error) {
105
+ return createErrorResponse(error);
106
+ }
107
+ });
108
+ // Get BNS price
109
+ server.registerTool("get_bns_price", {
110
+ description: "Get the registration price for a BNS domain name.",
111
+ inputSchema: {
112
+ name: z.string().describe("BNS name to check (e.g., 'alice')"),
113
+ },
114
+ }, async ({ name }) => {
115
+ try {
116
+ const bnsService = getBnsService(NETWORK);
117
+ const price = await bnsService.getPrice(name);
118
+ if (!price) {
119
+ return createJsonResponse({
120
+ name,
121
+ error: "Could not determine price",
122
+ });
123
+ }
124
+ return createJsonResponse({
125
+ name: name.endsWith(".btc") ? name : `${name}.btc`,
126
+ network: NETWORK,
127
+ price: {
128
+ units: price.units,
129
+ microStx: price.amount,
130
+ stx: price.amountStx + " STX",
131
+ },
132
+ });
133
+ }
134
+ catch (error) {
135
+ return createErrorResponse(error);
136
+ }
137
+ });
138
+ // List user domains
139
+ server.registerTool("list_user_domains", {
140
+ description: "List all BNS domains owned by an address.",
141
+ inputSchema: {
142
+ address: z
143
+ .string()
144
+ .optional()
145
+ .describe("Stacks address to check. Uses configured wallet if not provided."),
146
+ },
147
+ }, async ({ address }) => {
148
+ try {
149
+ const bnsService = getBnsService(NETWORK);
150
+ const walletAddress = address || (await getWalletAddress());
151
+ const domains = await bnsService.getUserDomains(walletAddress);
152
+ return createJsonResponse({
153
+ address: walletAddress,
154
+ network: NETWORK,
155
+ domainsCount: domains.length,
156
+ domains,
157
+ });
158
+ }
159
+ catch (error) {
160
+ return createErrorResponse(error);
161
+ }
162
+ });
163
+ }
164
+ //# sourceMappingURL=bns.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bns.tools.js","sourceRoot":"","sources":["../../src/tools/bns.tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,kBAAkB;IAClB,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SAC/E;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,kBAAkB,CAAC;oBACxB,IAAI;oBACJ,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,kCAAkC;iBAC5C,CAAC,CAAC;YACL,CAAC;YAED,OAAO,kBAAkB,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mEAAmE,CAAC;SACjF;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YAE5D,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,KAAK,CAAC,MAAM;gBACxB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oBAAoB;IACpB,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SACpE;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,kBAAkB,CAAC;oBACxB,IAAI;oBACJ,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,gBAAgB;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,IAAI;gBACX,GAAG,IAAI;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SAC/D;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAE3D,OAAO,kBAAkB,CAAC;gBACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM;gBAClD,SAAS;gBACT,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SAC/D;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,kBAAkB,CAAC;oBACxB,IAAI;oBACJ,KAAK,EAAE,2BAA2B;iBACnC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,kBAAkB,CAAC;gBACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM;gBAClD,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,QAAQ,EAAE,KAAK,CAAC,MAAM;oBACtB,GAAG,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM;iBAC9B;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,oBAAoB;IACpB,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,kEAAkE,CAAC;SAChF;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAE/D,OAAO,kBAAkB,CAAC;gBACxB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,OAAO;gBAChB,YAAY,EAAE,OAAO,CAAC,MAAM;gBAC5B,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerContractTools(server: McpServer): void;
3
+ //# sourceMappingURL=contract.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.tools.d.ts","sourceRoot":"","sources":["../../src/tools/contract.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0I7D"}
@@ -0,0 +1,126 @@
1
+ import { z } from "zod";
2
+ import { PostConditionMode } from "@stacks/transactions";
3
+ import { getAccount, NETWORK } from "../services/x402.service.js";
4
+ import { callContract, deployContract } from "../transactions/builder.js";
5
+ import { parseArgToClarityValue } from "../transactions/clarity-values.js";
6
+ import { getHiroApi, getTransactionStatus } from "../services/hiro-api.js";
7
+ import { getExplorerTxUrl } from "../config/networks.js";
8
+ import { createJsonResponse, createErrorResponse } from "../utils/index.js";
9
+ export function registerContractTools(server) {
10
+ // Call contract
11
+ server.registerTool("call_contract", {
12
+ description: `Call a function on a Stacks smart contract. Signs and broadcasts the transaction.
13
+
14
+ For typed arguments, use objects like {type: 'uint', value: 100} or {type: 'principal', value: 'SP...'}`,
15
+ inputSchema: {
16
+ contractAddress: z.string().describe("The contract deployer's address (e.g., SP2...)"),
17
+ contractName: z.string().describe("The contract name (e.g., 'my-token')"),
18
+ functionName: z.string().describe("The function to call (e.g., 'transfer')"),
19
+ functionArgs: z
20
+ .array(z.unknown())
21
+ .default([])
22
+ .describe("Function arguments. For explicit types: {type: 'uint'|'int'|'principal'|..., value: ...}"),
23
+ postConditionMode: z
24
+ .enum(["allow", "deny"])
25
+ .default("deny")
26
+ .describe("'deny' (default): Blocks unexpected transfers. 'allow': Permits any transfers."),
27
+ },
28
+ }, async ({ contractAddress, contractName, functionName, functionArgs, postConditionMode }) => {
29
+ try {
30
+ const account = await getAccount();
31
+ const clarityArgs = functionArgs.map(parseArgToClarityValue);
32
+ const result = await callContract(account, {
33
+ contractAddress,
34
+ contractName,
35
+ functionName,
36
+ functionArgs: clarityArgs,
37
+ postConditionMode: postConditionMode === "allow" ? PostConditionMode.Allow : PostConditionMode.Deny,
38
+ });
39
+ return createJsonResponse({
40
+ success: true,
41
+ txid: result.txid,
42
+ contract: `${contractAddress}.${contractName}`,
43
+ function: functionName,
44
+ args: functionArgs,
45
+ network: NETWORK,
46
+ explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
47
+ });
48
+ }
49
+ catch (error) {
50
+ return createErrorResponse(error);
51
+ }
52
+ });
53
+ // Deploy contract
54
+ server.registerTool("deploy_contract", {
55
+ description: "Deploy a Clarity smart contract to the Stacks blockchain.",
56
+ inputSchema: {
57
+ contractName: z.string().describe("Unique name for the contract (lowercase, hyphens allowed)"),
58
+ codeBody: z.string().describe("The complete Clarity source code"),
59
+ },
60
+ }, async ({ contractName, codeBody }) => {
61
+ try {
62
+ const account = await getAccount();
63
+ const result = await deployContract(account, { contractName, codeBody });
64
+ return createJsonResponse({
65
+ success: true,
66
+ txid: result.txid,
67
+ contractId: `${account.address}.${contractName}`,
68
+ network: NETWORK,
69
+ explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
70
+ });
71
+ }
72
+ catch (error) {
73
+ return createErrorResponse(error);
74
+ }
75
+ });
76
+ // Get transaction status
77
+ server.registerTool("get_transaction_status", {
78
+ description: "Check the status of a Stacks transaction by its txid.",
79
+ inputSchema: {
80
+ txid: z.string().describe("The transaction ID (64 character hex string)"),
81
+ },
82
+ }, async ({ txid }) => {
83
+ try {
84
+ const status = await getTransactionStatus(txid, NETWORK);
85
+ return createJsonResponse({
86
+ txid,
87
+ ...status,
88
+ network: NETWORK,
89
+ explorerUrl: getExplorerTxUrl(txid, NETWORK),
90
+ });
91
+ }
92
+ catch (error) {
93
+ return createErrorResponse(error);
94
+ }
95
+ });
96
+ // Call read-only function
97
+ server.registerTool("call_read_only_function", {
98
+ description: "Call a read-only function on a smart contract (no signing required).",
99
+ inputSchema: {
100
+ contractId: z.string().describe("Contract ID in format: address.contract-name"),
101
+ functionName: z.string().describe("The read-only function to call"),
102
+ functionArgs: z
103
+ .array(z.unknown())
104
+ .default([])
105
+ .describe("Function arguments. For explicit types: {type: 'uint'|'int'|'principal'|..., value: ...}"),
106
+ senderAddress: z.string().optional().describe("Optional sender address for the call"),
107
+ },
108
+ }, async ({ contractId, functionName, functionArgs, senderAddress }) => {
109
+ try {
110
+ const hiro = getHiroApi(NETWORK);
111
+ const clarityArgs = functionArgs.map(parseArgToClarityValue);
112
+ const sender = senderAddress || contractId.split(".")[0];
113
+ const result = await hiro.callReadOnlyFunction(contractId, functionName, clarityArgs, sender);
114
+ return createJsonResponse({
115
+ contractId,
116
+ function: functionName,
117
+ result: result.result,
118
+ okay: result.okay,
119
+ });
120
+ }
121
+ catch (error) {
122
+ return createErrorResponse(error);
123
+ }
124
+ });
125
+ }
126
+ //# sourceMappingURL=contract.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.tools.js","sourceRoot":"","sources":["../../src/tools/contract.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 registerDefiTools(server: McpServer): void;
3
+ //# sourceMappingURL=defi.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defi.tools.d.ts","sourceRoot":"","sources":["../../src/tools/defi.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsfzD"}