Integración con el Vercel AI SDK
El Vercel AI SDK puede cargar herramientas de cualquier servidor MCP. Apunta su cliente MCP a @burnbound/mcp y generateText o streamText reciben fetch_paid y el resto de herramientas de Burnbound: tu agente puede pagar APIs x402 y reembolsar cargos de Stripe a través de tu gateway de acciones, y cada pago o reembolso se comprueba contra su política de Burnbound (hosts permitidos, máximo por pago, tope diario, aprobaciones) antes de que se mueva el dinero. La API del cliente sigue la guía de herramientas MCP del AI SDK.
Esta página usa el servidor MCP porque el SDK de JavaScript de Burnbound todavía no está publicado en npm (consulta SDK). Todo lo que aparece aquí es un paquete publicado.
Instalación
npm install ai @ai-sdk/mcp @ai-sdk/anthropic @burnbound/mcp
Probado con ai 7.0, @ai-sdk/mcp 2.0 y @burnbound/mcp 0.3.1 en Node.js 22. Sirve cualquier proveedor de modelos; el ejemplo usa Anthropic.
Necesitas una clave del agente (bb_agent_…) del panel de Burnbound, para un agente con sus topes, sus hosts permitidos y una cartera conectada. Primeros pasos lo deja listo.
Conecta las herramientas de Burnbound
import { anthropic } from "@ai-sdk/anthropic";
import { createMCPClient } from "@ai-sdk/mcp";
import { Experimental_StdioMCPTransport } from "@ai-sdk/mcp/mcp-stdio";
import { generateText, isStepCount } from "ai";
const burnbound = await createMCPClient({
transport: new Experimental_StdioMCPTransport({
command: "npx",
args: ["-y", "@burnbound/mcp@latest"],
env: { BURNBOUND_KEY: process.env.BURNBOUND_KEY! },
}),
});
try {
const { text } = await generateText({
model: anthropic("claude-opus-5-5"),
tools: await burnbound.tools(),
stopWhen: isStepCount(10),
system:
"Pay for APIs only with the fetch_paid tool. Call get_budget first. " +
"If fetch_paid returns an error, report its code instead of retrying.",
prompt:
'Search the web with Exa for "x402 payments": POST https://api.exa.ai/search ' +
'with the JSON body {"query": "x402 payments", "numResults": 5}, maxAmountUsd "0.02".',
});
console.log(text);
} finally {
await burnbound.close();
}
burnbound.tools() devuelve las herramientas con sus propios nombres: fetch_paid, get_budget, list_payments, get_approval_status, search_paid_apis, diagnose_payment (desde la 0.4.0), propose_rule (desde la 0.5.0) y stripe_refund (desde la 0.10.0, con el gateway de acciones). El ejemplo paga a Exa (0.007 USDC por búsqueda en Base la última vez que lo verificamos), así que api.exa.ai tiene que estar en los hosts permitidos del agente. Hay más vendedores en el catálogo de APIs x402.
Pasa todas las variables de Burnbound en env
El transporte stdio no le pasa todo tu entorno al servidor, solo unas pocas variables como PATH y HOME. Pon de forma explícita en env todas las variables BURNBOUND_* que necesite el servidor: BURNBOUND_KEY siempre, y BURNBOUND_WALLET_PROFILE si el agente firma con una cartera local que no es la predeterminada. La lista completa está en la referencia de herramientas MCP.
Qué ve el modelo cuando se rechaza un pago
Un pago denegado no lanza una excepción. El resultado MCP vuelve con isError: true y un cuerpo JSON, y el AI SDK se lo devuelve al modelo sin reintentar, así que el modelo puede leer el código y contártelo:
{
"error": {
"code": "policy_denied",
"message": "The agent's spending policy denied this payment, so nothing was paid. See reasons.",
"reasons": ["daily_cap_exceeded"],
"policyVersion": 4
}
}
La política se mantiene decida lo que decida el modelo. La línea del prompt sobre los errores solo evita que el modelo se quede en bucle ante un rechazo. Los pagos que necesitan a una persona, por ejemplo uno igual o superior al umbral de aprobación del agente o el primero a una dirección de cobro nueva, vuelven como pending_approval; consulta Aprobación humana de los pagos de agentes con Slack para ver cómo reintentar.
Dónde puede ejecutarse
El servidor es un proceso hijo que se arranca con npx, así que necesita Node.js 20 o posterior en la máquina que ejecuta tu agente. La documentación del AI SDK dice que el transporte stdio es para servidores locales y no se puede desplegar en entornos de producción, y @burnbound/mcp solo habla stdio. Por eso esta configuración encaja con agentes que se ejecutan donde pueden arrancar un proceso hijo (tu máquina, un job de CI, un proceso de larga duración que gestionas tú), no en funciones serverless ni edge.
Si el agente firma con una cartera local (firma en el cliente), la clave tiene que estar en el llavero de esa misma máquina o en ~/.burnbound. En un contenedor o un servidor compartido, mejor una cartera de Coinbase CDP: así nada en la máquina puede firmar. Consulta Carteras de agente: Coinbase CDP o una clave local.
Cómo se probó este ejemplo
Ejecutamos esta conexión de principio a fin con @burnbound/mcp 0.3.1: el cliente del AI SDK listó las cinco herramientas, get_budget devolvió el presupuesto del agente y fetch_paid pagó a un vendedor de prueba en Base Sepolia (status: "paid"), llamando a la herramienta a través del propio objeto de herramienta del AI SDK. La llamada al modelo es código estándar del AI SDK.
Relacionado
- LangChain.js y Mastra: el mismo servidor en otros frameworks.
- Cómo limitar el gasto de un agente de IA: todos los límites que aplica la política.
- Primeros pasos: crea el agente y su clave.