Resolve an address, a mint or a link to the token it is
onchain_agent_resolve_tokenUSE WHEN a person or an agent has dropped a contract address, a Solana mint or a link and the next step needs to know what it IS before anything else happens: chain, address, name, symbol, decimals, token program, the main pool and that pool's liquidity, and the token's USD price. Read-only. NOT FOR what the chain says about the token's authorities, extensions and liquidity (use onchain_agent_preflight with token instead), a price source, or a swap quote (use onchain_agent_route_swap).
INPUT: a contract address (0x…) on Base, BNB Chain, Arbitrum, Polygon and Solana — pass chain (base, bnb, arbitrum, polygon, solana) to say which, or a bare 0x is read as Base and the answer says so — a Solana mint, or a link from dexscreener.com, geckoterminal.com, birdeye.so, pump.fun, gmgn.ai, basescan.org, bscscan.com, arbiscan.io, polygonscan.com, solscan.io, jup.ag, app.uniswap.org, aerodrome.finance, zora.co, clanker.world. The token is taken from the link's path with no request for the link itself; a DexScreener or GeckoTerminal pool link is resolved through their public API to the pool's BASE token (not the quote token). A link on another chain or another site, a profile page, or a bare symbol is refused with the reason — nothing is guessed. address/mint/token/url/link/contract are read as input, labelled; {} answers needs_input.
OUTPUT: every figure has an entry in sources naming where it was read and when; every null has an entry in gaps saying why (null is unknown, never zero). Decimals and the token program come from the chain when it answers. On Solana the mint's mint authority, freeze authority and Token-2022 extensions are read from the chain ({ set: false } is a revoked authority). Price and liquidity are ONE pool's listing from DexScreener (GeckoTerminal as a fallback) at the time given — never summed across pools or venues, not a quote, not a fill, not a price source: it is there to identify the token. Answers are held for 60 seconds per token.
RULE ENFORCED: this describes and recommends nothing, and says nothing about whether a token is safe. It is the step BEFORE evidence: run onchain_agent_preflight on the same token for what the chain says about its authorities, extensions and liquidity, and re-read decimals and the token program on-chain before signing anything.
RETURNS (json): { chain (one of: base, bnb, arbitrum, polygon, solana), chain_assumed (true only when a bare 0x address named no chain and Base was assumed), address, name, symbol, decimals, program: "erc20" | "spl" | "token-2022" | null, price_usd, liquidity_usd, main_pool: { venue, labels, address, quote_token: { address, symbol } } | null, mint_authority?, freeze_authority?, token2022_extensions? (Solana), sources: [{ field, source, as_of }], gaps: [{ field, reason }], resolved_from: { via, pool? }, checked_at, caveat, meta: { signature } }. Nothing at the address returns { resolved: false, code: "not_found", error }. Labels (rule, note…) are inside the signed body.
Example: { input: "https://dexscreener.com/base/0xc9034c3e7f58003e6ae0c8438e7c8f4598d5acaa" }
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Read as `input`. | |
| link | No | Read as `input`. | |
| mint | No | Read as `input`. | |
| chain | No | Optional: base, bnb, arbitrum, polygon, solana (any common spelling: 'BNB Chain', 'bsc', 'matic', 'arbitrum one'). Must agree with the input; it supplies the chain a bare 0x address or a link leaves open (a Uniswap link with no chain). A bare 0x with no chain at all is read as Base. | |
| input | No | What to resolve: a contract address (0x…) on Base, BNB Chain, Arbitrum, Polygon and Solana (name the chain; a bare 0x with none is read as Base and says so), a Solana mint (base58), or a link from dexscreener.com, geckoterminal.com, birdeye.so, pump.fun, gmgn.ai, basescan.org, bscscan.com, arbiscan.io, polygonscan.com, solscan.io, jup.ag, app.uniswap.org, aerodrome.finance, zora.co, clanker.world. A DexScreener or GeckoTerminal POOL link resolves to the pool's base token. A bare symbol is refused, never guessed. | |
| token | No | Read as `input`. | |
| address | No | Read as `input`. | |
| contract | No | Read as `input`. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |