@gala-chain/launchpad-mcp-server 5.0.4-beta.0 → 5.0.4-beta.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 (38) hide show
  1. package/README.md +5 -5
  2. package/dist/ai-docs.json +647 -290
  3. package/dist/constants/mcpToolNames.d.ts +28 -1
  4. package/dist/constants/mcpToolNames.d.ts.map +1 -1
  5. package/dist/constants/mcpToolNames.js +24 -2
  6. package/dist/constants/mcpToolNames.js.map +1 -1
  7. package/dist/explain-sdk-usage-ai.json +122 -28
  8. package/dist/generated/version.d.ts +1 -1
  9. package/dist/generated/version.js +1 -1
  10. package/dist/prompts/index.d.ts +3 -2
  11. package/dist/prompts/index.d.ts.map +1 -1
  12. package/dist/prompts/index.js +6 -1
  13. package/dist/prompts/index.js.map +1 -1
  14. package/dist/prompts/nft.d.ts +48 -0
  15. package/dist/prompts/nft.d.ts.map +1 -0
  16. package/dist/prompts/nft.js +513 -0
  17. package/dist/prompts/nft.js.map +1 -0
  18. package/dist/schemas/common-schemas.d.ts +64 -0
  19. package/dist/schemas/common-schemas.d.ts.map +1 -1
  20. package/dist/schemas/common-schemas.js +68 -1
  21. package/dist/schemas/common-schemas.js.map +1 -1
  22. package/dist/tools/dex/helpers.d.ts +1 -1
  23. package/dist/tools/index.d.ts.map +1 -1
  24. package/dist/tools/index.js +10 -3
  25. package/dist/tools/index.js.map +1 -1
  26. package/dist/tools/nft/index.d.ts +23 -0
  27. package/dist/tools/nft/index.d.ts.map +1 -0
  28. package/dist/tools/nft/index.js +308 -0
  29. package/dist/tools/nft/index.js.map +1 -0
  30. package/dist/tools/trading/helpers/arg-extractors.d.ts +2 -2
  31. package/dist/tools/utils/explainSdkUsage.d.ts +1 -0
  32. package/dist/tools/utils/explainSdkUsage.d.ts.map +1 -1
  33. package/dist/tools/utils/explainSdkUsage.js +210 -8
  34. package/dist/tools/utils/explainSdkUsage.js.map +1 -1
  35. package/dist/utils/validation.d.ts.map +1 -1
  36. package/dist/utils/validation.js +9 -10
  37. package/dist/utils/validation.js.map +1 -1
  38. package/package.json +9 -9
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "meta": {
3
- "version": "5.0.4-beta.0",
4
- "generatedAt": "2026-01-12T17:54:01.499Z",
5
- "topicCount": 48,
6
- "methodCount": 230
3
+ "version": "5.0.4-beta.2",
4
+ "generatedAt": "2026-01-13T03:28:59.193Z",
5
+ "topicCount": 49,
6
+ "methodCount": 241
7
7
  },
8
8
  "topics": {
9
9
  "buy-tokens": {
@@ -548,7 +548,6 @@
548
548
  "getWallet",
549
549
  "hasWallet",
550
550
  "setWallet",
551
- "createWallet",
552
551
  "connectWebSocket",
553
552
  "disconnectWebSocket",
554
553
  "isWebSocketConnected"
@@ -561,8 +560,7 @@
561
560
  "gala_launchpad_get_version",
562
561
  "gala_launchpad_get_wallet",
563
562
  "gala_launchpad_has_wallet",
564
- "gala_launchpad_set_wallet",
565
- "gala_launchpad_create_wallet"
563
+ "gala_launchpad_set_wallet"
566
564
  ],
567
565
  "explanation": "\n## SDK Configuration and Wallet Utilities\n\n**Covers Methods:**\n- `getAddress()`\n- `getConfig()`\n- `getEthereumAddress()`\n- `getUrlByTokenName()`\n- `getVersion()`\n- `getWallet()`\n- `hasWallet()`\n- `setWallet()`\n\nEssential utilities for SDK configuration, wallet management, and system information.\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function sdkUtilities() {\n // ============================================================================\n // ADDRESS MANAGEMENT - Get wallet addresses in different formats\n // ============================================================================\n\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Get GalaChain address (eth|0x... format)\n const galaAddress = sdk.getAddress();\n console.log(`GalaChain address: ${galaAddress}`); // \"eth|0x1234...\"\n\n // Get Ethereum address (0x... format)\n const ethAddress = sdk.getEthereumAddress();\n console.log(`Ethereum address: ${ethAddress}`); // \"0x1234...\"\n\n // ============================================================================\n // WALLET MANAGEMENT - Check and update wallet\n // ============================================================================\n\n // Check if SDK has wallet configured\n if (sdk.hasWallet()) {\n console.log('Wallet configured - can execute trades');\n\n // Get wallet instance (for advanced use)\n const wallet = sdk.getWallet();\n console.log(`Wallet address: ${wallet.address}`);\n } else {\n console.log('Read-only mode - cannot execute trades');\n }\n\n // Update wallet at runtime\n sdk.setWallet('new-private-key');\n console.log(`New address: ${sdk.getAddress()}`);\n\n // ============================================================================\n // CONFIGURATION ACCESS - Get SDK config\n // ============================================================================\n\n // Get SDK configuration\n const config = sdk.getConfig();\n console.log(`Base URL: ${config.baseUrl}`);\n console.log(`Environment: ${config.env}`);\n console.log(`Debug: ${config.debug}`);\n console.log(`Timeout: ${config.timeout}ms`);\n\n // ============================================================================\n // VERSION INFORMATION - Get SDK version\n // ============================================================================\n\n // Get SDK version\n const version = sdk.getVersion();\n console.log(`SDK Version: ${version}`); // \"4.0.4-beta.0\"\n\n // ============================================================================\n // URL GENERATION - Get frontend URLs for tokens\n // ============================================================================\n\n // Generate frontend URL for token\n const url = sdk.getUrlByTokenName('anime');\n console.log(`Token URL: ${url}`);\n // \"https://launchpad.gala.com/token/anime\" (production)\n // \"https://lpad-dev1.defi.gala.com/token/anime\" (development)\n\n // Complete workflow: Launch token + share URL\n const launchResult = await sdk.launchToken({\n tokenName: 'mytoken',\n tokenSymbol: 'MTK',\n tokenDescription: 'My awesome token'\n });\n\n const tokenUrl = sdk.getUrlByTokenName('mytoken');\n console.log(`Share your token: ${tokenUrl}`);\n\n // ============================================================================\n // MULTI-WALLET SCENARIO - Check multiple addresses\n // ============================================================================\n\n async function compareWallets() {\n const wallet1 = createLaunchpadSDK({ wallet: 'private-key-1' });\n const wallet2 = createLaunchpadSDK({ wallet: 'private-key-2' });\n\n console.log(`Wallet 1: ${wallet1.getAddress()}`);\n console.log(`Wallet 2: ${wallet2.getAddress()}`);\n\n // Compare balances\n const balance1 = await wallet1.fetchGalaBalance();\n const balance2 = await wallet2.fetchGalaBalance();\n\n console.log(`Wallet 1 balance: ${balance1.balance}`);\n console.log(`Wallet 2 balance: ${balance2.balance}`);\n }\n\n // ============================================================================\n // READ-ONLY SDK - Public data without wallet\n // ============================================================================\n\n async function readOnlyMode() {\n // Create SDK without wallet (read-only mode)\n const readOnlySdk = createLaunchpadSDK();\n\n console.log(`Has wallet: ${readOnlySdk.hasWallet()}`); // false\n\n // Can fetch public data\n const pools = await readOnlySdk.fetchPools({ type: 'recent', limit: 10 });\n console.log(`Found ${pools.total} pools`);\n\n // Cannot execute trades (will throw error)\n try {\n await readOnlySdk.buy({ tokenName: 'anime', amount: '100', type: 'native' });\n } catch (error) {\n console.error('Cannot trade without wallet');\n }\n }\n\n // ============================================================================\n // ENVIRONMENT SWITCHING - Change environments at runtime\n // ============================================================================\n\n async function switchEnvironments() {\n // Production SDK\n const prodSdk = createLaunchpadSDK({\n wallet: 'your-private-key',\n config: { env: 'production' }\n });\n\n console.log(`Prod config: ${prodSdk.getConfig().baseUrl}`);\n console.log(`Prod URL: ${prodSdk.getUrlByTokenName('anime')}`);\n\n // Development SDK\n const devSdk = createLaunchpadSDK({\n wallet: 'your-private-key',\n config: { env: 'development' }\n });\n\n console.log(`Dev config: ${devSdk.getConfig().baseUrl}`);\n console.log(`Dev URL: ${devSdk.getUrlByTokenName('anime')}`);\n }\n}\n```\n\n**Key Methods:**\n\n| Method | Returns | Use Case |\n|--------|---------|----------|\n| `getAddress()` | GalaChain address (eth|0x...) | Trading, transfers, profile |\n| `getEthereumAddress()` | Ethereum address (0x...) | DEX trading, external systems |\n| `getConfig()` | SDK configuration object | Debug, environment info |\n| `getVersion()` | SDK version string | Compatibility checks |\n| `getUrlByTokenName()` | Frontend URL | Share token pages |\n| `getWallet()` | Wallet instance | Advanced wallet operations |\n| `hasWallet()` | Boolean | Check if trades enabled |\n| `setWallet()` | void | Update wallet at runtime |\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_get_address`\n- `gala_launchpad_get_ethereum_address`\n- `gala_launchpad_get_config`\n- `gala_launchpad_get_version`\n- `gala_launchpad_get_url_by_token_name`\n",
568
566
  "samplePrompts": [
@@ -682,10 +680,10 @@
682
680
  ],
683
681
  "explanation": "\n## Fetch DEX Pools with Pagination\n\n**Covers Methods:**\n- `fetchDexPools()`\n- `fetchAllDexPools()`\n\nDiscover and query liquidity pools on GalaSwap with advanced filtering and pagination.\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function queryDexPools() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Option 1: Fetch pools with pagination\n const pools = await sdk.fetchDexPools({\n search: 'GALA',\n sortBy: 'tvl', // Sort by: tvl, volume30d, volume1d\n limit: 20,\n page: 1\n });\n\n console.log(`Found ${pools.total} pools, page ${pools.page} of ${pools.totalPages}`);\n pools.pools.forEach(pool => {\n console.log(`${pool.tokenName}: TVL ${pool.tvl}, 24h Volume: ${pool.volume1d}`);\n });\n\n // Option 2: Fetch ALL pools automatically (handles pagination)\n const allPools = await sdk.fetchAllDexPools({\n sortBy: 'tvl'\n });\n\n console.log(`Total pools: ${allPools.pools.length}`);\n\n // Analyze pool metrics\n const avgTvl = allPools.pools.reduce((sum, p) => sum + safeParseFloat(p.tvl, 0), 0) / allPools.pools.length;\n console.log(`Average TVL: $${toBigNumberFixed(avgTvl, 2)}`);\n}\n```\n\n**Key Features:**\n- **Sorting**: TVL (total value locked), volume30d (30-day volume), volume1d (24-hour volume)\n- **Pool Metrics**: Token prices, fee tiers, liquidity, 24h/30d volume, APR\n- **Auto-Pagination**: `fetchAllDexPools()` handles pagination automatically\n- **Search**: Filter by token name or pair\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_fetch_dex_pools`\n- `gala_launchpad_fetch_all_dex_pools`\n",
684
682
  "samplePrompts": [
685
- "How do I discover DEX trading pools?",
686
- "Show me how to discover DEX trading pools with the SDK",
687
- "Explain the discover DEX trading pools workflow",
688
- "What methods do I need for discover DEX trading pools?"
683
+ "How do I fetch dex pools?",
684
+ "Show me how to fetch dex pools with the SDK",
685
+ "Explain the fetch dex pools workflow",
686
+ "What methods do I need for fetch dex pools?"
689
687
  ]
690
688
  },
691
689
  "event-subscriptions": {
@@ -733,7 +731,7 @@
733
731
  "gala_launchpad_on_dex_pool_creation",
734
732
  "gala_launchpad_on_launchpad_token_creation"
735
733
  ],
736
- "explanation": "\n## Real-Time Event Subscriptions and Monitoring\n\n**Covers Methods:**\n- `subscribeToDexLiquidityAdded()`\n- `subscribeToDexLiquidityChanged()`\n- `subscribeToDexLiquidityRemoved()`\n- `subscribeToDexPoolAdded()`\n- `subscribeToDexSwapExecuted()`\n- `subscribeToTokenCreations()`\n\nSubscribe to real-time WebSocket events for DEX trading, liquidity changes, and token launches.\n\n```typescript\nimport { createLaunchpadSDK, compareAmounts } from '@gala-chain/launchpad-sdk';\n\nasync function subscribeToEvents() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // ============================================================================\n // LIQUIDITY EVENTS - Monitor position changes\n // ============================================================================\n\n // Subscribe to liquidity additions\n const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {\n console.log('Liquidity added!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Position ID: ${event.positionId}`);\n });\n\n // Subscribe to liquidity changes (compound events)\n const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {\n console.log('Liquidity changed!');\n console.log(` Type: ${event.type}`); // 'added', 'removed', 'modified'\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Delta: ${event.liquidityDelta}`);\n });\n\n // Subscribe to liquidity removals\n const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log('Liquidity removed!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Fees collected: ${event.fees0}, ${event.fees1}`);\n });\n\n // ============================================================================\n // POOL EVENTS - Monitor new DEX pools\n // ============================================================================\n\n // Subscribe to new DEX pool creation\n const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {\n console.log('New DEX pool created!');\n console.log(` Token: ${pool.tokenName}`);\n console.log(` Token0: ${pool.token0}`);\n console.log(` Token1: ${pool.token1}`);\n console.log(` Fee Tier: ${pool.feeTier}`);\n console.log(` Initial TVL: ${pool.tvl}`);\n\n // Auto-provide liquidity to new pools\n sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.95',\n maxPrice: '1.05',\n amount0Desired: '1000',\n amount1Desired: '1000'\n }).then(() => console.log('Liquidity provided to new pool'));\n });\n\n // ============================================================================\n // SWAP EVENTS - Monitor all DEX swaps\n // ============================================================================\n\n // Subscribe to DEX swap executions\n const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {\n console.log('DEX swap executed!');\n console.log(` Pair: ${swap.tokenIn} → ${swap.tokenOut}`);\n console.log(` Amount In: ${swap.amountIn}`);\n console.log(` Amount Out: ${swap.amountOut}`);\n console.log(` Trader: ${swap.trader}`);\n console.log(` Fee Tier: ${swap.feeTier}`);\n\n // Track volume and price impact\n const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);\n console.log(` Price impact: ${priceImpact}%`);\n });\n\n // ============================================================================\n // TOKEN CREATION EVENTS - Monitor new token launches\n // ============================================================================\n\n // Subscribe to new token launches\n const cleanupToken = sdk.subscribeToTokenCreations((token) => {\n console.log('New token launched!');\n console.log(` Name: ${token.tokenName}`);\n console.log(` Symbol: ${token.tokenSymbol}`);\n console.log(` Creator: ${token.creator}`);\n console.log(` Max Supply: ${token.maxSupply}`);\n console.log(` Base Price: ${token.basePrice}`);\n\n // Auto-buy new tokens\n sdk.buy({\n tokenName: token.tokenName,\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n }).then(() => console.log('Auto-bought new token'));\n });\n\n // ============================================================================\n // ARBITRAGE BOT EXAMPLE - Multi-event monitoring\n // ============================================================================\n\n async function arbitrageBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Track all swaps for arbitrage opportunities\n sdk.subscribeToDexSwapExecuted(async (swap) => {\n // Check if price divergence exists\n const poolPrice = await sdk.getSwapPoolPrice(swap.tokenIn, swap.tokenOut);\n const externalPrice = await getExternalPrice(swap.tokenIn, swap.tokenOut);\n\n const divergence = Math.abs(poolPrice - externalPrice) / externalPrice;\n\n if (divergence > 0.01) {\n // 1% arbitrage opportunity\n console.log(`Arbitrage opportunity: ${divergence * 100}%`);\n\n // Execute arbitrage trade\n await sdk.executeSwap(\n swap.tokenOut,\n swap.tokenIn,\n calculateArbitrageAmount(divergence),\n '0', // min output\n 3000, // fee tier\n 0.01 // slippage\n );\n }\n });\n\n // Monitor liquidity additions for new opportunities\n sdk.subscribeToDexLiquidityAdded(async (event) => {\n console.log(`New liquidity in ${event.token0}-${event.token1}`);\n\n // Check if pool has sufficient depth for arbitrage\n const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '100000') > 0) {\n console.log('Pool has sufficient liquidity for arbitrage');\n }\n });\n }\n\n // ============================================================================\n // LIQUIDITY PROVIDER BOT - Auto-manage positions\n // ============================================================================\n\n async function liquidityProviderBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Auto-add liquidity to new pools\n sdk.subscribeToDexPoolAdded(async (pool) => {\n console.log(`New pool: ${pool.tokenName}`);\n\n // Wait for some initial swaps to establish price\n setTimeout(async () => {\n const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);\n\n // Add liquidity if TVL is high enough\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '50000') > 0) {\n await sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.9',\n maxPrice: '1.1',\n amount0Desired: '10000',\n amount1Desired: '10000'\n });\n\n console.log('Liquidity added to new pool');\n }\n }, 60000); // Wait 1 minute\n });\n\n // Monitor liquidity removals (potential exit signal)\n sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log(`Large liquidity removal: ${event.amount0}, ${event.amount1}`);\n\n // Check if we should also exit\n if (isLargeRemoval(event)) {\n console.log('Large removal detected - consider exiting position');\n }\n });\n }\n\n // Keep subscriptions running\n console.log('Subscriptions active... Press Ctrl+C to stop');\n await new Promise(() => {}); // Run forever\n\n // Cleanup when done\n cleanupAdded();\n cleanupChanged();\n cleanupRemoved();\n cleanupPool();\n cleanupSwap();\n cleanupToken();\n}\n```\n\n**Event Data Structures:**\n\n**LiquidityAdded:**\n- token0, token1, feeTier\n- amount0, amount1\n- owner, positionId\n- timestamp\n\n**LiquidityRemoved:**\n- token0, token1, feeTier\n- amount0, amount1\n- fees0, fees1\n- owner, positionId\n- timestamp\n\n**DexPoolAdded:**\n- tokenName, token0, token1\n- feeTier, tvl\n- timestamp\n\n**SwapExecuted:**\n- tokenIn, tokenOut\n- amountIn, amountOut\n- trader, feeTier\n- priceImpact\n- timestamp\n\n**TokenCreation:**\n- tokenName, tokenSymbol\n- creator, maxSupply\n- basePrice\n- timestamp\n\n**Use Cases:**\n- **Arbitrage Bots**: Monitor swaps for price divergence\n- **Liquidity Management**: Auto-provide liquidity to new pools\n- **Early Bird Trading**: Buy new tokens immediately after launch\n- **Position Monitoring**: Track liquidity changes in your positions\n- **Market Analysis**: Analyze trading patterns and volumes\n\n### WebSocket Connection Lifecycle\n\n```typescript\n// Handle connection lifecycle events\nawait sdk.connectStreamWebSocket({\n onConnect: () => {\n console.log('WebSocket connected');\n },\n onDisconnect: (reason) => {\n console.log('WebSocket disconnected:', reason);\n // Implement reconnection logic if needed\n },\n onError: (error) => {\n console.error('WebSocket error:', error);\n }\n});\n\n// Check connection state\nif (sdk.isStreamWebSocketConnected()) {\n console.log('Ready to send/receive messages');\n}\n```\n\n### Typing Indicators\n\n```typescript\n// Subscribe to typing indicators in chat\nawait sdk.connectStreamWebSocket({\n onTypingIndicator: (event) => {\n if (event.isTyping) {\n console.log(`${event.userAddress} is typing...`);\n } else {\n console.log(`${event.userAddress} stopped typing`);\n }\n }\n});\n\n// Send typing indicator (auto-expires after 5 seconds)\nawait sdk.sendTypingIndicator({\n tokenName: 'anime',\n isTyping: true\n});\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_subscribe_to_dex_liquidity_added`\n- `gala_launchpad_subscribe_to_dex_liquidity_changed`\n- `gala_launchpad_subscribe_to_dex_liquidity_removed`\n- `gala_launchpad_subscribe_to_dex_pool_added`\n- `gala_launchpad_subscribe_to_dex_swap_executed`\n- `gala_launchpad_subscribe_to_token_creations`\n",
734
+ "explanation": "\n## Real-Time Event Subscriptions and Monitoring\n\n**Covers Methods:**\n- `subscribeToDexLiquidityAdded()`\n- `subscribeToDexLiquidityChanged()`\n- `subscribeToDexLiquidityRemoved()`\n- `subscribeToDexPoolAdded()`\n- `subscribeToDexSwapExecuted()`\n- `subscribeToTokenCreations()`\n\nSubscribe to real-time WebSocket events for DEX trading, liquidity changes, and token launches.\n\n```typescript\nimport { createLaunchpadSDK, compareAmounts } from '@gala-chain/launchpad-sdk';\n\nasync function subscribeToEvents() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // ============================================================================\n // LIQUIDITY EVENTS - Monitor position changes\n // ============================================================================\n\n // Subscribe to liquidity additions\n const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {\n console.log('Liquidity added!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Position ID: ${event.positionId}`);\n });\n\n // Subscribe to liquidity changes (compound events)\n const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {\n console.log('Liquidity changed!');\n console.log(` Type: ${event.type}`); // 'added', 'removed', 'modified'\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Delta: ${event.liquidityDelta}`);\n });\n\n // Subscribe to liquidity removals\n const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log('Liquidity removed!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Fees collected: ${event.fees0}, ${event.fees1}`);\n });\n\n // ============================================================================\n // POOL EVENTS - Monitor new DEX pools\n // ============================================================================\n\n // Subscribe to new DEX pool creation\n const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {\n console.log('New DEX pool created!');\n console.log(` Token: ${pool.tokenName}`);\n console.log(` Token0: ${pool.token0}`);\n console.log(` Token1: ${pool.token1}`);\n console.log(` Fee Tier: ${pool.feeTier}`);\n console.log(` Initial TVL: ${pool.tvl}`);\n\n // Auto-provide liquidity to new pools\n sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.95',\n maxPrice: '1.05',\n amount0Desired: '1000',\n amount1Desired: '1000'\n }).then(() => console.log('Liquidity provided to new pool'));\n });\n\n // ============================================================================\n // SWAP EVENTS - Monitor all DEX swaps\n // ============================================================================\n\n // Subscribe to DEX swap executions\n const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {\n console.log('DEX swap executed!');\n console.log(` Pair: ${swap.tokenIn} → ${swap.tokenOut}`);\n console.log(` Amount In: ${swap.amountIn}`);\n console.log(` Amount Out: ${swap.amountOut}`);\n console.log(` Trader: ${swap.trader}`);\n console.log(` Fee Tier: ${swap.feeTier}`);\n\n // Track volume and price impact\n const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);\n console.log(` Price impact: ${priceImpact}%`);\n });\n\n // ============================================================================\n // TOKEN CREATION EVENTS - Monitor new token launches\n // ============================================================================\n\n // Subscribe to new token launches\n const cleanupToken = sdk.subscribeToTokenCreations((token) => {\n console.log('New token launched!');\n console.log(` Name: ${token.tokenName}`);\n console.log(` Symbol: ${token.tokenSymbol}`);\n console.log(` Creator: ${token.creator}`);\n console.log(` Max Supply: ${token.maxSupply}`);\n console.log(` Base Price: ${token.basePrice}`);\n\n // Auto-buy new tokens\n sdk.buy({\n tokenName: token.tokenName,\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n }).then(() => console.log('Auto-bought new token'));\n });\n\n // ============================================================================\n // ARBITRAGE BOT EXAMPLE - Multi-event monitoring\n // ============================================================================\n\n async function arbitrageBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Track all swaps for arbitrage opportunities\n sdk.subscribeToDexSwapExecuted(async (swap) => {\n // Check if price divergence exists\n const poolPrice = await sdk.getSwapPoolPrice(swap.tokenIn, swap.tokenOut);\n const externalPrice = await getExternalPrice(swap.tokenIn, swap.tokenOut);\n\n const divergence = Math.abs(poolPrice - externalPrice) / externalPrice;\n\n if (divergence > 0.01) {\n // 1% arbitrage opportunity\n console.log(`Arbitrage opportunity: ${divergence * 100}%`);\n\n // Execute arbitrage trade\n await sdk.executeSwap(\n swap.tokenOut,\n swap.tokenIn,\n calculateArbitrageAmount(divergence),\n '0', // min output\n 3000, // fee tier\n 0.01 // slippage\n );\n }\n });\n\n // Monitor liquidity additions for new opportunities\n sdk.subscribeToDexLiquidityAdded(async (event) => {\n console.log(`New liquidity in ${event.token0}-${event.token1}`);\n\n // Check if pool has sufficient depth for arbitrage\n const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '100000') > 0) {\n console.log('Pool has sufficient liquidity for arbitrage');\n }\n });\n }\n\n // ============================================================================\n // LIQUIDITY PROVIDER BOT - Auto-manage positions\n // ============================================================================\n\n async function liquidityProviderBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Auto-add liquidity to new pools\n sdk.subscribeToDexPoolAdded(async (pool) => {\n console.log(`New pool: ${pool.tokenName}`);\n\n // Wait for some initial swaps to establish price\n setTimeout(async () => {\n const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);\n\n // Add liquidity if TVL is high enough\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '50000') > 0) {\n await sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.9',\n maxPrice: '1.1',\n amount0Desired: '10000',\n amount1Desired: '10000'\n });\n\n console.log('Liquidity added to new pool');\n }\n }, 60000); // Wait 1 minute\n });\n\n // Monitor liquidity removals (potential exit signal)\n sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log(`Large liquidity removal: ${event.amount0}, ${event.amount1}`);\n\n // Check if we should also exit\n if (isLargeRemoval(event)) {\n console.log('Large removal detected - consider exiting position');\n }\n });\n }\n\n // Keep subscriptions running\n console.log('Subscriptions active... Press Ctrl+C to stop');\n await new Promise(() => {}); // Run forever\n\n // Cleanup when done\n cleanupAdded();\n cleanupChanged();\n cleanupRemoved();\n cleanupPool();\n cleanupSwap();\n cleanupToken();\n}\n```\n\n**Event Data Structures:**\n\n**LiquidityAdded:**\n- token0, token1, feeTier\n- amount0, amount1\n- owner, positionId\n- timestamp\n\n**LiquidityRemoved:**\n- token0, token1, feeTier\n- amount0, amount1\n- fees0, fees1\n- owner, positionId\n- timestamp\n\n**DexPoolAdded:**\n- tokenName, token0, token1\n- feeTier, tvl\n- timestamp\n\n**SwapExecuted:**\n- tokenIn, tokenOut\n- amountIn, amountOut\n- trader, feeTier\n- priceImpact\n- timestamp\n\n**TokenCreation:**\n- tokenName, tokenSymbol\n- creator, maxSupply\n- basePrice\n- timestamp\n\n**Use Cases:**\n- **Arbitrage Bots**: Monitor swaps for price divergence\n- **Liquidity Management**: Auto-provide liquidity to new pools\n- **Early Bird Trading**: Buy new tokens immediately after launch\n- **Position Monitoring**: Track liquidity changes in your positions\n- **Market Analysis**: Analyze trading patterns and volumes\n\n### WebSocket Connection Lifecycle\n\n```typescript\n// Handle connection lifecycle events\nawait sdk.connectStreamWebSocket({\n onConnect: () => {\n console.log('WebSocket connected');\n },\n onDisconnect: (reason) => {\n console.log('WebSocket disconnected:', reason);\n // Implement reconnection logic if needed\n },\n onError: (error) => {\n console.error('WebSocket error:', error);\n }\n});\n\n// Check connection state\nif (sdk.isStreamWebSocketConnected()) {\n console.log('Ready to send/receive messages');\n}\n```\n\n### Typing Indicators\n\n```typescript\n// Subscribe to typing indicators in chat\nawait sdk.connectStreamWebSocket({\n onTypingIndicator: (event) => {\n if (event.isTyping) {\n console.log(`${event.userAddress} is typing...`);\n } else {\n console.log(`${event.userAddress} stopped typing`);\n }\n }\n});\n\n// Send typing start indicator\nawait sdk.sendTypingStart({\n tokenName: 'anime'\n});\n\n// Later: Send typing stop indicator\nawait sdk.sendTypingStop({\n tokenName: 'anime'\n});\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_subscribe_to_dex_liquidity_added`\n- `gala_launchpad_subscribe_to_dex_liquidity_changed`\n- `gala_launchpad_subscribe_to_dex_liquidity_removed`\n- `gala_launchpad_subscribe_to_dex_pool_added`\n- `gala_launchpad_subscribe_to_dex_swap_executed`\n- `gala_launchpad_subscribe_to_token_creations`\n",
737
735
  "samplePrompts": [
738
736
  "How do I subscribe to real-time events?",
739
737
  "Show me how to subscribe to real-time events with the SDK",
@@ -748,7 +746,7 @@
748
746
  "category": "utils",
749
747
  "methods": [],
750
748
  "mcpTools": [],
751
- "explanation": "\n## MCP Tool to SDK Method Mapping Guide\n\n**Covers Concepts:**\n- Understanding MCP tool architecture\n- Mapping between MCP tools and SDK methods\n- When to use MCP vs direct SDK\n\nThis is a conceptual guide showing how MCP (Model Context Protocol) tools map to SDK methods.\n\n### Architecture Overview\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ MCP Server Layer │\n│ (181 tools - user-friendly wrappers with validation) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ LaunchpadSDK Layer │\n│ (116 methods - low-level programmatic access) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ Gala Launchpad Backend APIs │\n│ (REST endpoints, WebSocket events, GalaChain) │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### MCP vs SDK Decision Matrix\n\n| Scenario | Use MCP | Use SDK |\n|----------|---------|---------|\n| **AI Agent Development** | ✅ Yes | ❌ No |\n| **Claude Desktop Integration** | ✅ Yes | ❌ No |\n| **LLM-Driven Trading Bots** | ✅ Yes | ❌ No |\n| **TypeScript Application** | ❌ No | ✅ Yes |\n| **Node.js Backend Service** | ❌ No | ✅ Yes |\n| **React/Vue Frontend** | ❌ No | ✅ Yes |\n| **Python Application** | ❌ No (SDK only) | ❌ No (not yet) |\n\n### Tool Naming Conventions\n\n**MCP Tool Pattern:** `gala_launchpad_{action}_{resource}`\n**SDK Method Pattern:** `{action}{Resource}`\n\nExamples:\n- MCP: `gala_launchpad_fetch_pools` → SDK: `fetchPools()`\n- MCP: `gala_launchpad_buy_tokens` → SDK: `buy()`\n- MCP: `gala_launchpad_get_swap_quote_exact_input` → SDK: `getSwapQuoteExactInput()`\n\n### Common Mapping Patterns\n\n**1. Direct 1:1 Mapping (Most Common):**\n\n```typescript\n// MCP Tool: gala_launchpad_fetch_pools\n// SDK Method: fetchPools()\n\n// MCP Usage (AI agent)\nconst result = await tools.gala_launchpad_fetch_pools({\n type: 'recent',\n limit: 10\n});\n\n// SDK Usage (TypeScript app)\nconst sdk = createLaunchpadSDK({ wallet: 'private-key' });\nconst result = await sdk.fetchPools({ type: 'recent', limit: 10 });\n```\n\n**2. Composite Tool → Multiple SDK Methods:**\n\n```typescript\n// MCP Tool: gala_launchpad_buy_tokens_with_calculation\n// Calls TWO SDK methods internally:\n\n// 1. Calculate quote\nconst quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n});\n\n// 2. Execute trade\nconst result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n});\n```\n\n**3. SDK Method → No MCP Tool (Advanced Features):**\n\nSome SDK methods don't have MCP equivalents:\n- `setWallet()` - Runtime wallet changes\n- `getConfig()` - SDK configuration access\n- `warmCacheFromPoolData()` - Cache optimization\n\n**4. MCP Tool → No Direct SDK Method (Abstractions):**\n\nSome MCP tools provide abstractions:\n- `gala_launchpad_portfolio` - Aggregates multiple SDK calls\n- `gala_launchpad_analyze_token` - Composite analysis workflow\n\n### Complete Mapping Reference\n\n**Trading (13 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_buy_tokens` | `buy()` |\n| `gala_launchpad_sell_tokens` | `sell()` |\n| `gala_launchpad_calculate_buy_amount` | `calculateBuyAmount()` |\n| `gala_launchpad_calculate_sell_amount` | `calculateSellAmount()` |\n| `gala_launchpad_graduate_token` | `graduateToken()` |\n| `gala_launchpad_calculate_buy_amount_local` | `calculateBuyAmountLocal()` |\n| `gala_launchpad_calculate_sell_amount_local` | `calculateSellAmountLocal()` |\n| `gala_launchpad_calculate_buy_amount_external` | `calculateBuyAmountExternal()` |\n| `gala_launchpad_calculate_sell_amount_external` | `calculateSellAmountExternal()` |\n\n**DEX Trading (6 MCP tools → 6 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_swap_quote_exact_input` | `getSwapQuoteExactInput()` |\n| `gala_launchpad_get_swap_quote_exact_output` | `getSwapQuoteExactOutput()` |\n| `gala_launchpad_execute_swap` | `executeSwap()` |\n| `gala_launchpad_get_swap_user_assets` | `getSwapUserAssets()` |\n| `gala_launchpad_get_all_swap_user_assets` | `getAllSwapUserAssets()` |\n| `gala_launchpad_get_swap_pool_info` | `getSwapPoolInfo()` |\n\n**Liquidity Management (8 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_user_liquidity_positions` | `getSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_all_user_liquidity_positions` | `getAllSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_liquidity_position_by_id` | `getSwapLiquidityPositionById()` |\n| `gala_launchpad_add_liquidity_by_price` | `addSwapLiquidityByPrice()` |\n| `gala_launchpad_add_liquidity_by_ticks` | `addSwapLiquidityByTicks()` |\n| `gala_launchpad_estimate_remove_liquidity` | `getSwapEstimateRemoveLiquidity()` |\n| `gala_launchpad_remove_liquidity` | `removeSwapLiquidity()` |\n| `gala_launchpad_collect_position_fees` | `collectSwapPositionFees()` |\n\n### When to Use Each\n\n**Use MCP Tools When:**\n- Building AI agents (Claude, GPT, etc.)\n- Need LLM-friendly error messages\n- Want automatic parameter validation\n- Working in Claude Desktop environment\n- Need slash command shortcuts\n\n**Use SDK Directly When:**\n- Building TypeScript/JavaScript applications\n- Need maximum performance\n- Want full TypeScript type safety\n- Building React/Vue components\n- Need fine-grained control\n\n### Migration Example\n\n**From MCP to SDK:**\n\n```typescript\n// AI Agent using MCP\nasync function mcpExample() {\n const result = await tools.gala_launchpad_buy_tokens({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n });\n return result;\n}\n\n// TypeScript App using SDK\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function sdkExample() {\n const sdk = createLaunchpadSDK({ wallet: 'private-key' });\n\n // Step 1: Calculate quote\n const quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n });\n\n // Step 2: Execute trade\n const result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n });\n\n return result;\n}\n```\n\n**Key Differences:**\n1. MCP combines calculation + execution (safer for AI)\n2. SDK exposes individual steps (more control)\n3. MCP validates all inputs via Zod schemas\n4. SDK provides TypeScript type safety\n\n### Resources\n\n- **SDK Documentation**: packages/sdk/README.md\n- **MCP Documentation**: packages/mcp-server/README.md\n- **API Reference**: docs/API-REFERENCE.md\n- **Tool Registry**: packages/mcp-server/src/tools/registry.ts\n",
749
+ "explanation": "\n## MCP Tool to SDK Method Mapping Guide\n\n**Covers Concepts:**\n- Understanding MCP tool architecture\n- Mapping between MCP tools and SDK methods\n- When to use MCP vs direct SDK\n\nThis is a conceptual guide showing how MCP (Model Context Protocol) tools map to SDK methods.\n\n### Architecture Overview\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ MCP Server Layer │\n│ (241 tools - user-friendly wrappers with validation) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ LaunchpadSDK Layer │\n│ (217 methods - low-level programmatic access) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ Gala Launchpad Backend APIs │\n│ (REST endpoints, WebSocket events, GalaChain) │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### MCP vs SDK Decision Matrix\n\n| Scenario | Use MCP | Use SDK |\n|----------|---------|---------|\n| **AI Agent Development** | ✅ Yes | ❌ No |\n| **Claude Desktop Integration** | ✅ Yes | ❌ No |\n| **LLM-Driven Trading Bots** | ✅ Yes | ❌ No |\n| **TypeScript Application** | ❌ No | ✅ Yes |\n| **Node.js Backend Service** | ❌ No | ✅ Yes |\n| **React/Vue Frontend** | ❌ No | ✅ Yes |\n| **Python Application** | ❌ No (SDK only) | ❌ No (not yet) |\n\n### Tool Naming Conventions\n\n**MCP Tool Pattern:** `gala_launchpad_{action}_{resource}`\n**SDK Method Pattern:** `{action}{Resource}`\n\nExamples:\n- MCP: `gala_launchpad_fetch_pools` → SDK: `fetchPools()`\n- MCP: `gala_launchpad_buy_tokens` → SDK: `buy()`\n- MCP: `gala_launchpad_get_swap_quote_exact_input` → SDK: `getSwapQuoteExactInput()`\n\n### Common Mapping Patterns\n\n**1. Direct 1:1 Mapping (Most Common):**\n\n```typescript\n// MCP Tool: gala_launchpad_fetch_pools\n// SDK Method: fetchPools()\n\n// MCP Usage (AI agent)\nconst result = await tools.gala_launchpad_fetch_pools({\n type: 'recent',\n limit: 10\n});\n\n// SDK Usage (TypeScript app)\nconst sdk = createLaunchpadSDK({ wallet: 'private-key' });\nconst result = await sdk.fetchPools({ type: 'recent', limit: 10 });\n```\n\n**2. Composite Tool → Multiple SDK Methods:**\n\n```typescript\n// MCP Tool: gala_launchpad_buy_tokens_with_calculation\n// Calls TWO SDK methods internally:\n\n// 1. Calculate quote\nconst quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n});\n\n// 2. Execute trade\nconst result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n});\n```\n\n**3. SDK Method → No MCP Tool (Advanced Features):**\n\nSome SDK methods don't have MCP equivalents:\n- `setWallet()` - Runtime wallet changes\n- `getConfig()` - SDK configuration access\n- `warmCacheFromPoolData()` - Cache optimization\n\n**4. MCP Tool → No Direct SDK Method (Abstractions):**\n\nSome MCP tools provide abstractions:\n- `gala_launchpad_portfolio` - Aggregates multiple SDK calls\n- `gala_launchpad_analyze_token` - Composite analysis workflow\n\n### Complete Mapping Reference\n\n**Trading (13 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_buy_tokens` | `buy()` |\n| `gala_launchpad_sell_tokens` | `sell()` |\n| `gala_launchpad_calculate_buy_amount` | `calculateBuyAmount()` |\n| `gala_launchpad_calculate_sell_amount` | `calculateSellAmount()` |\n| `gala_launchpad_graduate_token` | `graduateToken()` |\n| `gala_launchpad_calculate_buy_amount_local` | `calculateBuyAmountLocal()` |\n| `gala_launchpad_calculate_sell_amount_local` | `calculateSellAmountLocal()` |\n| `gala_launchpad_calculate_buy_amount_external` | `calculateBuyAmountExternal()` |\n| `gala_launchpad_calculate_sell_amount_external` | `calculateSellAmountExternal()` |\n\n**DEX Trading (6 MCP tools → 6 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_swap_quote_exact_input` | `getSwapQuoteExactInput()` |\n| `gala_launchpad_get_swap_quote_exact_output` | `getSwapQuoteExactOutput()` |\n| `gala_launchpad_execute_swap` | `executeSwap()` |\n| `gala_launchpad_get_swap_user_assets` | `getSwapUserAssets()` |\n| `gala_launchpad_get_all_swap_user_assets` | `getAllSwapUserAssets()` |\n| `gala_launchpad_get_swap_pool_info` | `getSwapPoolInfo()` |\n\n**Liquidity Management (8 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_user_liquidity_positions` | `getSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_all_user_liquidity_positions` | `getAllSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_liquidity_position_by_id` | `getSwapLiquidityPositionById()` |\n| `gala_launchpad_add_liquidity_by_price` | `addSwapLiquidityByPrice()` |\n| `gala_launchpad_add_liquidity_by_ticks` | `addSwapLiquidityByTicks()` |\n| `gala_launchpad_estimate_remove_liquidity` | `getSwapEstimateRemoveLiquidity()` |\n| `gala_launchpad_remove_liquidity` | `removeSwapLiquidity()` |\n| `gala_launchpad_collect_position_fees` | `collectSwapPositionFees()` |\n\n### When to Use Each\n\n**Use MCP Tools When:**\n- Building AI agents (Claude, GPT, etc.)\n- Need LLM-friendly error messages\n- Want automatic parameter validation\n- Working in Claude Desktop environment\n- Need slash command shortcuts\n\n**Use SDK Directly When:**\n- Building TypeScript/JavaScript applications\n- Need maximum performance\n- Want full TypeScript type safety\n- Building React/Vue components\n- Need fine-grained control\n\n### Migration Example\n\n**From MCP to SDK:**\n\n```typescript\n// AI Agent using MCP\nasync function mcpExample() {\n const result = await tools.gala_launchpad_buy_tokens({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n });\n return result;\n}\n\n// TypeScript App using SDK\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function sdkExample() {\n const sdk = createLaunchpadSDK({ wallet: 'private-key' });\n\n // Step 1: Calculate quote\n const quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n });\n\n // Step 2: Execute trade\n const result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n });\n\n return result;\n}\n```\n\n**Key Differences:**\n1. MCP combines calculation + execution (safer for AI)\n2. SDK exposes individual steps (more control)\n3. MCP validates all inputs via Zod schemas\n4. SDK provides TypeScript type safety\n\n### Resources\n\n- **SDK Documentation**: packages/sdk/README.md\n- **MCP Documentation**: packages/mcp-server/README.md\n- **API Reference**: docs/API-REFERENCE.md\n- **Tool Registry**: packages/mcp-server/src/tools/registry.ts\n",
752
750
  "samplePrompts": [
753
751
  "How do I map MCP tools to SDK methods?",
754
752
  "Show me how to map MCP tools to SDK methods with the SDK",
@@ -1274,6 +1272,44 @@
1274
1272
  "Explain the manage token bans workflow",
1275
1273
  "What methods do I need for manage token bans?"
1276
1274
  ]
1275
+ },
1276
+ "nft-collection-management": {
1277
+ "key": "nft-collection-management",
1278
+ "label": "Nft collection management",
1279
+ "description": "Nft collection management operations",
1280
+ "category": "nft",
1281
+ "methods": [
1282
+ "getNftCollectionClaimFee",
1283
+ "getNftTokenClassCreateFee",
1284
+ "estimateNftMintFee",
1285
+ "estimateNftOperationFees",
1286
+ "isNftCollectionAvailable",
1287
+ "claimNftCollection",
1288
+ "fetchNftCollections",
1289
+ "createNftTokenClass",
1290
+ "fetchNftTokenClasses",
1291
+ "mintNft",
1292
+ "fetchNftBalances"
1293
+ ],
1294
+ "mcpTools": [
1295
+ "gala_launchpad_get_nft_collection_claim_fee",
1296
+ "gala_launchpad_get_nft_token_class_create_fee",
1297
+ "gala_launchpad_estimate_nft_mint_fee",
1298
+ "gala_launchpad_estimate_nft_operation_fees",
1299
+ "gala_launchpad_claim_nft_collection",
1300
+ "gala_launchpad_fetch_nft_collections",
1301
+ "gala_launchpad_create_nft_token_class",
1302
+ "gala_launchpad_fetch_nft_token_classes",
1303
+ "gala_launchpad_mint_nft",
1304
+ "gala_launchpad_fetch_nft_balances"
1305
+ ],
1306
+ "explanation": "\n# NFT Collection Management - SDK v5.12.0+\n\nCreate and manage NFT collections, token classes, and mint NFTs on GalaChain.\n\n**Key Concepts:**\n- **Collection**: A named grouping for NFT token classes (claimed for 10,000 GALA)\n- **Token Class**: A specific type/rarity within a collection (created for 1,000 GALA)\n- **NFT Instance**: Individual NFT minted from a token class (dynamic fee based on quantity)\n\n## Check Collection Availability\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nconst sdk = createLaunchpadSDK({ privateKey: 'your-private-key' });\n\n// Check if a collection name is available\nconst available = await sdk.isNftCollectionAvailable('MyEpicNFTs');\nconsole.log('Collection available:', available);\n\n// Get fee for claiming a collection\nconst claimFee = await sdk.getNftCollectionClaimFee();\nconsole.log('Claim fee:', claimFee); // Usually \"10000\" GALA\n```\n\n## Claim a Collection\n\n```typescript\n// Claim an available collection name\nconst result = await sdk.claimNftCollection({\n collectionName: 'MyEpicNFTs',\n description: 'Epic NFT collection for gaming',\n});\nconsole.log('Collection claimed:', result.collectionName);\nconsole.log('Transaction ID:', result.transactionId);\n\n// Fetch your owned collections\nconst collections = await sdk.fetchNftCollections(walletAddress);\nfor (const collection of collections) {\n console.log(`Collection: ${collection.collectionName}`);\n console.log(` Status: ${collection.status}`);\n}\n```\n\n## Create Token Classes (Rarities)\n\n```typescript\n// Get fee for creating a token class\nconst classCreateFee = await sdk.getNftTokenClassCreateFee();\nconsole.log('Create fee:', classCreateFee); // Usually \"1000\" GALA\n\n// Create a token class (rarity tier)\nconst classResult = await sdk.createNftTokenClass({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n description: 'Ultra-rare legendary wizard NFTs',\n maximumSupply: '100', // Max NFTs of this type\n data: {\n rarity: 'legendary',\n class: 'wizard',\n power: '9000',\n },\n});\nconsole.log('Token class created:', classResult.tokenClassName);\n\n// Fetch token classes for your collection\nconst classes = await sdk.fetchNftTokenClasses({\n collectionName: 'MyEpicNFTs',\n});\nfor (const tokenClass of classes) {\n console.log(`Class: ${tokenClass.tokenClassName}`);\n console.log(` Current Supply: ${tokenClass.currentSupply}/${tokenClass.maxSupply}`);\n}\n```\n\n## Estimate Mint Fees\n\n```typescript\n// Estimate fee for minting multiple NFTs\nconst mintFeeEstimate = await sdk.estimateNftMintFee({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n quantity: 5,\n});\nconsole.log('Estimated mint fee:', mintFeeEstimate); // Dynamic fee in GALA\n\n// Estimate multiple operations at once\nconst bundleFee = await sdk.estimateNftOperationFees({\n operations: [\n { type: 'claim_collection' },\n { type: 'create_token_class', collectionName: 'MyEpicNFTs' },\n { type: 'mint', quantity: 10 },\n ],\n});\nconsole.log('Total bundle fee:', bundleFee.totalFee);\nfor (const op of bundleFee.breakdown) {\n console.log(` ${op.operationType}: ${op.fee}`);\n}\n```\n\n## Mint NFTs\n\n```typescript\n// Mint NFT instances from a token class\nconst mintResult = await sdk.mintNft({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n quantity: 5,\n to: 'eth|0x...', // Recipient wallet\n metadata: {\n attributes: [\n { name: 'level', value: '50' },\n { name: 'element', value: 'fire' },\n ],\n },\n});\nconsole.log('Minted:', mintResult.quantityMinted);\nconsole.log('Transaction ID:', mintResult.transactionId);\n\n// Check NFT balances\nconst balances = await sdk.fetchNftBalances(walletAddress);\nfor (const balance of balances) {\n console.log(`${balance.collectionName}/${balance.tokenClassName}: ${balance.quantity}`);\n}\n\n// Filter by collection\nconst collectionBalances = await sdk.fetchNftBalances(walletAddress, 'MyEpicNFTs');\n```\n\n## Complete Workflow\n\n```typescript\n// 1. Check availability\nconst available = await sdk.isNftCollectionAvailable('MyEpicNFTs');\nif (!available) throw new Error('Collection name taken');\n\n// 2. Claim collection (10,000 GALA)\nconst claimResult = await sdk.claimNftCollection({\n collectionName: 'MyEpicNFTs',\n description: 'My epic NFT collection',\n});\nconsole.log('✓ Collection claimed');\n\n// 3. Create token class (1,000 GALA)\nconst classResult = await sdk.createNftTokenClass({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n description: 'Legendary tier NFTs',\n maximumSupply: '1000',\n});\nconsole.log('✓ Token class created');\n\n// 4. Estimate mint fee\nconst fee = await sdk.estimateNftMintFee({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n quantity: 100,\n});\nconsole.log(`✓ Mint fee: ${fee} GALA`);\n\n// 5. Mint NFTs\nconst mintResult = await sdk.mintNft({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n quantity: 100,\n to: userWallet,\n});\nconsole.log('✓ Minted:', mintResult.quantityMinted);\n\n// 6. Verify ownership\nconst balances = await sdk.fetchNftBalances(userWallet, 'MyEpicNFTs');\nconsole.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity), 0));\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_get_nft_collection_claim_fee`\n- `gala_launchpad_get_nft_token_class_create_fee`\n- `gala_launchpad_estimate_nft_mint_fee`\n- `gala_launchpad_estimate_nft_operation_fees`\n- `gala_launchpad_check_nft_collection_available`\n- `gala_launchpad_claim_nft_collection`\n- `gala_launchpad_fetch_nft_collections`\n- `gala_launchpad_create_nft_token_class`\n- `gala_launchpad_fetch_nft_token_classes`\n- `gala_launchpad_mint_nft`\n- `gala_launchpad_fetch_nft_balances`\n",
1307
+ "samplePrompts": [
1308
+ "How do I nft collection management?",
1309
+ "Show me how to nft collection management with the SDK",
1310
+ "Explain the nft collection management workflow",
1311
+ "What methods do I need for nft collection management?"
1312
+ ]
1277
1313
  }
1278
1314
  },
1279
1315
  "categories": {
@@ -1392,7 +1428,7 @@
1392
1428
  ]
1393
1429
  },
1394
1430
  "chat-messages": {
1395
- "label": "Chat-messages",
1431
+ "label": "Chat Messages",
1396
1432
  "topics": [
1397
1433
  "stream-chat"
1398
1434
  ]
@@ -1434,16 +1470,22 @@
1434
1470
  ]
1435
1471
  },
1436
1472
  "trades": {
1437
- "label": "Trades",
1473
+ "label": "Trade History",
1438
1474
  "topics": [
1439
1475
  "trade-history"
1440
1476
  ]
1441
1477
  },
1442
1478
  "token-ban": {
1443
- "label": "Token-ban",
1479
+ "label": "Token Ban",
1444
1480
  "topics": [
1445
1481
  "token-ban-management"
1446
1482
  ]
1483
+ },
1484
+ "nft": {
1485
+ "label": "NFT Collections",
1486
+ "topics": [
1487
+ "nft-collection-management"
1488
+ ]
1447
1489
  }
1448
1490
  },
1449
1491
  "sampleConversations": [
@@ -1608,7 +1650,7 @@
1608
1650
  },
1609
1651
  {
1610
1652
  "role": "assistant",
1611
- "content": "\n## Real-Time Event Subscriptions and Monitoring\n\n**Covers Methods:**\n- `subscribeToDexLiquidityAdded()`\n- `subscribeToDexLiquidityChanged()`\n- `subscribeToDexLiquidityRemoved()`\n- `subscribeToDexPoolAdded()`\n- `subscribeToDexSwapExecuted()`\n- `subscribeToTokenCreations()`\n\nSubscribe to real-time WebSocket events for DEX trading, liquidity changes, and token launches.\n\n```typescript\nimport { createLaunchpadSDK, compareAmounts } from '@gala-chain/launchpad-sdk';\n\nasync function subscribeToEvents() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // ============================================================================\n // LIQUIDITY EVENTS - Monitor position changes\n // ============================================================================\n\n // Subscribe to liquidity additions\n const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {\n console.log('Liquidity added!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Position ID: ${event.positionId}`);\n });\n\n // Subscribe to liquidity changes (compound events)\n const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {\n console.log('Liquidity changed!');\n console.log(` Type: ${event.type}`); // 'added', 'removed', 'modified'\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Delta: ${event.liquidityDelta}`);\n });\n\n // Subscribe to liquidity removals\n const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log('Liquidity removed!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Fees collected: ${event.fees0}, ${event.fees1}`);\n });\n\n // ============================================================================\n // POOL EVENTS - Monitor new DEX pools\n // ============================================================================\n\n // Subscribe to new DEX pool creation\n const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {\n console.log('New DEX pool created!');\n console.log(` Token: ${pool.tokenName}`);\n console.log(` Token0: ${pool.token0}`);\n console.log(` Token1: ${pool.token1}`);\n console.log(` Fee Tier: ${pool.feeTier}`);\n console.log(` Initial TVL: ${pool.tvl}`);\n\n // Auto-provide liquidity to new pools\n sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.95',\n maxPrice: '1.05',\n amount0Desired: '1000',\n amount1Desired: '1000'\n }).then(() => console.log('Liquidity provided to new pool'));\n });\n\n // ============================================================================\n // SWAP EVENTS - Monitor all DEX swaps\n // ============================================================================\n\n // Subscribe to DEX swap executions\n const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {\n console.log('DEX swap executed!');\n console.log(` Pair: ${swap.tokenIn} → ${swap.tokenOut}`);\n console.log(` Amount In: ${swap.amountIn}`);\n console.log(` Amount Out: ${swap.amountOut}`);\n console.log(` Trader: ${swap.trader}`);\n console.log(` Fee Tier: ${swap.feeTier}`);\n\n // Track volume and price impact\n const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);\n console.log(` Price impact: ${priceImpact}%`);\n });\n\n // ============================================================================\n // TOKEN CREATION EVENTS - Monitor new token launches\n // ============================================================================\n\n // Subscribe to new token launches\n const cleanupToken = sdk.subscribeToTokenCreations((token) => {\n console.log('New token launched!');\n console.log(` Name: ${token.tokenName}`);\n console.log(` Symbol: ${token.tokenSymbol}`);\n console.log(` Creator: ${token.creator}`);\n console.log(` Max Supply: ${token.maxSupply}`);\n console.log(` Base Price: ${token.basePrice}`);\n\n // Auto-buy new tokens\n sdk.buy({\n tokenName: token.tokenName,\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n }).then(() => console.log('Auto-bought new token'));\n });\n\n // ============================================================================\n // ARBITRAGE BOT EXAMPLE - Multi-event monitoring\n // ============================================================================\n\n async function arbitrageBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Track all swaps for arbitrage opportunities\n sdk.subscribeToDexSwapExecuted(async (swap) => {\n // Check if price divergence exists\n const poolPrice = await sdk.getSwapPoolPrice(swap.tokenIn, swap.tokenOut);\n const externalPrice = await getExternalPrice(swap.tokenIn, swap.tokenOut);\n\n const divergence = Math.abs(poolPrice - externalPrice) / externalPrice;\n\n if (divergence > 0.01) {\n // 1% arbitrage opportunity\n console.log(`Arbitrage opportunity: ${divergence * 100}%`);\n\n // Execute arbitrage trade\n await sdk.executeSwap(\n swap.tokenOut,\n swap.tokenIn,\n calculateArbitrageAmount(divergence),\n '0', // min output\n 3000, // fee tier\n 0.01 // slippage\n );\n }\n });\n\n // Monitor liquidity additions for new opportunities\n sdk.subscribeToDexLiquidityAdded(async (event) => {\n console.log(`New liquidity in ${event.token0}-${event.token1}`);\n\n // Check if pool has sufficient depth for arbitrage\n const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '100000') > 0) {\n console.log('Pool has sufficient liquidity for arbitrage');\n }\n });\n }\n\n // ============================================================================\n // LIQUIDITY PROVIDER BOT - Auto-manage positions\n // ============================================================================\n\n async function liquidityProviderBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Auto-add liquidity to new pools\n sdk.subscribeToDexPoolAdded(async (pool) => {\n console.log(`New pool: ${pool.tokenName}`);\n\n // Wait for some initial swaps to establish price\n setTimeout(async () => {\n const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);\n\n // Add liquidity if TVL is high enough\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '50000') > 0) {\n await sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.9',\n maxPrice: '1.1',\n amount0Desired: '10000',\n amount1Desired: '10000'\n });\n\n console.log('Liquidity added to new pool');\n }\n }, 60000); // Wait 1 minute\n });\n\n // Monitor liquidity removals (potential exit signal)\n sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log(`Large liquidity removal: ${event.amount0}, ${event.amount1}`);\n\n // Check if we should also exit\n if (isLargeRemoval(event)) {\n console.log('Large removal detected - consider exiting position');\n }\n });\n }\n\n // Keep subscriptions running\n console.log('Subscriptions active... Press Ctrl+C to stop');\n await new Promise(() => {}); // Run forever\n\n // Cleanup when done\n cleanupAdded();\n cleanupChanged();\n cleanupRemoved();\n cleanupPool();\n cleanupSwap();\n cleanupToken();\n}\n```\n\n**Event Data Structures:**\n\n**LiquidityAdded:**\n- token0, token1, feeTier\n- amount0, amount1\n- owner, positionId\n- timestamp\n\n**LiquidityRemoved:**\n- token0, token1, feeTier\n- amount0, amount1\n- fees0, fees1\n- owner, positionId\n- timestamp\n\n**DexPoolAdded:**\n- tokenName, token0, token1\n- feeTier, tvl\n- timestamp\n\n**SwapExecuted:**\n- tokenIn, tokenOut\n- amountIn, amountOut\n- trader, feeTier\n- priceImpact\n- timestamp\n\n**TokenCreation:**\n- tokenName, tokenSymbol\n- creator, maxSupply\n- basePrice\n- timestamp\n\n**Use Cases:**\n- **Arbitrage Bots**: Monitor swaps for price divergence\n- **Liquidity Management**: Auto-provide liquidity to new pools\n- **Early Bird Trading**: Buy new tokens immediately after launch\n- **Position Monitoring**: Track liquidity changes in your positions\n- **Market Analysis**: Analyze trading patterns and volumes\n\n### WebSocket Connection Lifecycle\n\n```typescript\n// Handle connection lifecycle events\nawait sdk.connectStreamWebSocket({\n onConnect: () => {\n console.log('WebSocket connected');\n },\n onDisconnect: (reason) => {\n console.log('WebSocket disconnected:', reason);\n // Implement reconnection logic if needed\n },\n onError: (error) => {\n console.error('WebSocket error:', error);\n }\n});\n\n// Check connection state\nif (sdk.isStreamWebSocketConnected()) {\n console.log('Ready to send/receive messages');\n}\n```\n\n### Typing Indicators\n\n```typescript\n// Subscribe to typing indicators in chat\nawait sdk.connectStreamWebSocket({\n onTypingIndicator: (event) => {\n if (event.isTyping) {\n console.log(`${event.userAddress} is typing...`);\n } else {\n console.log(`${event.userAddress} stopped typing`);\n }\n }\n});\n\n// Send typing indicator (auto-expires after 5 seconds)\nawait sdk.sendTypingIndicator({\n tokenName: 'anime',\n isTyping: true\n});\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_subscribe_to_dex_liquidity_added`\n- `gala_launchpad_subscribe_to_dex_liquidity_changed`\n- `gala_launchpad_subscribe_to_dex_liquidity_removed`\n- `gala_launchpad_subscribe_to_dex_pool_added`\n- `gala_launchpad_subscribe_to_dex_swap_executed`\n- `gala_launchpad_subscribe_to_token_creations`\n"
1653
+ "content": "\n## Real-Time Event Subscriptions and Monitoring\n\n**Covers Methods:**\n- `subscribeToDexLiquidityAdded()`\n- `subscribeToDexLiquidityChanged()`\n- `subscribeToDexLiquidityRemoved()`\n- `subscribeToDexPoolAdded()`\n- `subscribeToDexSwapExecuted()`\n- `subscribeToTokenCreations()`\n\nSubscribe to real-time WebSocket events for DEX trading, liquidity changes, and token launches.\n\n```typescript\nimport { createLaunchpadSDK, compareAmounts } from '@gala-chain/launchpad-sdk';\n\nasync function subscribeToEvents() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // ============================================================================\n // LIQUIDITY EVENTS - Monitor position changes\n // ============================================================================\n\n // Subscribe to liquidity additions\n const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {\n console.log('Liquidity added!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Position ID: ${event.positionId}`);\n });\n\n // Subscribe to liquidity changes (compound events)\n const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {\n console.log('Liquidity changed!');\n console.log(` Type: ${event.type}`); // 'added', 'removed', 'modified'\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Delta: ${event.liquidityDelta}`);\n });\n\n // Subscribe to liquidity removals\n const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log('Liquidity removed!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Fees collected: ${event.fees0}, ${event.fees1}`);\n });\n\n // ============================================================================\n // POOL EVENTS - Monitor new DEX pools\n // ============================================================================\n\n // Subscribe to new DEX pool creation\n const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {\n console.log('New DEX pool created!');\n console.log(` Token: ${pool.tokenName}`);\n console.log(` Token0: ${pool.token0}`);\n console.log(` Token1: ${pool.token1}`);\n console.log(` Fee Tier: ${pool.feeTier}`);\n console.log(` Initial TVL: ${pool.tvl}`);\n\n // Auto-provide liquidity to new pools\n sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.95',\n maxPrice: '1.05',\n amount0Desired: '1000',\n amount1Desired: '1000'\n }).then(() => console.log('Liquidity provided to new pool'));\n });\n\n // ============================================================================\n // SWAP EVENTS - Monitor all DEX swaps\n // ============================================================================\n\n // Subscribe to DEX swap executions\n const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {\n console.log('DEX swap executed!');\n console.log(` Pair: ${swap.tokenIn} → ${swap.tokenOut}`);\n console.log(` Amount In: ${swap.amountIn}`);\n console.log(` Amount Out: ${swap.amountOut}`);\n console.log(` Trader: ${swap.trader}`);\n console.log(` Fee Tier: ${swap.feeTier}`);\n\n // Track volume and price impact\n const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);\n console.log(` Price impact: ${priceImpact}%`);\n });\n\n // ============================================================================\n // TOKEN CREATION EVENTS - Monitor new token launches\n // ============================================================================\n\n // Subscribe to new token launches\n const cleanupToken = sdk.subscribeToTokenCreations((token) => {\n console.log('New token launched!');\n console.log(` Name: ${token.tokenName}`);\n console.log(` Symbol: ${token.tokenSymbol}`);\n console.log(` Creator: ${token.creator}`);\n console.log(` Max Supply: ${token.maxSupply}`);\n console.log(` Base Price: ${token.basePrice}`);\n\n // Auto-buy new tokens\n sdk.buy({\n tokenName: token.tokenName,\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n }).then(() => console.log('Auto-bought new token'));\n });\n\n // ============================================================================\n // ARBITRAGE BOT EXAMPLE - Multi-event monitoring\n // ============================================================================\n\n async function arbitrageBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Track all swaps for arbitrage opportunities\n sdk.subscribeToDexSwapExecuted(async (swap) => {\n // Check if price divergence exists\n const poolPrice = await sdk.getSwapPoolPrice(swap.tokenIn, swap.tokenOut);\n const externalPrice = await getExternalPrice(swap.tokenIn, swap.tokenOut);\n\n const divergence = Math.abs(poolPrice - externalPrice) / externalPrice;\n\n if (divergence > 0.01) {\n // 1% arbitrage opportunity\n console.log(`Arbitrage opportunity: ${divergence * 100}%`);\n\n // Execute arbitrage trade\n await sdk.executeSwap(\n swap.tokenOut,\n swap.tokenIn,\n calculateArbitrageAmount(divergence),\n '0', // min output\n 3000, // fee tier\n 0.01 // slippage\n );\n }\n });\n\n // Monitor liquidity additions for new opportunities\n sdk.subscribeToDexLiquidityAdded(async (event) => {\n console.log(`New liquidity in ${event.token0}-${event.token1}`);\n\n // Check if pool has sufficient depth for arbitrage\n const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '100000') > 0) {\n console.log('Pool has sufficient liquidity for arbitrage');\n }\n });\n }\n\n // ============================================================================\n // LIQUIDITY PROVIDER BOT - Auto-manage positions\n // ============================================================================\n\n async function liquidityProviderBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Auto-add liquidity to new pools\n sdk.subscribeToDexPoolAdded(async (pool) => {\n console.log(`New pool: ${pool.tokenName}`);\n\n // Wait for some initial swaps to establish price\n setTimeout(async () => {\n const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);\n\n // Add liquidity if TVL is high enough\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '50000') > 0) {\n await sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.9',\n maxPrice: '1.1',\n amount0Desired: '10000',\n amount1Desired: '10000'\n });\n\n console.log('Liquidity added to new pool');\n }\n }, 60000); // Wait 1 minute\n });\n\n // Monitor liquidity removals (potential exit signal)\n sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log(`Large liquidity removal: ${event.amount0}, ${event.amount1}`);\n\n // Check if we should also exit\n if (isLargeRemoval(event)) {\n console.log('Large removal detected - consider exiting position');\n }\n });\n }\n\n // Keep subscriptions running\n console.log('Subscriptions active... Press Ctrl+C to stop');\n await new Promise(() => {}); // Run forever\n\n // Cleanup when done\n cleanupAdded();\n cleanupChanged();\n cleanupRemoved();\n cleanupPool();\n cleanupSwap();\n cleanupToken();\n}\n```\n\n**Event Data Structures:**\n\n**LiquidityAdded:**\n- token0, token1, feeTier\n- amount0, amount1\n- owner, positionId\n- timestamp\n\n**LiquidityRemoved:**\n- token0, token1, feeTier\n- amount0, amount1\n- fees0, fees1\n- owner, positionId\n- timestamp\n\n**DexPoolAdded:**\n- tokenName, token0, token1\n- feeTier, tvl\n- timestamp\n\n**SwapExecuted:**\n- tokenIn, tokenOut\n- amountIn, amountOut\n- trader, feeTier\n- priceImpact\n- timestamp\n\n**TokenCreation:**\n- tokenName, tokenSymbol\n- creator, maxSupply\n- basePrice\n- timestamp\n\n**Use Cases:**\n- **Arbitrage Bots**: Monitor swaps for price divergence\n- **Liquidity Management**: Auto-provide liquidity to new pools\n- **Early Bird Trading**: Buy new tokens immediately after launch\n- **Position Monitoring**: Track liquidity changes in your positions\n- **Market Analysis**: Analyze trading patterns and volumes\n\n### WebSocket Connection Lifecycle\n\n```typescript\n// Handle connection lifecycle events\nawait sdk.connectStreamWebSocket({\n onConnect: () => {\n console.log('WebSocket connected');\n },\n onDisconnect: (reason) => {\n console.log('WebSocket disconnected:', reason);\n // Implement reconnection logic if needed\n },\n onError: (error) => {\n console.error('WebSocket error:', error);\n }\n});\n\n// Check connection state\nif (sdk.isStreamWebSocketConnected()) {\n console.log('Ready to send/receive messages');\n}\n```\n\n### Typing Indicators\n\n```typescript\n// Subscribe to typing indicators in chat\nawait sdk.connectStreamWebSocket({\n onTypingIndicator: (event) => {\n if (event.isTyping) {\n console.log(`${event.userAddress} is typing...`);\n } else {\n console.log(`${event.userAddress} stopped typing`);\n }\n }\n});\n\n// Send typing start indicator\nawait sdk.sendTypingStart({\n tokenName: 'anime'\n});\n\n// Later: Send typing stop indicator\nawait sdk.sendTypingStop({\n tokenName: 'anime'\n});\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_subscribe_to_dex_liquidity_added`\n- `gala_launchpad_subscribe_to_dex_liquidity_changed`\n- `gala_launchpad_subscribe_to_dex_liquidity_removed`\n- `gala_launchpad_subscribe_to_dex_pool_added`\n- `gala_launchpad_subscribe_to_dex_swap_executed`\n- `gala_launchpad_subscribe_to_token_creations`\n"
1612
1654
  }
1613
1655
  ]
1614
1656
  },
@@ -1806,6 +1848,21 @@
1806
1848
  "content": "\n# Token Ban Management - SDK v6.x.0+\n\nPlatform-wide token ban operations for overseers. Banned tokens are hidden from ALL listings\nand have actions (comments, streaming, chat) blocked. This is different from user bans which\nonly affect specific users on specific tokens.\n\n**Access Control:** All methods require either:\n- streamAdminApiKey (server-to-server)\n- JWT with overseer status (authenticated overseer user)\n\n**Effects of Token Bans:**\n- Hidden from ALL pool listings (including creator's profile)\n- Comments blocked on banned tokens\n- Live streaming blocked on banned tokens\n- Chat messages blocked on banned tokens\n- Trading NOT blocked (GalaChain handles trading independently)\n\n## Banning a Token\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\n// Using Admin API key\nconst sdk = createLaunchpadSDK({\n streamAdminApiKey: process.env.STREAM_ADMIN_API_KEY,\n});\n\n// Or using JWT auth (must be an overseer)\nconst sdkWithAuth = createLaunchpadSDK({\n privateKey: process.env.PRIVATE_KEY,\n});\nawait sdkWithAuth.login({ walletAddress: 'eth|0x...' });\n\n// Ban a token with reason\nconst result = await sdk.banToken({\n tokenName: 'scamtoken',\n reason: 'Fraudulent project - reported by multiple users',\n});\nconsole.log('Token banned:', result.tokenName);\nconsole.log('Ban ID:', result.ban.id);\nconsole.log('Banned by:', result.ban.bannedBy);\n\n// Ban without reason (optional)\nawait sdk.banToken({ tokenName: 'problematictoken' });\n```\n\n## Unbanning a Token\n\n```typescript\n// Remove a token ban\nconst result = await sdk.unbanToken({ tokenName: 'scamtoken' });\nconsole.log('Ban removed:', result.removed); // true\nconsole.log('Token:', result.tokenName);\n\n// Token is now:\n// - Visible in pool listings again\n// - Comments re-enabled\n// - Live streaming re-enabled\n// - Chat re-enabled\n```\n\n## Checking Token Ban Status\n\n```typescript\n// Check if a specific token is banned\nconst status = await sdk.isTokenBanned({ tokenName: 'sometoken' });\n\nif (status.banned) {\n console.log('Token is banned!');\n console.log('Reason:', status.ban?.reason);\n console.log('Banned by:', status.ban?.bannedBy);\n console.log('Banned at:', status.ban?.createdAt);\n} else {\n console.log('Token is not banned');\n}\n\n// getTokenBan is an alias - use whichever is more readable\nconst details = await sdk.getTokenBan({ tokenName: 'sometoken' });\n```\n\n## Listing All Banned Tokens\n\n```typescript\n// Get first page with default limit (20)\nconst page1 = await sdk.listTokenBans({});\nconsole.log('Total banned tokens:', page1.meta.total);\n\nfor (const ban of page1.items) {\n console.log(`- ${ban.tokenName}: ${ban.reason || 'No reason'}`);\n console.log(` Banned by: ${ban.bannedBy}`);\n console.log(` Date: ${ban.createdAt}`);\n}\n\n// Search for specific tokens (partial match, case-insensitive)\nconst searchResults = await sdk.listTokenBans({\n search: 'scam',\n page: 1,\n limit: 10,\n});\n\n// Paginate through all banned tokens\nlet page = 1;\nlet hasMore = true;\nwhile (hasMore) {\n const results = await sdk.listTokenBans({ page, limit: 20 });\n console.log(`Page ${page}: ${results.items.length} bans`);\n for (const ban of results.items) {\n console.log(` - ${ban.tokenName}`);\n }\n hasMore = page < results.meta.totalPages;\n page++;\n}\n```\n\n## Important Notes\n\n1. **Permanent Bans Only**: Token bans do not expire. They remain in effect until\n explicitly removed by an overseer.\n\n2. **Case Normalization**: Token names are automatically normalized to lowercase\n in all requests and responses.\n\n3. **Idempotency**: Banning an already-banned token returns a 409 Conflict error.\n Unbanning a non-banned token returns a 404 Not Found error.\n\n4. **Trading Continues**: Token bans do NOT stop trading on GalaChain. The\n launchpad hides visibility and blocks social features only.\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_ban_token`\n- `gala_launchpad_unban_token`\n- `gala_launchpad_list_token_bans`\n- `gala_launchpad_get_token_ban`\n- `gala_launchpad_is_token_banned`\n"
1807
1849
  }
1808
1850
  ]
1851
+ },
1852
+ {
1853
+ "id": "nft-collection-management-demo",
1854
+ "title": "Example: Nft collection management",
1855
+ "topic": "nft-collection-management",
1856
+ "messages": [
1857
+ {
1858
+ "role": "user",
1859
+ "content": "How do I nft collection management?"
1860
+ },
1861
+ {
1862
+ "role": "assistant",
1863
+ "content": "\n# NFT Collection Management - SDK v5.12.0+\n\nCreate and manage NFT collections, token classes, and mint NFTs on GalaChain.\n\n**Key Concepts:**\n- **Collection**: A named grouping for NFT token classes (claimed for 10,000 GALA)\n- **Token Class**: A specific type/rarity within a collection (created for 1,000 GALA)\n- **NFT Instance**: Individual NFT minted from a token class (dynamic fee based on quantity)\n\n## Check Collection Availability\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nconst sdk = createLaunchpadSDK({ privateKey: 'your-private-key' });\n\n// Check if a collection name is available\nconst available = await sdk.isNftCollectionAvailable('MyEpicNFTs');\nconsole.log('Collection available:', available);\n\n// Get fee for claiming a collection\nconst claimFee = await sdk.getNftCollectionClaimFee();\nconsole.log('Claim fee:', claimFee); // Usually \"10000\" GALA\n```\n\n## Claim a Collection\n\n```typescript\n// Claim an available collection name\nconst result = await sdk.claimNftCollection({\n collectionName: 'MyEpicNFTs',\n description: 'Epic NFT collection for gaming',\n});\nconsole.log('Collection claimed:', result.collectionName);\nconsole.log('Transaction ID:', result.transactionId);\n\n// Fetch your owned collections\nconst collections = await sdk.fetchNftCollections(walletAddress);\nfor (const collection of collections) {\n console.log(`Collection: ${collection.collectionName}`);\n console.log(` Status: ${collection.status}`);\n}\n```\n\n## Create Token Classes (Rarities)\n\n```typescript\n// Get fee for creating a token class\nconst classCreateFee = await sdk.getNftTokenClassCreateFee();\nconsole.log('Create fee:', classCreateFee); // Usually \"1000\" GALA\n\n// Create a token class (rarity tier)\nconst classResult = await sdk.createNftTokenClass({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n description: 'Ultra-rare legendary wizard NFTs',\n maximumSupply: '100', // Max NFTs of this type\n data: {\n rarity: 'legendary',\n class: 'wizard',\n power: '9000',\n },\n});\nconsole.log('Token class created:', classResult.tokenClassName);\n\n// Fetch token classes for your collection\nconst classes = await sdk.fetchNftTokenClasses({\n collectionName: 'MyEpicNFTs',\n});\nfor (const tokenClass of classes) {\n console.log(`Class: ${tokenClass.tokenClassName}`);\n console.log(` Current Supply: ${tokenClass.currentSupply}/${tokenClass.maxSupply}`);\n}\n```\n\n## Estimate Mint Fees\n\n```typescript\n// Estimate fee for minting multiple NFTs\nconst mintFeeEstimate = await sdk.estimateNftMintFee({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n quantity: 5,\n});\nconsole.log('Estimated mint fee:', mintFeeEstimate); // Dynamic fee in GALA\n\n// Estimate multiple operations at once\nconst bundleFee = await sdk.estimateNftOperationFees({\n operations: [\n { type: 'claim_collection' },\n { type: 'create_token_class', collectionName: 'MyEpicNFTs' },\n { type: 'mint', quantity: 10 },\n ],\n});\nconsole.log('Total bundle fee:', bundleFee.totalFee);\nfor (const op of bundleFee.breakdown) {\n console.log(` ${op.operationType}: ${op.fee}`);\n}\n```\n\n## Mint NFTs\n\n```typescript\n// Mint NFT instances from a token class\nconst mintResult = await sdk.mintNft({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n quantity: 5,\n to: 'eth|0x...', // Recipient wallet\n metadata: {\n attributes: [\n { name: 'level', value: '50' },\n { name: 'element', value: 'fire' },\n ],\n },\n});\nconsole.log('Minted:', mintResult.quantityMinted);\nconsole.log('Transaction ID:', mintResult.transactionId);\n\n// Check NFT balances\nconst balances = await sdk.fetchNftBalances(walletAddress);\nfor (const balance of balances) {\n console.log(`${balance.collectionName}/${balance.tokenClassName}: ${balance.quantity}`);\n}\n\n// Filter by collection\nconst collectionBalances = await sdk.fetchNftBalances(walletAddress, 'MyEpicNFTs');\n```\n\n## Complete Workflow\n\n```typescript\n// 1. Check availability\nconst available = await sdk.isNftCollectionAvailable('MyEpicNFTs');\nif (!available) throw new Error('Collection name taken');\n\n// 2. Claim collection (10,000 GALA)\nconst claimResult = await sdk.claimNftCollection({\n collectionName: 'MyEpicNFTs',\n description: 'My epic NFT collection',\n});\nconsole.log('✓ Collection claimed');\n\n// 3. Create token class (1,000 GALA)\nconst classResult = await sdk.createNftTokenClass({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n description: 'Legendary tier NFTs',\n maximumSupply: '1000',\n});\nconsole.log('✓ Token class created');\n\n// 4. Estimate mint fee\nconst fee = await sdk.estimateNftMintFee({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n quantity: 100,\n});\nconsole.log(`✓ Mint fee: ${fee} GALA`);\n\n// 5. Mint NFTs\nconst mintResult = await sdk.mintNft({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n quantity: 100,\n to: userWallet,\n});\nconsole.log('✓ Minted:', mintResult.quantityMinted);\n\n// 6. Verify ownership\nconst balances = await sdk.fetchNftBalances(userWallet, 'MyEpicNFTs');\nconsole.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity), 0));\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_get_nft_collection_claim_fee`\n- `gala_launchpad_get_nft_token_class_create_fee`\n- `gala_launchpad_estimate_nft_mint_fee`\n- `gala_launchpad_estimate_nft_operation_fees`\n- `gala_launchpad_check_nft_collection_available`\n- `gala_launchpad_claim_nft_collection`\n- `gala_launchpad_fetch_nft_collections`\n- `gala_launchpad_create_nft_token_class`\n- `gala_launchpad_fetch_nft_token_classes`\n- `gala_launchpad_mint_nft`\n- `gala_launchpad_fetch_nft_balances`\n"
1864
+ }
1865
+ ]
1809
1866
  }
1810
1867
  ],
1811
1868
  "demoConversations": [
@@ -2122,7 +2179,7 @@
2122
2179
  "exchanges": [
2123
2180
  {
2124
2181
  "userQuestion": "How do I subscribe to real-time events?",
2125
- "assistantResponse": "\n## Real-Time Event Subscriptions and Monitoring\n\n**Covers Methods:**\n- `subscribeToDexLiquidityAdded()`\n- `subscribeToDexLiquidityChanged()`\n- `subscribeToDexLiquidityRemoved()`\n- `subscribeToDexPoolAdded()`\n- `subscribeToDexSwapExecuted()`\n- `subscribeToTokenCreations()`\n\nSubscribe to real-time WebSocket events for DEX trading, liquidity changes, and token launches.\n\n```typescript\nimport { createLaunchpadSDK, compareAmounts } from '@gala-chain/launchpad-sdk';\n\nasync function subscribeToEvents() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // ============================================================================\n // LIQUIDITY EVENTS - Monitor position changes\n // ============================================================================\n\n // Subscribe to liquidity additions\n const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {\n console.log('Liquidity added!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Position ID: ${event.positionId}`);\n });\n\n // Subscribe to liquidity changes (compound events)\n const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {\n console.log('Liquidity changed!');\n console.log(` Type: ${event.type}`); // 'added', 'removed', 'modified'\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Delta: ${event.liquidityDelta}`);\n });\n\n // Subscribe to liquidity removals\n const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log('Liquidity removed!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Fees collected: ${event.fees0}, ${event.fees1}`);\n });\n\n // ============================================================================\n // POOL EVENTS - Monitor new DEX pools\n // ============================================================================\n\n // Subscribe to new DEX pool creation\n const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {\n console.log('New DEX pool created!');\n console.log(` Token: ${pool.tokenName}`);\n console.log(` Token0: ${pool.token0}`);\n console.log(` Token1: ${pool.token1}`);\n console.log(` Fee Tier: ${pool.feeTier}`);\n console.log(` Initial TVL: ${pool.tvl}`);\n\n // Auto-provide liquidity to new pools\n sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.95',\n maxPrice: '1.05',\n amount0Desired: '1000',\n amount1Desired: '1000'\n }).then(() => console.log('Liquidity provided to new pool'));\n });\n\n // ============================================================================\n // SWAP EVENTS - Monitor all DEX swaps\n // ============================================================================\n\n // Subscribe to DEX swap executions\n const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {\n console.log('DEX swap executed!');\n console.log(` Pair: ${swap.tokenIn} → ${swap.tokenOut}`);\n console.log(` Amount In: ${swap.amountIn}`);\n console.log(` Amount Out: ${swap.amountOut}`);\n console.log(` Trader: ${swap.trader}`);\n console.log(` Fee Tier: ${swap.feeTier}`);\n\n // Track volume and price impact\n const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);\n console.log(` Price impact: ${priceImpact}%`);\n });\n\n // ============================================================================\n // TOKEN CREATION EVENTS - Monitor new token launches\n // ============================================================================\n\n // Subscribe to new token launches\n const cleanupToken = sdk.subscribeToTokenCreations((token) => {\n console.log('New token launched!');\n console.log(` Name: ${token.tokenName}`);\n console.log(` Symbol: ${token.tokenSymbol}`);\n console.log(` Creator: ${token.creator}`);\n console.log(` Max Supply: ${token.maxSupply}`);\n console.log(` Base Price: ${token.basePrice}`);\n\n // Auto-buy new tokens\n sdk.buy({\n tokenName: token.tokenName,\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n }).then(() => console.log('Auto-bought new token'));\n });\n\n // ============================================================================\n // ARBITRAGE BOT EXAMPLE - Multi-event monitoring\n // ============================================================================\n\n async function arbitrageBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Track all swaps for arbitrage opportunities\n sdk.subscribeToDexSwapExecuted(async (swap) => {\n // Check if price divergence exists\n const poolPrice = await sdk.getSwapPoolPrice(swap.tokenIn, swap.tokenOut);\n const externalPrice = await getExternalPrice(swap.tokenIn, swap.tokenOut);\n\n const divergence = Math.abs(poolPrice - externalPrice) / externalPrice;\n\n if (divergence > 0.01) {\n // 1% arbitrage opportunity\n console.log(`Arbitrage opportunity: ${divergence * 100}%`);\n\n // Execute arbitrage trade\n await sdk.executeSwap(\n swap.tokenOut,\n swap.tokenIn,\n calculateArbitrageAmount(divergence),\n '0', // min output\n 3000, // fee tier\n 0.01 // slippage\n );\n }\n });\n\n // Monitor liquidity additions for new opportunities\n sdk.subscribeToDexLiquidityAdded(async (event) => {\n console.log(`New liquidity in ${event.token0}-${event.token1}`);\n\n // Check if pool has sufficient depth for arbitrage\n const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '100000') > 0) {\n console.log('Pool has sufficient liquidity for arbitrage');\n }\n });\n }\n\n // ============================================================================\n // LIQUIDITY PROVIDER BOT - Auto-manage positions\n // ============================================================================\n\n async function liquidityProviderBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Auto-add liquidity to new pools\n sdk.subscribeToDexPoolAdded(async (pool) => {\n console.log(`New pool: ${pool.tokenName}`);\n\n // Wait for some initial swaps to establish price\n setTimeout(async () => {\n const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);\n\n // Add liquidity if TVL is high enough\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '50000') > 0) {\n await sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.9',\n maxPrice: '1.1',\n amount0Desired: '10000',\n amount1Desired: '10000'\n });\n\n console.log('Liquidity added to new pool');\n }\n }, 60000); // Wait 1 minute\n });\n\n // Monitor liquidity removals (potential exit signal)\n sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log(`Large liquidity removal: ${event.amount0}, ${event.amount1}`);\n\n // Check if we should also exit\n if (isLargeRemoval(event)) {\n console.log('Large removal detected - consider exiting position');\n }\n });\n }\n\n // Keep subscriptions running\n console.log('Subscriptions active... Press Ctrl+C to stop');\n await new Promise(() => {}); // Run forever\n\n // Cleanup when done\n cleanupAdded();\n cleanupChanged();\n cleanupRemoved();\n cleanupPool();\n cleanupSwap();\n cleanupToken();\n}\n```\n\n**Event Data Structures:**\n\n**LiquidityAdded:**\n- token0, token1, feeTier\n- amount0, amount1\n- owner, positionId\n- timestamp\n\n**LiquidityRemoved:**\n- token0, token1, feeTier\n- amount0, amount1\n- fees0, fees1\n- owner, positionId\n- timestamp\n\n**DexPoolAdded:**\n- tokenName, token0, token1\n- feeTier, tvl\n- timestamp\n\n**SwapExecuted:**\n- tokenIn, tokenOut\n- amountIn, amountOut\n- trader, feeTier\n- priceImpact\n- timestamp\n\n**TokenCreation:**\n- tokenName, tokenSymbol\n- creator, maxSupply\n- basePrice\n- timestamp\n\n**Use Cases:**\n- **Arbitrage Bots**: Monitor swaps for price divergence\n- **Liquidity Management**: Auto-provide liquidity to new pools\n- **Early Bird Trading**: Buy new tokens immediately after launch\n- **Position Monitoring**: Track liquidity changes in your positions\n- **Market Analysis**: Analyze trading patterns and volumes\n\n### WebSocket Connection Lifecycle\n\n```typescript\n// Handle connection lifecycle events\nawait sdk.connectStreamWebSocket({\n onConnect: () => {\n console.log('WebSocket connected');\n },\n onDisconnect: (reason) => {\n console.log('WebSocket disconnected:', reason);\n // Implement reconnection logic if needed\n },\n onError: (error) => {\n console.error('WebSocket error:', error);\n }\n});\n\n// Check connection state\nif (sdk.isStreamWebSocketConnected()) {\n console.log('Ready to send/receive messages');\n}\n```\n\n### Typing Indicators\n\n```typescript\n// Subscribe to typing indicators in chat\nawait sdk.connectStreamWebSocket({\n onTypingIndicator: (event) => {\n if (event.isTyping) {\n console.log(`${event.userAddress} is typing...`);\n } else {\n console.log(`${event.userAddress} stopped typing`);\n }\n }\n});\n\n// Send typing indicator (auto-expires after 5 seconds)\nawait sdk.sendTypingIndicator({\n tokenName: 'anime',\n isTyping: true\n});\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_subscribe_to_dex_liquidity_added`\n- `gala_launchpad_subscribe_to_dex_liquidity_changed`\n- `gala_launchpad_subscribe_to_dex_liquidity_removed`\n- `gala_launchpad_subscribe_to_dex_pool_added`\n- `gala_launchpad_subscribe_to_dex_swap_executed`\n- `gala_launchpad_subscribe_to_token_creations`\n"
2182
+ "assistantResponse": "\n## Real-Time Event Subscriptions and Monitoring\n\n**Covers Methods:**\n- `subscribeToDexLiquidityAdded()`\n- `subscribeToDexLiquidityChanged()`\n- `subscribeToDexLiquidityRemoved()`\n- `subscribeToDexPoolAdded()`\n- `subscribeToDexSwapExecuted()`\n- `subscribeToTokenCreations()`\n\nSubscribe to real-time WebSocket events for DEX trading, liquidity changes, and token launches.\n\n```typescript\nimport { createLaunchpadSDK, compareAmounts } from '@gala-chain/launchpad-sdk';\n\nasync function subscribeToEvents() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // ============================================================================\n // LIQUIDITY EVENTS - Monitor position changes\n // ============================================================================\n\n // Subscribe to liquidity additions\n const cleanupAdded = sdk.subscribeToDexLiquidityAdded((event) => {\n console.log('Liquidity added!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Position ID: ${event.positionId}`);\n });\n\n // Subscribe to liquidity changes (compound events)\n const cleanupChanged = sdk.subscribeToDexLiquidityChanged((event) => {\n console.log('Liquidity changed!');\n console.log(` Type: ${event.type}`); // 'added', 'removed', 'modified'\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Delta: ${event.liquidityDelta}`);\n });\n\n // Subscribe to liquidity removals\n const cleanupRemoved = sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log('Liquidity removed!');\n console.log(` Pool: ${event.token0}-${event.token1}`);\n console.log(` Amount0: ${event.amount0}`);\n console.log(` Amount1: ${event.amount1}`);\n console.log(` Owner: ${event.owner}`);\n console.log(` Fees collected: ${event.fees0}, ${event.fees1}`);\n });\n\n // ============================================================================\n // POOL EVENTS - Monitor new DEX pools\n // ============================================================================\n\n // Subscribe to new DEX pool creation\n const cleanupPool = sdk.subscribeToDexPoolAdded((pool) => {\n console.log('New DEX pool created!');\n console.log(` Token: ${pool.tokenName}`);\n console.log(` Token0: ${pool.token0}`);\n console.log(` Token1: ${pool.token1}`);\n console.log(` Fee Tier: ${pool.feeTier}`);\n console.log(` Initial TVL: ${pool.tvl}`);\n\n // Auto-provide liquidity to new pools\n sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.95',\n maxPrice: '1.05',\n amount0Desired: '1000',\n amount1Desired: '1000'\n }).then(() => console.log('Liquidity provided to new pool'));\n });\n\n // ============================================================================\n // SWAP EVENTS - Monitor all DEX swaps\n // ============================================================================\n\n // Subscribe to DEX swap executions\n const cleanupSwap = sdk.subscribeToDexSwapExecuted((swap) => {\n console.log('DEX swap executed!');\n console.log(` Pair: ${swap.tokenIn} → ${swap.tokenOut}`);\n console.log(` Amount In: ${swap.amountIn}`);\n console.log(` Amount Out: ${swap.amountOut}`);\n console.log(` Trader: ${swap.trader}`);\n console.log(` Fee Tier: ${swap.feeTier}`);\n\n // Track volume and price impact\n const priceImpact = calculatePriceImpact(swap.amountIn, swap.amountOut);\n console.log(` Price impact: ${priceImpact}%`);\n });\n\n // ============================================================================\n // TOKEN CREATION EVENTS - Monitor new token launches\n // ============================================================================\n\n // Subscribe to new token launches\n const cleanupToken = sdk.subscribeToTokenCreations((token) => {\n console.log('New token launched!');\n console.log(` Name: ${token.tokenName}`);\n console.log(` Symbol: ${token.tokenSymbol}`);\n console.log(` Creator: ${token.creator}`);\n console.log(` Max Supply: ${token.maxSupply}`);\n console.log(` Base Price: ${token.basePrice}`);\n\n // Auto-buy new tokens\n sdk.buy({\n tokenName: token.tokenName,\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n }).then(() => console.log('Auto-bought new token'));\n });\n\n // ============================================================================\n // ARBITRAGE BOT EXAMPLE - Multi-event monitoring\n // ============================================================================\n\n async function arbitrageBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Track all swaps for arbitrage opportunities\n sdk.subscribeToDexSwapExecuted(async (swap) => {\n // Check if price divergence exists\n const poolPrice = await sdk.getSwapPoolPrice(swap.tokenIn, swap.tokenOut);\n const externalPrice = await getExternalPrice(swap.tokenIn, swap.tokenOut);\n\n const divergence = Math.abs(poolPrice - externalPrice) / externalPrice;\n\n if (divergence > 0.01) {\n // 1% arbitrage opportunity\n console.log(`Arbitrage opportunity: ${divergence * 100}%`);\n\n // Execute arbitrage trade\n await sdk.executeSwap(\n swap.tokenOut,\n swap.tokenIn,\n calculateArbitrageAmount(divergence),\n '0', // min output\n 3000, // fee tier\n 0.01 // slippage\n );\n }\n });\n\n // Monitor liquidity additions for new opportunities\n sdk.subscribeToDexLiquidityAdded(async (event) => {\n console.log(`New liquidity in ${event.token0}-${event.token1}`);\n\n // Check if pool has sufficient depth for arbitrage\n const poolInfo = await sdk.getSwapPoolInfo(event.token0, event.token1);\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '100000') > 0) {\n console.log('Pool has sufficient liquidity for arbitrage');\n }\n });\n }\n\n // ============================================================================\n // LIQUIDITY PROVIDER BOT - Auto-manage positions\n // ============================================================================\n\n async function liquidityProviderBot() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Auto-add liquidity to new pools\n sdk.subscribeToDexPoolAdded(async (pool) => {\n console.log(`New pool: ${pool.tokenName}`);\n\n // Wait for some initial swaps to establish price\n setTimeout(async () => {\n const poolInfo = await sdk.getSwapPoolInfo(pool.token0, pool.token1);\n\n // Add liquidity if TVL is high enough\n // Use compareAmounts for precise liquidity threshold comparison\n if (compareAmounts(poolInfo.liquidity, '50000') > 0) {\n await sdk.addSwapLiquidityByPrice({\n token0: pool.token0,\n token1: pool.token1,\n fee: pool.feeTier,\n minPrice: '0.9',\n maxPrice: '1.1',\n amount0Desired: '10000',\n amount1Desired: '10000'\n });\n\n console.log('Liquidity added to new pool');\n }\n }, 60000); // Wait 1 minute\n });\n\n // Monitor liquidity removals (potential exit signal)\n sdk.subscribeToDexLiquidityRemoved((event) => {\n console.log(`Large liquidity removal: ${event.amount0}, ${event.amount1}`);\n\n // Check if we should also exit\n if (isLargeRemoval(event)) {\n console.log('Large removal detected - consider exiting position');\n }\n });\n }\n\n // Keep subscriptions running\n console.log('Subscriptions active... Press Ctrl+C to stop');\n await new Promise(() => {}); // Run forever\n\n // Cleanup when done\n cleanupAdded();\n cleanupChanged();\n cleanupRemoved();\n cleanupPool();\n cleanupSwap();\n cleanupToken();\n}\n```\n\n**Event Data Structures:**\n\n**LiquidityAdded:**\n- token0, token1, feeTier\n- amount0, amount1\n- owner, positionId\n- timestamp\n\n**LiquidityRemoved:**\n- token0, token1, feeTier\n- amount0, amount1\n- fees0, fees1\n- owner, positionId\n- timestamp\n\n**DexPoolAdded:**\n- tokenName, token0, token1\n- feeTier, tvl\n- timestamp\n\n**SwapExecuted:**\n- tokenIn, tokenOut\n- amountIn, amountOut\n- trader, feeTier\n- priceImpact\n- timestamp\n\n**TokenCreation:**\n- tokenName, tokenSymbol\n- creator, maxSupply\n- basePrice\n- timestamp\n\n**Use Cases:**\n- **Arbitrage Bots**: Monitor swaps for price divergence\n- **Liquidity Management**: Auto-provide liquidity to new pools\n- **Early Bird Trading**: Buy new tokens immediately after launch\n- **Position Monitoring**: Track liquidity changes in your positions\n- **Market Analysis**: Analyze trading patterns and volumes\n\n### WebSocket Connection Lifecycle\n\n```typescript\n// Handle connection lifecycle events\nawait sdk.connectStreamWebSocket({\n onConnect: () => {\n console.log('WebSocket connected');\n },\n onDisconnect: (reason) => {\n console.log('WebSocket disconnected:', reason);\n // Implement reconnection logic if needed\n },\n onError: (error) => {\n console.error('WebSocket error:', error);\n }\n});\n\n// Check connection state\nif (sdk.isStreamWebSocketConnected()) {\n console.log('Ready to send/receive messages');\n}\n```\n\n### Typing Indicators\n\n```typescript\n// Subscribe to typing indicators in chat\nawait sdk.connectStreamWebSocket({\n onTypingIndicator: (event) => {\n if (event.isTyping) {\n console.log(`${event.userAddress} is typing...`);\n } else {\n console.log(`${event.userAddress} stopped typing`);\n }\n }\n});\n\n// Send typing start indicator\nawait sdk.sendTypingStart({\n tokenName: 'anime'\n});\n\n// Later: Send typing stop indicator\nawait sdk.sendTypingStop({\n tokenName: 'anime'\n});\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_subscribe_to_dex_liquidity_added`\n- `gala_launchpad_subscribe_to_dex_liquidity_changed`\n- `gala_launchpad_subscribe_to_dex_liquidity_removed`\n- `gala_launchpad_subscribe_to_dex_pool_added`\n- `gala_launchpad_subscribe_to_dex_swap_executed`\n- `gala_launchpad_subscribe_to_token_creations`\n"
2126
2183
  },
2127
2184
  {
2128
2185
  "userQuestion": "What parameters does subscribeToStream() accept?",
@@ -2154,7 +2211,7 @@
2154
2211
  "topicKey": "stream-chat",
2155
2212
  "label": "Stream chat",
2156
2213
  "category": "chat-messages",
2157
- "description": "Stream chat operations",
2214
+ "description": "Stream chat message operations",
2158
2215
  "methodCount": 18,
2159
2216
  "exchanges": [
2160
2217
  {
@@ -2517,7 +2574,7 @@
2517
2574
  "methodCount": 2,
2518
2575
  "exchanges": [
2519
2576
  {
2520
- "userQuestion": "How do I discover DEX trading pools?",
2577
+ "userQuestion": "How do I fetch dex pools?",
2521
2578
  "assistantResponse": "\n## Fetch DEX Pools with Pagination\n\n**Covers Methods:**\n- `fetchDexPools()`\n- `fetchAllDexPools()`\n\nDiscover and query liquidity pools on GalaSwap with advanced filtering and pagination.\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function queryDexPools() {\n const sdk = createLaunchpadSDK({ wallet: 'your-private-key' });\n\n // Option 1: Fetch pools with pagination\n const pools = await sdk.fetchDexPools({\n search: 'GALA',\n sortBy: 'tvl', // Sort by: tvl, volume30d, volume1d\n limit: 20,\n page: 1\n });\n\n console.log(`Found ${pools.total} pools, page ${pools.page} of ${pools.totalPages}`);\n pools.pools.forEach(pool => {\n console.log(`${pool.tokenName}: TVL ${pool.tvl}, 24h Volume: ${pool.volume1d}`);\n });\n\n // Option 2: Fetch ALL pools automatically (handles pagination)\n const allPools = await sdk.fetchAllDexPools({\n sortBy: 'tvl'\n });\n\n console.log(`Total pools: ${allPools.pools.length}`);\n\n // Analyze pool metrics\n const avgTvl = allPools.pools.reduce((sum, p) => sum + safeParseFloat(p.tvl, 0), 0) / allPools.pools.length;\n console.log(`Average TVL: $${toBigNumberFixed(avgTvl, 2)}`);\n}\n```\n\n**Key Features:**\n- **Sorting**: TVL (total value locked), volume30d (30-day volume), volume1d (24-hour volume)\n- **Pool Metrics**: Token prices, fee tiers, liquidity, 24h/30d volume, APR\n- **Auto-Pagination**: `fetchAllDexPools()` handles pagination automatically\n- **Search**: Filter by token name or pair\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_fetch_dex_pools`\n- `gala_launchpad_fetch_all_dex_pools`\n"
2522
2579
  },
2523
2580
  {
@@ -2525,15 +2582,15 @@
2525
2582
  "assistantResponse": "The primary methods for Fetch dex pools are `fetchDexPools()`, `fetchAllDexPools()`. Each method accepts configuration options as a single object parameter.\n\n**Common Parameters:**\n- `tokenName`: The token identifier (e.g., 'dragnrkti')\n- `amount`: Quantity as a string (for precision)\n- Wallet/auth options when transactions are involved\n\nCheck the SDK documentation or use TypeScript intellisense for the complete parameter interface."
2526
2583
  },
2527
2584
  {
2528
- "userQuestion": "What are best practices for discover DEX trading pools?",
2585
+ "userQuestion": "What are best practices for fetch dex pools?",
2529
2586
  "assistantResponse": "1. **Use TypeScript**: Get full type safety and intellisense.\n2. **Handle errors**: Always wrap SDK calls in try-catch blocks.\n3. **Validate inputs**: Check parameters before making API calls.\n4. **Cache when appropriate**: Reduce API calls for static data."
2530
2587
  },
2531
2588
  {
2532
- "userQuestion": "What should I learn next after discover DEX trading pools?",
2589
+ "userQuestion": "What should I learn next after fetch dex pools?",
2533
2590
  "assistantResponse": "**Related Topics:**\n\n- **Dex trading**: `explainSdkUsage({ topic: 'dex-trading' })`\n- **Liquidity positions**: `explainSdkUsage({ topic: 'liquidity-positions' })`\n- **Dex token discovery**: `explainSdkUsage({ topic: 'dex-token-discovery' })`\n\n**Learning Path:** Start with the basics, then explore related topics to build a complete understanding of the SDK capabilities."
2534
2591
  },
2535
2592
  {
2536
- "userQuestion": "Any final tips for discover DEX trading pools?",
2593
+ "userQuestion": "Any final tips for fetch dex pools?",
2537
2594
  "assistantResponse": "**Quick Tips:**\n\n1. **Start Simple**: Begin with the basic use case before exploring advanced features\n2. **Use TypeScript**: The SDK has full TypeScript support for better autocomplete and type safety\n3. **Check the Demos**: The examples/ directory has working demos for most SDK features\n4. **Read Error Messages**: SDK errors include helpful context for troubleshooting\n\nYou're ready to start building with this feature!"
2538
2595
  }
2539
2596
  ]
@@ -2612,6 +2669,43 @@
2612
2669
  }
2613
2670
  ]
2614
2671
  },
2672
+ {
2673
+ "topicKey": "nft-collection-management",
2674
+ "label": "Nft collection management",
2675
+ "category": "nft",
2676
+ "description": "NFT collection management and operations",
2677
+ "methodCount": 11,
2678
+ "exchanges": [
2679
+ {
2680
+ "userQuestion": "How do I nft collection management?",
2681
+ "assistantResponse": "\n# NFT Collection Management - SDK v5.12.0+\n\nCreate and manage NFT collections, token classes, and mint NFTs on GalaChain.\n\n**Key Concepts:**\n- **Collection**: A named grouping for NFT token classes (claimed for 10,000 GALA)\n- **Token Class**: A specific type/rarity within a collection (created for 1,000 GALA)\n- **NFT Instance**: Individual NFT minted from a token class (dynamic fee based on quantity)\n\n## Check Collection Availability\n\n```typescript\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nconst sdk = createLaunchpadSDK({ privateKey: 'your-private-key' });\n\n// Check if a collection name is available\nconst available = await sdk.isNftCollectionAvailable('MyEpicNFTs');\nconsole.log('Collection available:', available);\n\n// Get fee for claiming a collection\nconst claimFee = await sdk.getNftCollectionClaimFee();\nconsole.log('Claim fee:', claimFee); // Usually \"10000\" GALA\n```\n\n## Claim a Collection\n\n```typescript\n// Claim an available collection name\nconst result = await sdk.claimNftCollection({\n collectionName: 'MyEpicNFTs',\n description: 'Epic NFT collection for gaming',\n});\nconsole.log('Collection claimed:', result.collectionName);\nconsole.log('Transaction ID:', result.transactionId);\n\n// Fetch your owned collections\nconst collections = await sdk.fetchNftCollections(walletAddress);\nfor (const collection of collections) {\n console.log(`Collection: ${collection.collectionName}`);\n console.log(` Status: ${collection.status}`);\n}\n```\n\n## Create Token Classes (Rarities)\n\n```typescript\n// Get fee for creating a token class\nconst classCreateFee = await sdk.getNftTokenClassCreateFee();\nconsole.log('Create fee:', classCreateFee); // Usually \"1000\" GALA\n\n// Create a token class (rarity tier)\nconst classResult = await sdk.createNftTokenClass({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n description: 'Ultra-rare legendary wizard NFTs',\n maximumSupply: '100', // Max NFTs of this type\n data: {\n rarity: 'legendary',\n class: 'wizard',\n power: '9000',\n },\n});\nconsole.log('Token class created:', classResult.tokenClassName);\n\n// Fetch token classes for your collection\nconst classes = await sdk.fetchNftTokenClasses({\n collectionName: 'MyEpicNFTs',\n});\nfor (const tokenClass of classes) {\n console.log(`Class: ${tokenClass.tokenClassName}`);\n console.log(` Current Supply: ${tokenClass.currentSupply}/${tokenClass.maxSupply}`);\n}\n```\n\n## Estimate Mint Fees\n\n```typescript\n// Estimate fee for minting multiple NFTs\nconst mintFeeEstimate = await sdk.estimateNftMintFee({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n quantity: 5,\n});\nconsole.log('Estimated mint fee:', mintFeeEstimate); // Dynamic fee in GALA\n\n// Estimate multiple operations at once\nconst bundleFee = await sdk.estimateNftOperationFees({\n operations: [\n { type: 'claim_collection' },\n { type: 'create_token_class', collectionName: 'MyEpicNFTs' },\n { type: 'mint', quantity: 10 },\n ],\n});\nconsole.log('Total bundle fee:', bundleFee.totalFee);\nfor (const op of bundleFee.breakdown) {\n console.log(` ${op.operationType}: ${op.fee}`);\n}\n```\n\n## Mint NFTs\n\n```typescript\n// Mint NFT instances from a token class\nconst mintResult = await sdk.mintNft({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'LegendaryWizard',\n quantity: 5,\n to: 'eth|0x...', // Recipient wallet\n metadata: {\n attributes: [\n { name: 'level', value: '50' },\n { name: 'element', value: 'fire' },\n ],\n },\n});\nconsole.log('Minted:', mintResult.quantityMinted);\nconsole.log('Transaction ID:', mintResult.transactionId);\n\n// Check NFT balances\nconst balances = await sdk.fetchNftBalances(walletAddress);\nfor (const balance of balances) {\n console.log(`${balance.collectionName}/${balance.tokenClassName}: ${balance.quantity}`);\n}\n\n// Filter by collection\nconst collectionBalances = await sdk.fetchNftBalances(walletAddress, 'MyEpicNFTs');\n```\n\n## Complete Workflow\n\n```typescript\n// 1. Check availability\nconst available = await sdk.isNftCollectionAvailable('MyEpicNFTs');\nif (!available) throw new Error('Collection name taken');\n\n// 2. Claim collection (10,000 GALA)\nconst claimResult = await sdk.claimNftCollection({\n collectionName: 'MyEpicNFTs',\n description: 'My epic NFT collection',\n});\nconsole.log('✓ Collection claimed');\n\n// 3. Create token class (1,000 GALA)\nconst classResult = await sdk.createNftTokenClass({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n description: 'Legendary tier NFTs',\n maximumSupply: '1000',\n});\nconsole.log('✓ Token class created');\n\n// 4. Estimate mint fee\nconst fee = await sdk.estimateNftMintFee({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n quantity: 100,\n});\nconsole.log(`✓ Mint fee: ${fee} GALA`);\n\n// 5. Mint NFTs\nconst mintResult = await sdk.mintNft({\n collectionName: 'MyEpicNFTs',\n tokenClassName: 'Legendary',\n quantity: 100,\n to: userWallet,\n});\nconsole.log('✓ Minted:', mintResult.quantityMinted);\n\n// 6. Verify ownership\nconst balances = await sdk.fetchNftBalances(userWallet, 'MyEpicNFTs');\nconsole.log('Total NFTs:', balances.reduce((sum, b) => sum + parseInt(b.quantity), 0));\n```\n\n**MCP Tool Equivalents:**\n- `gala_launchpad_get_nft_collection_claim_fee`\n- `gala_launchpad_get_nft_token_class_create_fee`\n- `gala_launchpad_estimate_nft_mint_fee`\n- `gala_launchpad_estimate_nft_operation_fees`\n- `gala_launchpad_check_nft_collection_available`\n- `gala_launchpad_claim_nft_collection`\n- `gala_launchpad_fetch_nft_collections`\n- `gala_launchpad_create_nft_token_class`\n- `gala_launchpad_fetch_nft_token_classes`\n- `gala_launchpad_mint_nft`\n- `gala_launchpad_fetch_nft_balances`\n"
2682
+ },
2683
+ {
2684
+ "userQuestion": "What parameters does getNftCollectionClaimFee() accept?",
2685
+ "assistantResponse": "The primary methods for Nft collection management are `getNftCollectionClaimFee()`, `getNftTokenClassCreateFee()`, `estimateNftMintFee()`. Each method accepts configuration options as a single object parameter.\n\n**Common Parameters:**\n- `tokenName`: The token identifier (e.g., 'dragnrkti')\n- `amount`: Quantity as a string (for precision)\n- Wallet/auth options when transactions are involved\n\nCheck the SDK documentation or use TypeScript intellisense for the complete parameter interface."
2686
+ },
2687
+ {
2688
+ "userQuestion": "What are best practices for nft collection management?",
2689
+ "assistantResponse": "1. **Use TypeScript**: Get full type safety and intellisense.\n2. **Handle errors**: Always wrap SDK calls in try-catch blocks.\n3. **Validate inputs**: Check parameters before making API calls.\n4. **Cache when appropriate**: Reduce API calls for static data."
2690
+ },
2691
+ {
2692
+ "userQuestion": "Can you walk me through a complete nft collection management example?",
2693
+ "assistantResponse": "**Complete Workflow: Nft collection management**\n\nHere's the typical flow: `getNftCollectionClaimFee()` → `getNftTokenClassCreateFee()` → `estimateNftMintFee()`\n\n**Step-by-Step:**\n1. **Setup**: Initialize SDK with your configuration\n2. **Validate**: Check prerequisites (balances, permissions)\n3. **Calculate**: Use calculation methods to preview results\n4. **Execute**: Perform the main operation\n5. **Verify**: Confirm the operation succeeded\n\n**Pro Tip:** The SDK methods are designed to be called in sequence. Each step provides data needed for the next."
2694
+ },
2695
+ {
2696
+ "userQuestion": "What other methods are available for Nft collection management?",
2697
+ "assistantResponse": "**Additional Methods:**\n\n- `estimateNftOperationFees()`\n- `isNftCollectionAvailable()`\n- `claimNftCollection()`\n- `fetchNftCollections()`\n\n**Total methods in this topic:** 11\n\nEach method serves a specific purpose in the workflow. Use TypeScript intellisense or the SDK documentation to explore parameter options for each method."
2698
+ },
2699
+ {
2700
+ "userQuestion": "What should I learn next after nft collection management?",
2701
+ "assistantResponse": "**Related Topics:**\n\n- Check the SDK documentation for related functionality\n\n**Learning Path:** Start with the basics, then explore related topics to build a complete understanding of the SDK capabilities."
2702
+ },
2703
+ {
2704
+ "userQuestion": "Are there any advanced patterns for this topic?",
2705
+ "assistantResponse": "**Advanced Patterns:**\n\n1. **Batching**: Combine multiple operations for efficiency\n2. **Caching**: Cache frequently-accessed data locally\n3. **Event-Driven**: Use subscriptions for real-time updates\n4. **Error Recovery**: Implement retry logic with exponential backoff\n5. **Monitoring**: Track operation success rates and latencies\n\n**Performance Tip:** For high-volume operations, consider using the local calculation methods where available to reduce network calls."
2706
+ }
2707
+ ]
2708
+ },
2615
2709
  {
2616
2710
  "topicKey": "overseer-invites",
2617
2711
  "label": "Overseer invites",
@@ -2855,7 +2949,7 @@
2855
2949
  "topicKey": "token-ban-management",
2856
2950
  "label": "Token ban management",
2857
2951
  "category": "token-ban",
2858
- "description": "Token ban management operations",
2952
+ "description": "Platform-wide token bans",
2859
2953
  "methodCount": 5,
2860
2954
  "exchanges": [
2861
2955
  {
@@ -2888,7 +2982,7 @@
2888
2982
  "topicKey": "trade-history",
2889
2983
  "label": "Trade history",
2890
2984
  "category": "trades",
2891
- "description": "Trade history operations",
2985
+ "description": "View and analyze trading history",
2892
2986
  "methodCount": 1,
2893
2987
  "exchanges": [
2894
2988
  {
@@ -3215,7 +3309,7 @@
3215
3309
  "exchanges": [
3216
3310
  {
3217
3311
  "userQuestion": "How do I map MCP tools to SDK methods?",
3218
- "assistantResponse": "\n## MCP Tool to SDK Method Mapping Guide\n\n**Covers Concepts:**\n- Understanding MCP tool architecture\n- Mapping between MCP tools and SDK methods\n- When to use MCP vs direct SDK\n\nThis is a conceptual guide showing how MCP (Model Context Protocol) tools map to SDK methods.\n\n### Architecture Overview\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ MCP Server Layer │\n│ (181 tools - user-friendly wrappers with validation) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ LaunchpadSDK Layer │\n│ (116 methods - low-level programmatic access) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ Gala Launchpad Backend APIs │\n│ (REST endpoints, WebSocket events, GalaChain) │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### MCP vs SDK Decision Matrix\n\n| Scenario | Use MCP | Use SDK |\n|----------|---------|---------|\n| **AI Agent Development** | ✅ Yes | ❌ No |\n| **Claude Desktop Integration** | ✅ Yes | ❌ No |\n| **LLM-Driven Trading Bots** | ✅ Yes | ❌ No |\n| **TypeScript Application** | ❌ No | ✅ Yes |\n| **Node.js Backend Service** | ❌ No | ✅ Yes |\n| **React/Vue Frontend** | ❌ No | ✅ Yes |\n| **Python Application** | ❌ No (SDK only) | ❌ No (not yet) |\n\n### Tool Naming Conventions\n\n**MCP Tool Pattern:** `gala_launchpad_{action}_{resource}`\n**SDK Method Pattern:** `{action}{Resource}`\n\nExamples:\n- MCP: `gala_launchpad_fetch_pools` → SDK: `fetchPools()`\n- MCP: `gala_launchpad_buy_tokens` → SDK: `buy()`\n- MCP: `gala_launchpad_get_swap_quote_exact_input` → SDK: `getSwapQuoteExactInput()`\n\n### Common Mapping Patterns\n\n**1. Direct 1:1 Mapping (Most Common):**\n\n```typescript\n// MCP Tool: gala_launchpad_fetch_pools\n// SDK Method: fetchPools()\n\n// MCP Usage (AI agent)\nconst result = await tools.gala_launchpad_fetch_pools({\n type: 'recent',\n limit: 10\n});\n\n// SDK Usage (TypeScript app)\nconst sdk = createLaunchpadSDK({ wallet: 'private-key' });\nconst result = await sdk.fetchPools({ type: 'recent', limit: 10 });\n```\n\n**2. Composite Tool → Multiple SDK Methods:**\n\n```typescript\n// MCP Tool: gala_launchpad_buy_tokens_with_calculation\n// Calls TWO SDK methods internally:\n\n// 1. Calculate quote\nconst quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n});\n\n// 2. Execute trade\nconst result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n});\n```\n\n**3. SDK Method → No MCP Tool (Advanced Features):**\n\nSome SDK methods don't have MCP equivalents:\n- `setWallet()` - Runtime wallet changes\n- `getConfig()` - SDK configuration access\n- `warmCacheFromPoolData()` - Cache optimization\n\n**4. MCP Tool → No Direct SDK Method (Abstractions):**\n\nSome MCP tools provide abstractions:\n- `gala_launchpad_portfolio` - Aggregates multiple SDK calls\n- `gala_launchpad_analyze_token` - Composite analysis workflow\n\n### Complete Mapping Reference\n\n**Trading (13 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_buy_tokens` | `buy()` |\n| `gala_launchpad_sell_tokens` | `sell()` |\n| `gala_launchpad_calculate_buy_amount` | `calculateBuyAmount()` |\n| `gala_launchpad_calculate_sell_amount` | `calculateSellAmount()` |\n| `gala_launchpad_graduate_token` | `graduateToken()` |\n| `gala_launchpad_calculate_buy_amount_local` | `calculateBuyAmountLocal()` |\n| `gala_launchpad_calculate_sell_amount_local` | `calculateSellAmountLocal()` |\n| `gala_launchpad_calculate_buy_amount_external` | `calculateBuyAmountExternal()` |\n| `gala_launchpad_calculate_sell_amount_external` | `calculateSellAmountExternal()` |\n\n**DEX Trading (6 MCP tools → 6 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_swap_quote_exact_input` | `getSwapQuoteExactInput()` |\n| `gala_launchpad_get_swap_quote_exact_output` | `getSwapQuoteExactOutput()` |\n| `gala_launchpad_execute_swap` | `executeSwap()` |\n| `gala_launchpad_get_swap_user_assets` | `getSwapUserAssets()` |\n| `gala_launchpad_get_all_swap_user_assets` | `getAllSwapUserAssets()` |\n| `gala_launchpad_get_swap_pool_info` | `getSwapPoolInfo()` |\n\n**Liquidity Management (8 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_user_liquidity_positions` | `getSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_all_user_liquidity_positions` | `getAllSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_liquidity_position_by_id` | `getSwapLiquidityPositionById()` |\n| `gala_launchpad_add_liquidity_by_price` | `addSwapLiquidityByPrice()` |\n| `gala_launchpad_add_liquidity_by_ticks` | `addSwapLiquidityByTicks()` |\n| `gala_launchpad_estimate_remove_liquidity` | `getSwapEstimateRemoveLiquidity()` |\n| `gala_launchpad_remove_liquidity` | `removeSwapLiquidity()` |\n| `gala_launchpad_collect_position_fees` | `collectSwapPositionFees()` |\n\n### When to Use Each\n\n**Use MCP Tools When:**\n- Building AI agents (Claude, GPT, etc.)\n- Need LLM-friendly error messages\n- Want automatic parameter validation\n- Working in Claude Desktop environment\n- Need slash command shortcuts\n\n**Use SDK Directly When:**\n- Building TypeScript/JavaScript applications\n- Need maximum performance\n- Want full TypeScript type safety\n- Building React/Vue components\n- Need fine-grained control\n\n### Migration Example\n\n**From MCP to SDK:**\n\n```typescript\n// AI Agent using MCP\nasync function mcpExample() {\n const result = await tools.gala_launchpad_buy_tokens({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n });\n return result;\n}\n\n// TypeScript App using SDK\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function sdkExample() {\n const sdk = createLaunchpadSDK({ wallet: 'private-key' });\n\n // Step 1: Calculate quote\n const quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n });\n\n // Step 2: Execute trade\n const result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n });\n\n return result;\n}\n```\n\n**Key Differences:**\n1. MCP combines calculation + execution (safer for AI)\n2. SDK exposes individual steps (more control)\n3. MCP validates all inputs via Zod schemas\n4. SDK provides TypeScript type safety\n\n### Resources\n\n- **SDK Documentation**: packages/sdk/README.md\n- **MCP Documentation**: packages/mcp-server/README.md\n- **API Reference**: docs/API-REFERENCE.md\n- **Tool Registry**: packages/mcp-server/src/tools/registry.ts\n"
3312
+ "assistantResponse": "\n## MCP Tool to SDK Method Mapping Guide\n\n**Covers Concepts:**\n- Understanding MCP tool architecture\n- Mapping between MCP tools and SDK methods\n- When to use MCP vs direct SDK\n\nThis is a conceptual guide showing how MCP (Model Context Protocol) tools map to SDK methods.\n\n### Architecture Overview\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│ MCP Server Layer │\n│ (241 tools - user-friendly wrappers with validation) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ LaunchpadSDK Layer │\n│ (217 methods - low-level programmatic access) │\n└─────────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────────┐\n│ Gala Launchpad Backend APIs │\n│ (REST endpoints, WebSocket events, GalaChain) │\n└─────────────────────────────────────────────────────────────┘\n```\n\n### MCP vs SDK Decision Matrix\n\n| Scenario | Use MCP | Use SDK |\n|----------|---------|---------|\n| **AI Agent Development** | ✅ Yes | ❌ No |\n| **Claude Desktop Integration** | ✅ Yes | ❌ No |\n| **LLM-Driven Trading Bots** | ✅ Yes | ❌ No |\n| **TypeScript Application** | ❌ No | ✅ Yes |\n| **Node.js Backend Service** | ❌ No | ✅ Yes |\n| **React/Vue Frontend** | ❌ No | ✅ Yes |\n| **Python Application** | ❌ No (SDK only) | ❌ No (not yet) |\n\n### Tool Naming Conventions\n\n**MCP Tool Pattern:** `gala_launchpad_{action}_{resource}`\n**SDK Method Pattern:** `{action}{Resource}`\n\nExamples:\n- MCP: `gala_launchpad_fetch_pools` → SDK: `fetchPools()`\n- MCP: `gala_launchpad_buy_tokens` → SDK: `buy()`\n- MCP: `gala_launchpad_get_swap_quote_exact_input` → SDK: `getSwapQuoteExactInput()`\n\n### Common Mapping Patterns\n\n**1. Direct 1:1 Mapping (Most Common):**\n\n```typescript\n// MCP Tool: gala_launchpad_fetch_pools\n// SDK Method: fetchPools()\n\n// MCP Usage (AI agent)\nconst result = await tools.gala_launchpad_fetch_pools({\n type: 'recent',\n limit: 10\n});\n\n// SDK Usage (TypeScript app)\nconst sdk = createLaunchpadSDK({ wallet: 'private-key' });\nconst result = await sdk.fetchPools({ type: 'recent', limit: 10 });\n```\n\n**2. Composite Tool → Multiple SDK Methods:**\n\n```typescript\n// MCP Tool: gala_launchpad_buy_tokens_with_calculation\n// Calls TWO SDK methods internally:\n\n// 1. Calculate quote\nconst quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n});\n\n// 2. Execute trade\nconst result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n});\n```\n\n**3. SDK Method → No MCP Tool (Advanced Features):**\n\nSome SDK methods don't have MCP equivalents:\n- `setWallet()` - Runtime wallet changes\n- `getConfig()` - SDK configuration access\n- `warmCacheFromPoolData()` - Cache optimization\n\n**4. MCP Tool → No Direct SDK Method (Abstractions):**\n\nSome MCP tools provide abstractions:\n- `gala_launchpad_portfolio` - Aggregates multiple SDK calls\n- `gala_launchpad_analyze_token` - Composite analysis workflow\n\n### Complete Mapping Reference\n\n**Trading (13 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_buy_tokens` | `buy()` |\n| `gala_launchpad_sell_tokens` | `sell()` |\n| `gala_launchpad_calculate_buy_amount` | `calculateBuyAmount()` |\n| `gala_launchpad_calculate_sell_amount` | `calculateSellAmount()` |\n| `gala_launchpad_graduate_token` | `graduateToken()` |\n| `gala_launchpad_calculate_buy_amount_local` | `calculateBuyAmountLocal()` |\n| `gala_launchpad_calculate_sell_amount_local` | `calculateSellAmountLocal()` |\n| `gala_launchpad_calculate_buy_amount_external` | `calculateBuyAmountExternal()` |\n| `gala_launchpad_calculate_sell_amount_external` | `calculateSellAmountExternal()` |\n\n**DEX Trading (6 MCP tools → 6 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_swap_quote_exact_input` | `getSwapQuoteExactInput()` |\n| `gala_launchpad_get_swap_quote_exact_output` | `getSwapQuoteExactOutput()` |\n| `gala_launchpad_execute_swap` | `executeSwap()` |\n| `gala_launchpad_get_swap_user_assets` | `getSwapUserAssets()` |\n| `gala_launchpad_get_all_swap_user_assets` | `getAllSwapUserAssets()` |\n| `gala_launchpad_get_swap_pool_info` | `getSwapPoolInfo()` |\n\n**Liquidity Management (8 MCP tools → 9 SDK methods):**\n\n| MCP Tool | SDK Method |\n|----------|-----------|\n| `gala_launchpad_get_user_liquidity_positions` | `getSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_all_user_liquidity_positions` | `getAllSwapUserLiquidityPositions()` |\n| `gala_launchpad_get_liquidity_position_by_id` | `getSwapLiquidityPositionById()` |\n| `gala_launchpad_add_liquidity_by_price` | `addSwapLiquidityByPrice()` |\n| `gala_launchpad_add_liquidity_by_ticks` | `addSwapLiquidityByTicks()` |\n| `gala_launchpad_estimate_remove_liquidity` | `getSwapEstimateRemoveLiquidity()` |\n| `gala_launchpad_remove_liquidity` | `removeSwapLiquidity()` |\n| `gala_launchpad_collect_position_fees` | `collectSwapPositionFees()` |\n\n### When to Use Each\n\n**Use MCP Tools When:**\n- Building AI agents (Claude, GPT, etc.)\n- Need LLM-friendly error messages\n- Want automatic parameter validation\n- Working in Claude Desktop environment\n- Need slash command shortcuts\n\n**Use SDK Directly When:**\n- Building TypeScript/JavaScript applications\n- Need maximum performance\n- Want full TypeScript type safety\n- Building React/Vue components\n- Need fine-grained control\n\n### Migration Example\n\n**From MCP to SDK:**\n\n```typescript\n// AI Agent using MCP\nasync function mcpExample() {\n const result = await tools.gala_launchpad_buy_tokens({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n slippageToleranceFactor: 0.01\n });\n return result;\n}\n\n// TypeScript App using SDK\nimport { createLaunchpadSDK } from '@gala-chain/launchpad-sdk';\n\nasync function sdkExample() {\n const sdk = createLaunchpadSDK({ wallet: 'private-key' });\n\n // Step 1: Calculate quote\n const quote = await sdk.calculateBuyAmount({\n tokenName: 'anime',\n amount: '100',\n type: 'native'\n });\n\n // Step 2: Execute trade\n const result = await sdk.buy({\n tokenName: 'anime',\n amount: '100',\n type: 'native',\n expectedAmount: quote.amount,\n slippageToleranceFactor: 0.01\n });\n\n return result;\n}\n```\n\n**Key Differences:**\n1. MCP combines calculation + execution (safer for AI)\n2. SDK exposes individual steps (more control)\n3. MCP validates all inputs via Zod schemas\n4. SDK provides TypeScript type safety\n\n### Resources\n\n- **SDK Documentation**: packages/sdk/README.md\n- **MCP Documentation**: packages/mcp-server/README.md\n- **API Reference**: docs/API-REFERENCE.md\n- **Tool Registry**: packages/mcp-server/src/tools/registry.ts\n"
3219
3313
  },
3220
3314
  {
3221
3315
  "userQuestion": "Where can I find more details about map MCP tools to SDK methods?",
@@ -3409,7 +3503,7 @@
3409
3503
  "label": "Utilities system",
3410
3504
  "category": "wallet",
3411
3505
  "description": "Wallet creation and key derivation",
3412
- "methodCount": 12,
3506
+ "methodCount": 11,
3413
3507
  "exchanges": [
3414
3508
  {
3415
3509
  "userQuestion": "How do I access system utilities?",
@@ -3429,7 +3523,7 @@
3429
3523
  },
3430
3524
  {
3431
3525
  "userQuestion": "What other methods are available for Utilities system?",
3432
- "assistantResponse": "**Additional Methods:**\n\n- `getUrlByTokenName()`\n- `getVersion()`\n- `getWallet()`\n- `hasWallet()`\n\n**Total methods in this topic:** 12\n\nEach method serves a specific purpose in the workflow. Use TypeScript intellisense or the SDK documentation to explore parameter options for each method."
3526
+ "assistantResponse": "**Additional Methods:**\n\n- `getUrlByTokenName()`\n- `getVersion()`\n- `getWallet()`\n- `hasWallet()`\n\n**Total methods in this topic:** 11\n\nEach method serves a specific purpose in the workflow. Use TypeScript intellisense or the SDK documentation to explore parameter options for each method."
3433
3527
  },
3434
3528
  {
3435
3529
  "userQuestion": "What should I learn next after access system utilities?",
@@ -3,5 +3,5 @@
3
3
  * This file is generated by scripts/inject-version.ts during build
4
4
  * DO NOT EDIT MANUALLY
5
5
  */
6
- export declare const MCP_SERVER_VERSION = "5.0.4-beta.0";
6
+ export declare const MCP_SERVER_VERSION = "5.0.4-beta.2";
7
7
  //# sourceMappingURL=version.d.ts.map