Tabular models are row-and-column datasets (assets, exchanges, funding rounds, funds, ETF holdings) that answer
what is true right now. For metrics observed over time, use the timeseries tools; for
questions whose answer is written down rather than computed, start with
search_documents.
These tools are a thin layer over the REST Data API: the same models, the same
field names, the same filter operators. Anything documented for
filtering and pagination applies here too.
The workflow
1
The assistant discovers what is queryable
tabular_catalog with no arguments returns one compact entry per model: slug, name, description,
access, and columnCount. Passing search narrows that list by a case-insensitive substring match on the
name, slug, and description.Passing a model slug instead returns that one model in full, including every column:You can trigger this step explicitly:
2
The assistant reads the rows
With a model identified,
tabular_data reads it. Its arguments map onto the catalog exactly:Filters
A filter is an object of the form{field, operator, values}, and multiple filters combine with AND. A column only
accepts the operators its catalog entry lists:
Values are written as strings and coerced to the column’s type. Filters on a time column accept
YYYY-MM-DD,
RFC3339, or unix seconds. The full operator reference, including which operators each column type supports, is on
Filtering & Pagination.
What comes back
tabular_data returns one page of rows plus the totals for the whole filtered set:
Because
totalRows describes the whole filtered set, it is how you tell a complete answer from a first page. If a
result looks short, check it before concluding the data is thin.
The MCP tools cap a read more tightly than the REST API does, because every row returned is spent from the
assistant’s context window: 25 rows by default and 200 at most, against the REST API’s 100 and 1000. A larger
pageSize is clamped to 200 rather than rejected. To answer a question about a large model, filter and sort
rather than paging through it.Best practices
- Name the entity precisely. “Uniswap v4” and “Uniswap” resolve to different rows.
- Say what to rank on. “Sorted by 30-day TVL change” removes a guess that a bare “top protocols” leaves open.
- State the filter you mean. “Above $1B in TVL” becomes a server-side filter; “the big ones” does not.
- Ask what is available first when you are scoping work: “what tabular datasets cover DeFi protocols?” tells you what is queryable before you commit to a specific prompt.
When to use something else
- The answer is written down rather than computed. Use
search_documents. - You want a metric over time at a stated granularity. Use the timeseries tools.
tabular_catalog lists only the models Blockworks publishes to the public API. Within that list, reading a model
still depends on your key’s entitlements, so “that data is not available” may be an entitlements boundary rather
than a gap in coverage.