DeFi Protocol Positions (by Wallet Address)
omnial/wallet-protocols
Given a wallet address, returns every DeFi protocol position it holds — lending, staking, liquidity pool, and yield-farming positions across chains — with the protocol name, chain, USD value, and the underlying supplied and reward token holdings for each position.
Price
Up to $0.0164 per call; you pay what the call used
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.00.
Data source
Data from DeBank.
Use it
Your AI assistant does the work: it finds this tool, shows you the price first, runs it, and you are charged when the run finishes. There is nothing to set up for this tool in particular.
Connect once and your AI can find and run this tool, and any other it needs.
For developers: the calls your assistant makes
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/wallet-protocols" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/wallet-protocols" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/wallet-protocols", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/wallet-protocols", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0164 |
- Updated
- Nov 6, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"address"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Results per page. Example: 20. Defaults to 20."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset. Example: 0. Defaults to 0."
},
"address": {
"type": "string",
"minLength": 1,
"description": "Wallet address — must be a raw 0x-prefixed hex address, not an ENS name. Example: 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"chain": {
"type": "string",
"description": "Lowercase chain slug the position lives on, e.g. 'ethereum', 'base', 'polygon'."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The position's own type label, e.g. 'Liquidity Pool', 'Yield', 'Lending', 'Staked', 'Deposit', 'Rewards' -- not a person's name. A single protocol can repeat the same label many times (observed: 25 separate 'Deposit' entries under one Sablier protocol entry, one per open stream)."
},
"balance_usd": {
"type": "number"
},
"reward_tokens": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"chain": {
"type": "string"
},
"price": {
"type": "number"
},
"amount": {
"type": "number"
},
"symbol": {
"type": "string"
},
"token_address": {
"type": "string"
}
},
"additionalProperties": true
},
"description": "Tokens this position is accruing as rewards. OMITTED entirely on positions that pay no rewards -- observed present on liquidity-pool/farming positions (iZUMi, Uniswap V3, SushiSwap V3) and also on at least one lending position (the Aave V2 lending position carries an AAVE reward token) but absent on plain yield/deposit positions (Yearn V3 yield, every Sablier deposit) -- treat its absence as 'no rewards for this position', not as missing data."
},
"supply_tokens": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The token's own name, e.g. 'Wrapped Ether'."
},
"chain": {
"type": "string"
},
"price": {
"type": "number",
"description": "USD price per unit; observed as 0 for illiquid/unpriced tokens."
},
"amount": {
"type": "number"
},
"symbol": {
"type": "string"
},
"token_address": {
"type": "string",
"description": "The token's onchain contract address (not a personal or wallet address). Usually a 0x-prefixed hex address, but observed as a bare chain slug ('eth', 'base', 'op') for a chain's native gas token, which has no contract address of its own."
}
},
"additionalProperties": true
},
"description": "Tokens supplied into this position."
}
},
"additionalProperties": true
},
"description": "One entry per distinct position held in this protocol."
},
"total_usd": {
"type": "number",
"description": "Sum of every position's balance_usd for this protocol."
},
"protocol_name": {
"type": "string",
"description": "The DeFi protocol's own name, e.g. 'Uniswap V3', 'Aave V2', 'Sablier'."
}
},
"additionalProperties": true
},
"description": "One entry per DeFi protocol the wallet holds a position in, on this page."
},
"meta": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"total": {
"type": "integer",
"description": "Total protocol entries across every page, not just this one."
},
"cached": {
"type": "boolean"
},
"offset": {
"type": "integer"
}
},
"description": "Pagination metadata for this call.",
"additionalProperties": true
}
},
"description": "The wallet's DeFi protocol positions, one entry per protocol the address touches.",
"additionalProperties": true
}