# Usar RPC blockchain en agentes de LangChain con BlockVectra

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

Un agente de LangChain lee datos blockchain en vivo mediante una sola herramienta que envía JSON-RPC por POST a `https://api.blockvectra.com/v1/eth_mainnet/public`. Ese endpoint no necesita API key ni registro para los métodos de `public.methods` de cada cadena. Una clave añade el resto, y el plan gratuito ofrece 30,000,000 CU por ventana de 30 días. Verificado el 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)
```

Instale con `pip install langchain httpx`; la cadena del modelo y su clave de proveedor siguen el [inicio rápido de LangChain](https://docs.langchain.com/oss/python/langchain/quickstart). La herramienta usa el [decorador `@tool`](https://docs.langchain.com/oss/python/langchain/tools) de LangChain y [`create_agent`](https://reference.langchain.com/python/langchain/agents/factory/create_agent).

## La misma herramienta en 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] });
```

Consulte la [guía de herramientas](https://docs.langchain.com/oss/javascript/langchain/tools) de LangChain JS para ver la firma de `tool()`.

## Llamar a cualquier método con una API key

Los métodos fuera de `public.methods`, como `eth_getLogs`, necesitan una clave. Léala del entorno y envíela en el encabezado `x-api-key`; el slug de la cadena (`eth_mainnet`, `base_mainnet`, etc.) se obtiene de `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()
```

Devolver la respuesta JSON-RPC completa permite al modelo leer un objeto `error` y cambiar su siguiente llamada. Para crear la clave sin navegador, siga el flujo de cuatro pasos de la [guía de registro programático](https://docs.blockvectra.com/es/guides/programmatic-signup/?ref=docs-langchain): desafío, firma, inicio de sesión y después `POST /keys`. Los desarrolladores también pueden [crear una clave en la consola](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain).

## Añadir el servidor MCP de documentación

Los agentes de LangChain se conectan a servidores MCP mediante `MCPAdapter`. Apúntelo a `https://docs.blockvectra.com/mcp` para dar al agente `list_chains`, `get_status`, `rpc_call`, `read_doc` y las demás herramientas listadas en la [página del servidor MCP](https://docs.blockvectra.com/es/guides/mcp-server/). Conectarse no requiere clave.

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

Instale con `pip install "langchain[mcp]"` (`langchain>=1.4.0`, en beta). Para usar herramientas con clave, pase la clave como token bearer: `MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"]))` con `from fastmcp.client import Client`, como en la [guía de autenticación MCP](https://docs.langchain.com/oss/python/langchain/mcp/auth) de LangChain.

En TypeScript, instale `@langchain/mcp-adapters@^2.0.0` y pase un mapa de encabezados:

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

Elimine la línea `headers` para conectarse sin clave. Referencias oficiales: [LangChain MCP (Python)](https://docs.langchain.com/oss/python/langchain/mcp) y [LangChain MCP (JavaScript)](https://docs.langchain.com/oss/javascript/langchain/mcp).

## Errores que verá su herramienta

| Respuesta                             | Significado                                        | Qué debe hacer el agente                                                           |
| ------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------- |
| HTTP 401, `-32024`, `missing_api_key` | Se llamó a una URL con clave sin enviar clave      | Enviar la clave en `x-api-key` o en la ruta                                        |
| HTTP 401, `-32024`, `invalid_api_key` | Clave desconocida, desactivada o revocada          | Comprobar la clave en la consola; una clave nueva tarda unos segundos en activarse |
| `-32601`, `method_not_public`         | El método no está en `public.methods` de la cadena | Usar una URL con clave en lugar de `/public`                                       |
| `-32601`, método no disponible        | El método no está habilitado en esa cadena         | Revisar `methods.allow` en `GET /v1/chains`                                        |

Cada error incluye `data.reason` y un `docs_url`; la lista completa está en la [página de errores](https://docs.blockvectra.com/es/errors/).

## Preguntas frecuentes

**¿Funciona el endpoint público para `eth_getLogs`?** No. Solo atiende los métodos de `public.methods` de la cadena; `eth_getLogs` y la Data API necesitan una API key.

**¿Puede el agente pasar la API key como argumento de la herramienta?** No. Manténgala en el entorno o en los encabezados del cliente MCP; el servidor MCP rechaza las claves en los argumentos de las herramientas.

**¿Puede la herramienta apuntar a otra cadena?** Sí. Sustituya `eth_mainnet` por cualquier slug de cadena que tenga una `public.url` en `GET /v1/chains`.

## Próximos pasos

* [Resumen de frameworks de agentes](https://docs.blockvectra.com/es/guides/agent-frameworks/) para ElizaOS, viem, wagmi y Coinbase AgentKit.
* [Conectar un agente de IA](https://docs.blockvectra.com/es/guides/ai-agents/) para descubrir endpoints con MCP, llms.txt y OpenAPI.
* [Reglas de facturación](https://docs.blockvectra.com/es/guides/billing-rules/) para la medición de CU, los límites de velocidad y los errores no facturados.
