Cryo MCP Server

local-only server

The server can only run on the client’s local machine because it depends on local resources.

Integrations

  • Enables SQL queries against blockchain data through DuckDB, supporting data exploration, schema inspection, and complex analytics on downloaded blockchain datasets with various filtering and aggregation capabilities.

  • Provides blockchain data extraction capabilities via an API server, allowing querying of block, transaction, and log data from Ethereum with support for block range specifications, contract filtering, and multiple output formats.

Crio MCP 🧊

Un servidor de Protocolo de Finalización de Modelos (MCP) para la herramienta de extracción de datos de blockchain Cryo .

Cryo MCP le permite acceder a las poderosas capacidades de extracción de datos de blockchain de Cryo a través de un servidor API que implementa el protocolo MCP, lo que facilita la consulta de datos de blockchain desde cualquier cliente compatible con MCP.

Para usuarios de LLM: Guía de flujo de trabajo de consultas SQL

Al utilizar este servidor MCP para ejecutar consultas SQL en datos de blockchain, siga este flujo de trabajo:

  1. Descargar datos con query_dataset :
    result = query_dataset( dataset="blocks", # or "transactions", "logs", etc. blocks="15000000:15001000", # or use blocks_from_latest=100 output_format="parquet" # important: use parquet for SQL ) files = result.get("files", []) # Get the returned file paths
  2. Explorar el esquema con get_sql_table_schema :
    # Check what columns are available in the file schema = get_sql_table_schema(files[0]) # Now you can see all columns, data types, and sample data
  3. Ejecutar SQL con query_sql :
    # Option 1: Simple table reference (DuckDB will match the table name to file) sql_result = query_sql( query="SELECT block_number, timestamp, gas_used FROM blocks", files=files # Pass the files from step 1 ) # Option 2: Using read_parquet() with explicit file path sql_result = query_sql( query=f"SELECT block_number, timestamp, gas_used FROM read_parquet('{files[0]}')", files=files # Pass the files from step 1 )

Alternativamente, utilice el enfoque combinado con query_blockchain_sql :

# Option 1: Simple table reference result = query_blockchain_sql( sql_query="SELECT * FROM blocks", dataset="blocks", blocks_from_latest=100 ) # Option 2: Using read_parquet() result = query_blockchain_sql( sql_query="SELECT * FROM read_parquet('/path/to/file.parquet')", # Path doesn't matter dataset="blocks", blocks_from_latest=100 )

Para obtener un ejemplo completo y funcional, consulte examples/sql_workflow_example.py .

Características

  • Acceso completo al conjunto de datos criogénicos : consulte cualquier conjunto de datos criogénicos a través de un servidor API
  • Integración con MCP : funciona a la perfección con los clientes de MCP
  • Opciones de consulta flexibles : compatibilidad con todas las principales opciones de filtrado y salida de Cryo
  • Opciones de rango de bloques : consulta bloques específicos, el último bloque o rangos relativos
  • Filtrado de contratos : Filtrar datos por dirección del contrato
  • Acceso al último bloque : fácil acceso a los últimos datos del bloque de Ethereum
  • Múltiples formatos de salida : compatibilidad con JSON, CSV y Parquet
  • Información del esquema : obtenga esquemas de conjuntos de datos detallados y datos de muestra
  • Consultas SQL : ejecute consultas SQL directamente contra los datos de blockchain descargados

Instalación (opcional)

Esto no es necesario si va a ejecutar la herramienta con uvx directamente.

# install with UV (recommended) uv tool install cryo-mcp

Requisitos

  • Python 3.8+
  • ultravioleta
  • Una instalación de Cryo en funcionamiento
  • Acceso a un punto final de Ethereum RPC
  • DuckDB (para la funcionalidad de consulta SQL)

Inicio rápido

Uso con Claude Code

  1. Ejecute claude mcp add para obtener un mensaje interactivo.
  2. Introduzca uvx como comando a ejecutar.
  3. Ingrese cryo-mcp --rpc-url <ETH_RPC_URL> [--data-dir <DATA_DIR>] como argumentos
  4. Como alternativa, proporcione ETH_RPC_URL y CRYO_DATA_DIR como variables de entorno.

Las nuevas instancias de claude ahora tendrán acceso a cryo según lo configurado para llegar a su punto final RPC y almacenar datos en el directorio especificado.

Herramientas disponibles

Cryo MCP expone las siguientes herramientas MCP:

list_datasets()

Devuelve una lista de todos los conjuntos de datos Cryo disponibles.

Ejemplo:

client.list_datasets()

query_dataset()

Consulta un conjunto de datos criogénicos con varias opciones de filtrado.

Parámetros:

  • dataset (str): el nombre del conjunto de datos a consultar (por ejemplo, 'bloques', 'transacciones', 'registros')
  • blocks (str, opcional): Especificación del rango de bloques (por ejemplo, '1000:1010')
  • start_block (int, opcional): Número de bloque de inicio (alternativa a bloques)
  • end_block (int, opcional): Número de bloque final (alternativa a bloques)
  • use_latest (bool, opcional): si es verdadero, consulta el último bloque
  • blocks_from_latest (int, opcional): Número de bloques desde el último a incluir
  • contract (str, opcional): Dirección del contrato por la que filtrar
  • output_format (str, opcional): Formato de salida ('json', 'csv', 'parquet')
  • include_columns (lista, opcional): columnas que se incluirán junto con los valores predeterminados
  • exclude_columns (lista, opcional): columnas para excluir de los valores predeterminados

Ejemplo:

# Get transactions from blocks 15M to 15.01M client.query_dataset('transactions', blocks='15M:15.01M') # Get logs for a specific contract from the latest 100 blocks client.query_dataset('logs', blocks_from_latest=100, contract='0x1234...') # Get just the latest block client.query_dataset('blocks', use_latest=True)

lookup_dataset()

Obtenga información detallada sobre un conjunto de datos específico, incluido el esquema y los datos de muestra.

Parámetros:

  • name (str): El nombre del conjunto de datos a buscar
  • sample_start_block (int, opcional): bloque de inicio para datos de muestra
  • sample_end_block (int, opcional): Fin del bloque para datos de muestra
  • use_latest_sample (bool, opcional): utiliza el último bloque para la muestra
  • sample_blocks_from_latest (int, opcional): Número de bloques desde el último para la muestra

Ejemplo:

client.lookup_dataset('logs')

get_latest_ethereum_block()

Devuelve información sobre el último bloque de Ethereum.

Ejemplo:

client.get_latest_ethereum_block()

Herramientas de consulta SQL

Cryo MCP incluye varias herramientas para ejecutar consultas SQL en datos de blockchain:

query_sql()

Ejecute una consulta SQL contra los datos de blockchain descargados.

Parámetros:

  • query (str): consulta SQL a ejecutar
  • files (lista, opcional): Lista de rutas de archivos de Parquet para consultar. Si no hay ninguna, se usarán todos los archivos del directorio de datos.
  • include_schema (bool, opcional): si se debe incluir información del esquema en el resultado

Ejemplo:

# Run against all available files client.query_sql("SELECT * FROM read_parquet('/path/to/blocks.parquet') LIMIT 10") # Run against specific files client.query_sql( "SELECT * FROM read_parquet('/path/to/blocks.parquet') LIMIT 10", files=['/path/to/blocks.parquet'] )

query_blockchain_sql()

Consulta datos de blockchain usando SQL y descarga automáticamente cualquier dato requerido.

Parámetros:

  • sql_query (str): consulta SQL a ejecutar
  • dataset (str, opcional): el conjunto de datos a consultar (por ejemplo, 'bloques', 'transacciones')
  • blocks (str, opcional): Especificación del rango de bloques
  • start_block (int, opcional): Número de bloque de inicio
  • end_block (int, opcional): Número de bloque final
  • use_latest (bool, opcional): si es verdadero, consulta el último bloque
  • blocks_from_latest (int, opcional): Número de bloques antes del último a incluir
  • contract (str, opcional): Dirección del contrato por la que filtrar
  • force_refresh (bool, opcional): fuerza la descarga de nuevos datos incluso si existen
  • include_schema (bool, opcional): incluye información del esquema en el resultado

Ejemplo:

# Automatically downloads blocks data if needed, then runs the SQL query client.query_blockchain_sql( sql_query="SELECT block_number, gas_used, timestamp FROM blocks ORDER BY gas_used DESC LIMIT 10", dataset="blocks", blocks_from_latest=100 )

list_available_sql_tables()

Enumere todas las tablas disponibles que se pueden consultar con SQL.

Ejemplo:

client.list_available_sql_tables()

get_sql_table_schema()

Obtenga el esquema para un archivo parquet específico.

Parámetros:

  • file_path (str): Ruta al archivo parquet

Ejemplo:

client.get_sql_table_schema("/path/to/blocks.parquet")

get_sql_examples()

Obtenga ejemplos de consultas SQL para diferentes conjuntos de datos de blockchain.

Ejemplo:

client.get_sql_examples()

Opciones de configuración

Al iniciar el servidor Cryo MCP, puede utilizar estas opciones de línea de comandos:

  • --rpc-url URL : URL de RPC de Ethereum (anula la variable de entorno ETH_RPC_URL)
  • --data-dir PATH : Directorio para almacenar los datos descargados (anula la variable de entorno CRYO_DATA_DIR, el valor predeterminado es ~/.cryo-mcp/data/)

Variables de entorno

  • ETH_RPC_URL : URL de RPC de Ethereum predeterminada que se utilizará cuando no se especifique mediante la línea de comando
  • CRYO_DATA_DIR : Directorio predeterminado para almacenar los datos descargados cuando no se especifica mediante la línea de comando

Uso avanzado

Consultas SQL contra datos de blockchain

Cryo MCP le permite ejecutar potentes consultas SQL contra datos de blockchain, combinando la flexibilidad de SQL con las capacidades de extracción de datos de Cryo:

Flujo de consulta SQL de dos pasos

Puede dividir la extracción y consulta de datos en dos pasos separados:

# Step 1: Download data and get file paths download_result = client.query_dataset( dataset="transactions", blocks_from_latest=1000, output_format="parquet" ) # Step 2: Use the file paths to run SQL queries file_paths = download_result.get("files", []) client.query_sql( query=f""" SELECT to_address as contract_address, COUNT(*) as tx_count, SUM(gas_used) as total_gas, AVG(gas_used) as avg_gas FROM read_parquet('{file_paths[0]}') WHERE to_address IS NOT NULL GROUP BY to_address ORDER BY total_gas DESC LIMIT 20 """, files=file_paths )

Flujo de consulta SQL combinado

Para mayor comodidad, también puede utilizar la función combinada que maneja ambos pasos:

# Get top gas-consuming contracts client.query_blockchain_sql( sql_query=""" SELECT to_address as contract_address, COUNT(*) as tx_count, SUM(gas_used) as total_gas, AVG(gas_used) as avg_gas FROM read_parquet('/path/to/transactions.parquet') WHERE to_address IS NOT NULL GROUP BY to_address ORDER BY total_gas DESC LIMIT 20 """, dataset="transactions", blocks_from_latest=1000 ) # Find blocks with the most transactions client.query_blockchain_sql( sql_query=""" SELECT block_number, COUNT(*) as tx_count FROM read_parquet('/path/to/transactions.parquet') GROUP BY block_number ORDER BY tx_count DESC LIMIT 10 """, dataset="transactions", blocks="15M:16M" ) # Analyze event logs by topic client.query_blockchain_sql( sql_query=""" SELECT topic0, COUNT(*) as event_count FROM read_parquet('/path/to/logs.parquet') GROUP BY topic0 ORDER BY event_count DESC LIMIT 20 """, dataset="logs", blocks_from_latest=100 )

Nota : Para consultas SQL, utilice siempre output_format="parquet" al descargar datos para garantizar un rendimiento óptimo con DuckDB. Al usar query_blockchain_sql , consulte las rutas de archivo directamente en su SQL mediante la función read_parquet() .

Consultas con rangos de bloques

Cryo MCP admite toda la sintaxis de especificación de bloques de Cryo:

# Using block numbers client.query_dataset('transactions', blocks='15000000:15001000') # Using K/M notation client.query_dataset('logs', blocks='15M:15.01M') # Using offsets from latest client.query_dataset('blocks', blocks_from_latest=100)

Filtrado de contratos

Filtrar registros y otros datos por dirección de contrato:

# Get all logs for USDC contract client.query_dataset('logs', blocks='16M:16.1M', contract='0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48')

Selección de columnas

Incluya sólo las columnas que necesita:

# Get just block numbers and timestamps client.query_dataset('blocks', blocks='16M:16.1M', include_columns=['number', 'timestamp'])

Desarrollo

Estructura del proyecto

cryo-mcp/ ├── cryo_mcp/ # Main package directory │ ├── __init__.py # Package initialization │ ├── server.py # Main MCP server implementation │ ├── sql.py # SQL query functionality ├── tests/ # Test directory │ ├── test_*.py # Test files ├── pyproject.toml # Project configuration ├── README.md # Project documentation

Ejecutar pruebas

uv run pytest

Licencia

Instituto Tecnológico de Massachusetts (MIT)

Créditos

  • Construido sobre la increíble herramienta Cryo de Paradigm
  • Utiliza el protocolo MCP para la comunicación API
ID: 90ftd26na5