BlockVectra で LangChain エージェントからブロックチェーン RPC を使う
BlockVectra のキー不要の公開エンドポイントに対するツール 1 つで、LangChain エージェントにリアルタイムのブロックチェーンデータを渡します。その後、ドキュメント MCP サーバーと、キーが必要なメソッド用の API key を追加します。
LangChain エージェントは、https://api.blockvectra.com/v1/eth_mainnet/public に JSON-RPC を POST するツール 1 つで、リアルタイムのブロックチェーンデータを読み取ります。このエンドポイントは、各チェーンの public.methods にあるメソッドであれば API key もサインアップも不要です。キーを使うと残りのメソッドも利用でき、無料プランには 30 日間の期間ごとに 30,000,000 CU が含まれます。確認日 。
import httpx
from langchain.agents import create_agent
from langchain.tools import tool
RPC = "https://api.blockvectra.com/v1/eth_mainnet/public"
@tool
def eth_block_number() -> str:
"""Return the latest Ethereum mainnet block number as a hex string."""
body = {"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []}
return httpx.post(RPC, json=body, timeout=10).json()["result"]
agent = create_agent("claude-sonnet-5", tools=[eth_block_number])
result = agent.invoke({"messages": [{"role": "user", "content": "What is the latest block?"}]})
print(result["messages"][-1].content)インストールは pip install langchain httpx で行います。モデル文字列とそのプロバイダーキーは LangChain クイックスタートに従ってください。このツールは LangChain の @tool デコレーターと create_agent を使っています。
TypeScript での同じツール
import * as z from "zod";
import { createAgent, tool } from "langchain";
const ethBlockNumber = tool(
async () => {
const res = await fetch("https://api.blockvectra.com/v1/eth_mainnet/public", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_blockNumber", params: [] }),
});
return (await res.json()).result as string;
},
{ name: "eth_block_number", description: "Latest Ethereum mainnet block number (hex).", schema: z.object({}) },
);
const agent = createAgent({ model: "claude-sonnet-5", tools: [ethBlockNumber] });tool() のシグネチャについては、LangChain JS のツールガイドを参照してください。
API key で任意のメソッドを呼び出す
eth_getLogs のように public.methods にないメソッドにはキーが必要です。キーは環境変数から読み取り、x-api-key ヘッダーで送信します。チェーンの slug(eth_mainnet、base_mainnet など)は GET /v1/chains で取得できます:
import os
import httpx
from langchain.tools import tool
@tool
def rpc_call(chain: str, method: str, params: list) -> dict:
"""Call a JSON-RPC method on a BlockVectra chain slug such as base_mainnet."""
headers = {"x-api-key": os.environ["BLOCKVECTRA_API_KEY"]}
body = {"jsonrpc": "2.0", "id": 1, "method": method, "params": params}
return httpx.post(f"https://api.blockvectra.com/v1/{chain}", json=body, headers=headers, timeout=15).json()JSON-RPC レスポンス全体を返すと、モデルは error オブジェクトを読み取って次のコールを調整できます。ブラウザーを使わずにキーを作成するには、プログラムによる登録ガイドにある 4 ステップ(チャレンジ、署名、ログイン、POST /keys)を実行します。開発者はコンソールでキーを作成することもできます。
ドキュメント MCP サーバーを追加する
LangChain エージェントは MCPAdapter 経由で MCP サーバーに接続します。https://docs.blockvectra.com/mcp を指定すると、エージェントは list_chains、get_status、rpc_call、read_doc、および MCP サーバーのページに一覧されている他のツールを使えるようになります。接続にキーは不要です。
from langchain.agents import create_agent
from langchain.mcp import MCPAdapter
async def main():
async with MCPAdapter("https://docs.blockvectra.com/mcp") as adapter:
tools = await adapter.list_tools()
agent = create_agent("claude-sonnet-5", tools)
return await agent.ainvoke({"messages": [{"role": "user", "content": "List the supported chains."}]})インストールは pip install "langchain[mcp]"(langchain>=1.4.0、ベータ版)で行います。キーが必要なツールを使うには、キーをベアラートークンとして渡します。LangChain の MCP 認証ガイドにあるとおり、from fastmcp.client import Client を使って MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"])) とします。
TypeScript では、@langchain/mcp-adapters@^2.0.0 をインストールし、headers マップを渡します:
import { MCPAdapter } from "@langchain/mcp-adapters";
import { createAgent } from "langchain";
const adapter = new MCPAdapter({
servers: {
blockvectra: {
url: "https://docs.blockvectra.com/mcp",
headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! },
},
},
});
try {
const agent = createAgent({ model: "claude-sonnet-5", tools: await adapter.listTools() });
// agent.invoke(...)
} finally {
await adapter.close();
}headers の行を削除すると、キーなしで接続します。公式リファレンス:LangChain MCP(Python)と LangChain MCP(JavaScript)。
ツールで遭遇するエラー
| レスポンス | 意味 | エージェントの対応 |
|---|---|---|
HTTP 401、-32024、missing_api_key | キーが必要な URL をキーなしで呼び出した | キーを x-api-key またはパスで送信する |
HTTP 401、-32024、invalid_api_key | キーが不明、無効化済み、または失効済み | コンソールでキーを確認する。新しいキーが有効になるまで数秒かかる |
-32601、method_not_public | メソッドがそのチェーンの public.methods にない | /public ではなく、キー付きの URL を使う |
-32601、method not available | そのチェーンでメソッドが有効になっていない | GET /v1/chains の methods.allow を確認する |
各エラーには data.reason と docs_url が含まれます。全一覧はエラーのページにあります。
よくある質問
公開エンドポイントで eth_getLogs は使えますか? いいえ。公開エンドポイントが提供するのはそのチェーンの public.methods にあるメソッドだけで、eth_getLogs と Data API には API key が必要です。
エージェントは API key をツールの引数として渡せますか? いいえ。キーは環境変数または MCP クライアントのヘッダーに置いてください。MCP サーバーは、ツールの引数に含まれたキーを拒否します。
ツールで別のチェーンを対象にできますか? はい。eth_mainnet を、GET /v1/chains で public.url を持つ任意のチェーンの slug に置き換えてください。
次のステップ
- エージェントフレームワークの概要:ElizaOS、viem、wagmi、Coinbase AgentKit。
- AI エージェントを接続する:MCP、llms.txt、OpenAPI でエンドポイントを見つけます。
- 課金ルール:CU の計測、レート制限、課金されないエラー。
最終更新: