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

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

Агент LangChain читает живые блокчейн-данные через один инструмент, который отправляет JSON-RPC POST-запросом на `https://api.blockvectra.com/v1/eth_mainnet/public`. Для методов из `public.methods` каждой сети этому эндпоинту не нужны ни API key, ни регистрация. Ключ открывает остальные методы, а Free Plan дает 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) и [`create_agent`](https://reference.langchain.com/python/langchain/agents/factory/create_agent) из LangChain.

## Тот же инструмент на 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/ru/guides/programmatic-signup/?ref=docs-langchain): challenge, подпись, login, затем `POST /keys`. Разработчики также могут [создать ключ в консоли](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain).

## Добавьте MCP-сервер документации

Агенты LangChain подключаются к MCP-серверам через `MCPAdapter`. Укажите в нем `https://docs.blockvectra.com/mcp`, чтобы агент получил `list_chains`, `get_status`, `rpc_call`, `read_doc` и другие инструменты, перечисленные на [странице MCP-сервера](https://docs.blockvectra.com/ru/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`, как в [руководстве LangChain по аутентификации MCP](https://docs.langchain.com/oss/python/langchain/mcp/auth).

В 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`, method not available        | Метод не включен в этой сети          | Проверить `methods.allow` в `GET /v1/chains`                          |

Каждая ошибка содержит `data.reason` и `docs_url`; полный список приведен на [странице ошибок](https://docs.blockvectra.com/ru/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/ru/guides/agent-frameworks/): ElizaOS, viem, wagmi и Coinbase AgentKit.
* [Подключение ИИ-агента](https://docs.blockvectra.com/ru/guides/ai-agents/): поиск эндпоинтов через MCP, llms.txt и OpenAPI.
* [Правила тарификации](https://docs.blockvectra.com/ru/guides/billing-rules/): учет CU, лимиты запросов и ошибки, которые не тарифицируются.
