@catalyst-team/poly-mcp 0.1.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 +317 -0
- package/dist/errors.d.ts +33 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +86 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +173 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +155 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/guide.d.ts +12 -0
- package/dist/tools/guide.d.ts.map +1 -0
- package/dist/tools/guide.js +801 -0
- package/dist/tools/guide.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/market.d.ts +11 -0
- package/dist/tools/market.d.ts.map +1 -0
- package/dist/tools/market.js +314 -0
- package/dist/tools/market.js.map +1 -0
- package/dist/tools/order.d.ts +10 -0
- package/dist/tools/order.d.ts.map +1 -0
- package/dist/tools/order.js +258 -0
- package/dist/tools/order.js.map +1 -0
- package/dist/tools/trade.d.ts +38 -0
- package/dist/tools/trade.d.ts.map +1 -0
- package/dist/tools/trade.js +313 -0
- package/dist/tools/trade.js.map +1 -0
- package/dist/tools/trader.d.ts +11 -0
- package/dist/tools/trader.d.ts.map +1 -0
- package/dist/tools/trader.js +277 -0
- package/dist/tools/trader.js.map +1 -0
- package/dist/tools/wallet.d.ts +274 -0
- package/dist/tools/wallet.d.ts.map +1 -0
- package/dist/tools/wallet.js +579 -0
- package/dist/tools/wallet.js.map +1 -0
- package/dist/types.d.ts +413 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/docs/01-mcp.md +2075 -0
- package/package.json +55 -0
- package/src/errors.ts +124 -0
- package/src/index.ts +309 -0
- package/src/server.ts +183 -0
- package/src/tools/guide.ts +821 -0
- package/src/tools/index.ts +73 -0
- package/src/tools/market.ts +363 -0
- package/src/tools/order.ts +326 -0
- package/src/tools/trade.ts +417 -0
- package/src/tools/trader.ts +322 -0
- package/src/tools/wallet.ts +683 -0
- package/src/types.ts +472 -0
- package/tsconfig.json +20 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Types for Polymarket
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Tool Input Types
|
|
6
|
+
export interface GetTraderPositionsInput {
|
|
7
|
+
address: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface GetTraderTradesInput {
|
|
11
|
+
address: string;
|
|
12
|
+
limit?: number;
|
|
13
|
+
side?: 'BUY' | 'SELL';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface GetTraderProfileInput {
|
|
17
|
+
address: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface GetLeaderboardInput {
|
|
21
|
+
limit?: number;
|
|
22
|
+
offset?: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface GetMarketInput {
|
|
26
|
+
identifier: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface SearchMarketsInput {
|
|
30
|
+
query: string;
|
|
31
|
+
active?: boolean;
|
|
32
|
+
limit?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface GetTrendingMarketsInput {
|
|
36
|
+
limit?: number;
|
|
37
|
+
sortBy?: 'volume' | 'liquidity' | 'newest';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface GetMarketTradesInput {
|
|
41
|
+
conditionId: string;
|
|
42
|
+
limit?: number;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface GetOrderbookInput {
|
|
46
|
+
conditionId: string;
|
|
47
|
+
outcome: 'Yes' | 'No';
|
|
48
|
+
depth?: number;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface GetBestPricesInput {
|
|
52
|
+
conditionId: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface EstimateExecutionInput {
|
|
56
|
+
conditionId: string;
|
|
57
|
+
outcome: 'Yes' | 'No';
|
|
58
|
+
side: 'BUY' | 'SELL';
|
|
59
|
+
amount: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface PlaceLimitOrderInput {
|
|
63
|
+
conditionId: string;
|
|
64
|
+
outcome: 'Yes' | 'No';
|
|
65
|
+
side: 'BUY' | 'SELL';
|
|
66
|
+
price: number;
|
|
67
|
+
size: number;
|
|
68
|
+
orderType?: 'GTC' | 'GTD';
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface PlaceMarketOrderInput {
|
|
72
|
+
conditionId: string;
|
|
73
|
+
outcome: 'Yes' | 'No';
|
|
74
|
+
side: 'BUY' | 'SELL';
|
|
75
|
+
amount: number;
|
|
76
|
+
maxSlippage?: number;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface CancelOrderInput {
|
|
80
|
+
orderId: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface GetMyOrdersInput {
|
|
84
|
+
status?: 'LIVE' | 'FILLED' | 'CANCELLED';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Tool Output Types
|
|
88
|
+
export interface TraderInfo {
|
|
89
|
+
address: string;
|
|
90
|
+
displayName: string | null;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface MarketInfo {
|
|
94
|
+
conditionId: string;
|
|
95
|
+
title: string;
|
|
96
|
+
slug?: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface PositionHolding {
|
|
100
|
+
outcome: string;
|
|
101
|
+
size: number;
|
|
102
|
+
avgPrice: number;
|
|
103
|
+
curPrice?: number;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface PositionPnL {
|
|
107
|
+
unrealized?: number;
|
|
108
|
+
unrealizedPercent?: number;
|
|
109
|
+
realized?: number;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface PositionStatus {
|
|
113
|
+
redeemable?: boolean;
|
|
114
|
+
endDate?: string;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface PositionOutput {
|
|
118
|
+
market: MarketInfo;
|
|
119
|
+
holding: PositionHolding;
|
|
120
|
+
pnl: PositionPnL;
|
|
121
|
+
status: PositionStatus;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export interface GetTraderPositionsOutput {
|
|
125
|
+
trader: TraderInfo;
|
|
126
|
+
positions: PositionOutput[];
|
|
127
|
+
summary: {
|
|
128
|
+
totalPositions: number;
|
|
129
|
+
totalUnrealizedPnl: number;
|
|
130
|
+
totalRealizedPnl: number;
|
|
131
|
+
winningPositions: number;
|
|
132
|
+
losingPositions: number;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export interface TradeExecution {
|
|
137
|
+
size: number;
|
|
138
|
+
price: number;
|
|
139
|
+
usdcValue: number;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export interface TradeOutput {
|
|
143
|
+
type: string;
|
|
144
|
+
side: 'BUY' | 'SELL';
|
|
145
|
+
market: MarketInfo;
|
|
146
|
+
outcome: string;
|
|
147
|
+
execution: TradeExecution;
|
|
148
|
+
timestamp: string;
|
|
149
|
+
txHash: string;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export interface GetTraderTradesOutput {
|
|
153
|
+
trader: TraderInfo;
|
|
154
|
+
trades: TradeOutput[];
|
|
155
|
+
summary: {
|
|
156
|
+
totalTrades: number;
|
|
157
|
+
buyCount: number;
|
|
158
|
+
sellCount: number;
|
|
159
|
+
buyVolume: number;
|
|
160
|
+
sellVolume: number;
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export interface GetTraderProfileOutput {
|
|
165
|
+
trader: {
|
|
166
|
+
address: string;
|
|
167
|
+
displayName: string | null;
|
|
168
|
+
xUsername: string | null;
|
|
169
|
+
verified: boolean;
|
|
170
|
+
profileImage: string | null;
|
|
171
|
+
};
|
|
172
|
+
ranking: {
|
|
173
|
+
rank: number | null;
|
|
174
|
+
totalTraders: number;
|
|
175
|
+
};
|
|
176
|
+
performance: {
|
|
177
|
+
officialPnl: number | null;
|
|
178
|
+
totalVolume: number;
|
|
179
|
+
unrealizedPnl: number;
|
|
180
|
+
realizedPnl: number;
|
|
181
|
+
};
|
|
182
|
+
stats: {
|
|
183
|
+
positionCount: number;
|
|
184
|
+
winRate: number;
|
|
185
|
+
avgPercentPnl: number;
|
|
186
|
+
smartScore: number;
|
|
187
|
+
};
|
|
188
|
+
activity: {
|
|
189
|
+
lastTradeAt: string | null;
|
|
190
|
+
isActive: boolean;
|
|
191
|
+
};
|
|
192
|
+
/** Explanation when PnL values differ between sources */
|
|
193
|
+
notes?: string;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
export interface LeaderboardTrader {
|
|
197
|
+
rank: number;
|
|
198
|
+
address: string;
|
|
199
|
+
displayName: string | null;
|
|
200
|
+
pnl: number;
|
|
201
|
+
volume: number;
|
|
202
|
+
verified: boolean;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export interface GetLeaderboardOutput {
|
|
206
|
+
traders: LeaderboardTrader[];
|
|
207
|
+
pagination: {
|
|
208
|
+
total: number;
|
|
209
|
+
offset: number;
|
|
210
|
+
limit: number;
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export interface TokenInfo {
|
|
215
|
+
tokenId: string;
|
|
216
|
+
price: number;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export interface GetMarketOutput {
|
|
220
|
+
market: {
|
|
221
|
+
conditionId: string;
|
|
222
|
+
question: string;
|
|
223
|
+
slug: string;
|
|
224
|
+
description?: string;
|
|
225
|
+
};
|
|
226
|
+
prices: {
|
|
227
|
+
yes: number;
|
|
228
|
+
no: number;
|
|
229
|
+
spread?: number;
|
|
230
|
+
};
|
|
231
|
+
tokens: {
|
|
232
|
+
yes: TokenInfo;
|
|
233
|
+
no: TokenInfo;
|
|
234
|
+
};
|
|
235
|
+
stats: {
|
|
236
|
+
volume: number;
|
|
237
|
+
liquidity: number;
|
|
238
|
+
};
|
|
239
|
+
status: {
|
|
240
|
+
active: boolean;
|
|
241
|
+
closed: boolean;
|
|
242
|
+
acceptingOrders: boolean;
|
|
243
|
+
endDate?: string;
|
|
244
|
+
};
|
|
245
|
+
trading: {
|
|
246
|
+
minTickSize?: number;
|
|
247
|
+
minOrderSize?: number;
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export interface SearchMarketResult {
|
|
252
|
+
conditionId: string;
|
|
253
|
+
question: string;
|
|
254
|
+
slug: string;
|
|
255
|
+
prices: { yes: number; no: number };
|
|
256
|
+
volume: number;
|
|
257
|
+
volume24h?: number;
|
|
258
|
+
endDate?: string;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export interface SearchMarketsOutput {
|
|
262
|
+
markets: SearchMarketResult[];
|
|
263
|
+
total: number;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export interface TrendingMarket {
|
|
267
|
+
conditionId: string;
|
|
268
|
+
question: string;
|
|
269
|
+
slug: string;
|
|
270
|
+
volume24h?: number;
|
|
271
|
+
priceChange24h?: number;
|
|
272
|
+
prices: { yes: number; no: number };
|
|
273
|
+
status?: {
|
|
274
|
+
active: boolean;
|
|
275
|
+
closed: boolean;
|
|
276
|
+
endDate?: string;
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export interface GetTrendingMarketsOutput {
|
|
281
|
+
markets: TrendingMarket[];
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export interface MarketTradeOutput {
|
|
285
|
+
trader: string;
|
|
286
|
+
traderName?: string;
|
|
287
|
+
side: 'BUY' | 'SELL';
|
|
288
|
+
outcome: string;
|
|
289
|
+
size: number;
|
|
290
|
+
price: number;
|
|
291
|
+
timestamp: string;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export interface GetMarketTradesOutput {
|
|
295
|
+
market: MarketInfo;
|
|
296
|
+
trades: MarketTradeOutput[];
|
|
297
|
+
summary: {
|
|
298
|
+
buyVolume24h: number;
|
|
299
|
+
sellVolume24h: number;
|
|
300
|
+
netFlow: number;
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
export interface OrderbookLevel {
|
|
305
|
+
price: number;
|
|
306
|
+
size: number;
|
|
307
|
+
total: number;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
export interface GetOrderbookOutput {
|
|
311
|
+
market: MarketInfo;
|
|
312
|
+
outcome: string;
|
|
313
|
+
tokenId: string;
|
|
314
|
+
orderbook: {
|
|
315
|
+
bids: OrderbookLevel[];
|
|
316
|
+
asks: OrderbookLevel[];
|
|
317
|
+
};
|
|
318
|
+
summary: {
|
|
319
|
+
bestBid: number;
|
|
320
|
+
bestAsk: number;
|
|
321
|
+
spread: number;
|
|
322
|
+
spreadPercent: number;
|
|
323
|
+
bidDepth: number;
|
|
324
|
+
askDepth: number;
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export interface PriceInfo {
|
|
329
|
+
bestBid: number;
|
|
330
|
+
bestAsk: number;
|
|
331
|
+
midPrice: number;
|
|
332
|
+
spread: number;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export interface GetBestPricesOutput {
|
|
336
|
+
market: string;
|
|
337
|
+
yes: PriceInfo;
|
|
338
|
+
no: PriceInfo;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
export interface EstimateExecutionOutput {
|
|
342
|
+
market: string;
|
|
343
|
+
order: {
|
|
344
|
+
side: 'BUY' | 'SELL';
|
|
345
|
+
outcome: string;
|
|
346
|
+
usdcAmount: number;
|
|
347
|
+
};
|
|
348
|
+
estimate: {
|
|
349
|
+
avgPrice: number;
|
|
350
|
+
sharesReceived: number;
|
|
351
|
+
priceImpact: number;
|
|
352
|
+
worstPrice: number;
|
|
353
|
+
};
|
|
354
|
+
warning: string | null;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// ===== Wallet Tool Types =====
|
|
358
|
+
|
|
359
|
+
// Deposit Input/Output
|
|
360
|
+
export interface GetSupportedAssetsInput {
|
|
361
|
+
chainId?: number;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
export interface SupportedAsset {
|
|
365
|
+
chainId: number;
|
|
366
|
+
chainName: string;
|
|
367
|
+
tokenSymbol: string;
|
|
368
|
+
tokenName: string;
|
|
369
|
+
tokenAddress: string;
|
|
370
|
+
decimals: number;
|
|
371
|
+
minDeposit: string;
|
|
372
|
+
minDepositUsd: number;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
export interface GetSupportedAssetsOutput {
|
|
376
|
+
assets: SupportedAsset[];
|
|
377
|
+
summary: {
|
|
378
|
+
totalChains: number;
|
|
379
|
+
totalAssets: number;
|
|
380
|
+
chains: string[];
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
export interface GetDepositAddressesInput {
|
|
385
|
+
// Uses wallet from SDK
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
export interface GetDepositAddressesOutput {
|
|
389
|
+
wallet: string;
|
|
390
|
+
addresses: {
|
|
391
|
+
evm: string;
|
|
392
|
+
solana: string;
|
|
393
|
+
bitcoin: string;
|
|
394
|
+
};
|
|
395
|
+
evmChains: string[];
|
|
396
|
+
instructions: string;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Allowance Input/Output
|
|
400
|
+
export interface CheckAllowancesInput {
|
|
401
|
+
// Uses wallet from SDK
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
export interface AllowanceStatus {
|
|
405
|
+
contract: string;
|
|
406
|
+
address: string;
|
|
407
|
+
approved: boolean;
|
|
408
|
+
allowance?: string;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
export interface CheckAllowancesOutput {
|
|
412
|
+
wallet: string;
|
|
413
|
+
erc20: {
|
|
414
|
+
usdc: {
|
|
415
|
+
balance: string;
|
|
416
|
+
allowances: AllowanceStatus[];
|
|
417
|
+
};
|
|
418
|
+
};
|
|
419
|
+
erc1155: {
|
|
420
|
+
conditionalTokens: {
|
|
421
|
+
approvals: AllowanceStatus[];
|
|
422
|
+
};
|
|
423
|
+
};
|
|
424
|
+
tradingReady: boolean;
|
|
425
|
+
issues: string[];
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
export interface ApproveTradingInput {
|
|
429
|
+
// Uses wallet from SDK
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export interface ApprovalResult {
|
|
433
|
+
contract: string;
|
|
434
|
+
txHash?: string;
|
|
435
|
+
success: boolean;
|
|
436
|
+
error?: string;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
export interface ApproveTradingOutput {
|
|
440
|
+
wallet: string;
|
|
441
|
+
erc20Approvals: ApprovalResult[];
|
|
442
|
+
erc1155Approvals: ApprovalResult[];
|
|
443
|
+
allApproved: boolean;
|
|
444
|
+
summary: string;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// Error Types
|
|
448
|
+
export interface McpErrorResponse {
|
|
449
|
+
error: {
|
|
450
|
+
code: string;
|
|
451
|
+
message: string;
|
|
452
|
+
details?: Record<string, unknown>;
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
export type McpToolResult<T> = T | McpErrorResponse;
|
|
457
|
+
|
|
458
|
+
// Tool Definition Type
|
|
459
|
+
export interface ToolDefinition {
|
|
460
|
+
name: string;
|
|
461
|
+
description: string;
|
|
462
|
+
inputSchema: {
|
|
463
|
+
type: 'object';
|
|
464
|
+
properties: Record<string, {
|
|
465
|
+
type: string;
|
|
466
|
+
description?: string;
|
|
467
|
+
enum?: string[];
|
|
468
|
+
default?: unknown;
|
|
469
|
+
}>;
|
|
470
|
+
required?: string[];
|
|
471
|
+
};
|
|
472
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2022"],
|
|
7
|
+
"outDir": "./dist",
|
|
8
|
+
"rootDir": "./src",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"declaration": true,
|
|
14
|
+
"declarationMap": true,
|
|
15
|
+
"sourceMap": true,
|
|
16
|
+
"resolveJsonModule": true
|
|
17
|
+
},
|
|
18
|
+
"include": ["src/**/*"],
|
|
19
|
+
"exclude": ["node_modules", "dist"]
|
|
20
|
+
}
|