# BlockVectra ile LangChain agent'larında blokzincir RPC kullanın

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

Bir LangChain agent'ı, `https://api.blockvectra.com/v1/eth_mainnet/public` adresine JSON-RPC POST eden tek bir araç üzerinden canlı blokzincir verisini okur. Bu uç nokta, her zincirin `public.methods` listesindeki yöntemler için API key veya kayıt gerektirmez. Bir anahtar gerisini ekler ve Ücretsiz Plan, 30 günlük pencere başına 30,000,000 CU verir. Kontrol tarihi 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` ile kurun; model dizesi ve sağlayıcı anahtarı [LangChain hızlı başlangıcını](https://docs.langchain.com/oss/python/langchain/quickstart) izler. Araç, LangChain'in [`@tool` dekoratörünü](https://docs.langchain.com/oss/python/langchain/tools) ve [`create_agent`](https://reference.langchain.com/python/langchain/agents/factory/create_agent) işlevini kullanır.

## TypeScript'te aynı araç

```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()` imzası için LangChain JS [araçlar rehberine](https://docs.langchain.com/oss/javascript/langchain/tools) bakın.

## Bir API key ile her yöntemi çağırın

`eth_getLogs` gibi `public.methods` dışındaki yöntemler bir anahtar gerektirir. Anahtarı ortamdan okuyun ve `x-api-key` başlığında gönderin; zincir slug'ı (`eth_mainnet`, `base_mainnet` vb.) `GET /v1/chains` içinden gelir:

```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 yanıtının tamamını döndürmek, modelin bir `error` nesnesini okuyup bir sonraki çağrısını değiştirmesini sağlar. Anahtarı tarayıcı olmadan oluşturmak için [programatik kayıt rehberindeki](https://docs.blockvectra.com/tr/guides/programmatic-signup/?ref=docs-langchain) dört adımlı akışı çalıştırın: challenge, imza, oturum açma, ardından `POST /keys`. Geliştiriciler ayrıca [konsolda bir anahtar oluşturabilir](https://console.blockvectra.com/login/?next=%2Fkeys%2F\&ref=docs-langchain).

## Belge MCP sunucusunu ekleyin

LangChain agent'ları MCP sunucularına `MCPAdapter` ile bağlanır. Agent'a `list_chains`, `get_status`, `rpc_call`, `read_doc` ve [MCP sunucusu sayfasında](https://docs.blockvectra.com/tr/guides/mcp-server/) listelenen diğer araçları vermek için onu `https://docs.blockvectra.com/mcp` adresine yönlendirin. Bağlanmak için anahtar gerekmez.

```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]"` ile kurun (`langchain>=1.4.0`, beta). Anahtar gerektiren araçları kullanmak için anahtarı bearer token olarak iletin: `from fastmcp.client import Client` ile `MCPAdapter(Client(url, auth=os.environ["BLOCKVECTRA_API_KEY"]))`, LangChain'in [MCP kimlik doğrulama rehberindeki](https://docs.langchain.com/oss/python/langchain/mcp/auth) gibi.

TypeScript'te `@langchain/mcp-adapters@^2.0.0` paketini kurun ve bir başlık eşlemesi iletin:

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

Anahtarsız bağlanmak için `headers` satırını kaldırın. Resmî başvurular: [LangChain MCP (Python)](https://docs.langchain.com/oss/python/langchain/mcp) ve [LangChain MCP (JavaScript)](https://docs.langchain.com/oss/javascript/langchain/mcp).

## Aracınızın göreceği hatalar

| Yanıt                                 | Anlamı                                            | Agent ne yapmalı                                                                    |
| ------------------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------- |
| HTTP 401, `-32024`, `missing_api_key` | Anahtar gerektiren URL anahtarsız çağrıldı        | Anahtarı `x-api-key` başlığında veya yolda gönderin                                 |
| HTTP 401, `-32024`, `invalid_api_key` | Anahtar bilinmiyor, devre dışı veya iptal edilmiş | Anahtarı konsolda kontrol edin; yeni bir anahtarın etkinleşmesi birkaç saniye sürer |
| `-32601`, `method_not_public`         | Yöntem zincirin `public.methods` listesinde değil | `/public` yerine anahtarlı bir URL kullanın                                         |
| `-32601`, method not available        | Yöntem o zincirde etkin değil                     | `GET /v1/chains` içindeki `methods.allow` alanını kontrol edin                      |

Her hata `data.reason` ve bir `docs_url` taşır; tam liste [hatalar sayfasındadır](https://docs.blockvectra.com/tr/errors/).

## Sık sorulan sorular

**Genel uç nokta `eth_getLogs` için çalışır mı?** Hayır. Yalnızca zincirin `public.methods` listesindeki yöntemleri sunar; `eth_getLogs` ve Data API bir API key gerektirir.

**Agent, API key'i bir araç argümanı olarak iletebilir mi?** Hayır. Anahtarı ortamda veya MCP istemcisinin başlıklarında tutun; MCP sunucusu araç argümanlarındaki anahtarları reddeder.

**Araç başka bir zinciri hedefleyebilir mi?** Evet. `eth_mainnet` değerini, `GET /v1/chains` içinde bir `public.url` değeri olan herhangi bir zincir slug'ı ile değiştirin.

## Sonraki adımlar

* ElizaOS, viem, wagmi ve Coinbase AgentKit için [Agent çerçevesi genel bakışı](https://docs.blockvectra.com/tr/guides/agent-frameworks/).
* MCP, llms.txt ve OpenAPI ile uç noktaları keşfetmek için [bir AI Agent'ı bağlayın](https://docs.blockvectra.com/tr/guides/ai-agents/).
* CU ölçümü, hız sınırları ve faturalandırılmayan hatalar için [faturalandırma kuralları](https://docs.blockvectra.com/tr/guides/billing-rules/).
