Skip to main content
Glama

Bitquery: Crypto & Blockchain Data

Matic Address Flow Summary

matic_address_flow_summary
Read-only

ADDRESS FLOW SUMMARY / top counterparties: who a Polygon (matic, POL, MATIC, PoS) address sends funds TO and receives funds FROM, in one call — profile (sent/received transfer counts, distinct receivers/senders) + TOP receivers AND TOP senders. Collapses address_profile + trace_next_hop(out) + an incoming convergence into a single call — call this FIRST when triaging a hop. Returns a computed Role: receive_only (no outgoing transfer in the period) / send_only (no incoming one) / no_transfers (neither) / consolidator (senders ≫ receivers) / distributor (receivers ≫ senders) / hub (thousands of both — don't trace deeper) / relay. The profile counts and Role ALWAYS cover all tokens: currency and contract narrow only the top arrays (matic_address_profile applies them to every count). Pass the returned counterparties to labels_for_addresses to identify them. For raw rows use matic_transfers_in/out; for one direction's full ranking use matic_trace_next_hop. READING THE TOP ARRAYS: one entry per (counterparty, TOKEN) — the same address repeats once per token it moved. Symbols are not unique; identify a token by contract. On a very high-traffic address (an exchange or bridge hub) this aggregates a lot of history and can take tens of seconds — narrow it with contract or currency to one token to make it far faster. Amounts here are TOKEN UNITS, never USD - no USD value is available in this data, so there is no usd filter and totals for different tokens must not be compared or added together. For a ranking you can reason about, pin ONE token with contract, or bound the range with min_amount / max_amount. Symbol_NonAscii = 1 flags a symbol that is not plain ASCII: normal for CJK / emoji names, but also how a scam token impersonates a major one with Cyrillic or Greek look-alike letters - never treat such a token as the asset it resembles. In the top arrays it is the symbol_nonascii field of each entry. after_time / before_time bound BOTH the profile counts and the top arrays to one period (without them both cover the whole history). Counts and arrays are the transfers OF THIS ADDRESS itself. A bot account signs its transactions while a contract it controls holds and moves the tokens - the contract its transactions go TO, or a separate one - so a very active trader (the trading tools' Trader_Address is the signer) can show few or no outgoing transfers here. To find the address that really moves its tokens, open one of its Tx_Hash values from trader_trades with matic_tx_transfers, then trace that address (matic_transactions lists where this account's transactions go). A transaction's own transfer is TOP-LEVEL, not internal, and is always counted. POL moved by contract code deeper inside a transaction (an internal transfer) is left out unless you pass include_internal=1. For the full labelled list in USD, totals by label type, or a set of addresses → counterparties.

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": "matic_address_flow_summary"
  }
}

Input Schema

NameRequiredDescriptionDefault
top_nNoHow many top receivers and top senders to return (each).
formatNoShape of the returned data. "rows" (the default) returns one item per row. "columnar" returns a single item, {"columns":[...],"rows":[[value,...],...]}, naming the columns once and listing each row's values in that order; it is more compact for large results and carries the same values.rows
addressYesWallet/contract address, 0x-hex (case-insensitive).
contractNoRestrict the top arrays to ONE exact token by its contract address (0x-hex, case-insensitive) — the reliable way to pin a token, since a currency symbol also matches clone tokens. The profile counts and Role still cover all tokens. Empty = no token filter.
currencyNoRestrict the top receiver/sender arrays to one currency symbol (e.g. "USDT"). Empty = all. A symbol is NOT unique — clone/scam tokens reuse "USDC"/"USDT" and their broken decimals can make a fake token outrank the real one, so check the returned contract before trusting the ranking. No backslashes.
after_timeNoOnly activity at/after this UTC time - bounds the profile counts AND the top arrays. Empty = whole history. Format: YYYY-MM-DD, YYYY-MM-DD HH:MM[:SS], ISO-8601 like 2026-09-20T00:00:00Z (fraction or +02:00 offset allowed) or 10-digit unix seconds.
max_amountNoMaximum total amount for a counterparty to appear in the top arrays. 0 (default) = no upper bound. Amounts are in each token's own units and are NOT comparable across tokens, so a token with inflated or wrong decimals can total billions of units and push the real counterparties out of the top arrays - cap it here, or pin one token with contract.
min_amountNoMinimum total amount for a counterparty to appear in the top arrays, in that token's own units. 0 (default) = no lower bound. Set it above 0 to drop dust and zero-value address-poisoning transfers (look-alike addresses that send 0 of a token so they show up next to the real counterparties).
before_timeNoOnly activity strictly before this UTC time - bounds the profile counts AND the top arrays. Empty = up to now. Format: YYYY-MM-DD, YYYY-MM-DD HH:MM[:SS], ISO-8601 like 2026-09-20T00:00:00Z (fraction or +02:00 offset allowed) or 10-digit unix seconds.
include_internalNo0 (default) = top-level transfers only - the transfer a transaction makes itself, plus token transfers. 1 = also count POL moved by contract code deeper inside a transaction (an internal transfer, for example through a batch sender or a withdrawal contract). Only 0 or 1.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / format
      Added value: +{
      +  "default": "rows",
      +  "description": "Shape of the returned data. \"rows\" (the default) returns one item per row. \"columnar\" returns a single item, {\"columns\":[...],\"rows\":[[value,...],...]}, naming the columns once and listing each row's values in that order; it is more compact for large results and carries the same values.",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Goes well past the readOnlyHint annotation: latency warning on high-traffic exchange/bridge addresses, the contract-vs-signer blind spot for bot accounts, the internal-vs-top-level transfer rule, and the explicit statement that amounts are token units with no USD value available. The only shortfall is that the returned object's field list is described piecemeal rather than enumerated, so an agent cannot fully predict the payload shape.

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?

Front-loaded with the core purpose and routing rule, and most sentences carry non-obvious payload (Role taxonomy, scam-token look-alikes, dust filtering). However it is very long, repeats the token-units/no-USD point twice, and ends on a truncated fragment ("For the full labelled list in USD... → counterparties.") that never resolves into a usable instruction.

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?

No output schema exists, yet the description explains the returned profile counts, the computed Role values with their meanings, the one-entry-per-(counterparty, token) semantics, and the symbol_nonascii field location. For a 10-parameter aggregation tool this is enough for an agent to call it and interpret the result correctly.

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 coverage is 100%, so the schema already carries per-parameter documentation and the baseline applies. The description adds real cross-parameter insight — that currency/contract narrow only the top arrays while counts and Role always cover all tokens, and that after_time/before_time bound both — but most individual parameter meaning is duplicated from the schema itself.

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?

States a specific verb and resource: who a Polygon address sends funds TO and receives funds FROM, plus the profile/Role composition, in one call. It explicitly positions itself against named siblings (matic_address_profile, matic_trace_next_hop, matic_transfers_in/out, labels_for_addresses), so an agent can distinguish it without opening another 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?

Gives an explicit routing rule — "call this FIRST when triaging a hop" — and pairs each alternative with the condition that selects it (raw rows → matic_transfers_in/out; one direction's full ranking → matic_trace_next_hop; identification → labels_for_addresses). It also warns when NOT to go deeper (hub role: "don't trace deeper").

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.