Skip to main content
Glama
tool-handlers.ts12.4 kB
import { HyperionClient } from './hyperion-client.js'; import { WalletManager } from './wallet-manager.js'; import { CreateWalletParams, ImportWalletParams, GetBalanceParams, SendTransactionParams, GetTransactionParams, GetBlockParams, CallContractParams, SendContractTransactionParams, EstimateGasParams, DeployERC20Params, GetTokenInfoParams, MintTokensParams, } from './types.js'; export class ToolHandlers { constructor( private hyperionClient: HyperionClient, private walletManager: WalletManager ) {} public async handleCreateWallet(params: CreateWalletParams) { const walletInfo = this.walletManager.createWallet(params.name); return { content: [ { type: 'text', text: `Wallet created successfully!\n\nAddress: ${walletInfo.address}\nMnemonic: ${walletInfo.mnemonic}\n\n⚠️ IMPORTANT: Save your mnemonic phrase securely. It's the only way to recover your wallet!`, }, ], }; } public async handleImportWallet(params: ImportWalletParams) { const walletInfo = this.walletManager.importWallet( params.privateKey, params.mnemonic, params.name ); return { content: [ { type: 'text', text: `Wallet imported successfully!\n\nAddress: ${walletInfo.address}`, }, ], }; } public async handleListWallets() { const wallets = this.walletManager.listWallets(); const currentAddress = this.walletManager.getCurrentAddress(); let response = `Available Wallets (${wallets.length}):\n\n`; for (const wallet of wallets) { const isCurrent = wallet.address.toLowerCase() === currentAddress.toLowerCase(); response += `${isCurrent ? '→ ' : ' '}${wallet.address}${isCurrent ? ' (current)' : ''}\n`; } return { content: [ { type: 'text', text: response, }, ], }; } public async handleGetBalance(params: GetBalanceParams) { try { if (params.tokenAddress) { const tokenBalance = await this.hyperionClient.getTokenBalance( params.address, params.tokenAddress ); return { content: [ { type: 'text', text: `Token Balance:\n\nAddress: ${params.address}\nToken: ${tokenBalance.name} (${tokenBalance.symbol})\nBalance: ${tokenBalance.balance} ${tokenBalance.symbol}`, }, ], }; } else { const balance = await this.hyperionClient.getBalance(params.address); return { content: [ { type: 'text', text: `Native Balance:\n\nAddress: ${params.address}\nBalance: ${balance} ${this.hyperionClient.getCurrencySymbol()}`, }, ], }; } } catch (error) { throw new Error(`Failed to get balance: ${error}`); } } public async handleSendTransaction(params: SendTransactionParams) { try { const wallet = this.walletManager.getCurrentWallet(); let result; if (params.tokenAddress) { result = await this.hyperionClient.sendTokenTransaction( wallet, params.tokenAddress, params.to, params.amount, params.gasLimit, params.gasPrice ); } else { result = await this.hyperionClient.sendTransaction( wallet, params.to, params.amount, params.gasLimit, params.gasPrice ); } const explorerUrl = this.hyperionClient.getExplorerUrl(); const txExplorerLink = `${explorerUrl}/tx/${result.hash}`; return { content: [ { type: 'text', text: `Transaction sent successfully!\n\nTransaction Hash: ${result.hash}\nTransaction Explorer: ${txExplorerLink}\n\nTransaction Details:\nFrom: ${result.from}\nTo: ${result.to}\nAmount: ${result.value}\nStatus: ${result.status}`, }, ], }; } catch (error) { throw new Error(`Failed to send transaction: ${error}`); } } public async handleGetTransaction(params: GetTransactionParams) { try { const transaction = await this.hyperionClient.getTransaction(params.hash); const explorerUrl = this.hyperionClient.getExplorerUrl(); const txExplorerLink = `${explorerUrl}/tx/${transaction.hash}`; return { content: [ { type: 'text', text: `Transaction Details:\n\nHash: ${transaction.hash}\nExplorer: ${txExplorerLink}\n\nFrom: ${transaction.from}\nTo: ${transaction.to}\nValue: ${transaction.value} ${this.hyperionClient.getCurrencySymbol()}\nGas Used: ${transaction.gasUsed}\nBlock: ${transaction.blockNumber}\nStatus: ${transaction.status}`, }, ], }; } catch (error) { throw new Error(`Failed to get transaction: ${error}`); } } public async handleGetBlock(params: GetBlockParams) { try { const block = await this.hyperionClient.getBlock(params.blockNumber, params.blockHash); return { content: [ { type: 'text', text: `Block Information:\n\nNumber: ${block.number}\nHash: ${block.hash}\nTimestamp: ${new Date(block.timestamp * 1000).toISOString()}\nTransactions: ${block.transactionCount}\nGas Used: ${block.gasUsed}\nGas Limit: ${block.gasLimit}\nMiner: ${block.miner}`, }, ], }; } catch (error) { throw new Error(`Failed to get block: ${error}`); } } public async handleGetNetworkInfo() { try { const networkInfo = await this.hyperionClient.getNetworkInfo(); return { content: [ { type: 'text', text: `Network Information:\n\nName: ${networkInfo.networkName}\nChain ID: ${networkInfo.chainId}\nLatest Block: ${networkInfo.blockNumber}\nGas Price: ${networkInfo.gasPrice} wei\nConnected: ${networkInfo.isConnected ? 'Yes' : 'No'}`, }, ], }; } catch (error) { throw new Error(`Failed to get network info: ${error}`); } } public async handleEstimateGas(params: EstimateGasParams) { try { const estimate = await this.hyperionClient.estimateGas( params.to, params.value, params.data ); return { content: [ { type: 'text', text: `Gas Estimate:\n\nGas Limit: ${estimate.gasLimit}\nGas Price: ${estimate.gasPrice} wei\nEstimated Cost: ${estimate.estimatedCost} ${this.hyperionClient.getCurrencySymbol()}`, }, ], }; } catch (error) { throw new Error(`Failed to estimate gas: ${error}`); } } public async handleCallContract(params: CallContractParams) { try { const result = await this.hyperionClient.callContract( params.contractAddress, params.methodName, params.parameters || [], params.abi ); return { content: [ { type: 'text', text: `Contract Call Result:\n\nContract: ${params.contractAddress}\nMethod: ${params.methodName}\nResult: ${JSON.stringify(result.result, null, 2)}`, }, ], }; } catch (error) { throw new Error(`Failed to call contract: ${error}`); } } public async handleSendContractTransaction(params: SendContractTransactionParams) { try { const wallet = this.walletManager.getCurrentWallet(); const result = await this.hyperionClient.sendContractTransaction( wallet, params.contractAddress, params.methodName, params.parameters || [], params.abi, params.value, params.gasLimit, params.gasPrice ); const explorerUrl = this.hyperionClient.getExplorerUrl(); const txExplorerLink = `${explorerUrl}/tx/${result.hash}`; const contractExplorerLink = `${explorerUrl}/address/${params.contractAddress}`; return { content: [ { type: 'text', text: `Contract Transaction Sent:\n\nTransaction Hash: ${result.hash}\nTransaction Explorer: ${txExplorerLink}\n\nContract: ${params.contractAddress}\nContract Explorer: ${contractExplorerLink}\n\nMethod: ${params.methodName}\nStatus: ${result.status}`, }, ], }; } catch (error) { throw new Error(`Failed to send contract transaction: ${error}`); } } public async handleSetCurrentWallet(params: { address: string }) { try { this.walletManager.setCurrentWallet(params.address); return { content: [ { type: 'text', text: `Current wallet set to: ${params.address}`, }, ], }; } catch (error) { throw new Error(`Failed to set current wallet: ${error}`); } } public async handleGetCurrentWallet() { try { const address = this.walletManager.getCurrentAddress(); const walletInfo = this.walletManager.getWalletInfo(address); return { content: [ { type: 'text', text: `Current Wallet:\n\nAddress: ${walletInfo.address}\nPublic Key: ${walletInfo.publicKey}\nPrivate Key: ${walletInfo.privateKey}`, }, ], }; } catch (error) { throw new Error(`Failed to get current wallet: ${error}`); } } public async handleDeployERC20Token(params: DeployERC20Params) { try { const wallet = this.walletManager.getCurrentWallet(); const result = await this.hyperionClient.deployERC20Token( wallet, params.name, params.symbol, params.decimals || 18, params.initialSupply, params.mintable || false, params.gasLimit, params.gasPrice ); const explorerUrl = this.hyperionClient.getExplorerUrl(); const contractExplorerLink = `${explorerUrl}/address/${result.contractAddress}`; const txExplorerLink = `${explorerUrl}/tx/${result.transactionHash}`; return { content: [ { type: 'text', text: `ERC20 Token Deployed Successfully!\n\nContract Address: ${result.contractAddress}\nContract Explorer: ${contractExplorerLink}\n\nTransaction Hash: ${result.transactionHash}\nTransaction Explorer: ${txExplorerLink}\n\nToken Details:\nName: ${result.name}\nSymbol: ${result.symbol}\nDecimals: ${result.decimals}\nInitial Supply: ${result.initialSupply}\nDeployer: ${result.deployer}\nGas Used: ${result.gasUsed}\nBlock Number: ${result.blockNumber}`, }, ], }; } catch (error) { throw new Error(`Failed to deploy ERC20 token: ${error}`); } } public async handleGetTokenInfo(params: GetTokenInfoParams) { try { const result = await this.hyperionClient.getTokenInfo(params.tokenAddress); return { content: [ { type: 'text', text: `Token Information:\n\nAddress: ${result.address}\nName: ${result.name}\nSymbol: ${result.symbol}\nDecimals: ${result.decimals}\nTotal Supply: ${result.totalSupply}${result.owner ? `\nOwner: ${result.owner}` : ''}`, }, ], }; } catch (error) { throw new Error(`Failed to get token info: ${error}`); } } public async handleMintTokens(params: MintTokensParams) { try { const wallet = this.walletManager.getCurrentWallet(); const result = await this.hyperionClient.mintTokens( wallet, params.tokenAddress, params.to, params.amount, params.gasLimit, params.gasPrice ); const explorerUrl = this.hyperionClient.getExplorerUrl(); const txExplorerLink = `${explorerUrl}/tx/${result.hash}`; const contractExplorerLink = `${explorerUrl}/address/${params.tokenAddress}`; return { content: [ { type: 'text', text: `Tokens Minted Successfully!\n\nTransaction Hash: ${result.hash}\nTransaction Explorer: ${txExplorerLink}\n\nToken Contract: ${params.tokenAddress}\nContract Explorer: ${contractExplorerLink}\n\nMint Details:\nMinted To: ${params.to}\nAmount: ${params.amount}\nStatus: ${result.status}\nGas Used: ${result.gasUsed}`, }, ], }; } catch (error) { throw new Error(`Failed to mint tokens: ${error}`); } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cuongpo/hyperion-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server