Skip to main content
Glama

Bitquery: Crypto & Blockchain Data

Token Supply

token_supply
Read-only

Latest SUPPLY only (total / circulating / max), market cap and FDV for ONE token or a BATCH of up to 50 tokens by address (+ optional chain). Use when the user asks ONLY about supply / market cap, not price. Does NOT return price / OHLC / volume — use token_price for the current price, token_ohlcv for a series; for a well-known coin with no chain pinned use currency_supply.

Backed by Bitquery's DEX index across Ethereum, Arbitrum, Base, Matic, Optimism, Binance Smart Chain, Tron, Solana, Robinhood and Arc — works for rare / long-tail / newly-launched tokens. Use find_tokens / find_token_by_address first if you only have a symbol and need to resolve the correct address + blockchain.

BATCH: several addresses (up to 50, separated by |, , or spaces). Every row carries Addresses_Requested, Addresses_Invalid and Addresses_Used; the rule is in the address parameter; Addresses_Not_Found lists the addresses looked up that returned no row ([] when every one was found; when nothing is found the result is empty, so no row carries the list). One row per (address, chain), in the order given; an address with no trade in the last 7 days returns no row. With blockchain empty every chain the address trades on gets its own row. An empty address is the chain's native coin (see that parameter; on Solana wrapped SOL, on Arc none).

VALUATION PRICE — Market_Cap_Usd and Fdv_Usd are Valuation_Price_Usd x the supply, so every valuation in a row can be recomputed from a price in the same row. Valuation_Price_Usd is the average price of the newest hour in which real volume changed hands, NOT the latest single swap: one odd or tiny swap prints a price nobody could trade at, and an hour can close with no real volume behind it at all, which was putting valuations out by a factor of thousands. It can therefore differ from the Last_Price_Usd that token_price returns for the same token — that one is the latest swap. Quote Valuation_Price_Usd whenever you quote a market cap or an FDV. The same basis is used by token_price, token_supply, currency_price, currency_supply, find_tokens, find_token_by_address, trending_tokens, new_tokens and launch_cohort, so a valuation does not change from one of them to the next. Which hour counts as real volume is judged against the volume of the period a tool reads, so a tool that looks further back can pick an older hour than one reading only the last few hours; for something whose recent trading is thin the two valuations can differ, and the wider one is the better-supported figure.

MARKET CAP vs FDV — Market_Cap_Usd is circulating-supply based and is returned ONLY when a circulating supply is actually known for the token; otherwise it is null. Most long-tail tokens have no circulating-supply figure, so null is normal and does NOT mean the token is untraded — read Fdv_Usd (the total-supply valuation) instead, and call it FDV, never "market cap". Fdv_Usd is itself null when even the total supply is unknown — then no valuation at all is available for this token, and Total_Supply / Circulating_Supply are null too. A supply figure that is not known is always null (unknown), never 0. A circulating supply reported above the total supply is capped at the total, and the market cap then equals the FDV.

BOTH valuations (token and Asset_* alike) are additionally WITHHELD (null, with a non-empty Valuation_Warning) when the supply behind them is not credible: a supply far larger than any real token, or a resulting valuation larger than any plausible market. Mint-and-burn tokens report exactly that — supply parked on a burn address (0x…dead, 0x0) still counts in Total_Supply, so the raw valuation lands many orders of magnitude above anything real. When Valuation_Warning is set, report the valuation as unavailable and say why — do NOT rebuild it yourself from supply x price. To see how much of the supply is burned, call the chain's <chain>_token_holders tool (chain_capabilities lists the chains that have one).

TOKEN vs ASSET — Total_Supply, Circulating_Supply, Max_Supply, Market_Cap_Usd and Fdv_Usd are THIS token's own figures. They are null for a token that stands for a multi-chain or bridged asset (WETH, WBTC, USDC, LINK on each of its chains, ETH on a layer-2): the data holds only the whole asset's supply for it. Asset_Currency_Id, Asset_Total_Supply, Asset_Circulating_Supply, Asset_Market_Cap_Usd and Asset_Fdv_Usd always hold the whole asset's figures (equal to the token's own when the token is its own asset) — use them for "market cap of USDC / WETH" and say they are the asset's. When the asset exists on one chain only (e.g. PUMP), Asset_Fdv_Usd is effectively this token's FDV. A bridged copy listed under its own id but carrying the asset's supply also gets a Valuation_Warning.

Symbol_NonAscii = 1 flags a Token_Symbol that is not plain ASCII. That is normal for CJK / emoji token names, but it is also how a scam token impersonates a major one: Cyrillic or Greek look-alike letters make a fake USDT / SOL / BTC read identically to a human. Never treat such a token as the asset it resembles — say the symbol is a look-alike.

IF THE USER IS ASKING ABOUT A WELL-KNOWN CRYPTOCURRENCY (USDC, USDT, WETH, WBTC, BTC, ETH, SOL, DAI, …) AND HAS NOT PINNED A SPECIFIC BLOCKCHAIN OR CONTRACT, prefer currency_supply instead — it aggregates every token of that asset across every indexed chain and gives wider coverage than this single-contract query.

Names longer than 128 characters and symbols longer than 32 are cut and end in … (spam tokens carry names of up to 34,000 characters).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "address": "<address>"
    },
    "name": "token_supply"
  }
}

Input Schema

NameRequiredDescriptionDefault
addressYesToken contract / mint address, or several. Up to 50 addresses, separated by `|`, `,` or spaces. An empty entry (a leading, trailing or doubled separator) is ignored - it counts neither as requested nor as invalid. EVM addresses (0x + 40 hex characters) are matched case-insensitively; Solana (32-44 base58 characters) and Tron (base58 starting with T) addresses are case-sensitive. Every row carries Addresses_Requested (distinct entries; duplicates and differently-cased EVM addresses count once), Addresses_Invalid (entries that are not an address of the requested chain, or of any chain when none is requested — skipped, never looked up) and Addresses_Used (addresses looked up, at most 50); valid addresses after the 50th are ignored, so when Addresses_Used + Addresses_Invalid is below Addresses_Requested, call again with the rest. A value without any well-formed address is refused; one whose well-formed addresses all belong to another chain than the requested one is answered with an error. Empty (or only separators) = the chain's native coin — pass blockchain with it. ETH, BNB, MATIC and TRX come back with an empty Token_Address (as find_tokens returns them); on Solana the row is wrapped SOL (So11111111111111111111111111111111111111112, symbol WSOL, SOL's price); Arc has no native-coin row (its gas token USDC is the token 0x3600000000000000000000000000000000000000) and is answered with an error.
blockchainNoToken_Network — Ethereum (eth), Arbitrum (arb, arbitrum one), Base, Matic (polygon, polygon pos), Optimism (op, op mainnet), Binance Smart Chain (bsc, bnb, bnb chain, bnb smart chain), Tron (trx), Solana (sol), Robinhood (rh) or Arc (arc network, circle arc); case-insensitive, any other value is rejected. Applies to every address in the call. Empty (default) = every chain, one row per chain the address trades on.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint/destructiveHint, so the description carries the real behavioral burden — and it does: the valuation price basis (average of newest hour with real volume, not latest swap), when valuations are nulled with a Valuation_Warning, burn-address supply inflation, per-(address, chain) row emission, no-row-without-trade-in-7-days, and Addresses_Requested/Invalid/Used reconciliation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key routing sentence is front-loaded, which is good, but the body sprawls across many long paragraphs and re-explains the same valuation rule several times (Bitquery basis repeated across nine tools, "BOTH valuations (token and Asset_* alike)"). For a two-parameter read tool this is well past the size needed, and some sentences are convoluted rather than information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain the return contract itself — and it does: Market_Cap_Usd/Fdv_Usd null conditions, Valuation_Price_Usd, Total_Supply/Circulating_Supply/Max_Supply, the Asset_* parallel fields, and the Addresses_* batch columns. Nothing an agent needs to interpret results correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the address parameter already documents separators, casing rules, the 50 cap and Addresses_Invalid/Used semantics, so baseline is 3. The description largely restates that batch contract rather than adding new syntax or format meaning, so it earns no premium over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the exact resource and its scope (latest supply total/circulating/max plus market cap and FDV, single token or batch up to 50) and immediately names what it is not: price. Sibling tools token_price, token_ohlcv and currency_supply are named with the condition that selects each, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ("asks ONLY about supply / market cap, not price"), explicit when-not, and explicit alternatives for each excluded case. It also prescribes a prerequisite workflow (find_tokens / find_token_by_address when only a symbol is available) and a preferred alternative (currency_supply) for well-known assets with no chain pinned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.