Skip to main content
Glama

POOL_STATS

Retrieve detailed statistics for all BAMM pools on the Fraxtal blockchain to monitor liquidity, borrowing activity, and other key metrics.

Instructions

Get statistics for all BAMM pools

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The POOL_STATS tool handler implementation. It initializes WalletService and BammPoolsStatsService, fetches pool stats, formats them, and returns the result or an error message.
    export const poolStatsTool = { name: "POOL_STATS", description: "Get statistics for all BAMM pools", // biome-ignore lint/suspicious/noExplicitAny: <these are not used anyways> execute: async (_params: any, _context: any) => { try { const privateKey = process.env.WALLET_PRIVATE_KEY; if (!privateKey) { return "Error: WALLET_PRIVATE_KEY environment variable is not set. Please set it with your wallet's private key (without 0x prefix)."; } const walletService = new WalletService(privateKey); const poolStatsService = new BammPoolsStatsService(walletService); const pools = await poolStatsService.getPoolsStats(); const formattedStats = poolStatsService.formatPoolsStats(pools); return formattedStats; } catch (error) { if (error instanceof Error) { return `❌ Failed to retrieve pool statistics: ${error.message}`; } return "❌ An unknown error occurred while retrieving pool statistics"; } }, };
  • src/index.ts:23-23 (registration)
    Registration of the poolStatsTool (POOL_STATS) with the FastMCP server.
    server.addTool(poolStatsTool);
  • Core logic in BammPoolsStatsService.getPoolsStats(): Fetches BAMM addresses from blockchain, maps to Fraxswap pools via API, filters and sorts by TVL.
    async getPoolsStats(): Promise<PoolStats[]> { const publicClient = this.walletService.getPublicClient(); const zeroAddress = "0x0000000000000000000000000000000000000000"; // 1. Get the list of all BAMM addresses from the factory. const bammsOnChain: readonly Address[] = await publicClient.readContract({ address: BAMM_ADDRESSES.FACTORY, abi: BAMM_FACTORY_ABI, functionName: "bammsArray", args: [], }); // 2. Build a mapping: underlying Fraxswap pair address -> BAMM address. const pairToBammMap = new Map<string, string>(); for (const bammAddress of bammsOnChain) { if (bammAddress === zeroAddress) continue; // Get the Fraxswap pair address from this BAMM contract. const pairAddress: Address = await publicClient.readContract({ address: bammAddress, abi: BAMM_ABI, functionName: "pair", args: [], }); if (pairAddress && pairAddress !== zeroAddress) { pairToBammMap.set(pairAddress.toLowerCase(), bammAddress); } } // 3. Fetch the full list of pools from the Frax API endpoint. const response = await fetch(this.endpoint); if (!response.ok) { throw new Error(`Failed to fetch pools: ${response.statusText}`); } const data = await response.json(); // Map the API response to our PoolStats type and add placeholder fields. // biome-ignore lint/suspicious/noExplicitAny: <explanation> const allPools: PoolStats[] = data.pools.map((pool: any) => ({ ...pool, bammAddress: "", bammApr: 0, fraxswapApr: 0, })); // 4. Filter the API pools to only include those with a matching pair address. const filteredPools: PoolStats[] = []; for (const pool of allPools) { const poolPair = pool.poolAddress.toLowerCase(); if (pairToBammMap.has(poolPair)) { // Set the BAMM address from our mapping. pool.bammAddress = pairToBammMap.get(poolPair) ?? ""; filteredPools.push(pool); } } filteredPools.sort((a, b) => b.tvl - a.tvl); return filteredPools; }
  • BammPoolsStatsService.formatPoolsStats(): Formats the pool statistics into a readable string with details for each pool.
    formatPoolsStats(pools: PoolStats[]): string { if (pools.length === 0) { return "📊 No BAMM Pools Found"; } const formattedStats = pools .map((pool) => { const poolName = `${pool.token0Symbol}/${pool.token1Symbol}`; return dedent` 📊 Pool: ${poolName} - Pool Address: ${pool.poolAddress} - BAMM Address: ${pool.bammAddress} - TVL: $${formatNumber(pool.tvl || 0)} - ${pool.token0Symbol} Locked: ${formatNumber( pool.token0AmountLocked || 0, )} - ${pool.token1Symbol} Locked: ${formatNumber( pool.token1AmountLocked || 0, )} `; }) .join("\n\n"); return dedent` 📊 *BAMM Pool Stats:* Total: ${pools.length} ${formattedStats} `; } }
  • Type definition for PoolStats used in the service and returned by getPoolsStats().
    export interface PoolStats { poolAddress: string; bammAddress: string; createdAtTimestamp: string; token0Symbol: string; token0AmountLocked: number; token1Symbol: string; token1AmountLocked: number; tvl: number; }

Other Tools

Related Tools

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/IQAIcom/mcp-bamm'

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