TxWhy

Failed Solana transaction in, working transaction out. Exact cause, rebuilt tx, verifiable repair.

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~595Tokens (tool definitions)
~970 BTypical response size
Minimal attention impact (0.46% 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": {
    "txwhy": {
      "url": "https://txwhy.vercel.app/api/mcp"
    }
  }
}

Remote endpoints

https://txwhy.vercel.app/api/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡repair_transaction(transaction, signature)

Give it a Solana transaction that failed, or one you are about to send. It finds the cause and returns a rebuilt UNSIGNED transaction that has been simulated against live mainnet state to prove it passes. Fixes expired blockhashes, compute-unit limits, priority fees, loaded-data limits, slippage on plain Jupiter swaps (fresh quote, same tolerance), and slippage on direct Pump.fun, PumpSwap, Raydium AMM v4, Meteora DBC and Meteora DAMM v2 swaps (only the limit moves, never more than 25% against the user). Handles legacy, v0 and version 1 (SIMD-0385) transactions and durable nonces. When the failure cannot be fixed by rebuilding (not enough funds, a private program's own error), it says so and explains why instead of returning something that would fail again. Pass exactly one of `transaction` or `signature`. Sign the returned transaction with your own key and send it within about 60 seconds.

Input Schema

{
  "type": "object",
  "properties": {
    "transaction": {
      "description": "Base64 serialized transaction, signed or unsigned. Use this before sending, or after a send failed.",
      "type": "string"
    },
    "signature": {
      "description": "Signature (or explorer URL) of a transaction that already landed on mainnet and failed.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢diagnose_transaction(signature)

Explains why a transaction that landed on mainnet failed: the exact failing instruction in the call tree, the named error, its cause, and how to fix it. Read-only and fast. Use repair_transaction when you want a working transaction back.

Input Schema

{
  "type": "object",
  "properties": {
    "signature": {
      "type": "string",
      "description": "Transaction signature or explorer URL."
    }
  },
  "required": [
    "signature"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢explain_error(programId, code)

Looks up what a custom program error code means for a given program, using 1,800+ named errors from major Solana programs plus the runtime's own errors. Use it when you only have a code such as 6001 or 0x1771 from a simulation or an RPC response.

Input Schema

{
  "type": "object",
  "properties": {
    "programId": {
      "type": "string",
      "description": "Base58 address of the program that raised the error."
    },
    "code": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "string"
        }
      ],
      "description": "Error code as a number, or a hex string like 0x1771."
    }
  },
  "required": [
    "programId",
    "code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools