Skip to main content
Glama
clumsynonono

Aave Liquidation MCP Server

by clumsynonono

get_user_positions

Retrieve detailed breakdown of user collateral and debt positions across all Aave V3 assets to analyze position health and identify liquidation opportunities.

Instructions

Get detailed breakdown of a user collateral and debt positions across all Aave V3 assets.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressYesEthereum address to query

Implementation Reference

  • Core implementation of the get_user_positions tool. Retrieves user's collateral and debt positions by fetching all reserves and parallel querying user reserve data for each reserve, then categorizing and formatting the positions.
    async getUserReserves(userAddress: string): Promise<{ collateral: UserReserveData[]; debt: UserReserveData[]; }> { const reserves = await this.getAllReserves(); const collateral: UserReserveData[] = []; const debt: UserReserveData[] = []; // Parallel query all user reserves const userReservePromises = reserves.map(reserve => this.dataProviderContract.getUserReserveData(reserve.tokenAddress, userAddress) ); const userReservesData = await Promise.all(userReservePromises); // Process results for (let i = 0; i < reserves.length; i++) { const reserve = reserves[i]; const userReserve = userReservesData[i]; const totalDebt = userReserve.currentStableDebt + userReserve.currentVariableDebt; if (userReserve.currentATokenBalance > 0n || totalDebt > 0n) { // Use cached decimals from reserves const decimals = reserve.decimals; const data: UserReserveData = { asset: reserve.tokenAddress, symbol: reserve.symbol, currentATokenBalance: userReserve.currentATokenBalance, currentStableDebt: userReserve.currentStableDebt, currentVariableDebt: userReserve.currentVariableDebt, usageAsCollateralEnabled: userReserve.usageAsCollateralEnabled, decimals, balanceFormatted: ethers.formatUnits(userReserve.currentATokenBalance, decimals), debtFormatted: ethers.formatUnits(totalDebt, decimals), liquidationBonus: reserve.liquidationBonus, }; if (userReserve.currentATokenBalance > 0n) { collateral.push(data); } if (totalDebt > 0n) { debt.push(data); } } } return { collateral, debt }; }
  • MCP CallToolRequestSchema handler case for get_user_positions. Validates the address input and delegates to AaveClient.getUserReserves, then formats and returns the response as MCP content.
    case 'get_user_positions': { const address = args?.address as string; if (!address || typeof address !== 'string') { throw new McpError( ErrorCode.InvalidParams, 'address parameter is required and must be a string' ); } if (!aaveClient.isValidAddress(address)) { throw new McpError( ErrorCode.InvalidParams, 'Invalid Ethereum address format' ); } const positions = await aaveClient.getUserReserves(address); return { content: [ { type: 'text', text: JSON.stringify( { address, collateralPositions: positions.collateral, debtPositions: positions.debt, }, null, 2 ), }, ], }; }
  • Input schema definition and tool registration for get_user_positions in the ListToolsRequestSchema response.
    name: 'get_user_positions', description: 'Get detailed breakdown of a user collateral and debt positions across all Aave V3 assets.', inputSchema: { type: 'object', properties: { address: { type: 'string', description: 'Ethereum address to query', }, }, required: ['address'], },

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/clumsynonono/aave-liquidation-mcp'

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