get_nft_portfolio
Retrieve NFT portfolio across EVM chains and Solana, showing per-collection floor price and total floor value.
Instructions
List the NFT collections a wallet owns across EVM chains and/or Solana, with per-collection floor price (EVM only in v1) and a rolled-up total floor value. EVM source: Reservoir. Multi-chain fan-out via Promise.allSettled so a per-chain rate-limit or 5xx degrades to a coverage[].errored flag rather than aborting the whole call. Solana source (issue #433): Helius DAS getAssetsByOwner — pass solanaWallet (base58). Requires a Helius API key (free tier; configure via set_helius_api_key in demo mode or vaultpilot-mcp-setup for persistence). Returns per-collection rows without floor pricing in v1; Magic Eden / Tensor floor integration is tracked as a separate follow-up. At least one of wallet (EVM) / solanaWallet (Solana) must be supplied. Each row aggregates per-collection (one row per (chain, contract / collection-mint)), summing tokenCount across token IDs the wallet holds. Optional filters (EVM-only): minFloorEth drops dust / spam / scam collections; collections[] whitelists a specific contract set. Results sorted by totalFloorUsd descending; Solana rows tail-sort. NFT signing actions (list, sweep, accept-bid, transfer) deferred — separate plan; biggest UX risk because of approval / proxy patterns. Caveat surfaced in notes[]: floor != liquidation; totalFloorUsd is an upper-bound, not what the wallet would net selling everything immediately. Optional RESERVOIR_API_KEY env var avoids the anonymous-tier rate limit on multi-chain fan-out. Issue #433 Solana follow-ups (separate issues): get_nft_history Solana support, get_nft_collection Solana support, Solana floor pricing.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | No | EVM wallet to enumerate. Reservoir is the source of truth; the tool fans out one HTTP call per requested chain in parallel. Optional iff `solanaWallet` is provided — at least one of `wallet` / `solanaWallet` must be supplied. | |
| solanaWallet | No | Issue #433 — Solana wallet to enumerate via the Helius DAS `getAssetsByOwner` method. Requires a Helius API key (free tier is enough); falls back to a structured setup hint when only the public Solana mainnet endpoint is configured (DAS is not exposed there). v1 returns per-collection rows without floor pricing — Magic Eden / Tensor floor is a separate follow-up. Optional iff `wallet` is provided. | |
| chains | No | Subset of supported EVM chains to scan (ethereum / arbitrum / polygon / base / optimism). Omit to scan all five. Per-chain errors degrade rather than abort the whole call — the response's `coverage` field flags which chains errored. Ignored when only `solanaWallet` is set. | |
| minFloorEth | No | Drop NFTs whose collection floor is below this value (in the chain's native asset). Useful for filtering out airdrop / spam / scam collections that pollute the headline. Default: no filter. Solana rows have no floor pricing in v1 (#433 deferred), so this filter only affects EVM rows. | |
| collections | No | Whitelist a specific set of collection contract addresses. When supplied, ALL other collections are dropped. Useful for spot-checking a particular collection. Mutually composable with `minFloorEth` (both filters apply). EVM-only. |