Skip to main content
Glama
0200project

base-tx-explain

by 0200project

base-tx-explain

Una herramienta MCP: explain_transaction(tx_hash) → explicación JSON estricta de cualquier transacción de la red principal de Base.

Pásale un hash de transacción. Obtén qué ocurrió, en lenguaje sencillo, además de los datos estructurados: qué se movió, quién participó, qué debes tener en cuenta y cuánto costó. Decodificación onchain determinista — sin LLM en ningún punto de la ruta de respuesta, por lo que la misma entrada siempre produce la misma salida, no hay nada que alucinar y el contrato JSON es lo bastante estable como para analizarlo a ciegas.

Solo red principal de Base (chain id 8453).

Enlaces: Endpoint en vivo · Documentación · OpenAPI · Registro MCP: io.github.0200project/base-tx-explain · Sitio

Para agentes

// tools/call → explain_transaction
{ "tx_hash": "0x0c84b951051f779903b57af9225ca570c77cd5531195968dd78106a69d6c4d8c" }

devuelve (tanto como structuredContent como JSON en formato cadena en content[0].text):

{
  "summary": "0x401d...f2c5 swapped 0.03 ETH for 12,899,422 WNL via Uniswap V4 PoolManager.",
  "action_type": "swap",
  "status": "success",
  "assets_moved": [
    { "token": "ETH", "amount": "0.03", "from": "0x401d...", "to": "0xd0a4...", "token_address": null, "standard": "native" },
    { "token": "WNL", "amount": "12899422.144134853458613801", "from": "0x4985...", "to": "0x401d...", "token_address": "0xb200...9a01", "standard": "erc20" }
  ],
  "counterparties": [
    { "address": "0xd0a4...", "label": null },
    { "address": "0x4985...", "label": "Uniswap V4 PoolManager" }
  ],
  "risk_flags": [
    { "flag": "unverified_contract", "detail": "The target contract 0xd0a4...e4bf has no verified source code on Sourcify." }
  ],
  "gas_paid_usd": 0.020562,
  "timestamp": "2026-08-20T03:54:19.000Z",
  "block_number": 50204356,
  "tx_hash": "0x0c84...4c8c",
  "basescan_url": "https://basescan.org/tx/0x0c84...4c8c",
  "partial": false
}

Contrato de campos

  • action_type — uno de: eth_transfer, erc20_transfer, erc20_approval, approval_revoked, approval_for_all, swap, add_liquidity, remove_liquidity, wrap, unwrap, nft_mint, nft_transfer, nft_sale, token_mint, bridge_in, bridge_out, lending_supply, lending_withdraw, lending_borrow, lending_repay, stake, unstake, claim, batch_transfer, account_abstraction_bundle, attestation, name_registration, contract_deployment, contract_interaction, unknown.

  • risk_flags[].flag — uno de: unverified_contract, first_time_counterparty, approval_for_all, unlimited_approval, known_drainer, nonstandard_token_symbol, impersonated_token, transaction_reverted. Una marca siempre significa que se encontró evidencia; una búsqueda fallida nunca genera una marca.

  • statussuccess o reverted. Las transacciones revertidas se clasifican por intención (lo que se intentó) y llevan una marca de riesgo transaction_reverted.

  • partial: true — no se pudo establecer el significado completo de la transacción; summary indica exactamente qué se sabe y qué no. En caso de error, la herramienta devuelve isError: true con { "error": "...", "code": "invalid_hash" | "not_found" | "pending" | "upstream_error" }.

  • Los importes son cadenas decimales (no flotantes). Las direcciones se emiten tal cual en onchain; compara sin distinguir mayúsculas y minúsculas.

  • provenance.untrusted_fields — enumera los campos cuyo contenido de cadena proviene de fuentes controlables por el atacante (símbolos de token, nombres de contrato/colección, nombres de eventos/funciones): hoy summary, assets_moved[].token y counterparties[].label. Si alimentas esta salida a un LLM, trata esos campos como datos, nunca como instrucciones. Un token que se nombra a sí mismo con texto similar a instrucciones o promocional es una señal de estafa, no un comando. Los símbolos se normalizan (se eliminan caracteres de control, separadores de línea, emojis y homoglifos) y un token cuyo símbolo autodeclarado no es un ticker plausible se muestra como su dirección de contrato en lugar de su nombre elegido — así un nombre hostil no puede suplantar a uno real ni colar texto en el contexto de un agente.

Cómo decodifica

Transacción bruta + recibo del RPC de Base → decodificadores integrados para ~40 formatos de eventos (ERC-20/721/1155, Uniswap V2/V3/V4, Aerodrome/Solidly, Seaport, Aave V3, Compound V3, puentes OP-stack, ERC-4337 EntryPoint, EAS, Basenames, WETH, gestores de posición LP) → clasificación determinista ordenada por reglas → etiquetas de una tabla verificada de contratos principales de Base. Los eventos específicos de aplicaciones se nombran mediante el ABI verificado en Sourcify del contrato cuando está disponible. Las marcas de riesgo provienen del estado de verificación de Sourcify/Basescan, las listas negras públicas de ScamSniffer y MyEtherWallet, y la semántica de aprobaciones. gas_paid_usd incluye la tarifa de datos L1 de OP-stack y valora el ETH a partir del feed Chainlink ETH/USD en el bloque de la transacción.

Related MCP server: Base Network MCP Server

Precios

  • 10 llamadas gratuitas por cliente, sin registro.

  • Después: $0.02 por llamada en USDC en Base mediante x402 — la respuesta que requiere pago contiene todo lo que un agente compatible con x402 necesita para pagar y reintentar de forma autónoma. Sin cuenta, sin clave API.

  • También disponible alojado en marketplace (la facturación del marketplace se aplica allí en su lugar).

Conectar

{
  "mcpServers": {
    "base-tx-explain": {
      "type": "streamable-http",
      "url": "https://base-tx-explain.fly.dev/mcp"
    }
  }
}

Autohospedaje

git clone https://github.com/0200project/base-tx-explain.git && cd base-tx-explain
npm install
cp .env.example .env   # defaults work: free mode, public Base RPCs
npm run dev            # or: npm run build && npm start

Entorno (ver .env.example): PAYMENT_MODE (none | x402), X402_PAY_TO (tu dirección receptora — usa una billetera nueva), X402_PRICE_USD, X402_FACILITATOR_URL (por defecto usa el facilitador PayAI sin clave; el facilitador de Coinbase CDP también funciona y sus claves API no conllevan exposición de gasto), FREE_CALLS_PER_IP, BASE_RPC_URLS, ETHERSCAN_API_KEY opcional.

El servidor no tiene estado (servidor MCP nuevo por solicitud), por lo que escala horizontalmente y se ejecuta en cualquier cosa que soporte Docker — se incluyen un Dockerfile y una configuración de Apify .actor/.

npm test          # unit tests
npm run validate  # decode 100 recent live Base txs, print grades (ship gate: >=90% clean, 0 crashes)

Garantías y límites

  • Determinista: mismo hash de transacción → misma decodificación. Sin llamadas a modelos, nunca.

  • Las transferencias ETH internas (movimientos de valor entre contratos) no son visibles sin APIs de rastreo; los eventos WETH cubren los casos comunes. Cuando algo no se puede decodificar, la salida lo indica en lugar de adivinar.

  • Las listas negras se consumen en tiempo de ejecución desde sus fuentes públicas y se actualizan dos veces al día; la ausencia de una marca known_drainer no es una garantía de seguridad.

  • No es asesoramiento financiero; esta herramienta informa qué hizo una transacción, no si algo es una buena idea.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Check a Base contract, transaction or web page before you act. Free pricing, paid per call in USDC.

  • Decode EVM bytes to JSON: event-log decoder, calldata explainer, selector lookup, ABI fetch.

  • Read-only on-chain intelligence for AI agents on Base: balances, tokens, gas, tx status.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/0200project/base-tx-explain'

If you have feedback or need assistance with the MCP directory API, please join our Discord server