@gala-chain/launchpad-mcp-server 1.23.0 → 1.23.1

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 (131) hide show
  1. package/DRY_REFACTORING_GUIDE.md +272 -0
  2. package/dist/generated/version.d.ts +1 -1
  3. package/dist/generated/version.js +1 -1
  4. package/dist/prompts/analysis.d.ts.map +1 -1
  5. package/dist/prompts/analysis.js +14 -63
  6. package/dist/prompts/analysis.js.map +1 -1
  7. package/dist/prompts/balances.d.ts.map +1 -1
  8. package/dist/prompts/balances.js +46 -70
  9. package/dist/prompts/balances.js.map +1 -1
  10. package/dist/prompts/creation-utils.d.ts.map +1 -1
  11. package/dist/prompts/creation-utils.js +27 -50
  12. package/dist/prompts/creation-utils.js.map +1 -1
  13. package/dist/prompts/liquidity-positions.d.ts.map +1 -1
  14. package/dist/prompts/liquidity-positions.js +9 -44
  15. package/dist/prompts/liquidity-positions.js.map +1 -1
  16. package/dist/prompts/pools.d.ts.map +1 -1
  17. package/dist/prompts/pools.js +125 -228
  18. package/dist/prompts/pools.js.map +1 -1
  19. package/dist/prompts/portfolio.d.ts.map +1 -1
  20. package/dist/prompts/portfolio.js +13 -48
  21. package/dist/prompts/portfolio.js.map +1 -1
  22. package/dist/prompts/social.d.ts.map +1 -1
  23. package/dist/prompts/social.js +21 -31
  24. package/dist/prompts/social.js.map +1 -1
  25. package/dist/prompts/trading-calculations.d.ts.map +1 -1
  26. package/dist/prompts/trading-calculations.js +37 -126
  27. package/dist/prompts/trading-calculations.js.map +1 -1
  28. package/dist/prompts/trading.d.ts.map +1 -1
  29. package/dist/prompts/trading.js +23 -60
  30. package/dist/prompts/trading.js.map +1 -1
  31. package/dist/prompts/transfers.d.ts.map +1 -1
  32. package/dist/prompts/transfers.js +21 -31
  33. package/dist/prompts/transfers.js.map +1 -1
  34. package/dist/prompts/utility-tools.d.ts.map +1 -1
  35. package/dist/prompts/utility-tools.js +83 -202
  36. package/dist/prompts/utility-tools.js.map +1 -1
  37. package/dist/prompts/utility.d.ts.map +1 -1
  38. package/dist/prompts/utility.js +5 -20
  39. package/dist/prompts/utility.js.map +1 -1
  40. package/dist/prompts/utils/handlerHelpers.d.ts +35 -0
  41. package/dist/prompts/utils/handlerHelpers.d.ts.map +1 -0
  42. package/dist/prompts/utils/handlerHelpers.js +53 -0
  43. package/dist/prompts/utils/handlerHelpers.js.map +1 -0
  44. package/dist/prompts/utils/textTemplates.d.ts +42 -0
  45. package/dist/prompts/utils/textTemplates.d.ts.map +1 -0
  46. package/dist/prompts/utils/textTemplates.js +51 -0
  47. package/dist/prompts/utils/textTemplates.js.map +1 -0
  48. package/dist/utils/validation.d.ts +38 -0
  49. package/dist/utils/validation.d.ts.map +1 -1
  50. package/dist/utils/validation.js +52 -0
  51. package/dist/utils/validation.js.map +1 -1
  52. package/package.json +2 -2
  53. package/docs/AI-AGENT-PATTERNS.md +0 -555
  54. package/docs/CONSTRAINTS-REFERENCE.md +0 -454
  55. package/docs/PROMPT-TOOL-MAPPING.md +0 -352
  56. package/docs/examples/default-values-pattern.md +0 -240
  57. package/docs/examples/tool-factory-pattern.md +0 -217
  58. package/jest.config.js +0 -94
  59. package/src/__tests__/integration/fetchTokenDetails.integration.test.ts +0 -258
  60. package/src/__tests__/integration/poolTools.integration.test.ts +0 -185
  61. package/src/__tests__/server.test.ts +0 -256
  62. package/src/constants/mcpToolNames.ts +0 -181
  63. package/src/index.ts +0 -19
  64. package/src/prompts/__tests__/promptStructure.test.ts +0 -137
  65. package/src/prompts/__tests__/registry.test.ts +0 -359
  66. package/src/prompts/analysis.ts +0 -429
  67. package/src/prompts/balances.ts +0 -198
  68. package/src/prompts/create-token.ts +0 -123
  69. package/src/prompts/creation-utils.ts +0 -118
  70. package/src/prompts/dex-trading.ts +0 -86
  71. package/src/prompts/discover-tokens.ts +0 -86
  72. package/src/prompts/index.ts +0 -175
  73. package/src/prompts/liquidity-positions.ts +0 -270
  74. package/src/prompts/pools.ts +0 -571
  75. package/src/prompts/portfolio.ts +0 -242
  76. package/src/prompts/social.ts +0 -100
  77. package/src/prompts/trading-calculations.ts +0 -499
  78. package/src/prompts/trading.ts +0 -191
  79. package/src/prompts/transfers.ts +0 -103
  80. package/src/prompts/utility-tools.ts +0 -349
  81. package/src/prompts/utility.ts +0 -92
  82. package/src/prompts/utils/workflowTemplates.ts +0 -511
  83. package/src/schemas/common-schemas.ts +0 -393
  84. package/src/scripts/test-all-prompts.ts +0 -184
  85. package/src/server.ts +0 -367
  86. package/src/tools/__tests__/dex-tools.test.ts +0 -562
  87. package/src/tools/__tests__/liquidity-positions.test.ts +0 -673
  88. package/src/tools/balance/index.ts +0 -174
  89. package/src/tools/creation/index.ts +0 -182
  90. package/src/tools/dex/index.ts +0 -226
  91. package/src/tools/dex/liquidity-positions.ts +0 -547
  92. package/src/tools/index.ts +0 -94
  93. package/src/tools/pools/fetchAllPools.ts +0 -47
  94. package/src/tools/pools/fetchAllPriceHistory.ts +0 -119
  95. package/src/tools/pools/fetchPoolDetails.ts +0 -27
  96. package/src/tools/pools/fetchPoolDetailsForCalculation.ts +0 -22
  97. package/src/tools/pools/fetchPools.ts +0 -47
  98. package/src/tools/pools/fetchPriceHistory.ts +0 -124
  99. package/src/tools/pools/fetchTokenDetails.ts +0 -77
  100. package/src/tools/pools/index.ts +0 -284
  101. package/src/tools/social/index.ts +0 -64
  102. package/src/tools/trading/index.ts +0 -605
  103. package/src/tools/transfers/index.ts +0 -75
  104. package/src/tools/utils/clearCache.ts +0 -36
  105. package/src/tools/utils/createWallet.ts +0 -19
  106. package/src/tools/utils/explainSdkUsage.ts +0 -1446
  107. package/src/tools/utils/getAddress.ts +0 -12
  108. package/src/tools/utils/getCacheInfo.ts +0 -14
  109. package/src/tools/utils/getConfig.ts +0 -21
  110. package/src/tools/utils/getEnvironment.ts +0 -17
  111. package/src/tools/utils/getEthereumAddress.ts +0 -12
  112. package/src/tools/utils/getUrlByTokenName.ts +0 -12
  113. package/src/tools/utils/getVersion.ts +0 -25
  114. package/src/tools/utils/getWallet.ts +0 -25
  115. package/src/tools/utils/hasWallet.ts +0 -15
  116. package/src/tools/utils/index.ts +0 -37
  117. package/src/tools/utils/isTokenGraduated.ts +0 -16
  118. package/src/tools/utils/setWallet.ts +0 -41
  119. package/src/tools/utils/switchEnvironment.ts +0 -28
  120. package/src/types/mcp.ts +0 -72
  121. package/src/utils/__tests__/validation.test.ts +0 -147
  122. package/src/utils/constraints.ts +0 -155
  123. package/src/utils/default-values.ts +0 -208
  124. package/src/utils/error-handler.ts +0 -69
  125. package/src/utils/error-templates.ts +0 -273
  126. package/src/utils/response-formatter.ts +0 -51
  127. package/src/utils/tool-factory.ts +0 -303
  128. package/src/utils/tool-registry.ts +0 -296
  129. package/src/utils/validation.ts +0 -371
  130. package/tests/wallet-management-integration.test.ts +0 -284
  131. package/tsconfig.json +0 -23
package/src/server.ts DELETED
@@ -1,367 +0,0 @@
1
- /**
2
- * Gala Launchpad MCP Server
3
- *
4
- * Provides MCP tools for AI agents to interact with Gala Launchpad
5
- */
6
-
7
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
- import {
10
- ListToolsRequestSchema,
11
- CallToolRequestSchema,
12
- ListPromptsRequestSchema,
13
- GetPromptRequestSchema,
14
- } from '@modelcontextprotocol/sdk/types.js';
15
- import { AgentConfig, type LaunchpadSDK } from '@gala-chain/launchpad-sdk';
16
- import { tools } from './tools/index.js';
17
- import { prompts, getPrompt } from './prompts/index.js';
18
- import { MCP_SERVER_VERSION } from './generated/version.js';
19
-
20
- export class LaunchpadMCPServer {
21
- private server: Server;
22
- private sdk: LaunchpadSDK | null = null;
23
- private debug: boolean;
24
- private currentEnvironment: 'production' | 'development' | 'testing' = 'production';
25
- private currentPrivateKey: string | undefined;
26
-
27
- constructor() {
28
- this.debug = process.env.DEBUG === 'true';
29
-
30
- this.server = new Server(
31
- {
32
- name: '@gala-chain/launchpad-mcp-server',
33
- version: MCP_SERVER_VERSION,
34
- },
35
- {
36
- capabilities: {
37
- tools: {},
38
- prompts: {
39
- listChanged: true,
40
- },
41
- },
42
- }
43
- );
44
-
45
- this.setupToolHandlers();
46
- this.setupPromptHandlers();
47
- this.setupErrorHandlers();
48
- }
49
-
50
- /**
51
- * Initialize SDK with AgentConfig
52
- *
53
- * Supports two operational modes:
54
- * 1. Full-access mode (PRIVATE_KEY provided): Uses quickSetup() - all operations available
55
- * 2. Read-only mode (PRIVATE_KEY not provided): Uses readOnlySetup() - query operations only
56
- *
57
- * In read-only mode, signing operations (buy, sell, create tokens, etc.) will throw ValidationError
58
- * when attempted, but all query operations (fetchPools, fetchBalance, etc.) work normally.
59
- */
60
- async initialize() {
61
- try {
62
- if (this.debug) {
63
- console.error('[MCP Server] Initializing SDK...');
64
- }
65
-
66
- const hasPrivateKey = Boolean(process.env.PRIVATE_KEY && process.env.PRIVATE_KEY.trim());
67
- const environment = ((process.env.ENVIRONMENT as any) || 'production') as 'production' | 'development' | 'testing';
68
- const timeout = parseInt(process.env.TIMEOUT || '30000', 10);
69
-
70
- // Store environment and private key for dynamic switching
71
- this.currentEnvironment = environment;
72
- if (hasPrivateKey) {
73
- this.currentPrivateKey = process.env.PRIVATE_KEY;
74
- }
75
-
76
- if (hasPrivateKey) {
77
- // Full-access mode: use quickSetup() to enable signing operations
78
- if (this.debug) {
79
- console.error('[MCP Server] PRIVATE_KEY detected - initializing in full-access mode');
80
- }
81
-
82
- const { sdk, validation } = await AgentConfig.quickSetup({
83
- environment,
84
- privateKey: process.env.PRIVATE_KEY,
85
- timeout,
86
- debug: this.debug,
87
- autoValidate: false,
88
- });
89
-
90
- this.sdk = sdk;
91
-
92
- if (this.debug) {
93
- console.error('[MCP Server] SDK initialized successfully (full-access mode)');
94
- if (validation) {
95
- console.error(`[MCP Server] Validation - Ready: ${validation.ready}`);
96
- console.error(`[MCP Server] Validation - Can Trade: ${validation.capabilities.canTrade}`);
97
- }
98
- }
99
-
100
- if (validation && !validation.ready) {
101
- console.error('[MCP Server] Warning: SDK not ready', validation.issues);
102
- }
103
- } else {
104
- // Read-only mode: use readOnlySetup() for query-only operations
105
- if (this.debug) {
106
- console.error('[MCP Server] PRIVATE_KEY not provided - initializing in read-only mode');
107
- }
108
-
109
- const { sdk } = await AgentConfig.readOnlySetup({
110
- environment,
111
- timeout,
112
- debug: this.debug,
113
- });
114
-
115
- this.sdk = sdk;
116
-
117
- if (this.debug) {
118
- console.error('[MCP Server] SDK initialized successfully (read-only mode)');
119
- console.error('[MCP Server] Note: Signing operations will fail - wallet required');
120
- }
121
- }
122
- } catch (error) {
123
- console.error('[MCP Server] Failed to initialize SDK:', error);
124
- throw error;
125
- }
126
- }
127
-
128
- /**
129
- * Setup tool handlers
130
- */
131
- private setupToolHandlers() {
132
- // Register tools/list handler
133
- this.server.setRequestHandler(ListToolsRequestSchema, async () => {
134
- if (this.debug) {
135
- console.error(`[MCP Server] Listing ${tools.length} tools`);
136
- }
137
-
138
- return {
139
- tools: tools.map((tool) => ({
140
- name: tool.name,
141
- description: tool.description,
142
- inputSchema: tool.inputSchema,
143
- })),
144
- };
145
- });
146
-
147
- // Register tools/call handler
148
- this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
149
- const toolName = request.params.name as string;
150
- const args = request.params.arguments || {};
151
-
152
- if (this.debug) {
153
- console.error(`[MCP Server] Executing tool: ${toolName}`);
154
- console.error(`[MCP Server] Arguments:`, JSON.stringify(args, null, 2));
155
- }
156
-
157
- const tool = tools.find((t) => t.name === toolName);
158
-
159
- if (!tool) {
160
- throw new Error(`Tool not found: ${toolName}`);
161
- }
162
-
163
- if (!this.sdk) {
164
- throw new Error('SDK not initialized. Failed during startup - check logs for details.');
165
- }
166
-
167
- try {
168
- const result = await tool.handler(this.sdk, args, this);
169
-
170
- if (this.debug) {
171
- console.error(`[MCP Server] Tool execution successful: ${toolName}`);
172
- }
173
-
174
- return result as any;
175
- } catch (error) {
176
- console.error(`[MCP Server] Tool execution failed: ${toolName}`, error);
177
- throw error;
178
- }
179
- });
180
- }
181
-
182
- /**
183
- * Setup prompt handlers
184
- */
185
- private setupPromptHandlers() {
186
- // Register prompts/list handler
187
- this.server.setRequestHandler(ListPromptsRequestSchema, async () => {
188
- if (this.debug) {
189
- console.error(`[MCP Server] Listing ${prompts.length} prompts`);
190
- }
191
-
192
- return {
193
- prompts: prompts.map((prompt) => ({
194
- name: prompt.name,
195
- description: prompt.description,
196
- arguments: prompt.arguments || [],
197
- })),
198
- };
199
- });
200
-
201
- // Register prompts/get handler
202
- this.server.setRequestHandler(GetPromptRequestSchema, async (request) => {
203
- const promptName = request.params.name as string;
204
- const args = (request.params.arguments || {}) as Record<string, string>;
205
-
206
- if (this.debug) {
207
- console.error(`[MCP Server] Getting prompt: ${promptName}`);
208
- console.error(`[MCP Server] Arguments:`, JSON.stringify(args, null, 2));
209
- }
210
-
211
- const prompt = getPrompt(promptName);
212
-
213
- if (!prompt) {
214
- throw new Error(`Prompt not found: ${promptName}`);
215
- }
216
-
217
- try {
218
- const messages = prompt.handler(args);
219
-
220
- if (this.debug) {
221
- console.error(`[MCP Server] Prompt generated ${messages.length} messages`);
222
- }
223
-
224
- return {
225
- messages,
226
- };
227
- } catch (error) {
228
- console.error(`[MCP Server] Prompt generation failed: ${promptName}`, error);
229
- throw error;
230
- }
231
- });
232
- }
233
-
234
- /**
235
- * Setup error handlers
236
- */
237
- private setupErrorHandlers() {
238
- this.server.onerror = (error) => {
239
- console.error('[MCP Server] Protocol error:', error);
240
- };
241
-
242
- process.on('SIGINT', () => {
243
- if (this.debug) {
244
- console.error('[MCP Server] Received SIGINT, shutting down...');
245
- }
246
- this.cleanup();
247
- process.exit(0);
248
- });
249
-
250
- process.on('SIGTERM', () => {
251
- if (this.debug) {
252
- console.error('[MCP Server] Received SIGTERM, shutting down...');
253
- }
254
- this.cleanup();
255
- process.exit(0);
256
- });
257
- }
258
-
259
- /**
260
- * Start the MCP server
261
- */
262
- async start() {
263
- await this.initialize();
264
-
265
- const transport = new StdioServerTransport();
266
- await this.server.connect(transport);
267
-
268
- if (this.debug) {
269
- console.error('[MCP Server] Gala Launchpad MCP server running on stdio');
270
- console.error(`[MCP Server] Registered ${tools.length} tools`);
271
- console.error(`[MCP Server] Registered ${prompts.length} prompts (slash commands)`);
272
- }
273
- }
274
-
275
- /**
276
- * Switch to a different environment dynamically
277
- * Creates a new SDK instance with the new environment while preserving the wallet
278
- *
279
- * Strategy: Create new SDK BEFORE destroying old one to avoid broken state on error
280
- */
281
- async switchEnvironment(newEnvironment: 'production' | 'development' | 'testing') {
282
- try {
283
- if (this.debug) {
284
- console.error(`[MCP Server] Switching environment: ${this.currentEnvironment} → ${newEnvironment}`);
285
- }
286
-
287
- const previousEnvironment = this.currentEnvironment;
288
- const previousSdk = this.sdk;
289
- const timeout = parseInt(process.env.TIMEOUT || '30000', 10);
290
-
291
- // Create new SDK BEFORE destroying old one (prevents broken state on error)
292
- let newSdk: LaunchpadSDK;
293
-
294
- if (this.currentPrivateKey) {
295
- // Preserve wallet in full-access mode
296
- if (this.debug) {
297
- console.error('[MCP Server] Switching with wallet preservation (full-access mode)');
298
- }
299
-
300
- const { sdk } = await AgentConfig.quickSetup({
301
- environment: newEnvironment,
302
- privateKey: this.currentPrivateKey,
303
- timeout,
304
- debug: this.debug,
305
- autoValidate: false,
306
- });
307
-
308
- newSdk = sdk;
309
- } else {
310
- // Switch in read-only mode
311
- if (this.debug) {
312
- console.error('[MCP Server] Switching in read-only mode');
313
- }
314
-
315
- const { sdk } = await AgentConfig.readOnlySetup({
316
- environment: newEnvironment,
317
- timeout,
318
- debug: this.debug,
319
- });
320
-
321
- newSdk = sdk;
322
- }
323
-
324
- // Only cleanup old SDK after new one is successfully created and ready
325
- if (previousSdk) {
326
- previousSdk.cleanup();
327
- }
328
-
329
- // Now safe to update SDK instance and environment
330
- this.sdk = newSdk;
331
- this.currentEnvironment = newEnvironment;
332
-
333
- if (this.debug) {
334
- console.error(`[MCP Server] Environment switched successfully: ${previousEnvironment} → ${newEnvironment}`);
335
- }
336
-
337
- return {
338
- success: true,
339
- previousEnvironment,
340
- newEnvironment,
341
- };
342
- } catch (error) {
343
- console.error('[MCP Server] Failed to switch environment:', error);
344
- // Old SDK remains intact if switch fails
345
- throw error;
346
- }
347
- }
348
-
349
- /**
350
- * Get current environment
351
- */
352
- getEnvironment(): 'production' | 'development' | 'testing' {
353
- return this.currentEnvironment;
354
- }
355
-
356
- /**
357
- * Cleanup resources
358
- */
359
- cleanup() {
360
- if (this.sdk) {
361
- this.sdk.cleanup();
362
- if (this.debug) {
363
- console.error('[MCP Server] SDK cleaned up');
364
- }
365
- }
366
- }
367
- }