# Блокчейн-RPC в агентах LangChain з BlockVectra

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

Агент LangChain читає актуальні блокчейн-дані через один інструмент, який надсилає JSON-RPC за допомогою POST на `https://api.blockvectra.com/v1/eth_mainnet/public`. Цей ендпоінт не потребує API key чи реєстрації для методів із `public.methods` кожної мережі. Ключ відкриває решту, а безкоштовний план надає 30,000,000 CU на 30-денне вікно. Перевірено 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). Інструмент використовує [декоратор `@tool`](https://docs.langchain.com/oss/python/langchain/tools) LangChain і [`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()` див. у [посібнику з інструментів](https://docs.langchain.com/oss/javascript/langchain/tools) LangChain JS.

## Виклик будь-якого методу з API key

Методи поза `public.methods`, наприклад `eth_getLogs`, потребують ключа. Прочитайте його зі змінних середовища й надішліть у заголовку `x-api-key`; ідентифікатор мережі (`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/uk/guides/programmatic-signup/?ref=docs-langchain): challenge, підпис, вхід, потім `POST /keys`. Розробники також можуть [створити ключ у консолі](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain).

## Додайте docs MCP-сервер

Агенти LangChain підключаються до MCP-серверів через `MCPAdapter`. Вкажіть йому `https://docs.blockvectra.com/mcp`, щоб агент отримав `list_chains`, `get_status`, `rpc_call`, `read_doc` та інші інструменти зі [сторінки MCP-сервера](https://docs.blockvectra.com/uk/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`, у бета-версії). Щоб користуватися інструментами, що потребують ключа, передайте ключ як bearer-токен: `MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"]))` з `from fastmcp.client import Client`, як у [посібнику з автентифікації MCP](https://docs.langchain.com/oss/python/langchain/mcp/auth) LangChain.

У TypeScript встановіть `@langchain/mcp-adapters@^2.0.0` і передайте мапу заголовків:

```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` мережі    | Використайте URL із ключем замість `/public`                      |
| `-32601`, метод недоступний           | Метод не ввімкнено в цій мережі           | Перевірте `methods.allow` у `GET /v1/chains`                      |

Кожна помилка містить `data.reason` і `docs_url`; повний список — на [сторінці помилок](https://docs.blockvectra.com/uk/errors/).

## Поширені запитання

**Чи працює публічний ендпоінт для `eth_getLogs`?** Ні. Він обслуговує лише методи з `public.methods` мережі; `eth_getLogs` і Data API потребують API key.

**Чи може агент передавати API key як аргумент інструмента?** Ні. Тримайте його в середовищі або в заголовках MCP-клієнта; MCP-сервер відхиляє ключі в аргументах інструментів.

**Чи може інструмент працювати з іншою мережею?** Так. Замініть `eth_mainnet` на будь-який ідентифікатор мережі, що має `public.url` у `GET /v1/chains`.

## Наступні кроки

* [Огляд фреймворків агентів](https://docs.blockvectra.com/uk/guides/agent-frameworks/) для ElizaOS, viem, wagmi і Coinbase AgentKit.
* [Підключення AI-агента](https://docs.blockvectra.com/uk/guides/ai-agents/) для виявлення ендпоінтів через MCP, llms.txt і OpenAPI.
* [Правила тарифікації](https://docs.blockvectra.com/uk/guides/billing-rules/) щодо обліку CU, лімітів швидкості та помилок, що не тарифікуються.
