@aibtc/mcp-server 1.36.0 → 1.37.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/services/defi.service.d.ts.map +1 -1
- package/dist/services/defi.service.js +4 -17
- package/dist/services/defi.service.js.map +1 -1
- package/dist/services/wallet-manager.d.ts.map +1 -1
- package/dist/services/wallet-manager.js +7 -0
- package/dist/services/wallet-manager.js.map +1 -1
- package/dist/tools/contract.tools.d.ts.map +1 -1
- package/dist/tools/contract.tools.js +3 -2
- package/dist/tools/contract.tools.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jingswap.tools.d.ts +3 -0
- package/dist/tools/jingswap.tools.d.ts.map +1 -0
- package/dist/tools/jingswap.tools.js +471 -0
- package/dist/tools/jingswap.tools.js.map +1 -0
- package/dist/tools/nostr.tools.d.ts +3 -0
- package/dist/tools/nostr.tools.d.ts.map +1 -0
- package/dist/tools/nostr.tools.js +409 -0
- package/dist/tools/nostr.tools.js.map +1 -0
- package/dist/tools/ordinals-p2p.tools.d.ts +21 -0
- package/dist/tools/ordinals-p2p.tools.d.ts.map +1 -0
- package/dist/tools/ordinals-p2p.tools.js +621 -0
- package/dist/tools/ordinals-p2p.tools.js.map +1 -0
- package/dist/tools/relay-diagnostic.tools.d.ts.map +1 -1
- package/dist/tools/relay-diagnostic.tools.js +27 -4
- package/dist/tools/relay-diagnostic.tools.js.map +1 -1
- package/dist/tools/skill-mappings.d.ts.map +1 -1
- package/dist/tools/skill-mappings.js +13 -1
- package/dist/tools/skill-mappings.js.map +1 -1
- package/dist/tools/stacks-market.tools.d.ts +22 -0
- package/dist/tools/stacks-market.tools.d.ts.map +1 -0
- package/dist/tools/stacks-market.tools.js +630 -0
- package/dist/tools/stacks-market.tools.js.map +1 -0
- package/dist/tools/taproot-multisig.tools.d.ts +17 -0
- package/dist/tools/taproot-multisig.tools.d.ts.map +1 -0
- package/dist/tools/taproot-multisig.tools.js +236 -0
- package/dist/tools/taproot-multisig.tools.js.map +1 -0
- package/dist/tools/transfer.tools.js +1 -1
- package/dist/tools/transfer.tools.js.map +1 -1
- package/dist/transactions/builder.d.ts +35 -1
- package/dist/transactions/builder.d.ts.map +1 -1
- package/dist/transactions/builder.js +153 -4
- package/dist/transactions/builder.js.map +1 -1
- package/dist/utils/fee.d.ts +15 -0
- package/dist/utils/fee.d.ts.map +1 -1
- package/dist/utils/fee.js +36 -4
- package/dist/utils/fee.js.map +1 -1
- package/package.json +4 -1
- package/skill/SKILL.md +1 -1
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stacks Market prediction market tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for prediction market trading on stacksmarket.app via the
|
|
5
|
+
* market-factory-v18-bias contract.
|
|
6
|
+
*
|
|
7
|
+
* Tools:
|
|
8
|
+
* - stacks_market_list — List markets with optional filters
|
|
9
|
+
* - stacks_market_search — Keyword search across market titles/descriptions
|
|
10
|
+
* - stacks_market_get — Full details for a specific market
|
|
11
|
+
* - stacks_market_quote_buy — LMSR price quote for buying YES/NO shares
|
|
12
|
+
* - stacks_market_quote_sell — LMSR price quote for selling YES/NO shares
|
|
13
|
+
* - stacks_market_buy_yes — Buy YES shares with slippage protection
|
|
14
|
+
* - stacks_market_buy_no — Buy NO shares with slippage protection
|
|
15
|
+
* - stacks_market_sell_yes — Sell YES shares with minimum proceeds guard
|
|
16
|
+
* - stacks_market_sell_no — Sell NO shares with minimum proceeds guard
|
|
17
|
+
* - stacks_market_redeem — Redeem winning shares after market resolution
|
|
18
|
+
* - stacks_market_get_position — Check YES/NO share balances for any address
|
|
19
|
+
*/
|
|
20
|
+
import { z } from "zod";
|
|
21
|
+
import { NETWORK, getExplorerTxUrl } from "../config/networks.js";
|
|
22
|
+
import { createJsonResponse, createErrorResponse } from "../utils/index.js";
|
|
23
|
+
import { getAccount, getWalletAddress } from "../services/x402.service.js";
|
|
24
|
+
import { callContract } from "../transactions/builder.js";
|
|
25
|
+
import { uintCV, principalCV, PostConditionMode, deserializeCV, cvToJSON, } from "@stacks/transactions";
|
|
26
|
+
import { getHiroApi } from "../services/hiro-api.js";
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Constants
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
const STACKS_MARKET_API = "https://api.stacksmarket.app";
|
|
31
|
+
const MARKET_CONTRACT_ADDRESS = "SP3N5CN0PE7YRRP29X7K9XG22BT861BRS5BN8HFFA";
|
|
32
|
+
const MARKET_CONTRACT_NAME = "market-factory-v18-bias";
|
|
33
|
+
const MARKET_CONTRACT_ID = `${MARKET_CONTRACT_ADDRESS}.${MARKET_CONTRACT_NAME}`;
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Helpers
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
async function fetchMarketApi(path, params) {
|
|
38
|
+
const url = new URL(`${STACKS_MARKET_API}${path}`);
|
|
39
|
+
if (params) {
|
|
40
|
+
for (const [key, value] of Object.entries(params)) {
|
|
41
|
+
url.searchParams.set(key, value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const response = await fetch(url.toString());
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
throw new Error(`Stacks Market API error (${response.status}): ${await response.text()}`);
|
|
47
|
+
}
|
|
48
|
+
return response.json();
|
|
49
|
+
}
|
|
50
|
+
async function callReadOnly(functionName, args) {
|
|
51
|
+
const hiro = getHiroApi(NETWORK);
|
|
52
|
+
const result = await hiro.callReadOnlyFunction(MARKET_CONTRACT_ID, functionName, args, MARKET_CONTRACT_ADDRESS);
|
|
53
|
+
if (!result.okay) {
|
|
54
|
+
throw new Error(`Read-only call ${functionName} failed: ${result.cause ?? "unknown error"}`);
|
|
55
|
+
}
|
|
56
|
+
if (!result.result) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const hex = result.result.startsWith("0x")
|
|
60
|
+
? result.result.slice(2)
|
|
61
|
+
: result.result;
|
|
62
|
+
const cv = deserializeCV(Buffer.from(hex, "hex"));
|
|
63
|
+
return cvToJSON(cv);
|
|
64
|
+
}
|
|
65
|
+
function parseUintResult(val) {
|
|
66
|
+
if (val === null || val === undefined)
|
|
67
|
+
return 0;
|
|
68
|
+
if (typeof val === "object" &&
|
|
69
|
+
val !== null &&
|
|
70
|
+
"value" in val) {
|
|
71
|
+
return Number(val.value);
|
|
72
|
+
}
|
|
73
|
+
return Number(val);
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Tool registration
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
export function registerStacksMarketTools(server) {
|
|
79
|
+
// ==========================================================================
|
|
80
|
+
// stacks_market_list
|
|
81
|
+
// ==========================================================================
|
|
82
|
+
server.registerTool("stacks_market_list", {
|
|
83
|
+
description: `List prediction markets on stacksmarket.app.
|
|
84
|
+
|
|
85
|
+
Returns a paginated list of markets with optional filtering by status, category, or featured flag.
|
|
86
|
+
|
|
87
|
+
Note: Stacks Market is only available on mainnet.`,
|
|
88
|
+
inputSchema: {
|
|
89
|
+
limit: z
|
|
90
|
+
.number()
|
|
91
|
+
.optional()
|
|
92
|
+
.default(20)
|
|
93
|
+
.describe("Maximum number of markets to return (default 20)"),
|
|
94
|
+
status: z
|
|
95
|
+
.string()
|
|
96
|
+
.optional()
|
|
97
|
+
.describe("Filter by market status: 'open', 'closed', 'resolved', or 'all'"),
|
|
98
|
+
category: z
|
|
99
|
+
.string()
|
|
100
|
+
.optional()
|
|
101
|
+
.describe("Filter by category (e.g. 'crypto', 'sports', 'politics')"),
|
|
102
|
+
featured: z
|
|
103
|
+
.boolean()
|
|
104
|
+
.optional()
|
|
105
|
+
.describe("When true, return only featured markets"),
|
|
106
|
+
},
|
|
107
|
+
}, async ({ limit, status, category, featured }) => {
|
|
108
|
+
try {
|
|
109
|
+
if (NETWORK !== "mainnet") {
|
|
110
|
+
return createJsonResponse({
|
|
111
|
+
error: "Stacks Market is only available on mainnet",
|
|
112
|
+
network: NETWORK,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const params = {
|
|
116
|
+
limit: String(limit ?? 20),
|
|
117
|
+
};
|
|
118
|
+
if (status)
|
|
119
|
+
params.status = status;
|
|
120
|
+
if (category)
|
|
121
|
+
params.category = category;
|
|
122
|
+
if (featured !== undefined)
|
|
123
|
+
params.featured = String(featured);
|
|
124
|
+
const data = await fetchMarketApi("/api/polls", params);
|
|
125
|
+
return createJsonResponse({ network: NETWORK, markets: data });
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
return createErrorResponse(error);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
// ==========================================================================
|
|
132
|
+
// stacks_market_search
|
|
133
|
+
// ==========================================================================
|
|
134
|
+
server.registerTool("stacks_market_search", {
|
|
135
|
+
description: `Search prediction markets by keyword on stacksmarket.app.
|
|
136
|
+
|
|
137
|
+
Searches across market titles and descriptions.
|
|
138
|
+
|
|
139
|
+
Note: Stacks Market is only available on mainnet.`,
|
|
140
|
+
inputSchema: {
|
|
141
|
+
query: z.string().describe("Search keyword or phrase"),
|
|
142
|
+
limit: z
|
|
143
|
+
.number()
|
|
144
|
+
.optional()
|
|
145
|
+
.default(20)
|
|
146
|
+
.describe("Maximum number of results to return (default 20)"),
|
|
147
|
+
},
|
|
148
|
+
}, async ({ query, limit }) => {
|
|
149
|
+
try {
|
|
150
|
+
if (NETWORK !== "mainnet") {
|
|
151
|
+
return createJsonResponse({
|
|
152
|
+
error: "Stacks Market is only available on mainnet",
|
|
153
|
+
network: NETWORK,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const data = await fetchMarketApi("/api/polls/search", {
|
|
157
|
+
query,
|
|
158
|
+
limit: String(limit ?? 20),
|
|
159
|
+
});
|
|
160
|
+
return createJsonResponse({ network: NETWORK, results: data });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return createErrorResponse(error);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
// ==========================================================================
|
|
167
|
+
// stacks_market_get
|
|
168
|
+
// ==========================================================================
|
|
169
|
+
server.registerTool("stacks_market_get", {
|
|
170
|
+
description: `Get full details for a specific prediction market on stacksmarket.app.
|
|
171
|
+
|
|
172
|
+
Market IDs are epoch millisecond timestamps (uint) visible in market URLs.
|
|
173
|
+
|
|
174
|
+
Note: Stacks Market is only available on mainnet.`,
|
|
175
|
+
inputSchema: {
|
|
176
|
+
market_id: z
|
|
177
|
+
.string()
|
|
178
|
+
.describe("Market ID (epoch ms timestamp, e.g. '1710000000000')"),
|
|
179
|
+
},
|
|
180
|
+
}, async ({ market_id }) => {
|
|
181
|
+
try {
|
|
182
|
+
if (NETWORK !== "mainnet") {
|
|
183
|
+
return createJsonResponse({
|
|
184
|
+
error: "Stacks Market is only available on mainnet",
|
|
185
|
+
network: NETWORK,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
const data = await fetchMarketApi(`/api/polls/${market_id}`);
|
|
189
|
+
return createJsonResponse({ network: NETWORK, market: data });
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
return createErrorResponse(error);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
// ==========================================================================
|
|
196
|
+
// stacks_market_quote_buy
|
|
197
|
+
// ==========================================================================
|
|
198
|
+
server.registerTool("stacks_market_quote_buy", {
|
|
199
|
+
description: `Get an LMSR buy price quote for YES or NO shares on a Stacks Market prediction market.
|
|
200
|
+
|
|
201
|
+
Returns the cost in micro-STX to buy the requested number of shares.
|
|
202
|
+
Side: 0 = YES, 1 = NO.
|
|
203
|
+
|
|
204
|
+
Note: Stacks Market is only available on mainnet.`,
|
|
205
|
+
inputSchema: {
|
|
206
|
+
market_id: z
|
|
207
|
+
.string()
|
|
208
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
209
|
+
shares: z
|
|
210
|
+
.string()
|
|
211
|
+
.describe("Number of shares to price (integer, smallest unit)"),
|
|
212
|
+
side: z
|
|
213
|
+
.number()
|
|
214
|
+
.min(0)
|
|
215
|
+
.max(1)
|
|
216
|
+
.describe("0 = YES shares, 1 = NO shares"),
|
|
217
|
+
},
|
|
218
|
+
}, async ({ market_id, shares, side }) => {
|
|
219
|
+
try {
|
|
220
|
+
if (NETWORK !== "mainnet") {
|
|
221
|
+
return createJsonResponse({
|
|
222
|
+
error: "Stacks Market is only available on mainnet",
|
|
223
|
+
network: NETWORK,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
const result = await callReadOnly("get-buy-price", [
|
|
227
|
+
uintCV(BigInt(market_id)),
|
|
228
|
+
uintCV(BigInt(shares)),
|
|
229
|
+
uintCV(BigInt(side)),
|
|
230
|
+
]);
|
|
231
|
+
const cost = parseUintResult(result);
|
|
232
|
+
return createJsonResponse({
|
|
233
|
+
network: NETWORK,
|
|
234
|
+
market_id,
|
|
235
|
+
shares,
|
|
236
|
+
side: side === 0 ? "YES" : "NO",
|
|
237
|
+
cost_ustx: cost,
|
|
238
|
+
cost_stx: cost / 1_000_000,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
return createErrorResponse(error);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
// ==========================================================================
|
|
246
|
+
// stacks_market_quote_sell
|
|
247
|
+
// ==========================================================================
|
|
248
|
+
server.registerTool("stacks_market_quote_sell", {
|
|
249
|
+
description: `Get an LMSR sell price quote for YES or NO shares on a Stacks Market prediction market.
|
|
250
|
+
|
|
251
|
+
Returns the proceeds in micro-STX for selling the requested number of shares.
|
|
252
|
+
Side: 0 = YES, 1 = NO.
|
|
253
|
+
|
|
254
|
+
Note: Stacks Market is only available on mainnet.`,
|
|
255
|
+
inputSchema: {
|
|
256
|
+
market_id: z
|
|
257
|
+
.string()
|
|
258
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
259
|
+
shares: z
|
|
260
|
+
.string()
|
|
261
|
+
.describe("Number of shares to price (integer, smallest unit)"),
|
|
262
|
+
side: z
|
|
263
|
+
.number()
|
|
264
|
+
.min(0)
|
|
265
|
+
.max(1)
|
|
266
|
+
.describe("0 = YES shares, 1 = NO shares"),
|
|
267
|
+
},
|
|
268
|
+
}, async ({ market_id, shares, side }) => {
|
|
269
|
+
try {
|
|
270
|
+
if (NETWORK !== "mainnet") {
|
|
271
|
+
return createJsonResponse({
|
|
272
|
+
error: "Stacks Market is only available on mainnet",
|
|
273
|
+
network: NETWORK,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
const result = await callReadOnly("get-sell-price", [
|
|
277
|
+
uintCV(BigInt(market_id)),
|
|
278
|
+
uintCV(BigInt(shares)),
|
|
279
|
+
uintCV(BigInt(side)),
|
|
280
|
+
]);
|
|
281
|
+
const proceeds = parseUintResult(result);
|
|
282
|
+
return createJsonResponse({
|
|
283
|
+
network: NETWORK,
|
|
284
|
+
market_id,
|
|
285
|
+
shares,
|
|
286
|
+
side: side === 0 ? "YES" : "NO",
|
|
287
|
+
proceeds_ustx: proceeds,
|
|
288
|
+
proceeds_stx: proceeds / 1_000_000,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
return createErrorResponse(error);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
// ==========================================================================
|
|
296
|
+
// stacks_market_buy_yes
|
|
297
|
+
// ==========================================================================
|
|
298
|
+
server.registerTool("stacks_market_buy_yes", {
|
|
299
|
+
description: `Buy YES shares in a Stacks Market prediction market.
|
|
300
|
+
|
|
301
|
+
Uses the buy-yes-auto function with slippage protection via a max-cost cap.
|
|
302
|
+
The transaction will fail if the cost exceeds max_cost_ustx.
|
|
303
|
+
|
|
304
|
+
Requires an unlocked wallet. Only available on mainnet.`,
|
|
305
|
+
inputSchema: {
|
|
306
|
+
market_id: z
|
|
307
|
+
.string()
|
|
308
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
309
|
+
shares: z
|
|
310
|
+
.string()
|
|
311
|
+
.describe("Number of YES shares to buy (integer, smallest unit)"),
|
|
312
|
+
target_cap_ustx: z
|
|
313
|
+
.string()
|
|
314
|
+
.describe("Target liquidity cap in micro-STX (use current market cap from stacks_market_get)"),
|
|
315
|
+
max_cost_ustx: z
|
|
316
|
+
.string()
|
|
317
|
+
.describe("Maximum cost in micro-STX you are willing to pay (slippage protection)"),
|
|
318
|
+
},
|
|
319
|
+
}, async ({ market_id, shares, target_cap_ustx, max_cost_ustx }) => {
|
|
320
|
+
try {
|
|
321
|
+
if (NETWORK !== "mainnet") {
|
|
322
|
+
return createJsonResponse({
|
|
323
|
+
error: "Stacks Market is only available on mainnet",
|
|
324
|
+
network: NETWORK,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
const account = await getAccount();
|
|
328
|
+
const result = await callContract(account, {
|
|
329
|
+
contractAddress: MARKET_CONTRACT_ADDRESS,
|
|
330
|
+
contractName: MARKET_CONTRACT_NAME,
|
|
331
|
+
functionName: "buy-yes-auto",
|
|
332
|
+
functionArgs: [
|
|
333
|
+
uintCV(BigInt(market_id)),
|
|
334
|
+
uintCV(BigInt(shares)),
|
|
335
|
+
uintCV(BigInt(target_cap_ustx)),
|
|
336
|
+
uintCV(BigInt(max_cost_ustx)),
|
|
337
|
+
],
|
|
338
|
+
postConditionMode: PostConditionMode.Allow,
|
|
339
|
+
});
|
|
340
|
+
return createJsonResponse({
|
|
341
|
+
success: true,
|
|
342
|
+
txid: result.txid,
|
|
343
|
+
action: "buy-yes",
|
|
344
|
+
market_id,
|
|
345
|
+
shares,
|
|
346
|
+
max_cost_ustx,
|
|
347
|
+
network: NETWORK,
|
|
348
|
+
explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
return createErrorResponse(error);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
// ==========================================================================
|
|
356
|
+
// stacks_market_buy_no
|
|
357
|
+
// ==========================================================================
|
|
358
|
+
server.registerTool("stacks_market_buy_no", {
|
|
359
|
+
description: `Buy NO shares in a Stacks Market prediction market.
|
|
360
|
+
|
|
361
|
+
Uses the buy-no-auto function with slippage protection via a max-cost cap.
|
|
362
|
+
The transaction will fail if the cost exceeds max_cost_ustx.
|
|
363
|
+
|
|
364
|
+
Requires an unlocked wallet. Only available on mainnet.`,
|
|
365
|
+
inputSchema: {
|
|
366
|
+
market_id: z
|
|
367
|
+
.string()
|
|
368
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
369
|
+
shares: z
|
|
370
|
+
.string()
|
|
371
|
+
.describe("Number of NO shares to buy (integer, smallest unit)"),
|
|
372
|
+
target_cap_ustx: z
|
|
373
|
+
.string()
|
|
374
|
+
.describe("Target liquidity cap in micro-STX (use current market cap from stacks_market_get)"),
|
|
375
|
+
max_cost_ustx: z
|
|
376
|
+
.string()
|
|
377
|
+
.describe("Maximum cost in micro-STX you are willing to pay (slippage protection)"),
|
|
378
|
+
},
|
|
379
|
+
}, async ({ market_id, shares, target_cap_ustx, max_cost_ustx }) => {
|
|
380
|
+
try {
|
|
381
|
+
if (NETWORK !== "mainnet") {
|
|
382
|
+
return createJsonResponse({
|
|
383
|
+
error: "Stacks Market is only available on mainnet",
|
|
384
|
+
network: NETWORK,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
const account = await getAccount();
|
|
388
|
+
const result = await callContract(account, {
|
|
389
|
+
contractAddress: MARKET_CONTRACT_ADDRESS,
|
|
390
|
+
contractName: MARKET_CONTRACT_NAME,
|
|
391
|
+
functionName: "buy-no-auto",
|
|
392
|
+
functionArgs: [
|
|
393
|
+
uintCV(BigInt(market_id)),
|
|
394
|
+
uintCV(BigInt(shares)),
|
|
395
|
+
uintCV(BigInt(target_cap_ustx)),
|
|
396
|
+
uintCV(BigInt(max_cost_ustx)),
|
|
397
|
+
],
|
|
398
|
+
postConditionMode: PostConditionMode.Allow,
|
|
399
|
+
});
|
|
400
|
+
return createJsonResponse({
|
|
401
|
+
success: true,
|
|
402
|
+
txid: result.txid,
|
|
403
|
+
action: "buy-no",
|
|
404
|
+
market_id,
|
|
405
|
+
shares,
|
|
406
|
+
max_cost_ustx,
|
|
407
|
+
network: NETWORK,
|
|
408
|
+
explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
return createErrorResponse(error);
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
// ==========================================================================
|
|
416
|
+
// stacks_market_sell_yes
|
|
417
|
+
// ==========================================================================
|
|
418
|
+
server.registerTool("stacks_market_sell_yes", {
|
|
419
|
+
description: `Sell YES shares in a Stacks Market prediction market.
|
|
420
|
+
|
|
421
|
+
Uses the sell-yes-auto function with a minimum proceeds guard.
|
|
422
|
+
The transaction will fail if proceeds fall below min_proceeds_ustx.
|
|
423
|
+
|
|
424
|
+
Requires an unlocked wallet. Only available on mainnet.`,
|
|
425
|
+
inputSchema: {
|
|
426
|
+
market_id: z
|
|
427
|
+
.string()
|
|
428
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
429
|
+
shares: z
|
|
430
|
+
.string()
|
|
431
|
+
.describe("Number of YES shares to sell (integer, smallest unit)"),
|
|
432
|
+
min_proceeds_ustx: z
|
|
433
|
+
.string()
|
|
434
|
+
.describe("Minimum acceptable proceeds in micro-STX (slippage protection)"),
|
|
435
|
+
},
|
|
436
|
+
}, async ({ market_id, shares, min_proceeds_ustx }) => {
|
|
437
|
+
try {
|
|
438
|
+
if (NETWORK !== "mainnet") {
|
|
439
|
+
return createJsonResponse({
|
|
440
|
+
error: "Stacks Market is only available on mainnet",
|
|
441
|
+
network: NETWORK,
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
const account = await getAccount();
|
|
445
|
+
const result = await callContract(account, {
|
|
446
|
+
contractAddress: MARKET_CONTRACT_ADDRESS,
|
|
447
|
+
contractName: MARKET_CONTRACT_NAME,
|
|
448
|
+
functionName: "sell-yes-auto",
|
|
449
|
+
functionArgs: [
|
|
450
|
+
uintCV(BigInt(market_id)),
|
|
451
|
+
uintCV(BigInt(shares)),
|
|
452
|
+
uintCV(BigInt(min_proceeds_ustx)),
|
|
453
|
+
],
|
|
454
|
+
postConditionMode: PostConditionMode.Allow,
|
|
455
|
+
});
|
|
456
|
+
return createJsonResponse({
|
|
457
|
+
success: true,
|
|
458
|
+
txid: result.txid,
|
|
459
|
+
action: "sell-yes",
|
|
460
|
+
market_id,
|
|
461
|
+
shares,
|
|
462
|
+
min_proceeds_ustx,
|
|
463
|
+
network: NETWORK,
|
|
464
|
+
explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
return createErrorResponse(error);
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
// ==========================================================================
|
|
472
|
+
// stacks_market_sell_no
|
|
473
|
+
// ==========================================================================
|
|
474
|
+
server.registerTool("stacks_market_sell_no", {
|
|
475
|
+
description: `Sell NO shares in a Stacks Market prediction market.
|
|
476
|
+
|
|
477
|
+
Uses the sell-no-auto function with a minimum proceeds guard.
|
|
478
|
+
The transaction will fail if proceeds fall below min_proceeds_ustx.
|
|
479
|
+
|
|
480
|
+
Requires an unlocked wallet. Only available on mainnet.`,
|
|
481
|
+
inputSchema: {
|
|
482
|
+
market_id: z
|
|
483
|
+
.string()
|
|
484
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
485
|
+
shares: z
|
|
486
|
+
.string()
|
|
487
|
+
.describe("Number of NO shares to sell (integer, smallest unit)"),
|
|
488
|
+
min_proceeds_ustx: z
|
|
489
|
+
.string()
|
|
490
|
+
.describe("Minimum acceptable proceeds in micro-STX (slippage protection)"),
|
|
491
|
+
},
|
|
492
|
+
}, async ({ market_id, shares, min_proceeds_ustx }) => {
|
|
493
|
+
try {
|
|
494
|
+
if (NETWORK !== "mainnet") {
|
|
495
|
+
return createJsonResponse({
|
|
496
|
+
error: "Stacks Market is only available on mainnet",
|
|
497
|
+
network: NETWORK,
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
const account = await getAccount();
|
|
501
|
+
const result = await callContract(account, {
|
|
502
|
+
contractAddress: MARKET_CONTRACT_ADDRESS,
|
|
503
|
+
contractName: MARKET_CONTRACT_NAME,
|
|
504
|
+
functionName: "sell-no-auto",
|
|
505
|
+
functionArgs: [
|
|
506
|
+
uintCV(BigInt(market_id)),
|
|
507
|
+
uintCV(BigInt(shares)),
|
|
508
|
+
uintCV(BigInt(min_proceeds_ustx)),
|
|
509
|
+
],
|
|
510
|
+
postConditionMode: PostConditionMode.Allow,
|
|
511
|
+
});
|
|
512
|
+
return createJsonResponse({
|
|
513
|
+
success: true,
|
|
514
|
+
txid: result.txid,
|
|
515
|
+
action: "sell-no",
|
|
516
|
+
market_id,
|
|
517
|
+
shares,
|
|
518
|
+
min_proceeds_ustx,
|
|
519
|
+
network: NETWORK,
|
|
520
|
+
explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
return createErrorResponse(error);
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
// ==========================================================================
|
|
528
|
+
// stacks_market_redeem
|
|
529
|
+
// ==========================================================================
|
|
530
|
+
server.registerTool("stacks_market_redeem", {
|
|
531
|
+
description: `Redeem winning shares after a Stacks Market prediction market is resolved.
|
|
532
|
+
|
|
533
|
+
Call this after the market has been resolved to claim STX for the winning side shares you hold.
|
|
534
|
+
|
|
535
|
+
Requires an unlocked wallet. Only available on mainnet.`,
|
|
536
|
+
inputSchema: {
|
|
537
|
+
market_id: z
|
|
538
|
+
.string()
|
|
539
|
+
.describe("Market ID (epoch ms timestamp) of the resolved market"),
|
|
540
|
+
},
|
|
541
|
+
}, async ({ market_id }) => {
|
|
542
|
+
try {
|
|
543
|
+
if (NETWORK !== "mainnet") {
|
|
544
|
+
return createJsonResponse({
|
|
545
|
+
error: "Stacks Market is only available on mainnet",
|
|
546
|
+
network: NETWORK,
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
const account = await getAccount();
|
|
550
|
+
const result = await callContract(account, {
|
|
551
|
+
contractAddress: MARKET_CONTRACT_ADDRESS,
|
|
552
|
+
contractName: MARKET_CONTRACT_NAME,
|
|
553
|
+
functionName: "redeem",
|
|
554
|
+
functionArgs: [uintCV(BigInt(market_id))],
|
|
555
|
+
postConditionMode: PostConditionMode.Allow,
|
|
556
|
+
});
|
|
557
|
+
return createJsonResponse({
|
|
558
|
+
success: true,
|
|
559
|
+
txid: result.txid,
|
|
560
|
+
action: "redeem",
|
|
561
|
+
market_id,
|
|
562
|
+
network: NETWORK,
|
|
563
|
+
explorerUrl: getExplorerTxUrl(result.txid, NETWORK),
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
catch (error) {
|
|
567
|
+
return createErrorResponse(error);
|
|
568
|
+
}
|
|
569
|
+
});
|
|
570
|
+
// ==========================================================================
|
|
571
|
+
// stacks_market_get_position
|
|
572
|
+
// ==========================================================================
|
|
573
|
+
server.registerTool("stacks_market_get_position", {
|
|
574
|
+
description: `Check YES and NO share balances for an address in a Stacks Market prediction market.
|
|
575
|
+
|
|
576
|
+
If no address is provided, uses the currently configured wallet address.
|
|
577
|
+
No wallet required when an address is explicitly supplied.
|
|
578
|
+
|
|
579
|
+
Note: Stacks Market is only available on mainnet.`,
|
|
580
|
+
inputSchema: {
|
|
581
|
+
market_id: z
|
|
582
|
+
.string()
|
|
583
|
+
.describe("Market ID (epoch ms timestamp)"),
|
|
584
|
+
address: z
|
|
585
|
+
.string()
|
|
586
|
+
.optional()
|
|
587
|
+
.describe("Stacks address to check position for. Uses configured wallet if not provided."),
|
|
588
|
+
},
|
|
589
|
+
}, async ({ market_id, address }) => {
|
|
590
|
+
try {
|
|
591
|
+
if (NETWORK !== "mainnet") {
|
|
592
|
+
return createJsonResponse({
|
|
593
|
+
error: "Stacks Market is only available on mainnet",
|
|
594
|
+
network: NETWORK,
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
const walletAddress = address || (await getWalletAddress());
|
|
598
|
+
const hiro = getHiroApi(NETWORK);
|
|
599
|
+
const [yesRes, noRes] = await Promise.all([
|
|
600
|
+
hiro.callReadOnlyFunction(MARKET_CONTRACT_ID, "get-yes-balance", [uintCV(BigInt(market_id)), principalCV(walletAddress)], MARKET_CONTRACT_ADDRESS),
|
|
601
|
+
hiro.callReadOnlyFunction(MARKET_CONTRACT_ID, "get-no-balance", [uintCV(BigInt(market_id)), principalCV(walletAddress)], MARKET_CONTRACT_ADDRESS),
|
|
602
|
+
]);
|
|
603
|
+
if (!yesRes.okay) {
|
|
604
|
+
throw new Error(`Failed to fetch YES balance for market ${market_id}: ${yesRes.cause ?? "unknown error"}`);
|
|
605
|
+
}
|
|
606
|
+
if (!noRes.okay) {
|
|
607
|
+
throw new Error(`Failed to fetch NO balance for market ${market_id}: ${noRes.cause ?? "unknown error"}`);
|
|
608
|
+
}
|
|
609
|
+
const yesBalance = yesRes.result
|
|
610
|
+
? parseUintResult(cvToJSON(deserializeCV(Buffer.from(yesRes.result.startsWith("0x") ? yesRes.result.slice(2) : yesRes.result, "hex"))))
|
|
611
|
+
: 0;
|
|
612
|
+
const noBalance = noRes.result
|
|
613
|
+
? parseUintResult(cvToJSON(deserializeCV(Buffer.from(noRes.result.startsWith("0x") ? noRes.result.slice(2) : noRes.result, "hex"))))
|
|
614
|
+
: 0;
|
|
615
|
+
return createJsonResponse({
|
|
616
|
+
network: NETWORK,
|
|
617
|
+
market_id,
|
|
618
|
+
address: walletAddress,
|
|
619
|
+
position: {
|
|
620
|
+
yes_shares: yesBalance,
|
|
621
|
+
no_shares: noBalance,
|
|
622
|
+
},
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
catch (error) {
|
|
626
|
+
return createErrorResponse(error);
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
//# sourceMappingURL=stacks-market.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacks-market.tools.js","sourceRoot":"","sources":["../../src/tools/stacks-market.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taproot Multisig Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tools for Taproot M-of-N multisig coordination between agents.
|
|
5
|
+
*
|
|
6
|
+
* - taproot_get_pubkey: Derive the x-only Taproot public key from the active wallet
|
|
7
|
+
* (BIP-86 path m/86'/0'/0'/0/0). Requires wallet unlock.
|
|
8
|
+
*
|
|
9
|
+
* - taproot_verify_cosig: Verify a Schnorr signature against a BIP-341 sighash.
|
|
10
|
+
* Read-only — no wallet needed.
|
|
11
|
+
*
|
|
12
|
+
* - taproot_multisig_guide: Return a step-by-step guide for M-of-N Taproot multisig
|
|
13
|
+
* coordination using OP_CHECKSIGADD (BIP-341/342). Read-only.
|
|
14
|
+
*/
|
|
15
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
16
|
+
export declare function registerTaprootMultisigTools(server: McpServer): void;
|
|
17
|
+
//# sourceMappingURL=taproot-multisig.tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taproot-multisig.tools.d.ts","sourceRoot":"","sources":["../../src/tools/taproot-multisig.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoQpE"}
|