{"protocolVersion":"2025-06-18","capabilities":{"tools":{"listChanged":false}},"agentGuidance":{"description":"General guidance for external AI agents using this MCP server. Read before selecting a project endpoint, requesting tool schemas, or calling protocol tools.","skillUrl":"https://erc8004.heyanon.ai/mcp/skill.md"},"serverInfo":{"name":"heyanon-erc8004-meteoraDlmm","version":"1.0.0"},"tools":[{"name":"getPositionsList","title":"View DLMM Positions","description":"View user DLMM positions.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"data":{"type":"array","items":{"type":"object","properties":{"positionAddress":{"type":"string","description":"Position address"},"poolAddress":{"type":"string","description":"Pool address"},"tokenA":{"type":"string","description":"X token address of the pool"},"tokenB":{"type":"string","description":"Y token address of the pool"},"amountTokenA":{"type":"number","description":"Amount of tokenA in human-readable decimal format"},"amountTokenB":{"type":"number","description":"Amount of tokenB in human-readable decimal format"},"feeA":{"type":"number","description":"Unclaimed fees in tokenA"},"feeB":{"type":"number","description":"Unclaimed fees in tokenB"},"isOutOfRange":{"type":"boolean","description":"Whether the position is out of range"}},"required":["positionAddress","poolAddress","tokenA","tokenB","amountTokenA","amountTokenB","feeA","feeB","isOutOfRange"],"additionalProperties":false},"description":"User DLMM positions and balances"}},"required":["project","operation","data"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"getPoolsList","title":"Top DLMM Pools","description":"View top 10 Meteora DLMM pools sorted by TVL.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"}},"required":["chainName"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Pool name"},"binStep":{"type":"number","description":"Bin step"},"baseFeePercentage":{"type":"string","description":"Base fee percentage"},"tradeVolume24h":{"type":"number","description":"24h trade volume in USD"},"fees24h":{"type":"string","description":"24h fees in USD"},"apr":{"type":"number","description":"APR in percent"},"tvl":{"type":"string","description":"Total value locked in USD"}},"required":["name","binStep","baseFeePercentage","tradeVolume24h","fees24h","apr","tvl"],"additionalProperties":false},"description":"Top DLMM pools by liquidity"}},"required":["project","operation","data"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"getPoolAddress","title":"Resolve Pool Address","description":"Resolve the DLMM pool address by providing base and quote token addresses; returns the pair's highest-TVL pool.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"baseToken":{"type":"string","description":"The base token address of the DLMM pool"},"quoteToken":{"type":"string","description":"The quote token address of the DLMM pool"}},"required":["chainName","baseToken","quoteToken"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"data":{"type":"object","properties":{"poolAddress":{"type":"string","description":"Resolved DLMM pool address"}},"required":["poolAddress"],"additionalProperties":false,"description":"Resolved DLMM pool address for the token pair"}},"required":["project","operation","data"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"getTokenPairDlmm","title":"Resolve Token Pair","description":"Resolve the token addresses of a DLMM pool: baseToken is its X token, quoteToken its Y token.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"poolAddress":{"type":"string","description":"The address of the DLMM pool"}},"required":["chainName","poolAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"data":{"type":"object","properties":{"baseToken":{"type":"string","description":"Base token mint address"},"quoteToken":{"type":"string","description":"Quote token mint address"}},"required":["baseToken","quoteToken"],"additionalProperties":false,"description":"Base and quote token mints for the pool"}},"required":["project","operation","data"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"addImbalanceLiquidity","title":"Add Imbalanced Liquidity","description":"Add chosen amounts of one or both pool tokens to an existing Meteora DLMM position. With poolAddress and no tokens, baseTokenAmount is the pool's X token.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"strategy":{"type":"string","enum":["spot","curve","bidask"],"description":"Distribution strategy: \"spot\" spreads liquidity evenly over the bins, \"curve\" concentrates it near the active bin, \"bidask\" away from it"},"poolAddress":{"description":"The DLMM pool (poolAddress from getPositionsList); omit it to find the pool from baseToken and quoteToken among the user's positions","type":"string"},"baseToken":{"description":"The base token address of the DLMM pool","type":"string"},"quoteToken":{"description":"The quote token address of the DLMM pool","type":"string"},"baseTokenAmount":{"type":"string","description":"Amount of baseToken in human-readable decimal format (e.g. '1.5'): \"0\" for none, \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"quoteTokenAmount":{"type":"string","description":"Amount of quoteToken in human-readable decimal format (e.g. '1.5'): \"0\" for none, \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"},"positionAddress":{"description":"The position (positionAddress from getPositionsList); if omitted, one is picked and named in the note","type":"string"}},"required":["chainName","strategy","baseTokenAmount","quoteTokenAmount","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"createBalancePosition","title":"Create Balanced Position","description":"Create a new Meteora DLMM position around the active bin from an amount of one token (tokenIn); the other token is filled in by the strategy and must also be in the wallet.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"strategy":{"type":"string","enum":["spot","curve","bidask"],"description":"Distribution strategy: \"spot\" spreads liquidity evenly over the bins, \"curve\" concentrates it near the active bin, \"bidask\" away from it"},"poolAddress":{"type":"string","description":"The DLMM pool (from getPoolAddress)"},"baseToken":{"description":"The base token address of the DLMM pool","type":"string"},"quoteToken":{"description":"The quote token address of the DLMM pool","type":"string"},"tokenIn":{"type":"string","description":"The address of the token to be deposited"},"amount":{"type":"string","description":"Amount of tokenIn in human-readable decimal format (e.g. '1.5'), or \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"bins":{"type":"string","description":"Bins on each side of the active bin, a whole number from 0 to 34 (the position spans 2 × bins + 1)"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","strategy","poolAddress","tokenIn","amount","bins","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"addBalanceLiquidity","title":"Add Balanced Liquidity","description":"Add liquidity to an existing Meteora DLMM position from an amount of one token (tokenIn); the other token is filled in by the strategy and must also be in the wallet.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"poolAddress":{"description":"The DLMM pool (poolAddress from getPositionsList); omit it to find the pool from baseToken and quoteToken among the user's positions","type":"string"},"baseToken":{"description":"The base token address of the DLMM pool","type":"string"},"quoteToken":{"description":"The quote token address of the DLMM pool","type":"string"},"tokenIn":{"type":"string","description":"The address of the token to be deposited"},"amount":{"type":"string","description":"Amount of tokenIn in human-readable decimal format (e.g. '1.5'), or \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"strategy":{"type":"string","enum":["spot","curve","bidask"],"description":"Distribution strategy: \"spot\" spreads liquidity evenly over the bins, \"curve\" concentrates it near the active bin, \"bidask\" away from it"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"},"positionAddress":{"description":"The position (positionAddress from getPositionsList); if omitted, one is picked and named in the note","type":"string"}},"required":["chainName","tokenIn","amount","strategy","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"claimFees","title":"Claim Trading Fees","description":"Claim the trading fees of one Meteora DLMM position without removing liquidity (not farming rewards).","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"poolAddress":{"description":"The DLMM pool (poolAddress from getPositionsList); omit it to find the pool from baseToken and quoteToken among the user's positions","type":"string"},"baseToken":{"description":"The base token address of the DLMM pool","type":"string"},"quoteToken":{"description":"The quote token address of the DLMM pool","type":"string"},"positionAddress":{"description":"The position (positionAddress from getPositionsList); if omitted, one is picked and named in the note","type":"string"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"createImbalancePosition","title":"Create Imbalanced Position","description":"Create a new Meteora DLMM position around the active bin with chosen amounts of one or both pool tokens.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"strategy":{"type":"string","enum":["spot","curve","bidask"],"description":"Distribution strategy: \"spot\" spreads liquidity evenly over the bins, \"curve\" concentrates it near the active bin, \"bidask\" away from it"},"poolAddress":{"type":"string","description":"The DLMM pool (from getPoolAddress)"},"baseToken":{"type":"string","description":"The base token address of the DLMM pool"},"quoteToken":{"type":"string","description":"The quote token address of the DLMM pool"},"baseTokenAmount":{"type":"string","description":"Amount of baseToken in human-readable decimal format (e.g. '1.5'): \"0\" for none, \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"quoteTokenAmount":{"type":"string","description":"Amount of quoteToken in human-readable decimal format (e.g. '1.5'): \"0\" for none, \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"bins":{"type":"string","description":"Bins on each side of the active bin, a whole number from 0 to 34 (the position spans 2 × bins + 1)"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","strategy","poolAddress","baseToken","quoteToken","baseTokenAmount","quoteTokenAmount","bins","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"getBinSteps","title":"Calculate Bin Step","description":"Suggest a bin step for a new DLMM pool from a price range and a fee. If the note names another fee, pass that fee with the bin step to createPool.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"minPrice":{"type":"string","description":"Minimum price in human-readable decimal format"},"maxPrice":{"type":"string","description":"Maximum price in human-readable decimal format"},"fee":{"type":"string","description":"Fee in percent (e.g. \"0.25\")"}},"required":["chainName","minPrice","maxPrice","fee"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"data":{"type":"object","properties":{"binStep":{"type":"number","description":"Suggested bin step"}},"required":["binStep"],"additionalProperties":false,"description":"Suggested bin step for the price range and fee"}},"required":["project","operation","data"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"createPool","title":"Create DLMM Pool","description":"Create new Meteora DLMM pool. Use getBinSteps if user provided min and max price and not provided bin_step.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"baseToken":{"type":"string","description":"The base token address of the DLMM pool"},"quoteToken":{"type":"string","description":"The quote token address of the DLMM pool"},"bin_step":{"type":"string","description":"A bin step allowed for fee (see getBinSteps)"},"fee":{"type":"string","description":"Fee in percent (e.g. \"0.25\")"},"initPrice":{"type":"string","description":"Price of 1 baseToken in quoteToken, not in USD (e.g. \"0.5\" for 1 TOKEN = 0.5 SOL); \"-1\" for the market price, which needs a Jupiter price for both tokens; without them an explicit price is used unchecked"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","baseToken","quoteToken","bin_step","fee","initPrice","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"createPositionByPrice","title":"Create Position by Price Range","description":"Create a new Meteora DLMM position over a USD price range, depositing only tokenIn. The range must reach the price of a bin above the current price when tokenIn is the X token, or reach the current price or below when it is the Y token.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"poolAddress":{"type":"string","description":"The DLMM pool (from getPoolAddress)"},"baseToken":{"description":"The base token address of the DLMM pool","type":"string"},"quoteToken":{"description":"The quote token address of the DLMM pool","type":"string"},"tokenIn":{"type":"string","description":"The address of the token to be deposited"},"minPrice":{"type":"string","description":"Lower end: USD price of 1 X token of the pool (baseToken of getTokenPairDlmm), not a price in the Y token"},"maxPrice":{"type":"string","description":"Upper end, in the same unit as minPrice"},"amount":{"type":"string","description":"Amount of tokenIn in human-readable decimal format (e.g. '1.5'), or \"-1\" for the whole balance (for SOL, minus a reserve for rent and fees)"},"strategy":{"type":"string","enum":["spot","curve","bidask"],"description":"Distribution strategy: \"spot\" spreads liquidity evenly over the bins, \"curve\" concentrates it near the active bin, \"bidask\" away from it"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","poolAddress","tokenIn","minPrice","maxPrice","amount","strategy","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"removeLiquidity","title":"Remove Liquidity","description":"Remove a percentage of liquidity from one Meteora DLMM position, also claiming its fees and farming rewards; 100% closes it. With several positions in the pool, 100% needs positionAddress.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"poolAddress":{"description":"The DLMM pool (poolAddress from getPositionsList); omit it to find the pool from baseToken and quoteToken among the user's positions","type":"string"},"baseToken":{"description":"The base token address of the DLMM pool","type":"string"},"quoteToken":{"description":"The quote token address of the DLMM pool","type":"string"},"percentageToRemove":{"type":"string","description":"Percentage of liquidity to remove, above 0 and up to 100 with at most 2 decimals; \"100\" or \"-1\" closes the position"},"positionAddress":{"description":"The position (positionAddress from getPositionsList); if omitted, one is picked and named in the note","type":"string"},"userAddress":{"type":"string","description":"The Solana wallet address of the user"}},"required":["chainName","percentageToRemove","userAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction":{"type":"string","description":"Base64-encoded serialized VersionedTransaction"}},"required":["transaction"],"additionalProperties":false},"description":"Solana transactions to sign and broadcast"}},"required":["project","operation","transactions"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}},{"name":"getPoolDetails","title":"Get Pool Details","description":"Receive detailed information (TVL, APR, 24h fee, 24h volume) about a specific liquidity pool. Use getPoolAddress to resolve the pool address.","inputSchema":{"type":"object","properties":{"chainName":{"type":"string","enum":["solana"],"description":"Chain name"},"poolAddress":{"type":"string","description":"The address of the DLMM pool"}},"required":["chainName","poolAddress"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"note":{"type":"string","description":"Human-readable summary of the action"},"data":{"type":"object","properties":{"address":{"type":"string","description":"Pool address"},"name":{"type":"string","description":"Pool name"},"liquidity":{"type":"string","description":"Total value locked in USD"},"fees24h":{"type":"number","description":"24h fees in USD"},"apr":{"type":"number","description":"APR in percent"},"binStep":{"type":"number","description":"Bin step"},"tradeVolume24h":{"type":"number","description":"24h trade volume in USD"},"baseFeePercentage":{"type":"string","description":"Base fee percentage"}},"required":["address","name","liquidity","fees24h","apr","binStep","tradeVolume24h","baseFeePercentage"],"additionalProperties":false,"description":"Pool TVL, APR, fees, volume, and related stats"}},"required":["project","operation","data"],"additionalProperties":false},{"type":"object","properties":{"project":{"type":"string","description":"Protocol identifier"},"operation":{"type":"string","description":"Operation that produced this response"},"error":{"type":"string","description":"Error message"}},"required":["project","operation","error"],"additionalProperties":false}]}}]}