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.

クライオMCP🧊

Cryoブロックチェーン データ抽出ツール用のモデル完了プロトコル (MCP) サーバー。

Cryo MCP を使用すると、MCP プロトコルを実装する API サーバーを介して Cryo の強力なブロックチェーン データ抽出機能にアクセスできるため、MCP 対応のクライアントからブロックチェーン データを簡単に照会できます。

LLM ユーザー向け: SQL クエリ ワークフロー ガイド

この MCP サーバーを使用してブロックチェーン データに対して SQL クエリを実行する場合は、次のワークフローに従います。

  1. 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. 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. query_sqlSQL を実行します
    # 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 )

あるいは、 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 )

完全な動作例については、 examples/sql_workflow_example.pyを参照してください。

特徴

  • 完全なCryoデータセットアクセス:APIサーバーを介して任意のCryoデータセットをクエリします
  • MCP統合:MCPクライアントとシームレスに連携
  • 柔軟なクエリオプション: すべての主要なCryoフィルタリングと出力オプションをサポート
  • ブロック範囲オプション: 特定のブロック、最新のブロック、または相対範囲を照会します
  • 契約フィルタリング: 契約アドレスでデータをフィルタリング
  • 最新ブロックアクセス:最新のイーサリアムブロックデータに簡単にアクセスできます
  • 複数の出力形式: JSON、CSV、Parquet をサポート
  • スキーマ情報: 詳細なデータセットスキーマとサンプルデータを取得します
  • SQLクエリ:ダウンロードしたブロックチェーンデータに対して直接SQLクエリを実行します。

インストール(オプション)

uvxを使用してツールを直接実行する場合、これは必要ありません。

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

要件

  • Python 3.8以上
  • 紫外線
  • Cryoの稼働中の設備
  • Ethereum RPCエンドポイントへのアクセス
  • DuckDB(SQLクエリ機能用)

クイックスタート

クロードコードでの使用

  1. 対話型プロンプトを表示するにはclaude mcp add実行します。
  2. 実行するコマンドとしてuvxと入力します。
  3. 引数としてcryo-mcp --rpc-url <ETH_RPC_URL> [--data-dir <DATA_DIR>]を入力します。
  4. あるいは、代わりにETH_RPC_URLCRYO_DATA_DIR環境変数として指定します。

claudeの新しいインスタンスは、RPC エンドポイントにアクセスし、指定されたディレクトリにデータを保存するように構成されたとおりに cryo にアクセスできるようになっています。

利用可能なツール

Cryo MCP は次の MCP ツールを公開します。

list_datasets()

利用可能なすべての Cryo データセットのリストを返します。

例:

client.list_datasets()

query_dataset()

さまざまなフィルタリング オプションを使用して Cryo データセットをクエリします。

パラメータ:

  • dataset (str): クエリするデータセットの名前 (例: 'blocks'、'transactions'、'logs')
  • blocks (文字列、オプション): ブロック範囲の指定(例:'1000:1010')
  • start_block (int, オプション): 開始ブロック番号(blocks の代替)
  • end_block (int, オプション): 終了ブロック番号 (blocks の代替)
  • use_latest (bool, オプション): Trueの場合、最新のブロックを照会します
  • blocks_from_latest (int, オプション): 最新から含めるブロックの数
  • contract (文字列、オプション): フィルタリングする契約アドレス
  • output_format (str, オプション): 出力形式 ('json', 'csv', 'parquet')
  • include_columns (リスト、オプション): デフォルトと一緒に含める列
  • exclude_columns (リスト、オプション): デフォルトから除外する列

例:

# 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()

スキーマやサンプル データなど、特定のデータセットに関する詳細情報を取得します。

パラメータ:

  • name (str): 検索するデータセットの名前
  • sample_start_block (int, オプション): サンプルデータの開始ブロック
  • sample_end_block (int, オプション): サンプルデータの終了ブロック
  • use_latest_sample (bool, オプション): サンプルに最新のブロックを使用する
  • sample_blocks_from_latest (int, オプション): サンプルの最新からのブロック数

例:

client.lookup_dataset('logs')

get_latest_ethereum_block()

最新の Ethereum ブロックに関する情報を返します。

例:

client.get_latest_ethereum_block()

SQLクエリツール

Cryo MCP には、ブロックチェーン データに対して SQL クエリを実行するためのツールがいくつか含まれています。

query_sql()

ダウンロードしたブロックチェーン データに対して SQL クエリを実行します。

パラメータ:

  • query (str): 実行するSQLクエリ
  • files (リスト, オプション): クエリ対象の parquet ファイルパスのリスト。指定しない場合は、データディレクトリ内のすべてのファイルが使用されます。
  • include_schema (bool, オプション): 結果にスキーマ情報を含めるかどうか

例:

# 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()

SQL を使用してブロックチェーン データをクエリし、必要なデータを自動的にダウンロードします。

パラメータ:

  • sql_query (str): 実行するSQLクエリ
  • dataset (文字列、オプション): クエリするデータセット(例:'blocks'、'transactions')
  • blocks (文字列、オプション): ブロック範囲の指定
  • start_block (int, オプション): 開始ブロック番号
  • end_block (int, オプション): 終了ブロック番号
  • use_latest (bool, オプション): Trueの場合、最新のブロックを照会します
  • blocks_from_latest (int, オプション): 含める最新のブロックの前のブロック数
  • contract (文字列、オプション): フィルタリングする契約アドレス
  • force_refresh (bool, オプション): 新しいデータが存在する場合でも強制的にダウンロードする
  • include_schema (bool, オプション): 結果にスキーマ情報を含める

例:

# 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()

SQL でクエリできる利用可能なすべてのテーブルを一覧表示します。

例:

client.list_available_sql_tables()

get_sql_table_schema()

特定の parquet ファイルのスキーマを取得します。

パラメータ:

  • file_path (str): parquetファイルへのパス

例:

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

get_sql_examples()

さまざまなブロックチェーン データセットの SQL クエリの例を取得します。

例:

client.get_sql_examples()

設定オプション

Cryo MCP サーバーを起動するときに、次のコマンドライン オプションを使用できます。

  • --rpc-url URL : Ethereum RPC URL (ETH_RPC_URL 環境変数を上書きします)
  • --data-dir PATH : ダウンロードしたデータを保存するディレクトリ (CRYO_DATA_DIR 環境変数を上書きします。デフォルトは ~/.cryo-mcp/data/ です)

環境変数

  • ETH_RPC_URL : コマンドラインで指定されていない場合に使用するデフォルトの Ethereum RPC URL
  • CRYO_DATA_DIR : コマンドラインで指定されていない場合にダウンロードしたデータを保存するデフォルトのディレクトリ

高度な使用法

ブロックチェーンデータに対するSQLクエリ

Cryo MCP を使用すると、SQL の柔軟性と Cryo のデータ抽出機能を組み合わせて、ブロックチェーン データに対して強力な SQL クエリを実行できます。

2段階のSQLクエリフロー

データの抽出とクエリを 2 つの別々のステップに分割できます。

# 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 )

複合SQLクエリフロー

便宜上、両方のステップを処理する結合関数を使用することもできます。

# 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 )

:SQLクエリの場合、DuckDBで最適なパフォーマンスを確保するには、データをダウンロードする際に必ずoutput_format="parquet"を使用してください。query_blockchain_sql query_blockchain_sql使用する場合は、 read_parquet()関数を使用してSQL内でファイルパスを直接参照する必要があります。

ブロック範囲によるクエリ

Cryo MCP は、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)

契約フィルタリング

契約アドレス別にログやその他のデータをフィルタリングします。

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

列の選択

必要な列のみを含めます。

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

発達

プロジェクト構造

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

テストを実行する

uv run pytest

ライセンス

マサチューセッツ工科大学

クレジット

  • パラダイムの素晴らしいCryoツールをベースに構築
  • API通信にMCPプロトコルを使用する
ID: 90ftd26na5