# BlockVectra で LangChain エージェントからブロックチェーン RPC を使う

> Source: https://docs.blockvectra.com/ja/guides/langchain/

LangChain エージェントは、`https://api.blockvectra.com/v1/eth_mainnet/public` に JSON-RPC を POST するツール 1 つで、リアルタイムのブロックチェーンデータを読み取ります。このエンドポイントは、各チェーンの `public.methods` にあるメソッドであれば API key もサインアップも不要です。キーを使うと残りのメソッドも利用でき、無料プランには 30 日間の期間ごとに 30,000,000 CU が含まれます。確認日 2026-10-11。

```python
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 クイックスタート](https://docs.langchain.com/oss/python/langchain/quickstart)に従ってください。このツールは LangChain の [`@tool` デコレーター](https://docs.langchain.com/oss/python/langchain/tools)と [`create_agent`](https://reference.langchain.com/python/langchain/agents/factory/create_agent) を使っています。

## TypeScript での同じツール

```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 の[ツールガイド](https://docs.langchain.com/oss/javascript/langchain/tools)を参照してください。

## API key で任意のメソッドを呼び出す

`eth_getLogs` のように `public.methods` にないメソッドにはキーが必要です。キーは環境変数から読み取り、`x-api-key` ヘッダーで送信します。チェーンの slug（`eth_mainnet`、`base_mainnet` など）は `GET /v1/chains` で取得できます：

```python
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` オブジェクトを読み取って次のコールを調整できます。ブラウザーを使わずにキーを作成するには、[プログラムによる登録ガイド](https://docs.blockvectra.com/ja/guides/programmatic-signup/?ref=docs-langchain)にある 4 ステップ（チャレンジ、署名、ログイン、`POST /keys`）を実行します。開発者は[コンソールでキーを作成](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain)することもできます。

## ドキュメント MCP サーバーを追加する

LangChain エージェントは `MCPAdapter` 経由で MCP サーバーに接続します。`https://docs.blockvectra.com/mcp` を指定すると、エージェントは `list_chains`、`get_status`、`rpc_call`、`read_doc`、および [MCP サーバーのページ](https://docs.blockvectra.com/ja/guides/mcp-server/)に一覧されている他のツールを使えるようになります。接続にキーは不要です。

```python
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 認証ガイド](https://docs.langchain.com/oss/python/langchain/mcp/auth)にあるとおり、`from fastmcp.client import Client` を使って `MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"]))` とします。

TypeScript では、`@langchain/mcp-adapters@^2.0.0` をインストールし、headers マップを渡します：

```typescript
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）](https://docs.langchain.com/oss/python/langchain/mcp)と [LangChain MCP（JavaScript）](https://docs.langchain.com/oss/javascript/langchain/mcp)。

## ツールで遭遇するエラー

| レスポンス                               | 意味                                | エージェントの対応                                |
| ----------------------------------- | --------------------------------- | ---------------------------------------- |
| 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` が含まれます。全一覧は[エラーのページ](https://docs.blockvectra.com/ja/errors/)にあります。

## よくある質問

**公開エンドポイントで `eth_getLogs` は使えますか？** いいえ。公開エンドポイントが提供するのはそのチェーンの `public.methods` にあるメソッドだけで、`eth_getLogs` と Data API には API key が必要です。

**エージェントは API key をツールの引数として渡せますか？** いいえ。キーは環境変数または MCP クライアントのヘッダーに置いてください。MCP サーバーは、ツールの引数に含まれたキーを拒否します。

**ツールで別のチェーンを対象にできますか？** はい。`eth_mainnet` を、`GET /v1/chains` で `public.url` を持つ任意のチェーンの slug に置き換えてください。

## 次のステップ

* [エージェントフレームワークの概要](https://docs.blockvectra.com/ja/guides/agent-frameworks/)：ElizaOS、viem、wagmi、Coinbase AgentKit。
* [AI エージェントを接続する](https://docs.blockvectra.com/ja/guides/ai-agents/)：MCP、llms.txt、OpenAPI でエンドポイントを見つけます。
* [課金ルール](https://docs.blockvectra.com/ja/guides/billing-rules/)：CU の計測、レート制限、課金されないエラー。
