@catalyst-team/poly-mcp 0.1.1 → 0.1.2

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 +240 -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,213 @@
1
+ /**
2
+ * Insider Signals MCP Tools
3
+ *
4
+ * Tools for managing insider detection signals.
5
+ */
6
+
7
+ import type { ToolDefinition } from '../types.js';
8
+ import type { PolymarketSDK } from '@catalyst-team/poly-sdk';
9
+ import {
10
+ InsiderSignalService,
11
+ type InsiderSignalType,
12
+ type InsiderSignalSeverity,
13
+ } from '@catalyst-team/smart-money';
14
+ import { join } from 'node:path';
15
+ import { wrapError } from '../errors.js';
16
+
17
+ // Initialize service
18
+ let signalService: InsiderSignalService | null = null;
19
+
20
+ function getSignalService(): InsiderSignalService {
21
+ if (!signalService) {
22
+ const dataDir = process.env.DATA_DIR || join(process.cwd(), 'data');
23
+ signalService = new InsiderSignalService({
24
+ dataDir: join(dataDir, 'signals'),
25
+ });
26
+ }
27
+ return signalService;
28
+ }
29
+
30
+ // ============= Tool Definitions =============
31
+
32
+ export const insiderSignalsToolDefinitions: ToolDefinition[] = [
33
+ {
34
+ name: 'get_insider_signals',
35
+ description: 'Get insider detection signals with optional filtering. Returns alerts for new insider wallets discovered, large trades by insiders, and cluster activity.',
36
+ inputSchema: {
37
+ type: 'object',
38
+ properties: {
39
+ type: {
40
+ type: 'string',
41
+ enum: ['insider_new', 'insider_large_trade', 'insider_cluster'],
42
+ description: 'Filter by signal type. insider_new: new wallet discovered, insider_large_trade: large trade detected, insider_cluster: multiple insiders trading same market.',
43
+ },
44
+ severity: {
45
+ type: 'string',
46
+ enum: ['low', 'medium', 'high'],
47
+ description: 'Filter by severity level.',
48
+ },
49
+ unreadOnly: {
50
+ type: 'boolean',
51
+ default: false,
52
+ description: 'Only return unread signals.',
53
+ },
54
+ limit: {
55
+ type: 'number',
56
+ default: 20,
57
+ description: 'Maximum signals to return (max 100).',
58
+ },
59
+ since: {
60
+ type: 'number',
61
+ description: 'Only return signals after this Unix timestamp (milliseconds).',
62
+ },
63
+ },
64
+ },
65
+ },
66
+ {
67
+ name: 'get_insider_signal_count',
68
+ description: 'Get the count of unread insider signals. Useful for displaying notification badges.',
69
+ inputSchema: {
70
+ type: 'object',
71
+ properties: {},
72
+ },
73
+ },
74
+ {
75
+ name: 'mark_insider_signal_read',
76
+ description: 'Mark an insider signal as read.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ id: {
81
+ type: 'string',
82
+ description: 'Signal ID to mark as read.',
83
+ },
84
+ },
85
+ required: ['id'],
86
+ },
87
+ },
88
+ {
89
+ name: 'mark_all_insider_signals_read',
90
+ description: 'Mark all insider signals as read.',
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {},
94
+ },
95
+ },
96
+ ];
97
+
98
+ // ============= Input Types =============
99
+
100
+ interface GetInsiderSignalsInput {
101
+ type?: InsiderSignalType;
102
+ severity?: InsiderSignalSeverity;
103
+ unreadOnly?: boolean;
104
+ limit?: number;
105
+ since?: number;
106
+ }
107
+
108
+ interface MarkInsiderSignalReadInput {
109
+ id: string;
110
+ }
111
+
112
+ // ============= Handlers =============
113
+
114
+ /**
115
+ * Get insider signals with optional filtering
116
+ */
117
+ export async function handleGetInsiderSignals(
118
+ _sdk: PolymarketSDK,
119
+ input: GetInsiderSignalsInput
120
+ ) {
121
+ try {
122
+ const service = getSignalService();
123
+
124
+ const result = service.getSignals({
125
+ type: input.type,
126
+ severity: input.severity,
127
+ unreadOnly: input.unreadOnly ?? false,
128
+ limit: Math.min(input.limit ?? 20, 100),
129
+ since: input.since,
130
+ });
131
+
132
+ return {
133
+ signals: result.signals,
134
+ total: result.total,
135
+ unreadCount: result.unreadCount,
136
+ filters: {
137
+ type: input.type || 'all',
138
+ severity: input.severity || 'all',
139
+ unreadOnly: input.unreadOnly ?? false,
140
+ limit: input.limit ?? 20,
141
+ },
142
+ };
143
+ } catch (err) {
144
+ throw wrapError(err);
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Get count of unread insider signals
150
+ */
151
+ export async function handleGetInsiderSignalCount(
152
+ _sdk: PolymarketSDK,
153
+ _input: Record<string, never>
154
+ ) {
155
+ try {
156
+ const service = getSignalService();
157
+ const count = service.getUnreadCount();
158
+
159
+ return {
160
+ unreadCount: count,
161
+ };
162
+ } catch (err) {
163
+ throw wrapError(err);
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Mark a single insider signal as read
169
+ */
170
+ export async function handleMarkInsiderSignalRead(
171
+ _sdk: PolymarketSDK,
172
+ input: MarkInsiderSignalReadInput
173
+ ) {
174
+ try {
175
+ const service = getSignalService();
176
+ const success = service.markAsRead(input.id);
177
+
178
+ if (!success) {
179
+ return {
180
+ success: false,
181
+ message: 'Signal not found or already read',
182
+ };
183
+ }
184
+
185
+ return {
186
+ success: true,
187
+ message: `Signal ${input.id} marked as read`,
188
+ };
189
+ } catch (err) {
190
+ throw wrapError(err);
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Mark all insider signals as read
196
+ */
197
+ export async function handleMarkAllInsiderSignalsRead(
198
+ _sdk: PolymarketSDK,
199
+ _input: Record<string, never>
200
+ ) {
201
+ try {
202
+ const service = getSignalService();
203
+ const count = service.markAllAsRead();
204
+
205
+ return {
206
+ success: true,
207
+ markedCount: count,
208
+ message: `Marked ${count} signals as read`,
209
+ };
210
+ } catch (err) {
211
+ throw wrapError(err);
212
+ }
213
+ }