# AI エージェント向けブロックチェーン RPC とドキュメント MCP

> Source: https://docs.blockvectra.com/ja/guides/ai-agents/

まず、キー不要の[ドキュメント MCP エンドポイント](https://docs.blockvectra.com/mcp)で、ブロックチェーン RPC のメソッド、Data API のデータセット、料金、ドキュメントを探索してください。AI エージェントは第一級ユーザーです。開発者と AI エージェントは同じ API、ルール、上限、料金を使用します。

1. **探索する**：ドキュメント MCP、`llms.txt`、OpenAPI、公開 JSON を使って、チェーンとメソッドを選びます。キーなしの RPC コールは、そのチェーンの `public.methods` に限定されます。
2. **HTTP 経由でアカウントを作成する**：[プログラムによる登録](https://docs.blockvectra.com/en/guides/programmatic-signup/)に従い、ウォレット署名でログインして API keyを作成します。MCP の `how_to_get_api_key` は、この独立した HTTP フローの手順を返します。
3. **データ API を呼び出す**：キーを `BLOCKVECTRA_API_KEY` に保存し、認証付きの RPC または Data API リクエストに使用します。キーが必要な MCP ツールでは、クライアントの `x-api-key` ヘッダーを設定してください。各ツールで許可される操作は以下に記載しています。

## 1. 機械可読なコンテキストと仕様

BlockVectra は、LLM エージェントと開発者ツール向けのファイルを公開しています：

### llms.txt インデックス

[llmstxt.org](https://llmstxt.org) の慣例に従い、これらのファイルはサイトとそのエンドポイントの構造化された概要をエージェントに提供します：

* **公式サイトのインデックス**：[公式サイト llms.txt](https://blockvectra.com/llms.txt) — 公式サイト、対応チェーン、料金、公開 API の概要。
* **ドキュメントのインデックス**：[ドキュメント llms.txt](https://docs.blockvectra.com/llms.txt) — すべてのドキュメントページのタイトルと説明を含むカタログ。

### 全ドキュメントファイル（`llms-full.txt`）

* **完全なドキュメント**：[llms-full.txt](https://docs.blockvectra.com/llms-full.txt) — すべての英語ドキュメントページの全文を 1 つのプレーンテキストの Markdown ファイルにまとめたものです。エージェントのシステムプロンプトへの読み込みや、検索拡張生成（RAG）パイプラインへの取り込みに適しています。

### ダウンロード可能な OpenAPI 3.1 仕様

ドキュメントサイトは、エージェントフレームワーク、ツールジェネレーター、API クライアントに直接インポートできる OpenAPI 3.1 YAML ファイルを提供しています：

* **JSON-RPC API 仕様**：[/openapi/json-rpc.yaml](https://docs.blockvectra.com/openapi/json-rpc.yaml) — 対応メソッド、チェーンごとのメソッドポリシー、エラーレスポンス、Compute Unit による利用量計測。
* **Data API 仕様**：[/openapi/data.yaml](https://docs.blockvectra.com/openapi/data.yaml) — インデックス済みのブロック、トランザクション、転送、残高、保有者、および関連データセットの REST エンドポイント定義。
* **Push API 仕様**：[/openapi/push.yaml](https://docs.blockvectra.com/openapi/push.yaml) — HTTP による購読管理、監視対象のウォレットアドレス、Webhook イベント、署名、リプレイ。

ウォレットアドレスの活動については、[ブロックチェーン Webhook API ガイド](https://docs.blockvectra.com/en/guides/webhook-push/)に従ってください。ERC-20 USDT / USDC の入金通知には、[入金受信の例](https://docs.blockvectra.com/en/guides/stablecoin-payments/#receive-payments-with-webhooks)を使用してください。開発者と AI エージェントは、`x-api-key` を使い、HTTP Push API を通じて購読を作成・管理します。ドキュメント MCP では、これらのガイドを探索して読むことができます。

パスのバージョン管理、後方互換性のルール、エージェントや SDK の開発者向けの推奨事項については、[API のバージョン管理と互換性](https://docs.blockvectra.com/en/api/versioning/)を参照してください。主要なフレームワーク（ElizaOS、viem、wagmi、Coinbase AgentKit）ですぐに使えるレシピについては、[エージェントフレームワークのレシピ](https://docs.blockvectra.com/en/guides/agent-frameworks/)を参照してください。

### Model Context Protocol（MCP）サーバー

BlockVectra は、Streamable HTTP 経由でステートレスかつキー不要の MCP サーバーを公開しています：

* **エンドポイント**：[MCP エンドポイント](https://docs.blockvectra.com/mcp)（JSON-RPC 2.0 を受け取る HTTP POST。GET は 405 を返します）
* **トランスポート**：MCP Streamable HTTP（ステートレス、API key不要）

#### 利用可能なツール

1. `read_doc(path, lang?)`：`/md/{lang}/{path}.md` から任意のドキュメントページの生の Markdown コンテンツを返します。内部の相対パス（`quickstart`、`guides/ai-agents`、`api/json-rpc`、`chains` など）を受け付けます。
2. `search_docs(query, lang?, limit?)`：タイトル、パス、要約を対象にドキュメントページを検索します。
3. `list_chains()`：`GET /v1/chains` から、対応するブロックチェーンネットワーク、静的パラメーター、メソッドポリシーを取得します。
4. `get_status()`：`GET /v1/status` から、リアルタイムのサービスの準備状況、ネットワークの稼働状況、最新ブロック高、同期の遅延を取得します。
5. `get_pricing()`：`GET /v1/plans` から、Compute Unit (CU) の重み付け、無料プランのパラメーター、デフォルトのキー制限を取得します。
6. `estimate_usage(lines?, method?, calls_per_day?)`：1 つまたは複数のメソッドについて、Compute Units (CU)、定価での総費用、サイクルの無料枠を差し引いた後の正味費用を見積もります（複数行の `lines: [{method, calls_per_day}]`、または単一の `method` と `calls_per_day` に対応）。`key_defaults` からキーごとのレート制限も報告し、トラフィックが単一キーの制限を超える場合は必要な API key数を提案します。
7. `how_to_get_api_key(lang?)`：API keyの受け渡し手順と、JSON-RPC および Data API のリクエスト認証形式を返します。
8. `get_method_info(method, chain?)`：メソッドについて、チェーンでの利用可否、Compute Unit (CU) の重み付け、百万コールあたりの料金、ドキュメントへのリンクを返します。JSON-RPC の利用可否は `GET /v1/chains` の `methods.allow` と `deny` に従います。Data API のデータセットの対応範囲は、チェーンカタログの `data: true` と、`GET /v1/status` の `data_features` に従います。
9. `explain_error(reason?, code?, http_status?)`：エラーカタログから、エラーの説明、課金への影響、再試行の可否、復旧方法を検索します。
10. `list_docs(lang?)`：ドキュメントのインデックスから、すべてのドキュメントページの相対パスとタイトルを一覧表示します。
11. `rpc_call(chain, method, params?)`：API keyを使用して、対応チェーン上で読み取り専用の JSON-RPC 2.0 コールを実行します（`readOnlyHint: true`）。書き込みメソッド（`eth_sendRawTransaction` など）は拒否されます。代わりに `send_raw_transaction` を使用してください。完全なアクセスには MCP クライアント設定の `x-api-key` ヘッダーが必要です。キー不要の公開エンドポイントが利用できる場合は、それを使用します。
12. `data_api_get(chain, path, query?)`：API keyを使用して、対応チェーンとパスの Data API に GET リクエストを送信します（`readOnlyHint: true`）。MCP クライアント設定の `x-api-key` ヘッダーが必要です。
13. `get_account()`：API keyを使用して、`GET /v1/account` からアカウント残高、Compute Units (CU)、レート制限、キーのパラメーターを照会します（`readOnlyHint: true`）。MCP クライアント設定の `x-api-key` ヘッダーが必要です。
14. `get_deposit_address()`：API keyを使用して、`GET /v1/topup/deposit-address` から専用のオンチェーン入金アドレス、利用可能なネットワークとトークンを照会します（`readOnlyHint: true`）。一覧にあるネットワークとトークンにのみ送金してください。MCP クライアント設定の `x-api-key` ヘッダーが必要です。
15. `send_raw_transaction(chain, raw_tx)`：`eth_sendRawTransaction` を通じて、署名済みの raw トランザクションを対応チェーンにブロードキャストします（`destructiveHint: true`）。完全なアクセスには MCP クライアント設定の `x-api-key` ヘッダーが必要です。そのチェーンで許可されている場合は、キー不要の公開エンドポイントを使用します。

#### キーが必要なツール

キーが必要なツールで、オンチェーンの照会、トランザクション、Data API リクエスト、アカウント操作を実行するには、API keyが必要です。

**API keyの安全な管理**：

* **ヘッダーからのみ読み取る**：API keyは MCP クライアントの HTTP リクエストヘッダー（`x-api-key: rgw_...` または `Authorization: Bearer rgw_...`）からのみ読み取ります。
* **チャットにキーを記載しない**：API keyや秘密鍵をツールの引数で渡したり、チャットに貼り付けたりしないでください。ツールの引数とチャット履歴は会話ログやコンテキストに含まれます。引数でキーを渡すと拒否されます。

API keyのヘッダーなしで呼び出すと、これらのツールは `isError: true` を返し、エージェントを `how_to_get_api_key` とプログラムによる登録ガイドに案内します。

### MCP クライアントからの接続

一般的な開発環境やフレームワークから、`https://docs.blockvectra.com/mcp` にある BlockVectra のドキュメント MCP サーバーに接続できます。

まず API keyなしで始めてください。MCP エンドポイントに接続し、list\_chains を呼び出してから、read\_doc で quickstart を読みます。Data API やアカウント用のツールが必要になったら、クライアントの HTTP ヘッダーに API keyを追加してください。キーなしの RPC アクセスは、各チェーンの公開メソッドポリシーに従います。

`x-api-key` ヘッダーは任意です。API keyがなくても、クライアントは読み取り専用のすべてのドキュメントツール（`read_doc`、`search_docs`、`list_docs`）、チェーンの探索（`list_chains`）、リアルタイムの稼働状況（`get_status`）、料金の見積もり（`get_pricing`、`estimate_usage`）、エラーの説明（`explain_error`）、公開エンドポイントで許可されているメソッドを使用できます。キーが必要なツール（制限付きメソッドでの `rpc_call`、`send_raw_transaction`、`data_api_get`、`get_account`、`get_deposit_address`）を使用する場合は、API keyを `x-api-key` ヘッダーに設定してください。

#### Claude Code

CLI を使用して MCP サーバーに接続します：

```bash
claude mcp add --transport http blockvectra-docs https://docs.blockvectra.com/mcp
```

認証付きツール用に任意の API keyを含めるには、`--header`（または `-H`）オプションを指定します：

```bash
claude mcp add --transport http blockvectra-docs https://docs.blockvectra.com/mcp \
  --header "x-api-key: YOUR_API_KEY"
```

公式ドキュメント：[Claude Code MCP ドキュメント](https://code.claude.com/docs/en/mcp)。

#### Cursor

Cursor の MCP 設定にサーバーを追加します：

```json
{
  "mcpServers": {
    "blockvectra": {
      "url": "https://docs.blockvectra.com/mcp"
    }
  }
}
```

Cursor は、base64 エンコードされた設定 `eyJ1cmwiOiJodHRwczovL2RvY3MuYmxvY2t2ZWN0cmEuY29tL21jcCJ9`（`{"url":"https://docs.blockvectra.com/mcp"}` を表します）を使ったディープリンクによるワンクリックインストールにも対応しています：

```text
cursor://anysphere.cursor-deeplink/mcp/install?name=blockvectra&config=eyJ1cmwiOiJodHRwczovL2RvY3MuYmxvY2t2ZWN0cmEuY29tL21jcCJ9
```

認証付きツール（Data API やアカウント管理）が必要な場合は、API keyを含む `headers` オブジェクトを追加します：

```json
{
  "mcpServers": {
    "blockvectra": {
      "url": "https://docs.blockvectra.com/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

公式ドキュメント：[Cursor MCP ドキュメント](https://cursor.com/docs/context/mcp)と [Cursor インストールリンク](https://cursor.com/docs/context/mcp/install-links)。

#### VS Code

VS Code では、`.vscode/mcp.json` のトップレベルの `servers` キーの下に、`type: "http"` を指定してサーバーを設定します：

```json
{
  "servers": {
    "blockvectra": {
      "type": "http",
      "url": "https://docs.blockvectra.com/mcp"
    }
  }
}
```

認証付きツールが必要な場合は、`headers` オブジェクトを追加します：

```json
{
  "servers": {
    "blockvectra": {
      "type": "http",
      "url": "https://docs.blockvectra.com/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

機密性の高い認証情報を保存する際、VS Code ではキーを直接記述する代わりに、入力変数や環境ファイルを参照できます。コマンドパレットの `MCP: Add Server` アクションでサーバーを追加することもできます。

公式ドキュメント：[VS Code MCP サーバーのドキュメント](https://code.visualstudio.com/docs/copilot/customization/mcp-servers)と [VS Code MCP 設定リファレンス](https://code.visualstudio.com/docs/agents/reference/mcp-configuration)。

#### Codex

OpenAI Codex CLI を使ってサーバーを追加します：

```bash
codex mcp add blockvectra --url https://docs.blockvectra.com/mcp
```

`config.toml` にサーバー URL を設定します：

```toml
[mcp_servers.blockvectra]
url = "https://docs.blockvectra.com/mcp"
```

認証付きツールが必要な場合は、`config.toml` にリクエストヘッダーを設定します：

```toml
[mcp_servers.blockvectra]
url = "https://docs.blockvectra.com/mcp"
http_headers = { "x-api-key" = "YOUR_API_KEY" }
```

または、環境変数からヘッダーを設定します：

```toml
[mcp_servers.blockvectra]
url = "https://docs.blockvectra.com/mcp"
env_http_headers = { "x-api-key" = "BLOCKVECTRA_API_KEY" }
```

公式ドキュメント：[OpenAI Codex CLI MCP ドキュメント](https://learn.chatgpt.com/docs/extend/mcp?surface=cli)。

#### Gemini CLI

Gemini CLI の設定では、Streamable HTTP 用の `httpUrl` を使い、`mcpServers` の下にサーバーを追加します：

```json
{
  "mcpServers": {
    "blockvectra": {
      "httpUrl": "https://docs.blockvectra.com/mcp"
    }
  }
}
```

認証付きツールが必要な場合は、API keyを含む `headers` オブジェクトを追加します：

```json
{
  "mcpServers": {
    "blockvectra": {
      "httpUrl": "https://docs.blockvectra.com/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

公式ドキュメント：[Gemini CLI MCP サーバーのドキュメント](https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md)。

#### OpenAI Responses API

OpenAI Responses API を呼び出す際は、`tools` 配列に `type: "mcp"` を指定して MCP サーバーを渡します：

```bash
OPENAI_API_BASE="https://api.openai.com/v1"
curl "$OPENAI_API_BASE/responses" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<model>",
    "tools": [{
      "type": "mcp",
      "server_label": "blockvectra",
      "server_url": "https://docs.blockvectra.com/mcp",
      "require_approval": "never"
    }],
    "input": "..."
  }'
```

認証付きツールが必要な場合は、ツール定義に `headers` フィールドを含めます：

```json
{
  "type": "mcp",
  "server_label": "blockvectra",
  "server_url": "https://docs.blockvectra.com/mcp",
  "headers": { "x-api-key": "YOUR_API_KEY" },
  "require_approval": "never"
}
```

公式ドキュメント：[OpenAI MCP ツールガイド](https://developers.openai.com/api/docs/guides/tools-connectors-mcp)と [OpenAI Responses API リファレンス](https://developers.openai.com/api/reference/resources/responses/methods/create)。

#### Windsurf

Windsurf では、`serverUrl` フィールドを使い、`mcpServers` の下にサーバーを設定します：

```json
{
  "mcpServers": {
    "blockvectra": {
      "serverUrl": "https://docs.blockvectra.com/mcp"
    }
  }
}
```

認証付きツールが必要な場合は、API keyを含む `headers` オブジェクトを追加します：

```json
{
  "mcpServers": {
    "blockvectra": {
      "serverUrl": "https://docs.blockvectra.com/mcp",
      "headers": {
        "x-api-key": "YOUR_API_KEY"
      }
    }
  }
}
```

Windsurf は、`"x-api-key": "${env:BLOCKVECTRA_API_KEY}"` などの環境変数の参照にも対応しています。

公式ドキュメント：[Windsurf MCP ドキュメント](https://docs.devin.ai/desktop/cascade/mcp)。

#### Claude Desktop と claude.ai

カスタムコネクターはユーザーインターフェースから設定します：

* **claude.ai**：**Customize** > **Connectors** を開き、**+ Add** をクリックして **Add custom connector** を選択し、URL を入力します：
  ```text
  https://docs.blockvectra.com/mcp
  ```
* **Claude Desktop**：アカウント設定メニューを開き、コネクターの画面からカスタムコネクターを設定します。

この URL に接続すると、Claude は認証情報なしでガイドを検索し、Markdown ドキュメントを読み、対応チェーンを調べ、ネットワークの稼働状況を確認し、料金を見積もれます。

公式ドキュメント：[Claude カスタムコネクターガイド](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp)。

## 2. 公開 JSON エンドポイント（キー不要）

エージェントは、利用量が計測されるリクエストを送信する前に、利用可能なチェーン、リアルタイムの稼働状況、プランのパラメーターを確認できます。これらのエンドポイントはいずれも API keyを必要としません：

* `GET /v1/status` と `GET /v1/chains` は認証不要で、課金されません。
* `GET /v1/plans` は公開されており、認証不要です。

3 つとも `Access-Control-Allow-Origin: *` を返します。

### サービスの稼働状況（`GET /v1/status`）

サービスの準備状況と、各公開チェーンの同期状態を返します：

```bash
curl -s "https://api.blockvectra.com/v1/status"
```

レスポンスフィールド：

* `checked_at`：スナップショットの生成時刻（RFC 3339 / ISO 8601 UTC）。
* `gateway.status`：サービスの稼働状況。`ok` はサービスが利用可能であることを意味し、`degraded` は復旧するまで有料リクエストが拒否されることを意味します。この値は、各チェーンのノードの稼働状況とは独立しています。
* `chains[]`：公開されているチェーン：
  * `chain`：チェーンの slug（`robinhood_mainnet` など）。
  * `name`：人が読める表示名。
  * `chain_id`：EIP-155 チェーン ID（10 進整数）。
  * `jsonrpc`：JSON-RPC が提供されているかどうか。
  * `data`：Data API が提供されているかどうか。
  * `data_features`：このチェーンで利用できる Data API の機能（`data` が `false` の場合は空の配列）。
  * `data_status`：Data API の稼働状況（`ok`、`syncing`、`unavailable`。`data` が `true` の場合のみ存在します）。
  * `status`：チェーンノードの稼働状況（`ok` または `unavailable`）。
  * `head`：最新ブロックの情報 — `block`（最新ブロック高）、`time`（ブロックのタイムスタンプ）、`lag_seconds`（ブロック時刻が現在時刻からどの程度遅れているか） — 不明な場合は `null`。

レスポンス例：

```json
{
  "checked_at": "2026-09-28T12:00:00Z",
  "gateway": {
    "status": "ok"
  },
  "chains": [
    {
      "chain": "robinhood_mainnet", "name": "Robinhood Chain", "chain_id": 4663,
      "jsonrpc": true,
      "data": true,
      "data_features": [
        "blocks",
        "transactions",
        "address_transactions",
        "transfers",
        "token_metadata",
        "freshness"
      ],
      "status": "ok",
      "head": {
        "block": 73017329,
        "time": "2026-09-28T11:59:58Z",
        "lag_seconds": 2
      }
    }
  ]
}
```

### チェーンのパラメーター（`GET /v1/chains`）

各公開チェーンの静的パラメーターとメソッドポリシーを返します：

```bash
curl -s "https://api.blockvectra.com/v1/chains"
```

レスポンスフィールド：

* `chains[]`：公開チェーンとその静的パラメーター：
  * `chain`：チェーンの slug。
  * `name`：人が読める表示名。
  * `chain_id`：EIP-155 チェーン ID。
  * `jsonrpc`：JSON-RPC が提供されているかどうか。
  * `data`：Data API が提供されているかどうか。
  * `ws`：WebSocket 接続に対応しているかどうか。
  * `subscriptions`：対応する WebSocket の購読タイプ（`newHeads`、`logs` など）。
  * `methods`：メソッドポリシー：
    * `allow`：許可されるメソッド名（`eth_call`、`debug_traceTransaction` など）。
    * `deny`：拒否されるメソッド、またはプレフィックスのワイルドカードパターン（`eth_newFilter` など）。拒否されるメソッドは許可されるメソッドより優先されます。
  * `max_logs_block_range`：1 回の `eth_getLogs` リクエストで許可される最大ブロック範囲。
  * `state_window_blocks`：過去の状態を参照できる範囲をブロック数で示します。全履歴が利用できる場合は `null`。
  * `info`：チェーンごとの公開拡張データ（予約済み。現在は空のオブジェクト `{}`）。
  * `public`：認証不要の公開エンドポイントの設定（または `null`）：
    * `url`：公開リクエスト用のベース URL。
    * `methods`：公開エンドポイントで許可されるメソッド。
    * `rate_limit`：レート制限（`per_ip_rps`、`burst`、`batch_max`）。
    * `history_blocks`：公開エンドポイントでアクセスできるブロック履歴。
    * `send_raw_rate_limit`：`eth_sendRawTransaction` によるトランザクションのブロードキャストのレート制限。

レスポンス例：

```json
{
  "chains": [
    {
      "chain": "robinhood_mainnet", "name": "Robinhood Chain", "chain_id": 4663,
      "jsonrpc": true,
      "data": true,
      "ws": true,
      "subscriptions": [
        "newHeads",
        "logs"
      ],
      "methods": {
        "allow": [
          "eth_blockNumber",
          "eth_call",
          "eth_chainId",
          "debug_traceTransaction"
        ],
        "deny": [
          "eth_newFilter",
          "eth_newBlockFilter",
          "eth_newPendingTransactionFilter",
          "eth_getFilterLogs",
          "eth_getFilterChanges",
          "eth_uninstallFilter",
          "eth_subscribe",
          "eth_unsubscribe"
        ]
      },
      "max_logs_block_range": 1000,
      "state_window_blocks": 900,
      "info": {},
      "public": {
        "url": "https://api.blockvectra.com/v1/robinhood_mainnet/public",
        "methods": [
          "eth_chainId",
          "net_version",
          "eth_blockNumber",
          "eth_call"
        ],
        "rate_limit": {
          "per_ip_rps": 3,
          "burst": 20,
          "batch_max": 10
        },
        "history_blocks": 128,
        "send_raw_rate_limit": {
          "per_ip_rps": 1,
          "burst": 3
        }
      }
    }
  ]
}
```

### プランとメソッドの重み付け（`GET /v1/plans`）

プランのパラメーターは `GET https://console-api.blockvectra.com/v1/plans` で提供されます。エージェントは実行時にこのエンドポイントを照会し、有効な無料プランの上限と各メソッドの Compute Unit (CU) の重み付けを取得できます：

* `free`：無料プランのパラメーター — `signup_units`（登録時の付与額、ユニット単位）、`monthly_units`（サイクルごとの補充後の目標残高、ユニット単位）、`window_days`（利用サイクルの長さ、日単位）、`max_calls_per_sec`（無料プランの毎秒コール数上限）。
* `pricing`：有料プランのパラメーター — `units_per_usd`（1 USD あたりのユニット数）、`cu_per_unit`（1 ユニットあたりの CU）、`min_topup_usd`（最低チャージ額、USD 単位）。
* `method_weights`：コールごとの CU 重み付け。各項目は `{ "method": string, "cu_weight": number }` です。`method` は、JSON-RPC メソッド名やパターン、一覧にないメソッドのデフォルトの重み付け、または `data.<op>` などの Data API 操作を指定します。重み付けはメソッドごとに設定され、チェーンごとには分かれません。

## 3. 認証とキーの安全な管理

RPC コールを送信するエージェントは、次のルールに従ってください：

* **認証**：API keyは次の 3 通りの方法で渡せます。パスの場合：`POST /v1/{chain}/{api_key}` — パス形式ではパス内のキーのみを使用し、両方のヘッダーを無視します。`x-api-key` ヘッダーの場合：`POST /v1/{chain}` に `x-api-key: $BLOCKVECTRA_API_KEY` を指定します。`Authorization` ヘッダーの場合：`POST /v1/{chain}` に `Authorization: Bearer $BLOCKVECTRA_API_KEY` を指定します。両方のヘッダーがある場合は、空でない `x-api-key` が優先されます。Bearer は `x-api-key` がない場合または空の場合にのみ使用されます。同じキーをすべての対応チェーン、および Data API（`x-api-key` ヘッダーでのみキーを受け付けます）で使用できます。
* **キーの安全な管理**：API keyはサーバー側の環境変数（`BLOCKVECTRA_API_KEY` など）またはシークレットマネージャーに保存してください。ブラウザコードやクライアント側のバンドルにキーを埋め込まないでください。エンドポイントは `Access-Control-Allow-Origin: *` を返しますが、ブラウザではなくバックエンドサービスから呼び出すことを想定しています。
* **利用量計測とアップグレード**：利用量は Compute Units (CU) で計測されます。各メソッドは重み付けに応じて CU を消費し、残高、CU バケット、無料プランのレート制限はすべてのチェーンで共有されます。有料チャージ後は、無料プランの毎秒コール数上限は適用されなくなります。各キーには引き続き CU レート制限とバースト容量があります。未使用の無料クレジットはクレジット残高に残り、引き続き使用できます。詳細は[料金ページ](https://blockvectra.com/en/pricing/)を参照してください。

> **No API key yet?**
>
> Ethereum ウォレットをお持ちの場合：[プログラムによる登録ガイド](https://docs.blockvectra.com/en/guides/programmatic-signup/)に従い、ブラウザを使わずに Ethereum ウォレットの署名で登録し、API keyを作成してください。エージェントの識別情報はウォレットです。セッショントークンやキーを紛失した場合は、[同じウォレットで再認証して復旧してください](https://docs.blockvectra.com/en/guides/programmatic-signup/#lost-your-session-or-api-key)。ウォレットをお持ちでない場合：ユーザーに [console.blockvectra.com](https://console.blockvectra.com/login/?next=%2Fkeys%2F) でログインし、キーを作成して環境変数 `BLOCKVECTRA_API_KEY` として設定するよう依頼してください。チャットにキーを貼り付けるようユーザーに求めないでください。


### 残高の照会（`GET /v1/account`）

エージェントは Compute Units (CU) を消費せずに、キーの現在の残高、CU 制限、キーのパラメーターを直接確認できます。リクエスト形式、レート制限、レスポンスフィールドの完全な定義は、[残高の照会：GET /v1/account](https://docs.blockvectra.com/en/guides/billing-rules/#query-balance-get-v1account)を参照してください。

## 4. エージェントのチェーン選択ワークフロー

コールを送信する前に、エージェントは次の手順を実行できます：

1. **チェーンとメソッドポリシーを確認する**：`GET /v1/chains` を呼び出し、対象チェーンが存在して `jsonrpc: true` であること、および呼び出す予定のメソッドが `methods.allow` で許可され、`methods.deny` で拒否されていないことを確認します（拒否が優先されます）。
2. **リアルタイムの稼働状況を確認する**：`GET /v1/status` を呼び出し、`gateway.status` が `ok` であり、対象チェーンの `status` も `ok` であることを確認します。`head.lag_seconds` を使って、チェーンのデータが用途に対して十分に新しいかどうかを判断します。チェーンのノードが同期していない場合、`eth_chainId` 以外のすべてのメソッドは JSON-RPC エラー `-32010`（HTTP 200、課金なし）を返すため、エージェントは待ってから再試行するか、別のチェーンを選べます。
3. **リクエストを送信する**：`x-api-key` ヘッダーと標準の JSON-RPC ボディを指定して、`POST /v1/{chain}` を送信します。

## 5. 最小限の動作例

以下の例では、`/v1/chains` を取得して `eth_blockNumber` を許可するチェーンを選び、`/v1/status` を確認してから、`eth_blockNumber` を 1 回呼び出します。

**cURL**

```bash
export BLOCKVECTRA_API_KEY="rgw_your_api_key"

# 1. List public chains and their method policy
curl -s "https://api.blockvectra.com/v1/chains"

# 2. Check the service and per-chain status
curl -s "https://api.blockvectra.com/v1/status"

# 3. Call eth_blockNumber on the chain you selected (e.g. robinhood_mainnet)
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
  -H "x-api-key: $BLOCKVECTRA_API_KEY" \
  -H "x-bv-meter: 1" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
```


  **TypeScript**

```typescript
const apiKey = process.env.BLOCKVECTRA_API_KEY;

if (!apiKey) {
  throw new Error("Missing BLOCKVECTRA_API_KEY");
}

type ChainFacts = {
  chain: string;
  jsonrpc: boolean;
  methods: { allow: string[]; deny: string[] };
};

function matches(pattern: string, method: string): boolean {
  if (pattern === "*") return true;
  if (pattern.endsWith("*")) return method.startsWith(pattern.slice(0, -1));
  return pattern === method;
}

// 1. Fetch the public chain directory
const chainsRes = await fetch("https://api.blockvectra.com/v1/chains");
const { chains } = (await chainsRes.json()) as { chains: ChainFacts[] };

// 2. Select a chain that serves JSON-RPC and allows eth_blockNumber
const selected = chains.find(
  (chain) =>
    chain.jsonrpc &&
    !chain.methods.deny.some((pattern) => matches(pattern, "eth_blockNumber")) &&
    chain.methods.allow.some((pattern) => matches(pattern, "eth_blockNumber")),
);

if (!selected) {
  throw new Error("No chain found that allows eth_blockNumber");
}

// 3. Confirm the service and the selected chain are ready
const statusRes = await fetch("https://api.blockvectra.com/v1/status");
const status = await statusRes.json();
const chainStatus = status.chains?.find(
  (chain: { chain: string }) => chain.chain === selected.chain,
);

if (status.gateway?.status !== "ok" || chainStatus?.status !== "ok") {
  throw new Error(`Chain ${selected.chain} is currently unavailable`);
}

// 4. Call eth_blockNumber on the selected chain
const defaultEndpoint = "https://api.blockvectra.com/v1/robinhood_mainnet";
const rpcUrl = `${defaultEndpoint.slice(0, defaultEndpoint.lastIndexOf("/"))}/${selected.chain}`;
const rpcRes = await fetch(rpcUrl, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": apiKey,
    "x-bv-meter": "1",
  },
  body: JSON.stringify({
    jsonrpc: "2.0",
    id: 1,
    method: "eth_blockNumber",
    params: [],
  }),
});

console.log("Response:", await rpcRes.json());
```


  **Python**

```python
import os
import requests

api_key = os.environ["BLOCKVECTRA_API_KEY"]


def matches(pattern: str, method: str) -> bool:
    if pattern == "*":
        return True
    if pattern.endswith("*"):
        return method.startswith(pattern[:-1])
    return pattern == method


# 1. Fetch the public chain directory
chains = requests.get("https://api.blockvectra.com/v1/chains").json()["chains"]

# 2. Select a chain that serves JSON-RPC and allows eth_blockNumber
selected = next(
    (
        chain
        for chain in chains
        if chain["jsonrpc"]
        and not any(matches(p, "eth_blockNumber") for p in chain["methods"]["deny"])
        and any(matches(p, "eth_blockNumber") for p in chain["methods"]["allow"])
    ),
    None,
)

if selected is None:
    raise RuntimeError("No chain found that allows eth_blockNumber")

# 3. Confirm the service and the selected chain are ready
status = requests.get("https://api.blockvectra.com/v1/status").json()
chain_status = next(
    (c for c in status["chains"] if c["chain"] == selected["chain"]),
    None,
)

if (
    status["gateway"]["status"] != "ok"
    or chain_status is None
    or chain_status["status"] != "ok"
):
    raise RuntimeError(f"Chain {selected['chain']} is currently unavailable")

# 4. Call eth_blockNumber on the selected chain
default_endpoint = "https://api.blockvectra.com/v1/robinhood_mainnet"
rpc_url = f"{default_endpoint.rsplit('/', 1)[0]}/{selected['chain']}"
rpc_response = requests.post(
    rpc_url,
    headers={
        "Content-Type": "application/json",
        "x-api-key": api_key,
        "x-bv-meter": "1",
    },
    json={"jsonrpc": "2.0", "id": 1, "method": "eth_blockNumber", "params": []},
).json()

print("Response:", rpc_response)
```


コールが成功すると、標準の JSON-RPC レスポンスオブジェクトが返されます：

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x45a27f1"
}
```

レスポンスヘッダーでリクエストごとの CU 料金と残高の残りユニット数を確認するには、`x-bv-meter: 1` を含めてください。ヘッダーの動作とエラーケースについては、[料金と残高のレスポンスヘッダー](https://docs.blockvectra.com/en/guides/billing-rules/#http-status-codes-and-billing-rules)を参照してください。

## 次のステップ

* [データセットカタログを見る](https://blockvectra.com/en/data/)ことで、BlockVectra がインデックスするすべてのデータセットを確認できます。
* [無料プランと料金を見る](https://blockvectra.com/en/pricing/#free)ことで、アカウントに含まれる内容を確認できます。
* [プログラムによる登録ガイドに従い](https://docs.blockvectra.com/en/guides/programmatic-signup/)、ウォレット署名で登録して API keyを作成するか、[コンソールにログイン](https://console.blockvectra.com/login/?next=%2Fkeys%2F)してキーを作成してください。
