@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.
- package/README.md +340 -0
- package/dist/api.d.ts +9 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +79 -0
- package/dist/api.js.map +1 -0
- package/dist/config/contracts.d.ts +169 -0
- package/dist/config/contracts.d.ts.map +1 -0
- package/dist/config/contracts.js +250 -0
- package/dist/config/contracts.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/networks.d.ts +11 -0
- package/dist/config/networks.d.ts.map +1 -0
- package/dist/config/networks.js +21 -0
- package/dist/config/networks.js.map +1 -0
- package/dist/endpoints/index.d.ts +2 -0
- package/dist/endpoints/index.d.ts.map +1 -0
- package/dist/endpoints/index.js +2 -0
- package/dist/endpoints/index.js.map +1 -0
- package/dist/endpoints/registry.d.ts +38 -0
- package/dist/endpoints/registry.d.ts.map +1 -0
- package/dist/endpoints/registry.js +935 -0
- package/dist/endpoints/registry.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/services/bitflow.service.d.ts +159 -0
- package/dist/services/bitflow.service.d.ts.map +1 -0
- package/dist/services/bitflow.service.js +325 -0
- package/dist/services/bitflow.service.js.map +1 -0
- package/dist/services/bns.service.d.ts +87 -0
- package/dist/services/bns.service.d.ts.map +1 -0
- package/dist/services/bns.service.js +312 -0
- package/dist/services/bns.service.js.map +1 -0
- package/dist/services/defi.service.d.ts +146 -0
- package/dist/services/defi.service.d.ts.map +1 -0
- package/dist/services/defi.service.js +461 -0
- package/dist/services/defi.service.js.map +1 -0
- package/dist/services/hiro-api.d.ts +438 -0
- package/dist/services/hiro-api.d.ts.map +1 -0
- package/dist/services/hiro-api.js +376 -0
- package/dist/services/hiro-api.js.map +1 -0
- package/dist/services/nft.service.d.ts +70 -0
- package/dist/services/nft.service.d.ts.map +1 -0
- package/dist/services/nft.service.js +148 -0
- package/dist/services/nft.service.js.map +1 -0
- package/dist/services/sbtc.service.d.ts +44 -0
- package/dist/services/sbtc.service.d.ts.map +1 -0
- package/dist/services/sbtc.service.js +100 -0
- package/dist/services/sbtc.service.js.map +1 -0
- package/dist/services/scaffold.service.d.ts +41 -0
- package/dist/services/scaffold.service.d.ts.map +1 -0
- package/dist/services/scaffold.service.js +1055 -0
- package/dist/services/scaffold.service.js.map +1 -0
- package/dist/services/stacking.service.d.ts +58 -0
- package/dist/services/stacking.service.d.ts.map +1 -0
- package/dist/services/stacking.service.js +153 -0
- package/dist/services/stacking.service.js.map +1 -0
- package/dist/services/tokens.service.d.ts +62 -0
- package/dist/services/tokens.service.d.ts.map +1 -0
- package/dist/services/tokens.service.js +119 -0
- package/dist/services/tokens.service.js.map +1 -0
- package/dist/services/wallet-manager.d.ts +107 -0
- package/dist/services/wallet-manager.d.ts.map +1 -0
- package/dist/services/wallet-manager.js +389 -0
- package/dist/services/wallet-manager.js.map +1 -0
- package/dist/services/x402.service.d.ts +26 -0
- package/dist/services/x402.service.d.ts.map +1 -0
- package/dist/services/x402.service.js +125 -0
- package/dist/services/x402.service.js.map +1 -0
- package/dist/tools/bitflow.tools.d.ts +3 -0
- package/dist/tools/bitflow.tools.d.ts.map +1 -0
- package/dist/tools/bitflow.tools.js +501 -0
- package/dist/tools/bitflow.tools.js.map +1 -0
- package/dist/tools/bns.tools.d.ts +3 -0
- package/dist/tools/bns.tools.d.ts.map +1 -0
- package/dist/tools/bns.tools.js +164 -0
- package/dist/tools/bns.tools.js.map +1 -0
- package/dist/tools/contract.tools.d.ts +3 -0
- package/dist/tools/contract.tools.d.ts.map +1 -0
- package/dist/tools/contract.tools.js +126 -0
- package/dist/tools/contract.tools.js.map +1 -0
- package/dist/tools/defi.tools.d.ts +3 -0
- package/dist/tools/defi.tools.d.ts.map +1 -0
- package/dist/tools/defi.tools.js +425 -0
- package/dist/tools/defi.tools.js.map +1 -0
- package/dist/tools/endpoint.tools.d.ts +3 -0
- package/dist/tools/endpoint.tools.d.ts.map +1 -0
- package/dist/tools/endpoint.tools.js +157 -0
- package/dist/tools/endpoint.tools.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/nft.tools.d.ts +3 -0
- package/dist/tools/nft.tools.d.ts.map +1 -0
- package/dist/tools/nft.tools.js +154 -0
- package/dist/tools/nft.tools.js.map +1 -0
- package/dist/tools/openrouter.tools.d.ts +3 -0
- package/dist/tools/openrouter.tools.d.ts.map +1 -0
- package/dist/tools/openrouter.tools.js +664 -0
- package/dist/tools/openrouter.tools.js.map +1 -0
- package/dist/tools/query.tools.d.ts +3 -0
- package/dist/tools/query.tools.d.ts.map +1 -0
- package/dist/tools/query.tools.js +209 -0
- package/dist/tools/query.tools.js.map +1 -0
- package/dist/tools/sbtc.tools.d.ts +3 -0
- package/dist/tools/sbtc.tools.d.ts.map +1 -0
- package/dist/tools/sbtc.tools.js +103 -0
- package/dist/tools/sbtc.tools.js.map +1 -0
- package/dist/tools/scaffold.tools.d.ts +3 -0
- package/dist/tools/scaffold.tools.d.ts.map +1 -0
- package/dist/tools/scaffold.tools.js +216 -0
- package/dist/tools/scaffold.tools.js.map +1 -0
- package/dist/tools/stacking.tools.d.ts +3 -0
- package/dist/tools/stacking.tools.d.ts.map +1 -0
- package/dist/tools/stacking.tools.js +112 -0
- package/dist/tools/stacking.tools.js.map +1 -0
- package/dist/tools/tokens.tools.d.ts +3 -0
- package/dist/tools/tokens.tools.d.ts.map +1 -0
- package/dist/tools/tokens.tools.js +154 -0
- package/dist/tools/tokens.tools.js.map +1 -0
- package/dist/tools/transfer.tools.d.ts +3 -0
- package/dist/tools/transfer.tools.d.ts.map +1 -0
- package/dist/tools/transfer.tools.js +62 -0
- package/dist/tools/transfer.tools.js.map +1 -0
- package/dist/tools/wallet-management.tools.d.ts +6 -0
- package/dist/tools/wallet-management.tools.d.ts.map +1 -0
- package/dist/tools/wallet-management.tools.js +390 -0
- package/dist/tools/wallet-management.tools.js.map +1 -0
- package/dist/tools/wallet.tools.d.ts +3 -0
- package/dist/tools/wallet.tools.d.ts.map +1 -0
- package/dist/tools/wallet.tools.js +105 -0
- package/dist/tools/wallet.tools.js.map +1 -0
- package/dist/transactions/builder.d.ts +56 -0
- package/dist/transactions/builder.d.ts.map +1 -0
- package/dist/transactions/builder.js +134 -0
- package/dist/transactions/builder.js.map +1 -0
- package/dist/transactions/clarity-values.d.ts +67 -0
- package/dist/transactions/clarity-values.d.ts.map +1 -0
- package/dist/transactions/clarity-values.js +169 -0
- package/dist/transactions/clarity-values.js.map +1 -0
- package/dist/transactions/post-conditions.d.ts +27 -0
- package/dist/transactions/post-conditions.d.ts.map +1 -0
- package/dist/transactions/post-conditions.js +101 -0
- package/dist/transactions/post-conditions.js.map +1 -0
- package/dist/utils/encryption.d.ts +33 -0
- package/dist/utils/encryption.d.ts.map +1 -0
- package/dist/utils/encryption.js +110 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/errors.d.ts +84 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +132 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/formatting.d.ts +51 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +114 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/storage.d.ts +90 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +196 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/validation.d.ts +67 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +74 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wallet.d.ts +86 -0
- package/dist/wallet.d.ts.map +1 -0
- package/dist/wallet.js +279 -0
- package/dist/wallet.js.map +1 -0
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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"}
|