Todos los artículos
8 min de lectura

Cómo un agente de IA hace swaps en TON sin custodia

Swap de tokens en TON sin custodia para agentes de IA: get_swap_quote y build_swap_tx vía Omniston, sin que el servidor toque tus claves privadas.

TONMCPswap de tokenssin custodiaOmnistonagentes de IA

Quién tiene la clave: la gran pregunta del swap sin custodia en TON con un agente

Imagina que le encargas a un agente de IA seguir el precio y, cuando USDT baje, comprar más a cambio de GRAM. El agente evalúa el mercado, encuentra el momento, prepara la operación… y ahí aparece la pregunta que casi siempre llega demasiado tarde. Para que el agente ejecute el swap de verdad, alguien tiene que firmar la transacción con una clave privada. ¿Quién tiene esa clave?

Si la respuesta es «el servicio a través del cual opera el agente», acabas de darle a código ajeno el poder de disponer de tu dinero. Basta una inyección de prompt o un log filtrado para que el agente firme algo distinto de lo que creías. Y el problema real no es «cómo llamar al DEX», sino cómo dejar que el agente arme la operación manteniendo la firma estrictamente en el wallet del humano. Vamos a ver cómo hacer un swap de tokens en TON con un agente, sin custodia.

Las dos mitades de un swap: calcular es seguro, firmar no

Un swap en un DEX tiene dos partes de naturaleza muy distinta. La primera es computacional e inofensiva: consultar el precio, calcular el slippage, construir el cuerpo de la transacción. La segunda es irreversible y peligrosa: firmar ese cuerpo con la clave privada y enviarlo a la red. De ahí nace la bifurcación:

  • Modelo con custodia. El agente (o el servidor que hay detrás) guarda la clave y firma por su cuenta. Es cómodo: el agente actúa de forma autónoma. Pero la clave de firma queda al lado de un LLM, y un LLM es una pieza no determinista a la que se puede convencer con texto no confiable (descripciones de jettons, respuestas de otras herramientas, mensajes del usuario). Así funciona, por ejemplo, el @ton/mcp oficial de la TON Foundation: es un agente-wallet con clave de operador que firma envíos y swaps por sí mismo (esquema split-key: la clave de operador la tiene el agente, la clave de propietario el usuario). Es un modelo que funciona y tiene puntos fuertes — gasto autónomo, soporte de NFT y DNS, estatus de paquete oficial. Pero implica confiar en quien custodia la clave.
  • Modelo sin custodia. El servidor solo prepara la transacción y la devuelve sin firmar. La firma la pone el wallet del usuario a través de TonConnect. El servidor nunca ve ni almacena la clave privada.

Para un agente de trading que corre día y noche, el segundo modelo elimina el riesgo principal: aunque la infraestructura se vea comprometida, lo peor que puede «romperse» es un borrador sin firmar, que de todos modos confirmas a mano o mediante la política de tu wallet. Esta bifurcación está desglosada en la comparación honesta de TONNode con el @ton/mcp oficial.

El modelo sin custodia de TONNode: el servidor devuelve una transacción sin firmar

TONNode es un servidor MCP hosted para TON. MCP (Model Context Protocol) es el estándar mediante el cual los agentes de IA (Claude, Cursor, ChatGPT/Codex y cualquier cliente MCP) invocan herramientas externas. TONNode le da al agente 16 herramientas para trabajar con TON, y las herramientas de swap, cross-chain y generación de wallet son estrictamente no custodiales.

El invariante clave: el servidor NUNCA firma ni almacena fondos ni claves privadas. Para el swap, eso significa que la herramienta final no devuelve una «operación ejecutada», sino un mensaje TonConnect sin firmar: un objeto listo para firmar. El servidor no puede, físicamente, cambiar el destinatario de los fondos después de la firma, porque la firma no está en sus manos.

El swap en TONNode son exactamente dos herramientas:

  • get_swap_quote — cotización en firme,
  • build_swap_tx — transacción sin firmar, lista para TonConnect.

Ambas funcionan sobre el protocolo Omniston, que agrega la liquidez de STON.fi y DeDust a la vez: la cotización se calcula contra ambos DEX y recibes la mejor disponible. El swap opera en pares GRAM⇄jetton. GRAM es el Toncoin renombrado (el cambio de nombre fue en junio de 2026); la red sigue llamándose TON. Es decir, el «GRAM» de la cotización es la moneda nativa de la red.

get_swap_quote: cotización en firme vía Omniston (STON.fi + DeDust)

El primer paso es saber cuánto vas a recibir realmente. get_swap_quote devuelve una cotización en firme: el importe esperado a la salida y el tipo de cambio. Como por debajo Omniston consulta STON.fi y DeDust en paralelo, el agente no necesita recorrer pools ni comparar a mano — ve directamente el resultado agregado.

Consigue una cotización para el swap de 100 USDT → GRAM.
Usa get_swap_quote. Muestra el importe esperado a la salida y el tipo de cambio.

Hay un matiz importante por el que las cotizaciones suelen calcularse mal: la cotización trabaja con unidades raw (las fracciones mínimas indivisibles del token), no con números «humanos». Por eso, antes de calcular el importe del swap de un jetton, necesitas conocer sus decimals.

get_jetton_info: para qué necesitas los decimals antes del swap (USDT = 6)

Este es el error típico que rompe swaps: el agente toma «100 USDT» y mete 100 en el campo del importe. Pero on-chain el jetton no conoce el «100» — solo existen unidades raw. Cuántas unidades raw hay en un token lo define el parámetro decimals, y el importe se calcula como cantidad × 10^decimals.

  • USDT en TON tiene decimals = 6 → 100 USDT son 100 × 10^6 = 100 000 000 unidades raw.
  • La mayoría de los jettons tienen decimals = 9 → 100 tokens son 100 000 000 000 unidades raw.

Si ingenuamente le añades a «100 USDT» nueve ceros (como en GRAM), estarás pidiendo un swap por un importe 1000 veces mayor del que pretendías. Equivocarse en tres órdenes de magnitud aquí es facilísimo. Por eso get_jetton_info es un paso obligatorio: devuelve el nombre, el símbolo, los decimals y la emisión del jetton.

Antes del swap, obtén los decimals del jetton de entrada con get_jetton_info,
y solo entonces calcula el importe en unidades raw.

Este tema está tratado con más profundidad en el artículo sobre conectar agentes de IA a TON vía MCP.

Herramientas auxiliares: parse_address y get_jetton_balance

También conviene llamar a dos herramientas auxiliares antes de construir la transacción:

  • parse_address — validación y conversión de direcciones offline (EQ/UQ/raw). Un seguro barato contra un typo en la dirección del jetton o del destinatario antes de armar nada.
  • get_jetton_balance — saldo del jetton a partir de la dirección principal del wallet. La dirección del jetton-wallet para el saldo se calcula on-chain dentro de la herramienta, así que hay que pasar la dirección principal, no la del jetton-wallet. Un error frecuente es pasarle la dirección del jetton-wallet; no hace falta, pásale la principal.

build_swap_tx: un mensaje sin firmar para TonConnect

Con la cotización obtenida y los importes calculados en las unidades raw correctas, build_swap_tx arma la transacción en sí. Y aquí está la esencia del modelo sin custodia: la herramienta devuelve un mensaje TonConnect SIN FIRMAR. No es una operación enviada, es un borrador: dirección del contrato, importe, payload. El servidor te entrega el «sobre», pero no lo sella — el sello (la firma) lo pone tu wallet.

Después, el mensaje va a un wallet compatible con TonConnect (Tonkeeper y otros), el usuario ve exactamente qué está firmando y lo confirma. La clave privada no abandona el wallet en ningún paso ni llega jamás al servidor de TONNode.

Construye la transacción de swap con la última cotización usando build_swap_tx.
Devuélveme el mensaje TonConnect sin firmar — lo firmaré yo en mi wallet.

El flujo completo: de la cotización a la firma en el wallet

La secuencia típica para el swap de un jetton es esta:

  1. parse_address — validar y normalizar la dirección del jetton y del destinatario (offline).
  2. get_jetton_info — conocer los decimals (USDT = 6, lo habitual es 9), el nombre y el símbolo.
  3. get_jetton_balance — confirmar que hay fondos suficientes (dirección principal, no el jetton-wallet).
  4. get_swap_quote — obtener la cotización en firme vía Omniston (STON.fi + DeDust).
  5. build_swap_tx — construir la transacción TonConnect sin firmar.
  6. El wallet del usuario firma a través de TonConnect — la firma queda del lado del usuario.

A nivel de prompt, para el agente suena así de natural:

Quiero cambiar 50 GRAM por USDT.
Primero valida la dirección del jetton USDT con parse_address,
obtén sus decimals con get_jetton_info,
comprueba el saldo con get_jetton_balance,
pide la cotización con get_swap_quote y construye la transacción con build_swap_tx.
No envíes la transacción — devuélveme el mensaje sin firmar para TonConnect.

El agente descompondrá esto en llamadas a herramientas por su cuenta, y a la salida obtienes un borrador que firmas en tu propio wallet. Fíjate en un detalle: el último paso no es una herramienta de TONNode. La firma la ejecuta el wallet, y justo por ahí pasa la frontera de la no-custodia. Si estás construyendo un agente de trading completo, échale un vistazo al análisis de retardos y latencia al operar en TON — allí este flujo está integrado en el ciclo de decisión. Y para operaciones fuera de TON, TONNode ofrece cinco herramientas cross-chain sin custodia basadas en escrow atómico HTLC.

Cómo conectar las herramientas de swap a Claude, Cursor o ChatGPT

Las herramientas de swap están disponibles en todos los planes, incluido el Hobby gratuito (60 peticiones/min) — Hobby es una clave hosted. Solo pagas por el throughput: el set de 16 herramientas es idéntico en todas las claves.

En local y gratis — para lectura. El paquete @tonnode/mcp es open source (MIT), habla el protocolo nativo ADNL de TON sin capas HTTP intermedias y se levanta con un solo comando. La configuración pública te da el set completo de herramientas de lectura:

{
  "mcpServers": {
    "ton": {
      "command": "npx",
      "args": ["-y", "@tonnode/mcp"]
    }
  }
}

Endpoint hosted — para el swap y el resto. Tu propia clave (con el Hobby gratuito basta), capacidad garantizada y las 16 herramientas, incluidas get_swap_quote y build_swap_tx:

{
  "mcpServers": {
    "ton": {
      "type": "http",
      "url": "https://mcp.tonnode.io/mcp",
      "headers": { "Authorization": "Bearer tn_live_…" }
    }
  }
}

Esta configuración va en los ajustes MCP de tu cliente — Claude Desktop, Cursor, ChatGPT/Codex o cualquier otro agente compatible con MCP. Tras conectar la clave hosted, las herramientas get_swap_quote y build_swap_tx aparecen en el agente automáticamente. La clave tn_live_… se emite nada más iniciar sesión, sin tarjeta.

Lo esencial, en corto

  • El swap en TONNode son dos herramientas: get_swap_quote (cotización en firme) y build_swap_tx (transacción sin firmar para TonConnect).
  • Ambas pasan por Omniston — el agregador de liquidez de STON.fi y DeDust.
  • La firma siempre es del usuario. El servidor no almacena ni firma claves — a diferencia del @ton/mcp oficial, que es custodial.
  • Antes del swap de un jetton, consulta sus decimals con get_jetton_info (USDT = 6, la mayoría = 9); si no, el importe en unidades raw saldrá mal.
  • Las herramientas de swap funcionan con cualquier clave hosted, incluido el Hobby gratuito.

El swap sin custodia en TON para un agente es una disciplina de separación de roles: el servidor calcula y construye, el wallet firma. En TONNode son exactamente dos herramientas sobre Omniston más get_jetton_info para unos decimals correctos — y ninguna clave privada sale jamás de las manos del usuario.

La forma más fácil de empezar es con la clave gratuita. Consigue tu clave Hobby sin tarjeta y conecta las herramientas de swap en un par de minutos: tonnode.io/dashboard?plan=hobby. Si prefieres ver antes el set completo de herramientas, pásate por la página de herramientas.

Dale a tu agente acceso a TON

16 herramientas MCP: lectura, swaps no custodiales, cross-chain y billeteras. Plan gratuito — 60 req/min, sin tarjeta.