# Gunakan RPC blockchain di Agent LangChain dengan BlockVectra

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

Agent LangChain membaca data blockchain langsung melalui satu alat yang mengirim JSON-RPC dengan POST ke `https://api.blockvectra.com/v1/eth_mainnet/public`. Endpoint itu tidak memerlukan API key atau pendaftaran untuk metode dalam `public.methods` setiap chain. API key menambahkan metode lainnya, dan Paket Gratis memberi 30,000,000 CU per jendela 30 hari. Diperiksa pada 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)
```

Instal dengan `pip install langchain httpx`; string model dan API key penyedianya mengikuti [quickstart LangChain](https://docs.langchain.com/oss/python/langchain/quickstart). Alat ini menggunakan [dekorator `@tool`](https://docs.langchain.com/oss/python/langchain/tools) milik LangChain dan [`create_agent`](https://reference.langchain.com/python/langchain/agents/factory/create_agent).

## Alat yang sama di 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] });
```

Lihat [panduan alat](https://docs.langchain.com/oss/javascript/langchain/tools) LangChain JS untuk signature `tool()`.

## Panggil metode apa pun dengan API key

Metode di luar `public.methods`, seperti `eth_getLogs`, memerlukan API key. Baca dari lingkungan dan kirim dalam header `x-api-key`; slug chain (`eth_mainnet`, `base_mainnet`, dan seterusnya) berasal dari `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()
```

Dengan mengembalikan seluruh respons JSON-RPC, model dapat membaca objek `error` dan mengubah panggilan berikutnya. Untuk membuat API key tanpa browser, jalankan alur empat langkah dalam [panduan pendaftaran terprogram](https://docs.blockvectra.com/id/guides/programmatic-signup/?ref=docs-langchain): challenge, tanda tangan, login, lalu `POST /keys`. Pengembang juga dapat [membuat API key di konsol](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain).

## Tambahkan server MCP dokumentasi

Agent LangChain terhubung ke server MCP melalui `MCPAdapter`. Arahkan ke `https://docs.blockvectra.com/mcp` agar Agent memiliki `list_chains`, `get_status`, `rpc_call`, `read_doc`, dan alat lain yang tercantum di [halaman server MCP](https://docs.blockvectra.com/id/guides/mcp-server/). Untuk terhubung tidak diperlukan API key.

```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."}]})
```

Instal dengan `pip install "langchain[mcp]"` (`langchain>=1.4.0`, masih beta). Untuk memakai alat yang memerlukan API key, kirim API key sebagai bearer token: `MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"]))` dengan `from fastmcp.client import Client`, seperti dalam [panduan autentikasi MCP](https://docs.langchain.com/oss/python/langchain/mcp/auth) LangChain.

Di TypeScript, instal `@langchain/mcp-adapters@^2.0.0` dan berikan peta header:

```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();
}
```

Hapus baris `headers` untuk terhubung tanpa API key. Referensi resmi: [LangChain MCP (Python)](https://docs.langchain.com/oss/python/langchain/mcp) dan [LangChain MCP (JavaScript)](https://docs.langchain.com/oss/javascript/langchain/mcp).

## Error yang akan dilihat alat Anda

| Respons                               | Arti                                                | Yang harus dilakukan Agent                                                    |
| ------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------- |
| HTTP 401, `-32024`, `missing_api_key` | URL yang memerlukan API key dipanggil tanpa API key | Kirim API key di `x-api-key` atau di path                                     |
| HTTP 401, `-32024`, `invalid_api_key` | API key tidak dikenal, dinonaktifkan, atau dicabut  | Periksa API key di konsol; API key baru memerlukan beberapa detik untuk aktif |
| `-32601`, `method_not_public`         | Metode tidak ada di `public.methods` chain          | Gunakan URL dengan API key, bukan `/public`                                   |
| `-32601`, method not available        | Metode tidak diaktifkan di chain tersebut           | Periksa `methods.allow` di `GET /v1/chains`                                   |

Setiap error memuat `data.reason` dan `docs_url`; daftar lengkapnya ada di [halaman error](https://docs.blockvectra.com/id/errors/).

## Pertanyaan umum

**Apakah endpoint publik berfungsi untuk `eth_getLogs`?** Tidak. Endpoint ini hanya melayani metode dalam `public.methods` chain; `eth_getLogs` dan Data API memerlukan API key.

**Dapatkah Agent mengirim API key sebagai argumen alat?** Tidak. Simpan di lingkungan atau header klien MCP; server MCP menolak API key dalam argumen alat.

**Dapatkah alat ini menargetkan chain lain?** Bisa. Ganti `eth_mainnet` dengan slug chain mana pun yang memiliki `public.url` di `GET /v1/chains`.

## Langkah selanjutnya

* [Ikhtisar framework Agent](https://docs.blockvectra.com/id/guides/agent-frameworks/) untuk ElizaOS, viem, wagmi, dan Coinbase AgentKit.
* [Hubungkan AI Agent](https://docs.blockvectra.com/id/guides/ai-agents/) untuk menemukan endpoint dengan MCP, llms.txt, dan OpenAPI.
* [Aturan penagihan](https://docs.blockvectra.com/id/guides/billing-rules/) untuk pengukuran CU, batas laju, dan error yang tidak ditagih.
