Skip to main content
Glama

query_blockchain_sql

Query Ethereum blockchain data by combining SQL queries and direct dataset downloads in one step. Supports table references or explicit read_parquet() calls for precise data analysis.

Instructions

Download blockchain data and run SQL query in a single step

CONVENIENCE FUNCTION: This combines query_dataset and query_sql into one call.

You can write SQL queries using either approach:
1. Simple table references: "SELECT * FROM blocks LIMIT 10"
2. Explicit read_parquet: "SELECT * FROM read_parquet('/path/to/file.parquet') LIMIT 10"

DATASET-SPECIFIC PARAMETERS:
For datasets that require specific address parameters (like 'balances', 'erc20_transfers', etc.),
ALWAYS use the 'contract' parameter to pass ANY Ethereum address. For example:

- For 'balances' dataset: Use contract parameter for the address you want balances for
  query_blockchain_sql(
      sql_query="SELECT * FROM balances",
      dataset="balances",
      blocks='1000:1010',
      contract='0x123...'  # Address you want balances for
  )

Examples:
```
# Using simple table name
query_blockchain_sql(
    sql_query="SELECT * FROM blocks LIMIT 10",
    dataset="blocks",
    blocks_from_latest=100
)

# Using read_parquet() (the path will be automatically replaced)
query_blockchain_sql(
    sql_query="SELECT * FROM read_parquet('/any/path.parquet') LIMIT 10",
    dataset="blocks",
    blocks_from_latest=100
)
```

ALTERNATIVE WORKFLOW (more control):
If you need more control, you can separate the steps:
1. Download data: result = query_dataset('blocks', blocks_from_latest=100, output_format='parquet')
2. Inspect schema: schema = get_sql_table_schema(result['files'][0])
3. Run SQL query: query_sql("SELECT * FROM blocks", files=result['files'])

Args:
    sql_query: SQL query to execute - using table names or read_parquet()
    dataset: The specific dataset to query (e.g., 'transactions', 'logs', 'balances')
             If None, will be extracted from the SQL query
    blocks: Block range specification as a string (e.g., '1000:1010')
    start_block: Start block number (alternative to blocks)
    end_block: End block number (alternative to blocks)
    use_latest: If True, query the latest block
    blocks_from_latest: Number of blocks before the latest to include
    contract: Contract address to filter by - IMPORTANT: Use this parameter for ALL address-based filtering
      regardless of the parameter name in the native cryo command (address, contract, etc.)
    force_refresh: Force download of new data even if it exists
    include_schema: Include schema information in the result
    
Returns:
    SQL query results and metadata

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
blocksNo
blocks_from_latestNo
contractNo
datasetNo
end_blockNo
force_refreshNo
include_schemaNo
sql_queryYes
start_blockNo
use_latestNo

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/z80dev/cryo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server