@gala-chain/launchpad-mcp-server 1.23.1 → 1.24.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 (116) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +34 -6
  3. package/dist/constants/mcpToolNames.d.ts +6 -2
  4. package/dist/constants/mcpToolNames.d.ts.map +1 -1
  5. package/dist/constants/mcpToolNames.js +4 -2
  6. package/dist/constants/mcpToolNames.js.map +1 -1
  7. package/dist/generated/version.d.ts +1 -1
  8. package/dist/generated/version.js +1 -1
  9. package/dist/prompts/explore-dex-pools.d.ts +20 -0
  10. package/dist/prompts/explore-dex-pools.d.ts.map +1 -0
  11. package/dist/prompts/explore-dex-pools.js +132 -0
  12. package/dist/prompts/explore-dex-pools.js.map +1 -0
  13. package/dist/prompts/index.d.ts +3 -2
  14. package/dist/prompts/index.d.ts.map +1 -1
  15. package/dist/prompts/index.js +6 -3
  16. package/dist/prompts/index.js.map +1 -1
  17. package/dist/prompts/pools.js.map +1 -1
  18. package/dist/tools/dex/fetchAllDexPools.d.ts +9 -0
  19. package/dist/tools/dex/fetchAllDexPools.d.ts.map +1 -0
  20. package/dist/tools/dex/fetchAllDexPools.js +45 -0
  21. package/dist/tools/dex/fetchAllDexPools.js.map +1 -0
  22. package/dist/tools/dex/fetchDexPools.d.ts +9 -0
  23. package/dist/tools/dex/fetchDexPools.d.ts.map +1 -0
  24. package/dist/tools/dex/fetchDexPools.js +58 -0
  25. package/dist/tools/dex/fetchDexPools.js.map +1 -0
  26. package/dist/tools/dex/index.d.ts +4 -3
  27. package/dist/tools/dex/index.d.ts.map +1 -1
  28. package/dist/tools/dex/index.js +9 -4
  29. package/dist/tools/dex/index.js.map +1 -1
  30. package/dist/tools/index.d.ts +2 -2
  31. package/dist/tools/index.js +3 -3
  32. package/docs/AI-AGENT-PATTERNS.md +555 -0
  33. package/docs/CONSTRAINTS-REFERENCE.md +454 -0
  34. package/docs/PROMPT-TOOL-MAPPING.md +352 -0
  35. package/docs/examples/default-values-pattern.md +240 -0
  36. package/docs/examples/tool-factory-pattern.md +217 -0
  37. package/jest.config.js +94 -0
  38. package/package.json +3 -3
  39. package/src/__tests__/integration/fetchTokenDetails.integration.test.ts +258 -0
  40. package/src/__tests__/integration/poolTools.integration.test.ts +185 -0
  41. package/src/__tests__/server.test.ts +255 -0
  42. package/src/constants/mcpToolNames.ts +183 -0
  43. package/src/index.ts +19 -0
  44. package/src/prompts/__tests__/promptStructure.test.ts +187 -0
  45. package/src/prompts/__tests__/registry.test.ts +349 -0
  46. package/src/prompts/analysis.ts +380 -0
  47. package/src/prompts/balances.ts +182 -0
  48. package/src/prompts/create-token.ts +123 -0
  49. package/src/prompts/creation-utils.ts +103 -0
  50. package/src/prompts/dex-trading.ts +86 -0
  51. package/src/prompts/discover-tokens.ts +86 -0
  52. package/src/prompts/explore-dex-pools.ts +138 -0
  53. package/src/prompts/index.ts +178 -0
  54. package/src/prompts/liquidity-positions.ts +237 -0
  55. package/src/prompts/pools.ts +496 -0
  56. package/src/prompts/portfolio.ts +208 -0
  57. package/src/prompts/social.ts +94 -0
  58. package/src/prompts/trading-calculations.ts +414 -0
  59. package/src/prompts/trading.ts +160 -0
  60. package/src/prompts/transfers.ts +97 -0
  61. package/src/prompts/utility-tools.ts +266 -0
  62. package/src/prompts/utility.ts +77 -0
  63. package/src/prompts/utils/handlerHelpers.ts +55 -0
  64. package/src/prompts/utils/textTemplates.ts +73 -0
  65. package/src/prompts/utils/workflowTemplates.ts +511 -0
  66. package/src/schemas/common-schemas.ts +393 -0
  67. package/src/scripts/test-all-prompts.ts +184 -0
  68. package/src/server.ts +367 -0
  69. package/src/tools/__tests__/dex-tools.test.ts +562 -0
  70. package/src/tools/__tests__/liquidity-positions.test.ts +673 -0
  71. package/src/tools/balance/index.ts +174 -0
  72. package/src/tools/creation/index.ts +182 -0
  73. package/src/tools/dex/fetchAllDexPools.ts +45 -0
  74. package/src/tools/dex/fetchDexPools.ts +58 -0
  75. package/src/tools/dex/index.ts +231 -0
  76. package/src/tools/dex/liquidity-positions.ts +547 -0
  77. package/src/tools/index.ts +94 -0
  78. package/src/tools/pools/fetchAllPools.ts +47 -0
  79. package/src/tools/pools/fetchAllPriceHistory.ts +119 -0
  80. package/src/tools/pools/fetchPoolDetails.ts +27 -0
  81. package/src/tools/pools/fetchPoolDetailsForCalculation.ts +22 -0
  82. package/src/tools/pools/fetchPools.ts +47 -0
  83. package/src/tools/pools/fetchPriceHistory.ts +124 -0
  84. package/src/tools/pools/fetchTokenDetails.ts +77 -0
  85. package/src/tools/pools/index.ts +284 -0
  86. package/src/tools/social/index.ts +64 -0
  87. package/src/tools/trading/index.ts +605 -0
  88. package/src/tools/transfers/index.ts +75 -0
  89. package/src/tools/utils/clearCache.ts +36 -0
  90. package/src/tools/utils/createWallet.ts +19 -0
  91. package/src/tools/utils/explainSdkUsage.ts +1446 -0
  92. package/src/tools/utils/getAddress.ts +12 -0
  93. package/src/tools/utils/getCacheInfo.ts +14 -0
  94. package/src/tools/utils/getConfig.ts +21 -0
  95. package/src/tools/utils/getEnvironment.ts +17 -0
  96. package/src/tools/utils/getEthereumAddress.ts +12 -0
  97. package/src/tools/utils/getUrlByTokenName.ts +12 -0
  98. package/src/tools/utils/getVersion.ts +25 -0
  99. package/src/tools/utils/getWallet.ts +25 -0
  100. package/src/tools/utils/hasWallet.ts +15 -0
  101. package/src/tools/utils/index.ts +37 -0
  102. package/src/tools/utils/isTokenGraduated.ts +16 -0
  103. package/src/tools/utils/setWallet.ts +41 -0
  104. package/src/tools/utils/switchEnvironment.ts +28 -0
  105. package/src/types/mcp.ts +72 -0
  106. package/src/utils/__tests__/validation.test.ts +147 -0
  107. package/src/utils/constraints.ts +155 -0
  108. package/src/utils/default-values.ts +208 -0
  109. package/src/utils/error-handler.ts +69 -0
  110. package/src/utils/error-templates.ts +273 -0
  111. package/src/utils/response-formatter.ts +51 -0
  112. package/src/utils/tool-factory.ts +303 -0
  113. package/src/utils/tool-registry.ts +296 -0
  114. package/src/utils/validation.ts +429 -0
  115. package/tests/wallet-management-integration.test.ts +284 -0
  116. package/tsconfig.json +23 -0
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Analysis Prompts
3
+ *
4
+ * Slash commands for token analysis and comparison on Gala Launchpad
5
+ */
6
+
7
+ import type { MCPPrompt } from '../types/mcp.js';
8
+ import { MCP_TOOLS } from '../constants/mcpToolNames.js';
9
+ import { validateTokenName, validateTokenList, validateOptionalLimit } from '../utils/validation.js';
10
+ import { createPromptResponse } from './utils/handlerHelpers.js';
11
+
12
+ /**
13
+ * Compare Tokens - Side-by-side comparison
14
+ */
15
+ export const compareTokensPrompt: MCPPrompt = {
16
+ name: 'galachain-launchpad:compare-tokens',
17
+ description: 'Compare two Launchpad tokens side-by-side with detailed metrics',
18
+ arguments: [
19
+ {
20
+ name: 'token1',
21
+ description: 'First token to compare (e.g., anime)',
22
+ required: true,
23
+ },
24
+ {
25
+ name: 'token2',
26
+ description: 'Second token to compare (e.g., test216253)',
27
+ required: true,
28
+ },
29
+ ],
30
+ handler: (args) => {
31
+ // Validate inputs
32
+ validateTokenName(args.token1, 'token1');
33
+ validateTokenName(args.token2, 'token2');
34
+
35
+ return createPromptResponse(`Compare two Launchpad tokens side-by-side:
36
+
37
+ Token 1: ${args.token1}
38
+ Token 2: ${args.token2}
39
+
40
+ For EACH token, use the optimized pattern:
41
+
42
+ 1. Fetch pool details using ${MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
43
+
44
+ 2. Calculate metrics using LOCAL mode:
45
+ - Spot price: ${MCP_TOOLS.FETCH_LAUNCHPAD_TOKEN_SPOT_PRICE}
46
+ - Graduation cost: ${MCP_TOOLS.CALCULATE_BUY_AMOUNT_FOR_GRADUATION}
47
+ - Is graduated: ${MCP_TOOLS.IS_TOKEN_GRADUATED}
48
+
49
+ 3. Get additional data:
50
+ - Full pool details: ${MCP_TOOLS.FETCH_POOL_DETAILS}
51
+ - Token distribution: ${MCP_TOOLS.FETCH_TOKEN_DISTRIBUTION}
52
+ - Badges: ${MCP_TOOLS.FETCH_TOKEN_BADGES}
53
+
54
+ Present a comparison table:
55
+
56
+ | Metric | ${args.token1} | ${args.token2} |
57
+ |--------|--------|--------|
58
+ | Spot Price (USD) | ... | ... |
59
+ | Market Cap Estimate | ... | ... |
60
+ | Pool Status | ... | ... |
61
+ | Progress to Graduation | ... | ... |
62
+ | Remaining Tokens | ... | ... |
63
+ | GALA to Graduate | ... | ... |
64
+ | Holder Count | ... | ... |
65
+ | Creator Status | ... | ... |
66
+
67
+ Provide analysis:
68
+ - Which token is closer to graduation?
69
+ - Which has better liquidity?
70
+ - Which might be a better investment and why?
71
+ - Any notable badges or achievements?`);
72
+ },
73
+ };
74
+
75
+ /**
76
+ * Graduation Status - Check multiple tokens for graduation readiness
77
+ */
78
+ export const graduationStatusPrompt: MCPPrompt = {
79
+ name: 'galachain-launchpad:graduation-status',
80
+ description: 'Check graduation status and readiness for multiple tokens',
81
+ arguments: [
82
+ {
83
+ name: 'tokens',
84
+ description: 'Comma-separated token names (e.g., anime,test216253,dragnrkti)',
85
+ required: true,
86
+ },
87
+ ],
88
+ handler: (args) => {
89
+ // Validate inputs
90
+ const tokenArray = validateTokenList(args.tokens);
91
+
92
+ return createPromptResponse(`Check graduation status for multiple tokens:
93
+
94
+ Tokens: ${args.tokens}
95
+
96
+ For EACH token in the list:
97
+
98
+ 1. Check if graduated: ${MCP_TOOLS.IS_TOKEN_GRADUATED}
99
+
100
+ 2. If not graduated, use optimized pattern:
101
+ a. Fetch pool details: ${MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
102
+ b. Calculate graduation cost: ${MCP_TOOLS.CALCULATE_BUY_AMOUNT_FOR_GRADUATION} (LOCAL mode)
103
+ c. Calculate progress: (currentSupply / maxSupply * 100)
104
+
105
+ 3. Get full pool details: ${MCP_TOOLS.FETCH_POOL_DETAILS}
106
+
107
+ Present a table:
108
+
109
+ | Token | Status | Progress | Remaining Tokens | GALA to Graduate | Frontend URL |
110
+ |-------|--------|----------|------------------|------------------|--------------|
111
+ | ... | ... | ... | ... | ... | ... |
112
+
113
+ Summary:
114
+ - Total tokens analyzed: ${tokenArray.length}
115
+ - Already graduated: [count]
116
+ - Close to graduation (>90%): [count]
117
+ - Mid-progress (50-90%): [count]
118
+ - Early stage (<50%): [count]
119
+
120
+ Provide recommendations:
121
+ - Which tokens are good graduation opportunities?
122
+ - Which tokens might be undervalued?`);
123
+ },
124
+ };
125
+
126
+ /**
127
+ * Spot Prices - Batch spot price lookup
128
+ */
129
+ export const spotPricesPrompt: MCPPrompt = {
130
+ name: 'galachain-launchpad:spot-prices',
131
+ description: 'Get spot prices for multiple Launchpad tokens efficiently',
132
+ arguments: [
133
+ {
134
+ name: 'tokens',
135
+ description: 'Comma-separated token names (e.g., anime,test216253,dragnrkti)',
136
+ required: true,
137
+ },
138
+ ],
139
+ handler: (args) => {
140
+ // Validate inputs
141
+ validateTokenList(args.tokens);
142
+
143
+ return createPromptResponse(`Get spot prices for multiple Launchpad tokens:
144
+
145
+ Tokens: ${args.tokens}
146
+
147
+ Use the optimized batch pattern for EACH token:
148
+
149
+ 1. Fetch pool details: ${MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
150
+ 2. Calculate spot price: ${MCP_TOOLS.FETCH_LAUNCHPAD_TOKEN_SPOT_PRICE} (LOCAL mode)
151
+
152
+ Also get GALA spot price: ${MCP_TOOLS.FETCH_GALA_SPOT_PRICE}
153
+
154
+ Present results:
155
+
156
+ **GALA Spot Price:** $[price]
157
+
158
+ **Launchpad Token Prices:**
159
+ | Token | USD Price | GALA Price | Market Cap Est. |
160
+ |-------|-----------|------------|-----------------|
161
+ | ... | ... | ... | ... |
162
+
163
+ Performance note: Using LOCAL calculations - instant results with <0.01% difference from external!
164
+
165
+ Sort by USD price (highest to lowest).`);
166
+ },
167
+ };
168
+
169
+ /**
170
+ * Pool Details - Comprehensive pool information
171
+ */
172
+ export const poolDetailsPrompt: MCPPrompt = {
173
+ name: 'galachain-launchpad:pool-details',
174
+ description: 'Get comprehensive pool information including distribution and badges',
175
+ arguments: [
176
+ {
177
+ name: 'tokenName',
178
+ description: 'Token to analyze (e.g., anime)',
179
+ required: true,
180
+ },
181
+ ],
182
+ handler: (args) => {
183
+ // Validate inputs
184
+ validateTokenName(args.tokenName);
185
+
186
+ return createPromptResponse(`Get comprehensive pool information for "${args.tokenName}":
187
+
188
+ 1. Full pool details: ${MCP_TOOLS.FETCH_POOL_DETAILS}
189
+ 2. Token distribution: ${MCP_TOOLS.FETCH_TOKEN_DISTRIBUTION}
190
+ 3. Achievement badges: ${MCP_TOOLS.FETCH_TOKEN_BADGES}
191
+ 4. Recent volume data (last 24h): ${MCP_TOOLS.FETCH_VOLUME_DATA} with 1h resolution
192
+ 5. Check if graduated: ${MCP_TOOLS.IS_TOKEN_GRADUATED}
193
+ 6. Frontend URL: ${MCP_TOOLS.GET_URL_BY_TOKEN_NAME}
194
+
195
+ Display organized sections:
196
+
197
+ **Basic Info:**
198
+ - Token name and symbol
199
+ - Pool status
200
+ - Created by
201
+ - Frontend URL
202
+
203
+ **Supply Metrics:**
204
+ - Current supply
205
+ - Maximum supply
206
+ - Remaining tokens
207
+ - Progress percentage
208
+
209
+ **Distribution:**
210
+ - Total holders
211
+ - Top holders (if available)
212
+ - Distribution metrics
213
+
214
+ **Achievements:**
215
+ - Volume badges
216
+ - Engagement badges
217
+ - Other achievements
218
+
219
+ **Recent Activity (24h):**
220
+ - Trading volume
221
+ - Price movement
222
+ - Number of trades
223
+
224
+ **Reverse Bonding Curve:**
225
+ - Max fee factor
226
+ - Min fee factor
227
+ - Current fee structure`);
228
+ },
229
+ };
230
+
231
+ /**
232
+ * Trade History - Recent trades with filters
233
+ */
234
+ export const tradeHistoryPrompt: MCPPrompt = {
235
+ name: 'galachain-launchpad:trade-history',
236
+ description: 'View recent trades for a token or user with filtering options',
237
+ arguments: [
238
+ {
239
+ name: 'tokenName',
240
+ description: 'Token to view trades for (optional)',
241
+ required: false,
242
+ },
243
+ {
244
+ name: 'userAddress',
245
+ description: 'User address to filter by (optional)',
246
+ required: false,
247
+ },
248
+ {
249
+ name: 'tradeType',
250
+ description: 'Trade type filter: BUY or SELL (optional)',
251
+ required: false,
252
+ },
253
+ {
254
+ name: 'limit',
255
+ description: 'Number of trades to show (default: 20)',
256
+ required: false,
257
+ },
258
+ ],
259
+ handler: (args) => {
260
+ // Validate inputs
261
+ if (args.tokenName) {
262
+ validateTokenName(args.tokenName);
263
+ }
264
+ validateOptionalLimit(args.limit, 20);
265
+ if (args.tradeType && args.tradeType !== 'BUY' && args.tradeType !== 'SELL') {
266
+ throw new Error('tradeType must be either BUY or SELL');
267
+ }
268
+
269
+ const limit = args.limit || '20';
270
+
271
+ return createPromptResponse(`Show recent trade history:
272
+
273
+ ${args.tokenName ? `Token: ${args.tokenName}` : 'All tokens'}
274
+ ${args.userAddress ? `User: ${args.userAddress}` : 'All users'}
275
+ ${args.tradeType ? `Type: ${args.tradeType}` : 'All trade types'}
276
+ Limit: ${limit}
277
+
278
+ Use ${MCP_TOOLS.FETCH_TRADES} with:
279
+ ${args.tokenName ? `- tokenName: "${args.tokenName}"` : ''}
280
+ ${args.userAddress ? `- userAddress: "${args.userAddress}"` : ''}
281
+ ${args.tradeType ? `- tradeType: "${args.tradeType}"` : ''}
282
+ - limit: ${limit}
283
+ - sortOrder: "DESC" (newest first)
284
+
285
+ For each trade, display:
286
+ - Timestamp (formatted)
287
+ - Token name
288
+ - Trade type (BUY/SELL)
289
+ - Amount (tokens)
290
+ - Price (GALA)
291
+ - User address (truncated)
292
+ - Transaction ID
293
+
294
+ Calculate summary:
295
+ - Total trades shown
296
+ - Total volume (GALA)
297
+ - Average trade size
298
+ - Buy vs Sell ratio (if not filtered)`);
299
+ },
300
+ };
301
+
302
+ /**
303
+ * Fetch All Pools - Get all available pools with automatic pagination
304
+ */
305
+ export const fetchAllPoolsPrompt: MCPPrompt = {
306
+ name: 'galachain-launchpad:fetch-all-pools',
307
+ description: 'Fetch all available Launchpad pools with automatic pagination (no limit needed)',
308
+ arguments: [
309
+ {
310
+ name: 'search',
311
+ description: 'Optional search filter for token names (fuzzy match)',
312
+ required: false,
313
+ },
314
+ {
315
+ name: 'type',
316
+ description: 'Pool type filter: recent or popular (optional, default: recent)',
317
+ required: false,
318
+ },
319
+ ],
320
+ handler: (args) => {
321
+ // Validate type if provided
322
+ if (args.type && args.type !== 'recent' && args.type !== 'popular') {
323
+ throw new Error('type must be either "recent" or "popular"');
324
+ }
325
+
326
+ const searchFilter = args.search
327
+ ? `- search: "${args.search}" (fuzzy match filter)`
328
+ : '- No search filter';
329
+ const typeFilter = args.type ? args.type : 'recent';
330
+
331
+ return createPromptResponse(`Fetch ALL available Launchpad pools with automatic pagination:
332
+
333
+ Use ${MCP_TOOLS.FETCH_ALL_POOLS} with:
334
+ ${searchFilter}
335
+ - type: "${typeFilter}"
336
+
337
+ This tool automatically:
338
+ - Fetches the first page to determine total available pools
339
+ - Concurrently fetches remaining pages (up to 5 at a time)
340
+ - Returns ALL matching pools in a single result
341
+
342
+ For each pool, display:
343
+ - Token name and symbol
344
+ - Pool status (Ongoing/Completed)
345
+ - Current price (if available)
346
+ - Progress percentage
347
+ - Creator address (truncated)
348
+ - Frontend URL (use ${MCP_TOOLS.GET_URL_BY_TOKEN_NAME})
349
+
350
+ Provide summary:
351
+ - Total pools found
352
+ - How many are graduated (Completed)
353
+ - How many are active (Ongoing)
354
+ - Distribution by progress stage:
355
+ * Early (<25%)
356
+ * Growing (25-75%)
357
+ * Near graduation (75-99%)
358
+ * Graduated (100%)
359
+
360
+ Performance note:
361
+ - Uses concurrent fetching with ${MCP_TOOLS.FETCH_ALL_POOLS}
362
+ - Max 5 concurrent requests to avoid rate limiting
363
+ - Automatic cache warming for token metadata
364
+ - Much faster than manual pagination!
365
+
366
+ Sort pools by creation date (newest first) or progress (closest to graduation first).`);
367
+ },
368
+ };
369
+
370
+ /**
371
+ * Export all analysis prompts
372
+ */
373
+ export const analysisPrompts: MCPPrompt[] = [
374
+ compareTokensPrompt,
375
+ graduationStatusPrompt,
376
+ spotPricesPrompt,
377
+ poolDetailsPrompt,
378
+ tradeHistoryPrompt,
379
+ fetchAllPoolsPrompt,
380
+ ];
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Balance & Portfolio Prompts
3
+ *
4
+ * Slash commands for balance queries and portfolio management
5
+ */
6
+
7
+ import type { MCPPrompt } from '../types/mcp.js';
8
+ import { MCP_TOOLS } from '../constants/mcpToolNames.js';
9
+ import { validateAddress, validateOptionalAddress } from '../utils/validation.js';
10
+ import { createPromptResponse } from './utils/handlerHelpers.js';
11
+ import { createSimpleOperationText } from './utils/textTemplates.js';
12
+
13
+ /**
14
+ * Fetch GALA Balance - GALA balance query
15
+ */
16
+ export const fetchGalaBalancePrompt: MCPPrompt = {
17
+ name: 'galachain-launchpad:fetch-gala-balance',
18
+ description: 'Get GALA balance for a wallet',
19
+ arguments: [
20
+ {
21
+ name: 'address',
22
+ description: 'Wallet address (optional, defaults to SDK wallet)',
23
+ required: false,
24
+ },
25
+ ],
26
+ handler: (args) => {
27
+ validateOptionalAddress(args.address);
28
+
29
+ return createPromptResponse(
30
+ createSimpleOperationText({
31
+ operation: 'Get GALA balance for wallet.',
32
+ parameters: args.address
33
+ ? { address: `Address: ${args.address}` }
34
+ : { wallet: 'Using default wallet' },
35
+ toolName: MCP_TOOLS.FETCH_GALA_BALANCE,
36
+ actionDescription: 'retrieve the GALA balance',
37
+ displayFormat: 'Display the balance in a clear format.',
38
+ })
39
+ );
40
+ },
41
+ };
42
+
43
+ /**
44
+ * Fetch Token Balance - Single token balance (optimized)
45
+ */
46
+ export const fetchTokenBalancePrompt: MCPPrompt = {
47
+ name: 'galachain-launchpad:fetch-token-balance',
48
+ description: 'Get balance for a specific token',
49
+ arguments: [
50
+ {
51
+ name: 'tokenName',
52
+ description: 'Token name (e.g., anime)',
53
+ required: true,
54
+ },
55
+ {
56
+ name: 'address',
57
+ description: 'Wallet address',
58
+ required: true,
59
+ },
60
+ ],
61
+ handler: (args) => {
62
+ validateAddress(args.address);
63
+
64
+ return createPromptResponse(
65
+ createSimpleOperationText({
66
+ operation: 'Get balance for specific token.',
67
+ parameters: {
68
+ token: `Token: ${args.tokenName}`,
69
+ address: `Address: ${args.address}`,
70
+ },
71
+ toolName: MCP_TOOLS.FETCH_TOKEN_BALANCE,
72
+ actionDescription: 'retrieve the token balance',
73
+ displayFormat: 'Display the balance with token details.',
74
+ })
75
+ );
76
+ },
77
+ };
78
+
79
+ /**
80
+ * Fetch Tokens Created - Created tokens query
81
+ */
82
+ export const fetchTokensCreatedPrompt: MCPPrompt = {
83
+ name: 'galachain-launchpad:fetch-tokens-created',
84
+ description: 'Get tokens created by a wallet',
85
+ arguments: [
86
+ {
87
+ name: 'address',
88
+ description: 'Wallet address',
89
+ required: true,
90
+ },
91
+ {
92
+ name: 'page',
93
+ description: 'Page number (default: 1)',
94
+ required: false,
95
+ },
96
+ {
97
+ name: 'limit',
98
+ description: 'Results per page (default: 20)',
99
+ required: false,
100
+ },
101
+ {
102
+ name: 'tokenName',
103
+ description: 'Filter by exact token name (optional)',
104
+ required: false,
105
+ },
106
+ {
107
+ name: 'search',
108
+ description: 'Filter by fuzzy search (optional)',
109
+ required: false,
110
+ },
111
+ ],
112
+ handler: (args) => {
113
+ validateAddress(args.address);
114
+
115
+ return createPromptResponse(
116
+ createSimpleOperationText({
117
+ operation: 'Get tokens created by wallet.',
118
+ parameters: {
119
+ address: `Address: ${args.address}`,
120
+ page: `Page: ${args.page || 1}`,
121
+ limit: `Limit: ${args.limit || 20}`,
122
+ ...(args.tokenName && { tokenFilter: `Token Name Filter: ${args.tokenName}` }),
123
+ ...(args.search && { searchFilter: `Search Filter: ${args.search}` }),
124
+ },
125
+ toolName: MCP_TOOLS.FETCH_TOKENS_CREATED,
126
+ actionDescription: 'retrieve created tokens',
127
+ displayFormat: 'Display the list of tokens created by this wallet.',
128
+ })
129
+ );
130
+ },
131
+ };
132
+
133
+ /**
134
+ * Update Profile - Profile modification
135
+ */
136
+ export const updateProfilePrompt: MCPPrompt = {
137
+ name: 'galachain-launchpad:update-profile',
138
+ description: 'Update user profile information',
139
+ arguments: [
140
+ {
141
+ name: 'fullName',
142
+ description: 'Full name (letters and spaces only)',
143
+ required: true,
144
+ },
145
+ {
146
+ name: 'profileImage',
147
+ description: 'Profile image URL or empty string',
148
+ required: true,
149
+ },
150
+ {
151
+ name: 'address',
152
+ description: 'Wallet address (optional)',
153
+ required: false,
154
+ },
155
+ ],
156
+ handler: (args) => {
157
+ validateOptionalAddress(args.address);
158
+
159
+ return createPromptResponse(
160
+ createSimpleOperationText({
161
+ operation: 'Update user profile.',
162
+ parameters: {
163
+ fullName: `Full Name: ${args.fullName}`,
164
+ profileImage: `Profile Image: ${args.profileImage}`,
165
+ ...(args.address
166
+ ? { address: `Address: ${args.address}` }
167
+ : { wallet: 'Using default wallet' }),
168
+ },
169
+ toolName: MCP_TOOLS.UPDATE_PROFILE,
170
+ actionDescription: 'update the profile',
171
+ displayFormat: 'Display confirmation of successful update.',
172
+ })
173
+ );
174
+ },
175
+ };
176
+
177
+ export const balancePrompts: MCPPrompt[] = [
178
+ fetchGalaBalancePrompt,
179
+ fetchTokenBalancePrompt,
180
+ fetchTokensCreatedPrompt,
181
+ updateProfilePrompt,
182
+ ];
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Token Creation Prompts
3
+ *
4
+ * Slash commands for creating new tokens on Gala Launchpad
5
+ */
6
+
7
+ import type { MCPPrompt } from '../types/mcp.js';
8
+ import { createCreateTokenWorkflow } from './utils/workflowTemplates.js';
9
+ import {
10
+ validateTokenName,
11
+ validateTokenSymbol,
12
+ validateUrl,
13
+ validateNumericAmount,
14
+ } from '../utils/validation.js';
15
+
16
+ /**
17
+ * Create Token - Guided token creation workflow
18
+ */
19
+ export const createTokenPrompt: MCPPrompt = {
20
+ name: 'galachain-launchpad:create-token',
21
+ description:
22
+ 'Guide user through creating a new token on Gala Launchpad with metadata, image upload, and optional pre-buy',
23
+ arguments: [
24
+ {
25
+ name: 'tokenName',
26
+ description:
27
+ 'Name for the new token - must be 3-20 lowercase alphanumeric characters (e.g., "mytoken")',
28
+ required: true,
29
+ },
30
+ {
31
+ name: 'tokenSymbol',
32
+ description: 'Token symbol - must be 1-8 uppercase letters (e.g., "MTK")',
33
+ required: true,
34
+ },
35
+ {
36
+ name: 'description',
37
+ description: 'Token description - brief description of what the token is for (1-500 chars)',
38
+ required: true,
39
+ },
40
+ {
41
+ name: 'websiteUrl',
42
+ description: 'Optional website URL (e.g., "https://mytoken.com") - at least one social URL required',
43
+ required: false,
44
+ },
45
+ {
46
+ name: 'twitterUrl',
47
+ description:
48
+ 'Optional Twitter profile URL (e.g., "https://twitter.com/mytoken") - at least one social URL required',
49
+ required: false,
50
+ },
51
+ {
52
+ name: 'telegramUrl',
53
+ description:
54
+ 'Optional Telegram channel URL (e.g., "https://t.me/mytoken") - at least one social URL required',
55
+ required: false,
56
+ },
57
+ {
58
+ name: 'imagePath',
59
+ description:
60
+ 'Optional path to token image file - will be uploaded to IPFS (e.g., "/path/to/image.png")',
61
+ required: false,
62
+ },
63
+ {
64
+ name: 'preBuyGala',
65
+ description:
66
+ 'Optional GALA amount for initial token purchase (e.g., "100" for 100 GALA) - helps bootstrap liquidity',
67
+ required: false,
68
+ },
69
+ ],
70
+ handler: (args) => {
71
+ // Validate inputs
72
+ validateTokenName(args.tokenName);
73
+ validateTokenSymbol(args.tokenSymbol);
74
+
75
+ // Validate at least one social URL
76
+ const hasSocialUrl = args.websiteUrl || args.twitterUrl || args.telegramUrl;
77
+ if (!hasSocialUrl) {
78
+ throw new Error(
79
+ 'At least one social URL is required: websiteUrl, twitterUrl, or telegramUrl'
80
+ );
81
+ }
82
+
83
+ // Validate social URLs if provided
84
+ if (args.websiteUrl) {
85
+ validateUrl(args.websiteUrl, 'websiteUrl');
86
+ }
87
+ if (args.twitterUrl) {
88
+ validateUrl(args.twitterUrl, 'twitterUrl');
89
+ }
90
+ if (args.telegramUrl) {
91
+ validateUrl(args.telegramUrl, 'telegramUrl');
92
+ }
93
+
94
+ // Validate pre-buy amount if provided
95
+ if (args.preBuyGala) {
96
+ validateNumericAmount(args.preBuyGala, 'preBuyGala');
97
+ }
98
+
99
+ return [
100
+ {
101
+ role: 'user',
102
+ content: {
103
+ type: 'text',
104
+ text: createCreateTokenWorkflow({
105
+ tokenName: args.tokenName,
106
+ tokenSymbol: args.tokenSymbol,
107
+ description: args.description,
108
+ websiteUrl: args.websiteUrl,
109
+ twitterUrl: args.twitterUrl,
110
+ telegramUrl: args.telegramUrl,
111
+ imagePath: args.imagePath,
112
+ preBuyGala: args.preBuyGala,
113
+ }),
114
+ },
115
+ },
116
+ ];
117
+ },
118
+ };
119
+
120
+ /**
121
+ * Export all token creation prompts
122
+ */
123
+ export const creationPrompts: MCPPrompt[] = [createTokenPrompt];