@catalyst-team/poly-mcp 0.1.1 → 0.1.3

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 (107) hide show
  1. package/README.md +264 -21
  2. package/dist/errors.d.ts +11 -0
  3. package/dist/errors.d.ts.map +1 -1
  4. package/dist/errors.js +13 -2
  5. package/dist/errors.js.map +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +98 -5
  8. package/dist/index.js.map +1 -1
  9. package/dist/sdk-instance.d.ts +27 -0
  10. package/dist/sdk-instance.d.ts.map +1 -0
  11. package/dist/sdk-instance.js +64 -0
  12. package/dist/sdk-instance.js.map +1 -0
  13. package/dist/server.d.ts +13 -1
  14. package/dist/server.d.ts.map +1 -1
  15. package/dist/server.js +29 -27
  16. package/dist/server.js.map +1 -1
  17. package/dist/tools/guide.d.ts.map +1 -1
  18. package/dist/tools/guide.js +159 -1
  19. package/dist/tools/guide.js.map +1 -1
  20. package/dist/tools/index.d.ts +8 -4
  21. package/dist/tools/index.d.ts.map +1 -1
  22. package/dist/tools/index.js +20 -4
  23. package/dist/tools/index.js.map +1 -1
  24. package/dist/tools/insider-detection.d.ts +175 -0
  25. package/dist/tools/insider-detection.d.ts.map +1 -0
  26. package/dist/tools/insider-detection.js +654 -0
  27. package/dist/tools/insider-detection.js.map +1 -0
  28. package/dist/tools/insider-signals.d.ts +56 -0
  29. package/dist/tools/insider-signals.d.ts.map +1 -0
  30. package/dist/tools/insider-signals.js +170 -0
  31. package/dist/tools/insider-signals.js.map +1 -0
  32. package/dist/tools/market.d.ts +25 -1
  33. package/dist/tools/market.d.ts.map +1 -1
  34. package/dist/tools/market.js +504 -12
  35. package/dist/tools/market.js.map +1 -1
  36. package/dist/tools/onchain.d.ts +240 -0
  37. package/dist/tools/onchain.d.ts.map +1 -0
  38. package/dist/tools/onchain.js +610 -0
  39. package/dist/tools/onchain.js.map +1 -0
  40. package/dist/tools/order.d.ts.map +1 -1
  41. package/dist/tools/order.js +13 -6
  42. package/dist/tools/order.js.map +1 -1
  43. package/dist/tools/trade.d.ts +15 -0
  44. package/dist/tools/trade.d.ts.map +1 -1
  45. package/dist/tools/trade.js +216 -39
  46. package/dist/tools/trade.js.map +1 -1
  47. package/dist/tools/trader.d.ts +4 -1
  48. package/dist/tools/trader.d.ts.map +1 -1
  49. package/dist/tools/trader.js +316 -4
  50. package/dist/tools/trader.js.map +1 -1
  51. package/dist/tools/wallet-classification.d.ts +166 -0
  52. package/dist/tools/wallet-classification.d.ts.map +1 -0
  53. package/dist/tools/wallet-classification.js +455 -0
  54. package/dist/tools/wallet-classification.js.map +1 -0
  55. package/dist/tools/wallet.d.ts +56 -7
  56. package/dist/tools/wallet.d.ts.map +1 -1
  57. package/dist/tools/wallet.js +141 -20
  58. package/dist/tools/wallet.js.map +1 -1
  59. package/dist/types.d.ts +269 -10
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/wallet-manager.d.ts +67 -0
  62. package/dist/wallet-manager.d.ts.map +1 -0
  63. package/dist/wallet-manager.js +180 -0
  64. package/dist/wallet-manager.js.map +1 -0
  65. package/docs/01-mcp.md +554 -32
  66. package/docs/02-wallet-deep-research.md +344 -0
  67. package/docs/e2e-02/00-gap-analysis.md +211 -0
  68. package/docs/e2e-02/01-test-scenarios.md +530 -0
  69. package/docs/e2e-02/02-implementation-plan.md +190 -0
  70. package/docs/e2e-02/README.md +102 -0
  71. package/docs/reports/simonbanza-strategy-analysis-2025-12-25.md +420 -0
  72. package/docs/reports/smart-money-analysis-2025-12-23-cn.md +840 -0
  73. package/docs/reports/smart-money-trading-strategies-2025-12-25.md +440 -0
  74. package/docs/reports/weekly/01-v2.5.md +352 -0
  75. package/docs/reports/weekly/01.md +402 -0
  76. package/docs/reports/weekly/02-deep.md +558 -0
  77. package/docs/reports/weekly/02.md +505 -0
  78. package/docs/reports/weekly/03.md +437 -0
  79. package/docs/reports/weekly/04.md +418 -0
  80. package/docs/reports/weekly/05.md +485 -0
  81. package/docs/reports/weekly/06.md +436 -0
  82. package/docs/reports/weekly/07.md +381 -0
  83. package/docs/reports/weekly/08.md +502 -0
  84. package/docs/reports/weekly/09.md +441 -0
  85. package/docs/reports/weekly/10.md +511 -0
  86. package/docs/reports/weekly/README.md +188 -0
  87. package/docs/reports/weekly/prompt-v2.5.md +1019 -0
  88. package/docs/reports/weekly/prompt-v3.md +432 -0
  89. package/docs/reports/weekly/prompt.md +841 -0
  90. package/package.json +3 -2
  91. package/src/errors.ts +13 -2
  92. package/src/index.ts +286 -1
  93. package/src/sdk-instance.ts +78 -0
  94. package/src/server.ts +30 -28
  95. package/src/tools/guide.ts +160 -1
  96. package/src/tools/index.ts +65 -0
  97. package/src/tools/insider-detection.ts +899 -0
  98. package/src/tools/insider-signals.ts +213 -0
  99. package/src/tools/market.ts +569 -12
  100. package/src/tools/onchain.ts +738 -0
  101. package/src/tools/order.ts +25 -12
  102. package/src/tools/trade.ts +265 -53
  103. package/src/tools/trader.ts +350 -4
  104. package/src/tools/wallet-classification.ts +587 -0
  105. package/src/tools/wallet.ts +172 -23
  106. package/src/types.ts +294 -11
  107. package/src/wallet-manager.ts +209 -0
@@ -0,0 +1,610 @@
1
+ /**
2
+ * Onchain Tools - MCP tools for CTF (Conditional Token Framework) operations
3
+ *
4
+ * These tools use the OnchainService from poly-sdk:
5
+ * - Split: USDC -> YES + NO tokens
6
+ * - Merge: YES + NO tokens -> USDC
7
+ * - Redeem: Winning tokens -> USDC (after market resolution)
8
+ * - Position balance queries
9
+ * - Market resolution status
10
+ * - Gas estimation
11
+ *
12
+ * ## Token ID Auto-Discovery
13
+ *
14
+ * Polymarket CLOB markets use custom ERC-1155 token IDs that differ from
15
+ * standard CTF calculated positionIds. These tools auto-discover tokenIds
16
+ * from the CLOB API when not explicitly provided.
17
+ *
18
+ * ## Dynamic Outcome Names
19
+ *
20
+ * Markets can have different outcome names:
21
+ * - Yes/No (standard)
22
+ * - Up/Down (crypto short-term)
23
+ * - Team A/Team B (sports)
24
+ *
25
+ * The tools handle all outcome types dynamically.
26
+ */
27
+ import { OnchainService, } from '@catalyst-team/poly-sdk';
28
+ import { wrapError, McpToolError, ErrorCode, validateConditionId } from '../errors.js';
29
+ import { getWalletManager } from '../wallet-manager.js';
30
+ import { getMarketService } from '../sdk-instance.js';
31
+ /**
32
+ * Auto-discover tokenIds using poly-sdk's MarketService
33
+ *
34
+ * Uses MarketService.resolveMarketTokens() which fetches actual tokenIds from CLOB API.
35
+ *
36
+ * @param conditionId - Market condition ID
37
+ * @returns Resolved tokens with IDs and outcome names, or null if not found
38
+ */
39
+ async function resolveMarketTokens(conditionId) {
40
+ try {
41
+ const marketService = getMarketService();
42
+ const resolved = await marketService.resolveMarketTokens(conditionId);
43
+ if (!resolved) {
44
+ return null;
45
+ }
46
+ // Convert to CTFClient's TokenIds format (legacy naming)
47
+ return {
48
+ tokenIds: {
49
+ yesTokenId: resolved.primaryTokenId,
50
+ noTokenId: resolved.secondaryTokenId,
51
+ },
52
+ primaryOutcome: resolved.primaryOutcome,
53
+ secondaryOutcome: resolved.secondaryOutcome,
54
+ };
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ // ===== Tool Definitions =====
61
+ export const onchainToolDefinitions = [
62
+ {
63
+ name: 'ctf_split',
64
+ description: 'Split USDC into YES + NO tokens for a market. Requires USDC.e (bridged USDC) balance.',
65
+ inputSchema: {
66
+ type: 'object',
67
+ properties: {
68
+ conditionId: {
69
+ type: 'string',
70
+ description: 'Market condition ID (0x...)',
71
+ },
72
+ amount: {
73
+ type: 'string',
74
+ description: 'Amount of USDC to split (e.g., "100" for 100 USDC)',
75
+ },
76
+ },
77
+ required: ['conditionId', 'amount'],
78
+ },
79
+ },
80
+ {
81
+ name: 'ctf_merge',
82
+ description: `Merge primary + secondary tokens back to USDC.
83
+
84
+ TokenIds are auto-discovered from CLOB API if not provided.
85
+ Works with any outcome types (Yes/No, Up/Down, Team A/B, etc.).`,
86
+ inputSchema: {
87
+ type: 'object',
88
+ properties: {
89
+ conditionId: {
90
+ type: 'string',
91
+ description: 'Market condition ID (0x...)',
92
+ },
93
+ amount: {
94
+ type: 'string',
95
+ description: 'Number of token pairs to merge (e.g., "100" for 100 pairs)',
96
+ },
97
+ tokenIds: {
98
+ type: 'object',
99
+ description: 'Optional: Explicit token IDs {yesTokenId: string, noTokenId: string}. Auto-discovered if not provided.',
100
+ },
101
+ },
102
+ required: ['conditionId', 'amount'],
103
+ },
104
+ },
105
+ {
106
+ name: 'ctf_redeem',
107
+ description: `Redeem winning tokens after market resolution.
108
+
109
+ TokenIds are auto-discovered from CLOB API if not provided.
110
+ Outcome names are dynamic (Yes/No, Up/Down, Team A/B, etc.).`,
111
+ inputSchema: {
112
+ type: 'object',
113
+ properties: {
114
+ conditionId: {
115
+ type: 'string',
116
+ description: 'Market condition ID (0x...)',
117
+ },
118
+ tokenIds: {
119
+ type: 'object',
120
+ description: 'Optional: Explicit token IDs {yesTokenId: string, noTokenId: string}. Auto-discovered if not provided.',
121
+ },
122
+ outcome: {
123
+ type: 'string',
124
+ description: 'Optional: Specific outcome to redeem (e.g., "Yes", "Up", "Team A"). Uses market\'s actual outcome names.',
125
+ },
126
+ },
127
+ required: ['conditionId'],
128
+ },
129
+ },
130
+ {
131
+ name: 'get_position_balance',
132
+ description: `Get token balances for a market position.
133
+
134
+ TokenIds are auto-discovered from CLOB API if not provided.
135
+ Returns balances for both primary and secondary outcome tokens.`,
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ conditionId: {
140
+ type: 'string',
141
+ description: 'Market condition ID (0x...)',
142
+ },
143
+ tokenIds: {
144
+ type: 'object',
145
+ description: 'Optional: Explicit token IDs {yesTokenId: string, noTokenId: string}. Auto-discovered if not provided.',
146
+ },
147
+ },
148
+ required: ['conditionId'],
149
+ },
150
+ },
151
+ {
152
+ name: 'get_market_resolution',
153
+ description: 'Check if a market is resolved and get payout information.',
154
+ inputSchema: {
155
+ type: 'object',
156
+ properties: {
157
+ conditionId: {
158
+ type: 'string',
159
+ description: 'Market condition ID (0x...)',
160
+ },
161
+ },
162
+ required: ['conditionId'],
163
+ },
164
+ },
165
+ {
166
+ name: 'check_ctf_ready',
167
+ description: 'Check if wallet is ready for CTF trading (balances, approvals, gas).',
168
+ inputSchema: {
169
+ type: 'object',
170
+ properties: {
171
+ amount: {
172
+ type: 'string',
173
+ description: 'Amount of USDC to check readiness for (e.g., "100")',
174
+ },
175
+ },
176
+ required: ['amount'],
177
+ },
178
+ },
179
+ {
180
+ name: 'estimate_gas',
181
+ description: 'Estimate gas cost for a CTF operation (split or merge).',
182
+ inputSchema: {
183
+ type: 'object',
184
+ properties: {
185
+ operation: {
186
+ type: 'string',
187
+ enum: ['split', 'merge'],
188
+ description: 'Type of operation to estimate',
189
+ },
190
+ conditionId: {
191
+ type: 'string',
192
+ description: 'Market condition ID (0x...)',
193
+ },
194
+ amount: {
195
+ type: 'string',
196
+ description: 'Amount for the operation',
197
+ },
198
+ },
199
+ required: ['operation', 'conditionId', 'amount'],
200
+ },
201
+ },
202
+ {
203
+ name: 'get_gas_price',
204
+ description: 'Get current gas price on Polygon network.',
205
+ inputSchema: {
206
+ type: 'object',
207
+ properties: {},
208
+ },
209
+ },
210
+ ];
211
+ /**
212
+ * Convert user outcome to SDK format (uppercase)
213
+ *
214
+ * The SDK expects uppercase outcome names.
215
+ * This function normalizes any outcome name to uppercase.
216
+ */
217
+ function toSdkOutcome(outcome) {
218
+ if (!outcome)
219
+ return undefined;
220
+ return outcome.toUpperCase();
221
+ }
222
+ // ===== Helper: Get OnchainService =====
223
+ // Cache OnchainService instances by wallet address to avoid re-creating
224
+ const onchainServiceCache = new Map();
225
+ function getOnchainService() {
226
+ const walletManager = getWalletManager();
227
+ const activeWallet = walletManager.getActiveWallet();
228
+ if (!activeWallet) {
229
+ throw new McpToolError(ErrorCode.AUTH_REQUIRED, 'No wallet configured. Set POLY_PRIVATE_KEY or POLY_WALLETS environment variable.');
230
+ }
231
+ // Check cache first
232
+ const cacheKey = activeWallet.address.toLowerCase();
233
+ const cached = onchainServiceCache.get(cacheKey);
234
+ if (cached) {
235
+ return cached;
236
+ }
237
+ // Create new service for active wallet
238
+ const service = new OnchainService({
239
+ privateKey: activeWallet.wallet.privateKey,
240
+ rpcUrl: process.env.POLY_RPC_URL || 'https://polygon-rpc.com',
241
+ });
242
+ onchainServiceCache.set(cacheKey, service);
243
+ return service;
244
+ }
245
+ // ===== Handler Functions =====
246
+ /**
247
+ * Split USDC into YES + NO tokens
248
+ */
249
+ export async function handleCtfSplit(input) {
250
+ validateConditionId(input.conditionId);
251
+ if (!input.amount || parseFloat(input.amount) <= 0) {
252
+ throw new McpToolError(ErrorCode.INVALID_INPUT, 'Amount must be a positive number');
253
+ }
254
+ try {
255
+ const service = getOnchainService();
256
+ // Check if can split
257
+ const canSplitCheck = await service.canSplit(input.amount);
258
+ if (!canSplitCheck.canSplit) {
259
+ return {
260
+ success: false,
261
+ error: canSplitCheck.reason,
262
+ wallet: service.getAddress(),
263
+ conditionId: input.conditionId,
264
+ amount: input.amount,
265
+ };
266
+ }
267
+ // Execute split
268
+ const result = await service.split(input.conditionId, input.amount);
269
+ return {
270
+ success: result.success,
271
+ wallet: service.getAddress(),
272
+ conditionId: input.conditionId,
273
+ amount: input.amount,
274
+ yesTokens: result.yesTokens,
275
+ noTokens: result.noTokens,
276
+ txHash: result.txHash,
277
+ gasUsed: result.gasUsed,
278
+ explorerUrl: `https://polygonscan.com/tx/${result.txHash}`,
279
+ message: `Split ${input.amount} USDC into ${result.yesTokens} YES + ${result.noTokens} NO tokens`,
280
+ };
281
+ }
282
+ catch (err) {
283
+ throw wrapError(err);
284
+ }
285
+ }
286
+ /**
287
+ * Merge primary + secondary tokens back to USDC
288
+ *
289
+ * Automatically discovers tokenIds from CLOB API if not provided.
290
+ */
291
+ export async function handleCtfMerge(input) {
292
+ validateConditionId(input.conditionId);
293
+ if (!input.amount || parseFloat(input.amount) <= 0) {
294
+ throw new McpToolError(ErrorCode.INVALID_INPUT, 'Amount must be a positive number');
295
+ }
296
+ try {
297
+ const service = getOnchainService();
298
+ // Auto-discover tokenIds if not provided
299
+ let tokenIds = input.tokenIds;
300
+ let resolvedTokens = null;
301
+ let tokenIdsSource = 'provided';
302
+ if (!tokenIds) {
303
+ resolvedTokens = await resolveMarketTokens(input.conditionId);
304
+ if (resolvedTokens) {
305
+ tokenIds = resolvedTokens.tokenIds;
306
+ tokenIdsSource = 'auto-discovered';
307
+ }
308
+ else {
309
+ tokenIdsSource = 'calculated';
310
+ }
311
+ }
312
+ // Check if can merge
313
+ let canMergeCheck;
314
+ if (tokenIds) {
315
+ canMergeCheck = await service.canMergeWithTokenIds(input.conditionId, tokenIds, input.amount);
316
+ }
317
+ else {
318
+ canMergeCheck = await service.canMerge(input.conditionId, input.amount);
319
+ }
320
+ if (!canMergeCheck.canMerge) {
321
+ // Replace hardcoded YES/NO in error message with dynamic outcome names
322
+ let errorMessage = canMergeCheck.reason || 'Insufficient tokens';
323
+ if (resolvedTokens) {
324
+ errorMessage = errorMessage
325
+ .replace(/YES tokens/g, `${resolvedTokens.primaryOutcome} tokens`)
326
+ .replace(/NO tokens/g, `${resolvedTokens.secondaryOutcome} tokens`);
327
+ }
328
+ return {
329
+ success: false,
330
+ error: errorMessage,
331
+ wallet: service.getAddress(),
332
+ conditionId: input.conditionId,
333
+ amount: input.amount,
334
+ tokenIdsSource,
335
+ outcomeNames: resolvedTokens
336
+ ? { primary: resolvedTokens.primaryOutcome, secondary: resolvedTokens.secondaryOutcome }
337
+ : undefined,
338
+ hint: tokenIdsSource === 'calculated'
339
+ ? 'TokenIds could not be auto-discovered. This market may require explicit tokenIds.'
340
+ : undefined,
341
+ };
342
+ }
343
+ // Execute merge
344
+ let result;
345
+ if (tokenIds) {
346
+ result = await service.mergeByTokenIds(input.conditionId, tokenIds, input.amount);
347
+ }
348
+ else {
349
+ result = await service.merge(input.conditionId, input.amount);
350
+ }
351
+ // Use dynamic outcome names if available
352
+ const primaryName = resolvedTokens?.primaryOutcome ?? 'YES';
353
+ const secondaryName = resolvedTokens?.secondaryOutcome ?? 'NO';
354
+ return {
355
+ success: result.success,
356
+ wallet: service.getAddress(),
357
+ conditionId: input.conditionId,
358
+ amount: input.amount,
359
+ usdcReceived: result.usdcReceived,
360
+ txHash: result.txHash,
361
+ gasUsed: result.gasUsed,
362
+ explorerUrl: `https://polygonscan.com/tx/${result.txHash}`,
363
+ tokenIdsSource,
364
+ outcomeNames: resolvedTokens
365
+ ? { primary: resolvedTokens.primaryOutcome, secondary: resolvedTokens.secondaryOutcome }
366
+ : undefined,
367
+ message: `Merged ${input.amount} ${primaryName} + ${input.amount} ${secondaryName} tokens into ${result.usdcReceived} USDC`,
368
+ };
369
+ }
370
+ catch (err) {
371
+ throw wrapError(err);
372
+ }
373
+ }
374
+ /**
375
+ * Redeem winning tokens after market resolution
376
+ *
377
+ * Automatically discovers tokenIds from CLOB API if not provided.
378
+ */
379
+ export async function handleCtfRedeem(input) {
380
+ validateConditionId(input.conditionId);
381
+ try {
382
+ const service = getOnchainService();
383
+ // Check market resolution first
384
+ const resolution = await service.getMarketResolution(input.conditionId);
385
+ if (!resolution.isResolved) {
386
+ return {
387
+ success: false,
388
+ error: 'Market is not yet resolved. Cannot redeem tokens.',
389
+ wallet: service.getAddress(),
390
+ conditionId: input.conditionId,
391
+ isResolved: false,
392
+ };
393
+ }
394
+ // Auto-discover tokenIds if not provided
395
+ let tokenIds = input.tokenIds;
396
+ let resolvedTokens = null;
397
+ let tokenIdsSource = 'provided';
398
+ if (!tokenIds) {
399
+ resolvedTokens = await resolveMarketTokens(input.conditionId);
400
+ if (resolvedTokens) {
401
+ tokenIds = resolvedTokens.tokenIds;
402
+ tokenIdsSource = 'auto-discovered';
403
+ }
404
+ else {
405
+ tokenIdsSource = 'calculated';
406
+ }
407
+ }
408
+ // Execute redeem - convert outcome format for SDK
409
+ const sdkOutcome = toSdkOutcome(input.outcome);
410
+ let result;
411
+ if (tokenIds) {
412
+ result = await service.redeemByTokenIds(input.conditionId, tokenIds, sdkOutcome);
413
+ }
414
+ else {
415
+ // Fallback to calculated positionIds (may fail for CLOB markets)
416
+ result = await service.redeem(input.conditionId, sdkOutcome);
417
+ }
418
+ // Use dynamic outcome names if available
419
+ const primaryName = resolvedTokens?.primaryOutcome ?? 'YES';
420
+ const secondaryName = resolvedTokens?.secondaryOutcome ?? 'NO';
421
+ const winningOutcomeName = resolution.winningOutcome === 'YES'
422
+ ? primaryName
423
+ : resolution.winningOutcome === 'NO'
424
+ ? secondaryName
425
+ : resolution.winningOutcome;
426
+ return {
427
+ success: result.success,
428
+ wallet: service.getAddress(),
429
+ conditionId: input.conditionId,
430
+ winningOutcome: winningOutcomeName,
431
+ tokensRedeemed: result.tokensRedeemed,
432
+ usdcReceived: result.usdcReceived,
433
+ txHash: result.txHash,
434
+ gasUsed: result.gasUsed,
435
+ explorerUrl: `https://polygonscan.com/tx/${result.txHash}`,
436
+ tokenIdsSource,
437
+ outcomeNames: resolvedTokens
438
+ ? { primary: resolvedTokens.primaryOutcome, secondary: resolvedTokens.secondaryOutcome }
439
+ : undefined,
440
+ message: `Redeemed ${result.tokensRedeemed} winning ${winningOutcomeName} tokens for ${result.usdcReceived} USDC`,
441
+ };
442
+ }
443
+ catch (err) {
444
+ throw wrapError(err);
445
+ }
446
+ }
447
+ /**
448
+ * Get token balances for a market position
449
+ *
450
+ * Automatically discovers tokenIds from CLOB API if not provided.
451
+ */
452
+ export async function handleGetPositionBalance(input) {
453
+ validateConditionId(input.conditionId);
454
+ try {
455
+ const service = getOnchainService();
456
+ // Auto-discover tokenIds if not provided
457
+ let tokenIds = input.tokenIds;
458
+ let resolvedTokens = null;
459
+ let tokenIdsSource = 'provided';
460
+ if (!tokenIds) {
461
+ resolvedTokens = await resolveMarketTokens(input.conditionId);
462
+ if (resolvedTokens) {
463
+ tokenIds = resolvedTokens.tokenIds;
464
+ tokenIdsSource = 'auto-discovered';
465
+ }
466
+ else {
467
+ tokenIdsSource = 'calculated';
468
+ }
469
+ }
470
+ let balance;
471
+ if (tokenIds) {
472
+ balance = await service.getPositionBalanceByTokenIds(input.conditionId, tokenIds);
473
+ }
474
+ else {
475
+ balance = await service.getPositionBalance(input.conditionId);
476
+ }
477
+ // Use dynamic outcome names if available
478
+ const primaryName = resolvedTokens?.primaryOutcome ?? 'yes';
479
+ const secondaryName = resolvedTokens?.secondaryOutcome ?? 'no';
480
+ return {
481
+ wallet: service.getAddress(),
482
+ conditionId: input.conditionId,
483
+ balances: {
484
+ [primaryName.toLowerCase()]: balance.yesBalance,
485
+ [secondaryName.toLowerCase()]: balance.noBalance,
486
+ },
487
+ positionIds: {
488
+ [primaryName.toLowerCase()]: balance.yesPositionId,
489
+ [secondaryName.toLowerCase()]: balance.noPositionId,
490
+ },
491
+ outcomeNames: resolvedTokens
492
+ ? { primary: resolvedTokens.primaryOutcome, secondary: resolvedTokens.secondaryOutcome }
493
+ : undefined,
494
+ tokenIdsSource,
495
+ hasPosition: parseFloat(balance.yesBalance) > 0 || parseFloat(balance.noBalance) > 0,
496
+ };
497
+ }
498
+ catch (err) {
499
+ throw wrapError(err);
500
+ }
501
+ }
502
+ /**
503
+ * Check if market is resolved
504
+ */
505
+ export async function handleGetMarketResolution(input) {
506
+ validateConditionId(input.conditionId);
507
+ try {
508
+ const service = getOnchainService();
509
+ const resolution = await service.getMarketResolution(input.conditionId);
510
+ return {
511
+ conditionId: input.conditionId,
512
+ isResolved: resolution.isResolved,
513
+ winningOutcome: resolution.winningOutcome,
514
+ payoutNumerators: resolution.payoutNumerators,
515
+ payoutDenominator: resolution.payoutDenominator,
516
+ message: resolution.isResolved
517
+ ? `Market resolved: ${resolution.winningOutcome} wins`
518
+ : 'Market is not yet resolved',
519
+ };
520
+ }
521
+ catch (err) {
522
+ throw wrapError(err);
523
+ }
524
+ }
525
+ /**
526
+ * Check if wallet is ready for CTF trading
527
+ */
528
+ export async function handleCheckCtfReady(input) {
529
+ if (!input.amount || parseFloat(input.amount) <= 0) {
530
+ throw new McpToolError(ErrorCode.INVALID_INPUT, 'Amount must be a positive number');
531
+ }
532
+ try {
533
+ const service = getOnchainService();
534
+ const status = await service.checkReadyForCTF(input.amount);
535
+ return {
536
+ wallet: service.getAddress(),
537
+ ready: status.ready,
538
+ balances: {
539
+ usdcE: status.usdcEBalance,
540
+ nativeUsdc: status.nativeUsdcBalance,
541
+ matic: status.maticBalance,
542
+ },
543
+ tradingReady: status.tradingReady,
544
+ issues: status.issues,
545
+ suggestion: status.suggestion,
546
+ message: status.ready
547
+ ? `Ready to trade with ${input.amount} USDC`
548
+ : `Not ready: ${status.issues.join(', ')}`,
549
+ };
550
+ }
551
+ catch (err) {
552
+ throw wrapError(err);
553
+ }
554
+ }
555
+ /**
556
+ * Estimate gas for CTF operation
557
+ */
558
+ export async function handleEstimateGas(input) {
559
+ validateConditionId(input.conditionId);
560
+ if (!input.amount || parseFloat(input.amount) <= 0) {
561
+ throw new McpToolError(ErrorCode.INVALID_INPUT, 'Amount must be a positive number');
562
+ }
563
+ if (!['split', 'merge'].includes(input.operation)) {
564
+ throw new McpToolError(ErrorCode.INVALID_INPUT, 'Operation must be "split" or "merge"');
565
+ }
566
+ try {
567
+ const service = getOnchainService();
568
+ let estimate;
569
+ if (input.operation === 'split') {
570
+ estimate = await service.estimateSplitGas(input.conditionId, input.amount);
571
+ }
572
+ else {
573
+ estimate = await service.estimateMergeGas(input.conditionId, input.amount);
574
+ }
575
+ return {
576
+ operation: input.operation,
577
+ conditionId: input.conditionId,
578
+ amount: input.amount,
579
+ gas: {
580
+ gasUnits: estimate.gasUnits,
581
+ gasPriceGwei: estimate.gasPriceGwei,
582
+ costMatic: estimate.costMatic,
583
+ costUsdc: estimate.costUsdc,
584
+ maticPrice: estimate.maticPrice,
585
+ },
586
+ message: `Estimated gas for ${input.operation}: ${estimate.costMatic} MATIC (~$${estimate.costUsdc})`,
587
+ };
588
+ }
589
+ catch (err) {
590
+ throw wrapError(err);
591
+ }
592
+ }
593
+ /**
594
+ * Get current gas price
595
+ */
596
+ export async function handleGetGasPrice() {
597
+ try {
598
+ const service = getOnchainService();
599
+ const gasPrice = await service.getGasPrice();
600
+ return {
601
+ gwei: gasPrice.gwei,
602
+ wei: gasPrice.wei,
603
+ message: `Current gas price: ${gasPrice.gwei} Gwei`,
604
+ };
605
+ }
606
+ catch (err) {
607
+ throw wrapError(err);
608
+ }
609
+ }
610
+ //# sourceMappingURL=onchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onchain.js","sourceRoot":"","sources":["../../src/tools/onchain.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../src/tools/order.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAWrB,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAgEhD,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAqF7B;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAoC9B;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAqGlC"}
1
+ {"version":3,"file":"order.d.ts","sourceRoot":"","sources":["../../src/tools/order.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAWrB,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAgEhD,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CA4F7B;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAoC9B;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA2GlC"}