# 在 Coinbase AgentKit Agent 中用 BlockVectra 调用区块链 RPC

> 原文地址: https://docs.blockvectra.com/zh/guides/coinbase-agentkit/

Coinbase AgentKit 通过钱包提供者执行链上操作，`ViemWalletProvider` 接受任意 viem `WalletClient`。把该客户端的传输层设为 `https://api.blockvectra.com/v1/base_mainnet/public`，AgentKit 的 RPC 流量无需 API key 即走 BlockVectra。加上 key 可使用其余方法，免费套餐每个 30 天窗口含 30,000,000 CU，核对于 2026-10-10。

```typescript
import { AgentKit, ViemWalletProvider } from "@coinbase/agentkit";
import { getLangChainTools } from "@coinbase/agentkit-langchain";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";

const client = createWalletClient({
  account: privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`),
  chain: base,
  transport: http("https://api.blockvectra.com/v1/base_mainnet/public"),
});

const agentKit = await AgentKit.from({ walletProvider: new ViemWalletProvider(client) });
const tools = await getLangChainTools(agentKit);
```

用 `npm install @coinbase/agentkit @coinbase/agentkit-langchain viem` 安装。`tools` 即 AgentKit 的 [LangChain 集成](https://github.com/coinbase/agentkit/blob/main/typescript/agentkit/README.md)传给 `createAgent({ model, tools })` 的工具列表；钱包密钥留在你的环境变量中。

## 使用 API key

公共端点只提供各链 `public.methods` 中的方法。其余方法通过 `x-api-key` 请求头发送 key，并保存在环境变量中，这样 key 不会出现在 URL 里：

```typescript
const transport = http("https://api.blockvectra.com/v1/base_mainnet", {
  fetchOptions: { headers: { "x-api-key": process.env.BLOCKVECTRA_API_KEY! } },
});
```

如果客户端无法设置请求头，也可以改把 key 放进 URL 路径（`/v1/{chain}/{api_key}`）；URL 可能出现在访问日志里，优先用请求头。

无需浏览器创建 key，按[程序化开户指南](https://docs.blockvectra.com/zh/guides/programmatic-signup/)的四步操作：challenge、签名、login，再 `POST /keys`。开发者也可以[在控制台创建 key](https://console.blockvectra.com/login/?next=%2Fkeys%2F)。同一个 key 适用于所有链，把 Agent 切到其他网络只需改链标识与 viem 的 chain 对象。

## 把 AgentKit 动作与文档 MCP 服务合用

AgentKit 的 TypeScript 包把动作暴露为 LangChain 工具，因此 LangChain 适配器提供的 MCP 工具可以放进同一个 `tools` 数组。按 [LangChain 指南](https://docs.blockvectra.com/zh/guides/langchain/#接入文档-mcp-服务)加载 `https://docs.blockvectra.com/mcp`，再合并：

```typescript
const agent = createAgent({ model: "claude-sonnet-5", tools: [...tools, ...(await adapter.listTools())] });
```

Agent 因此同时拥有 AgentKit 的钱包动作与 BlockVectra 的 `list_chains`、`get_status`、`rpc_call`、`read_doc`，工具列表见 [MCP 服务页](https://docs.blockvectra.com/zh/guides/mcp-server/)。连接无需 key。

## 可能遇到的错误

| 响应                                  | 含义                          | 处理方式                              |
| ----------------------------------- | --------------------------- | --------------------------------- |
| HTTP 401，`-32024`，`missing_api_key` | 调用需要 key 的方法时没带 key         | 用 `x-api-key` 请求头（或 URL 路径）发送 key |
| HTTP 401，`-32024`，`invalid_api_key` | key 不存在、已停用或已撤销             | 在控制台核对 key；新 key 需要几秒钟生效          |
| `-32601`，`method_not_public`        | 该方法不在该链的 `public.methods` 中 | 把该传输层从 `/public` 换成带 key 的地址      |

BlockVectra 的每个错误都带有 `data.reason` 与 `docs_url`；完整列表见[错误码页](https://docs.blockvectra.com/zh/errors/)。

## 官方文档

* [GitHub 上的 coinbase/agentkit](https://github.com/coinbase/agentkit)
* [viem HTTP 传输层](https://viem.sh/docs/clients/transports/http.html)

## 常见问题

**BlockVectra 能看到钱包私钥吗？** 不能。viem 账户在本地签名；端点收到的是读取请求与已签名的原始交易。

**Agent 能通过公共端点读取日志吗？** 不能。`eth_getLogs` 与 Data API 需要 API key。

**key 要放进 MCP 工具参数吗？** 不要。把它放在环境变量或 MCP 客户端请求头中。

## 下一步

* [Agent 框架总览](https://docs.blockvectra.com/zh/guides/agent-frameworks/)：LangChain、ElizaOS、viem 与 wagmi。
* [接入 AI Agent](https://docs.blockvectra.com/zh/guides/ai-agents/)：通过 MCP、llms.txt 和 OpenAPI 自动发现接口。
* [计费规则](https://docs.blockvectra.com/zh/guides/billing-rules/)：CU 计量、速率限制与不计费错误。
