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:
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 pathsExplorar 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 dataEjecutar 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 .
Related MCP server: MCP Blockchain Query Server
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-mcpRequisitos
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
Ejecute
claude mcp addpara obtener un mensaje interactivo.Introduzca
uvxcomo comando a ejecutar.Ingrese
cryo-mcp --rpc-url <ETH_RPC_URL> [--data-dir <DATA_DIR>]como argumentosComo alternativa, proporcione
ETH_RPC_URLyCRYO_DATA_DIRcomo 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 bloqueblocks_from_latest(int, opcional): Número de bloques desde el último a incluircontract(str, opcional): Dirección del contrato por la que filtraroutput_format(str, opcional): Formato de salida ('json', 'csv', 'parquet')include_columns(lista, opcional): columnas que se incluirán junto con los valores predeterminadosexclude_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 buscarsample_start_block(int, opcional): bloque de inicio para datos de muestrasample_end_block(int, opcional): Fin del bloque para datos de muestrause_latest_sample(bool, opcional): utiliza el último bloque para la muestrasample_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 ejecutarfiles(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 ejecutardataset(str, opcional): el conjunto de datos a consultar (por ejemplo, 'bloques', 'transacciones')blocks(str, opcional): Especificación del rango de bloquesstart_block(int, opcional): Número de bloque de inicioend_block(int, opcional): Número de bloque finaluse_latest(bool, opcional): si es verdadero, consulta el último bloqueblocks_from_latest(int, opcional): Número de bloques antes del último a incluircontract(str, opcional): Dirección del contrato por la que filtrarforce_refresh(bool, opcional): fuerza la descarga de nuevos datos incluso si existeninclude_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 comandoCRYO_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 documentationEjecutar 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