FabTally Decode

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

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
98%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,301Tokens (tool definitions)
~2.5 KBTypical response size
Moderate attention impact (1.02% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "onchain-decode": {
      "url": "https://decode.fabtally.com/mcp"
    }
  }
}

Remote endpoints

https://decode.fabtally.com/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪decode_log(chain, tx_hash, address, topics, data, ...)

PAID $0.003 (x402, USDC on Base). FLAGSHIP: decode EVM event LOGS to human-readable JSON. Give {chain, tx_hash} to decode every log in a transaction, OR {chain, address, topics[], data} for a single log; optional {abi}. Returns each event's name, canonical signature and named/typed args — correctly handling tuple/array/nested params, anonymous events, and indexed vs non-indexed. Resolves the ABI via Sourcify/Blockscout + 4byte event signatures when none is supplied. Without payment returns the x402 challenge; pass x_payment to settle.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "bsc"
      ],
      "description": "EVM chain: ethereum | base | arbitrum | optimism | polygon | bsc."
    },
    "tx_hash": {
      "type": "string",
      "description": "Transaction hash (0x + 64 hex) — decodes every event log in the tx."
    },
    "address": {
      "type": "string",
      "description": "Contract address of a single log (used with topics + data)."
    },
    "topics": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Log topics array (topic0 is the event signature hash for non-anonymous events)."
    },
    "data": {
      "type": "string",
      "description": "Log data field (0x hex) holding the non-indexed args."
    },
    "abi": {
      "anyOf": [
        {
          "type": "array"
        },
        {
          "type": "string"
        }
      ],
      "description": "Optional contract ABI (JSON array or JSON string). If omitted, the ABI is resolved from the verified source (Sourcify/Blockscout) or 4byte.directory."
    },
    "x_payment": {
      "type": "string",
      "description": "x402 payment payload (base64) for this PAID decode. If supplied it is forwarded as the X-PAYMENT header to settle the call and return the real result instead of a 402 challenge. Omit to get the price challenge first."
    }
  },
  "required": [
    "chain"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢decode_calldata(chain, to, data, abi, x_payment)

PAID $0.002 (x402, USDC on Base). Decode a contract function call. Give {chain, to?, data, abi?}; get the 4-byte selector resolved to a function signature (via provided ABI, the verified contract source, or 4byte.directory) plus fully decoded, typed arguments (tuples/arrays/nested included). Without payment returns the x402 challenge.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "bsc"
      ],
      "description": "EVM chain: ethereum | base | arbitrum | optimism | polygon | bsc."
    },
    "to": {
      "type": "string",
      "description": "Contract address the call targets (optional; enables verified-ABI resolution)."
    },
    "data": {
      "type": "string",
      "description": "Calldata (0x hex, at least the 4-byte selector)."
    },
    "abi": {
      "anyOf": [
        {
          "type": "array"
        },
        {
          "type": "string"
        }
      ],
      "description": "Optional contract ABI (JSON array or JSON string). If omitted, the ABI is resolved from the verified source (Sourcify/Blockscout) or 4byte.directory."
    },
    "x_payment": {
      "type": "string",
      "description": "x402 payment payload (base64) for this PAID decode. If supplied it is forwarded as the X-PAYMENT header to settle the call and return the real result instead of a 402 challenge. Omit to get the price challenge first."
    }
  },
  "required": [
    "chain",
    "data"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪selector_lookup(selector, x_payment)

PAID $0.001 (x402, USDC on Base). Resolve a 4-byte function selector (0x + 8 hex) OR a 32-byte event topic hash (0x + 64 hex) to its human-readable signature(s) via 4byte.directory + openchain.xyz. Returns all matches (selectors can collide) with a verified flag. Without payment returns the x402 challenge; pass x_payment to settle.

Input Schema

{
  "type": "object",
  "properties": {
    "selector": {
      "type": "string",
      "description": "A 4-byte function selector (0x + 8 hex) or a 32-byte event topic hash (0x + 64 hex)."
    },
    "x_payment": {
      "type": "string",
      "description": "x402 payment payload (base64) for this PAID decode. If supplied it is forwarded as the X-PAYMENT header to settle the call and return the real result instead of a 402 challenge. Omit to get the price challenge first."
    }
  },
  "required": [
    "selector"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢abi_fetch(chain, address, x_payment)

PAID $0.002 (x402, USDC on Base). Fetch the verified ABI + metadata for a contract. Give {address, chain}; get the ABI JSON, verification status/source (Sourcify or Blockscout), the callable function/event signatures, and full proxy-implementation resolution (EIP-1967/1822/OZ-legacy/beacon) — returning the implementation's ABI when it's a proxy. Without payment returns the x402 challenge; pass x_payment to settle.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "bsc"
      ],
      "description": "EVM chain: ethereum | base | arbitrum | optimism | polygon | bsc."
    },
    "address": {
      "type": "string",
      "description": "Contract address (0x + 40 hex)."
    },
    "x_payment": {
      "type": "string",
      "description": "x402 payment payload (base64) for this PAID decode. If supplied it is forwarded as the X-PAYMENT header to settle the call and return the real result instead of a 402 challenge. Omit to get the price challenge first."
    }
  },
  "required": [
    "chain",
    "address"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools