{
  "data": {
    "tool": {
      "category": "",
      "endpoint": "https://merx.exchange/mcp/sse",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/merx-mcp.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/merx-mcp.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/merx-mcp.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 10230,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 11
          },
          "findings": [
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_monitor",
              "message": "notify (object with no properties), params (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_standing_order",
              "message": "action_params (object with no properties), trigger_params (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "execute_intent",
              "message": "steps (array with no items)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "simulate",
              "message": "steps (array with no items)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "cancel_monitor",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "cancel_standing_order",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "get_contract_info",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "get_standing_order",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "register_agent",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "wait_for_delegation",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC23",
              "severity": "warn",
              "message": "66 tools",
              "fix": "Offer a smaller default toolset and let clients opt into the rest."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "66 of 66 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:25:05Z",
        "count": 66,
        "note": "answered without the initialize handshake",
        "schemaTokens": 10230,
        "status": "ok",
        "tools": [
          {
            "name": "get_prices",
            "description": "Get current energy and bandwidth prices from all Merx providers, sorted by best (minimum) price across all duration tiers. Each provider lists ALL its duration tiers (5min/1h/1d/7d/30d etc) — short rentals are usually more expensive per unit than long ones, so always check tier-by-tier. Optionally filter by exact duration in seconds. No auth required.",
            "inputSchema": {
              "properties": {
                "duration": {
                  "description": "Filter to providers offering this exact duration in seconds (e.g. 3600 for 1h, 86400 for 1d, 604800 for 7d, 2592000 for 30d). Omit to see all tiers.",
                  "type": "number"
                },
                "resource": {
                  "description": "Filter by resource type. Omit for all.",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_best_price",
            "description": "Quick lookup of the single cheapest provider for a resource type, with optional minimum amount filter. CAVEAT: this returns a single representative price per provider, not broken down by duration tier — short rentals (5min) and long rentals (30 days) have very different per-unit prices and this tool does not distinguish between them. For an accurate per-tier comparison, use get_prices(duration=N) where N is the exact rental duration in seconds (e.g. 3600 for 1h, 86400 for 1d, 2592000 for 30d). Use get_best_price only when you need the absolute floor price as a quick sanity-check. No auth required.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Amount of resource units needed.",
                  "type": "number"
                },
                "resource": {
                  "description": "Resource type.",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "resource"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "analyze_prices",
            "description": "Market price analysis with trends and recommendations. No auth required.",
            "inputSchema": {
              "properties": {
                "resource": {
                  "description": "Filter by resource type. Omit for all.",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_price_history",
            "description": "Historical price snapshots. No auth required.",
            "inputSchema": {
              "properties": {
                "period": {
                  "description": "Time period (default: 24h).",
                  "enum": [
                    "1h",
                    "6h",
                    "24h",
                    "7d",
                    "30d"
                  ],
                  "type": "string"
                },
                "provider": {
                  "description": "Filter by provider name.",
                  "type": "string"
                },
                "resource": {
                  "description": "Filter by resource type.",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "compare_providers",
            "description": "Side-by-side provider comparison with prices and availability. No auth required.",
            "inputSchema": {
              "properties": {
                "resource": {
                  "description": "Filter by resource type. Omit for all.",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "estimate_transaction_cost",
            "description": "Estimate cost of a TRON transaction BEFORE sending. Aliases: estimate_cost, calculate_cost, transaction_cost, energy_cost, transfer_cost. Calculate exactly how much energy, bandwidth, and TRX a TRON transaction will cost before sending it. Use this to answer questions like \"how much does a USDT transfer cost?\" or \"what will it cost me to send 100 USDT to address X?\". Returns: energy units needed, bandwidth needed, TRX cost if you burn directly, and TRX cost if you rent energy from Merx (typically 70-80% cheaper). Supports trc20_transfer (e.g. USDT/USDC), trc20_approve, trx_transfer, and custom contract calls. No auth required.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Token amount (as string).",
                  "type": "string"
                },
                "contract_address": {
                  "description": "Contract address (custom).",
                  "type": "string"
                },
                "from_address": {
                  "description": "Sender TRON address.",
                  "type": "string"
                },
                "function_selector": {
                  "description": "Function selector (custom).",
                  "type": "string"
                },
                "operation": {
                  "description": "Transaction type.",
                  "enum": [
                    "trc20_transfer",
                    "trc20_approve",
                    "trx_transfer",
                    "custom"
                  ],
                  "type": "string"
                },
                "parameter": {
                  "description": "ABI-encoded parameter (custom).",
                  "type": "string"
                },
                "to_address": {
                  "description": "Recipient TRON address.",
                  "type": "string"
                },
                "token_address": {
                  "description": "TRC20 contract address.",
                  "type": "string"
                }
              },
              "required": [
                "operation"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "check_address_resources",
            "description": "Check energy, bandwidth, and TRX balance for any TRON address. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address (starts with T).",
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_order",
            "description": "Buy energy or bandwidth at the Merx market quote, fulfilled by PowerSun. Confirmed Merx funds and API key required; no commission.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Amount of resource units (min 65000 for ENERGY, 300 for BANDWIDTH).",
                  "type": "number"
                },
                "duration_sec": {
                  "description": "Rental duration in seconds (e.g. 300, 3600, 86400, 2592000).",
                  "type": "number"
                },
                "max_price_sun": {
                  "description": "Optional max price in SUN/unit. Order fails if no provider is cheaper.",
                  "type": "number"
                },
                "resource_type": {
                  "description": "Resource type to purchase.",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                },
                "target_address": {
                  "description": "TRON address to receive delegated resources.",
                  "type": "string"
                }
              },
              "required": [
                "resource_type",
                "amount",
                "duration_sec",
                "target_address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_order",
            "description": "Get order status by UUID. Aliases: get_order_status, check_order, order_status, order_details, fetch_order. Check the status and fill details of an existing order by its UUID. Returns current status (PENDING/FILLING/FILLED/PARTIAL/FAILED/CANCELLED), fill amounts, provider used, on-chain delegation tx hash if delivered. Use this to poll order progress after creating an order. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "order_id": {
                  "description": "The order UUID.",
                  "type": "string"
                }
              },
              "required": [
                "order_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_orders",
            "description": "List recent orders with optional status filter. Auth required.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "description": "Max number of orders to return (default: 20).",
                  "type": "number"
                },
                "status": {
                  "description": "Filter by order status.",
                  "enum": [
                    "PENDING",
                    "FILLING",
                    "FILLED",
                    "PARTIAL",
                    "FAILED",
                    "CANCELLED"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "ensure_resources",
            "description": "Declarative resource provisioning. Checks current resources on target address and purchases only what is missing. Auth required.",
            "inputSchema": {
              "properties": {
                "bandwidth_minimum": {
                  "description": "Minimum bandwidth the address should have.",
                  "type": "number"
                },
                "duration_sec": {
                  "description": "Rental duration in seconds (default: 3600).",
                  "type": "number"
                },
                "energy_minimum": {
                  "description": "Minimum energy the address should have.",
                  "type": "number"
                },
                "idempotency_key": {
                  "description": "Unique operation ID (1–200 characters). Reuse exactly this ID when retrying this operation.",
                  "type": "string"
                },
                "target_address": {
                  "description": "TRON address to provision resources for.",
                  "type": "string"
                }
              },
              "required": [
                "target_address",
                "idempotency_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "wait_for_delegation",
            "description": "Block until an order reaches a terminal state (FILLED, PARTIAL, FAILED, or CANCELLED) by polling get_order at fixed intervals. Use this right after create_order when you need to confirm the energy/bandwidth has actually been delegated on-chain before sending the next transaction. Returns the final order details including the on-chain delegation tx hash. Auth required.",
            "inputSchema": {
              "properties": {
                "order_id": {
                  "description": "The order UUID returned by create_order.",
                  "type": "string"
                },
                "poll_interval_sec": {
                  "description": "How often to check status in seconds (default: 3, min: 1).",
                  "type": "number"
                },
                "timeout_sec": {
                  "description": "Maximum time to wait in seconds (default: 60, max: 300).",
                  "type": "number"
                }
              },
              "required": [
                "order_id"
              ],
              "type": "object"
            }
          },
          {
            "name": "get_balance",
            "description": "Get your Merx account balance (TRX, USDT, locked). Requires MERX_API_KEY.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_deposit_info",
            "description": "Get your Merx deposit address and memo. Requires MERX_API_KEY.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_transaction_history",
            "description": "Get your Merx account transaction history. Requires MERX_API_KEY.",
            "inputSchema": {
              "properties": {
                "period": {
                  "description": "Time period to query. Default: 30D.",
                  "enum": [
                    "7D",
                    "30D",
                    "90D"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "explain_concept",
            "description": "Explain a TRON or Merx concept in plain language. Hardcoded topics (exact match): energy, bandwidth, staking, delegation, sun_units, burn_vs_rent, merx_routing, provider_types. The lookup is fuzzy — substring matches also work, so \"rent\" finds \"burn_vs_rent\" and \"providers\" finds \"provider_types\". For topics outside this list (e.g. x402, stablecoins, gasfree), pick the closest hardcoded topic, or just answer the question yourself from the broader context — this tool only returns canned explanations of TRON resource economics.",
            "inputSchema": {
              "properties": {
                "topic": {
                  "description": "Topic to explain. Exact: energy, bandwidth, staking, delegation, sun_units, burn_vs_rent, merx_routing, provider_types. Fuzzy substrings (e.g. \"rent\", \"providers\") also work.",
                  "type": "string"
                }
              },
              "required": [
                "topic"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "suggest_duration",
            "description": "Recommend a rental duration based on your use case. No authentication required.",
            "inputSchema": {
              "properties": {
                "transaction_count": {
                  "description": "Expected number of transactions (optional).",
                  "type": "number"
                },
                "use_case": {
                  "description": "Your intended use case.",
                  "enum": [
                    "single_transfer",
                    "batch_transfers",
                    "dapp_session",
                    "daily_operations",
                    "weekly_operations",
                    "monthly_budget"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "use_case"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "calculate_savings",
            "description": "Calculate savings from renting energy vs burning TRX. No authentication required.",
            "inputSchema": {
              "properties": {
                "operation": {
                  "description": "Operation type. Default: trc20_transfer.",
                  "enum": [
                    "trc20_transfer",
                    "trc20_approve",
                    "trx_transfer"
                  ],
                  "type": "string"
                },
                "transaction_count": {
                  "description": "Number of transactions. Default: 1.",
                  "type": "number"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_providers",
            "description": "List all Merx providers with types, durations, and availability. No authentication required.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_account_info",
            "description": "Inspect any TRON address. Aliases: check_address, get_address_info, get_wallet_info, address_info, account_status. Read the full on-chain state of ANY TRON address (does not have to be your own): TRX balance, free + delegated energy, free + delegated bandwidth, frozen TRX, account creation timestamp. Use this to check if an address has enough resources before sending a transaction, or to inspect any TRON wallet. No auth required, no API key needed.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address (T...).",
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_trx_balance",
            "description": "Quick TRX balance for a TRON address. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address (T...).",
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_trc20_balance",
            "description": "Get TRC-20 token balance for an address. Supports symbol (USDT, USDC) or contract address. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address to query.",
                  "type": "string"
                },
                "token": {
                  "description": "Token symbol (USDT, USDC) or contract address.",
                  "type": "string"
                }
              },
              "required": [
                "address",
                "token"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_transaction",
            "description": "Look up a transaction by ID on TRON. No auth required.",
            "inputSchema": {
              "properties": {
                "tx_id": {
                  "description": "Transaction ID (hash).",
                  "type": "string"
                }
              },
              "required": [
                "tx_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_block",
            "description": "Get TRON block info by number (or latest if omitted). No auth required.",
            "inputSchema": {
              "properties": {
                "block_number": {
                  "description": "Block number. Omit for latest.",
                  "type": "number"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_chain_parameters",
            "description": "Get TRON network parameters (energy fee, bandwidth cost, etc.) with Merx price comparison. No auth required.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "convert_address",
            "description": "Convert TRON address between base58 (T...) and hex (41...) formats. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address in base58 (T...) or hex (41...).",
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_trx_price",
            "description": "Get current TRX price from CoinGecko. No auth required.",
            "inputSchema": {
              "properties": {
                "currency": {
                  "description": "Fiat currency code (default: usd).",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "validate_address",
            "description": "Validate a TRON address format and check on-chain status. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address to validate.",
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "search_transaction_history",
            "description": "Get on-chain transaction history for a TRON address. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address.",
                  "type": "string"
                },
                "limit": {
                  "description": "Max results (default: 20).",
                  "type": "number"
                },
                "type": {
                  "description": "Transaction type filter (default: all).",
                  "enum": [
                    "all",
                    "trx",
                    "trc20"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "transfer_trx",
            "description": "Send TRX to an address. Checks bandwidth, buys via Merx if needed. Signs and broadcasts on-chain. Requires TRON_PRIVATE_KEY.",
            "inputSchema": {
              "properties": {
                "amount_trx": {
                  "description": "Amount of TRX to send.",
                  "type": "string"
                },
                "resource_operation_id": {
                  "description": "Optional stable ID for resource purchases. Reuse on retries; this does not make the token transfer itself idempotent.",
                  "type": "string"
                },
                "to_address": {
                  "description": "Recipient TRON address.",
                  "type": "string"
                }
              },
              "required": [
                "to_address",
                "amount_trx"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "transfer_trc20",
            "description": "Transfer TRC-20 tokens with automatic energy optimization. Signs and broadcasts on-chain. Requires TRON_PRIVATE_KEY.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Amount to transfer (human-readable).",
                  "type": "string"
                },
                "resource_operation_id": {
                  "description": "Optional stable ID for resource purchases. Reuse on retries; this does not make the token transfer itself idempotent.",
                  "type": "string"
                },
                "to_address": {
                  "description": "Recipient TRON address.",
                  "type": "string"
                },
                "token": {
                  "description": "Token symbol (USDT, USDC) or contract address.",
                  "type": "string"
                }
              },
              "required": [
                "to_address",
                "token",
                "amount"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "approve_trc20",
            "description": "Approve TRC-20 spending allowance. Signs and broadcasts on-chain. Requires TRON_PRIVATE_KEY.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Allowance amount (human-readable, or \"unlimited\").",
                  "type": "string"
                },
                "resource_operation_id": {
                  "description": "Optional stable ID for resource purchases. Reuse on retries; this does not make the token transfer itself idempotent.",
                  "type": "string"
                },
                "spender": {
                  "description": "Spender TRON address.",
                  "type": "string"
                },
                "token": {
                  "description": "Token symbol or contract address.",
                  "type": "string"
                }
              },
              "required": [
                "token",
                "spender",
                "amount"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_token_info",
            "description": "Get TRC-20 token metadata: name, symbol, decimals, total supply. No auth required.",
            "inputSchema": {
              "properties": {
                "token": {
                  "description": "Token symbol or contract address.",
                  "type": "string"
                }
              },
              "required": [
                "token"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "read_contract",
            "description": "Call a view/pure function on a TRON smart contract. No auth or private key required.",
            "inputSchema": {
              "properties": {
                "contract_address": {
                  "description": "Contract TRON address.",
                  "type": "string"
                },
                "function_selector": {
                  "description": "Function signature, e.g. \"balanceOf(address)\".",
                  "type": "string"
                },
                "parameter": {
                  "description": "ABI-encoded parameter hex (optional).",
                  "type": "string"
                }
              },
              "required": [
                "contract_address",
                "function_selector"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "estimate_contract_call",
            "description": "Estimate energy and bandwidth cost for a smart contract call. Compares rental vs burn cost. No auth required.",
            "inputSchema": {
              "properties": {
                "caller_address": {
                  "description": "Caller TRON address for simulation (optional).",
                  "type": "string"
                },
                "contract_address": {
                  "description": "Contract TRON address.",
                  "type": "string"
                },
                "function_selector": {
                  "description": "Function signature, e.g. \"transfer(address,uint256)\".",
                  "type": "string"
                },
                "parameter": {
                  "description": "ABI-encoded parameter hex (optional).",
                  "type": "string"
                }
              },
              "required": [
                "contract_address",
                "function_selector"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "call_contract",
            "description": "Execute a state-changing smart contract function. Estimates resources, buys via Merx if needed. Requires TRON_PRIVATE_KEY and TRON_ADDRESS.",
            "inputSchema": {
              "properties": {
                "call_value_trx": {
                  "description": "TRX to send with call (optional).",
                  "type": "string"
                },
                "contract_address": {
                  "description": "Contract TRON address.",
                  "type": "string"
                },
                "function_selector": {
                  "description": "Function signature, e.g. \"stake(uint256)\".",
                  "type": "string"
                },
                "parameter": {
                  "description": "ABI-encoded parameter hex (optional).",
                  "type": "string"
                },
                "resource_operation_id": {
                  "description": "Optional stable ID for resource purchases. Reuse on retries; this does not make the token transfer itself idempotent.",
                  "type": "string"
                }
              },
              "required": [
                "contract_address",
                "function_selector"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_contract_info",
            "description": "Get on-chain metadata for a TRON smart contract: existence check, owner address, energy origin, code hash, contract name (if set), ABI entries count. Use this to check whether an address is a contract before calling read_contract or estimate_contract_call. For TRC20-specific metadata (name, symbol, decimals, totalSupply) use get_token_info instead. No auth required.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "Contract TRON address (T...)",
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            }
          },
          {
            "name": "get_swap_quote",
            "description": "Get a real swap quote from SunSwap V2. No auth required.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Amount of source token to swap",
                  "type": "string"
                },
                "from_token": {
                  "description": "Source token symbol (TRX, USDT, USDC, etc.)",
                  "type": "string"
                },
                "slippage": {
                  "description": "Slippage tolerance in percent (default 1)",
                  "type": "number"
                },
                "to_token": {
                  "description": "Destination token symbol",
                  "type": "string"
                }
              },
              "required": [
                "from_token",
                "to_token",
                "amount"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "execute_swap",
            "description": "Execute a token swap on SunSwap V2. Requires TRON_PRIVATE_KEY.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Amount of source token to swap",
                  "type": "string"
                },
                "from_token": {
                  "description": "Source token symbol (TRX, USDT, USDC, etc.)",
                  "type": "string"
                },
                "resource_operation_id": {
                  "description": "Optional stable ID for resource purchases. Reuse on retries; this does not make the token transfer itself idempotent.",
                  "type": "string"
                },
                "slippage": {
                  "description": "Slippage tolerance in percent (default 1)",
                  "type": "number"
                },
                "to_token": {
                  "description": "Destination token symbol",
                  "type": "string"
                }
              },
              "required": [
                "from_token",
                "to_token",
                "amount"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_token_price",
            "description": "Get token price via SunSwap quote + CoinGecko USD rate. No auth required.",
            "inputSchema": {
              "properties": {
                "token": {
                  "description": "Token symbol (USDT, USDC, SUN, etc.)",
                  "type": "string"
                }
              },
              "required": [
                "token"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_account",
            "description": "Create a new Merx account, generate an API key, and get deposit info. No auth needed.",
            "inputSchema": {
              "properties": {
                "email": {
                  "description": "Email address for the account",
                  "type": "string"
                },
                "password": {
                  "description": "Password (min 8 characters)",
                  "type": "string"
                }
              },
              "required": [
                "email",
                "password"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "login",
            "description": "Log in to an existing Merx account. No MERX_API_KEY needed.",
            "inputSchema": {
              "properties": {
                "email": {
                  "description": "Email address",
                  "type": "string"
                },
                "password": {
                  "description": "Password",
                  "type": "string"
                }
              },
              "required": [
                "email",
                "password"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "set_api_key",
            "description": "Set your Merx API key for this session. Unlocks all authenticated tools (trading, balance, orders). Use this if you already have an API key.",
            "inputSchema": {
              "properties": {
                "api_key": {
                  "description": "Your Merx API key (starts with sk_live_)",
                  "type": "string"
                }
              },
              "required": [
                "api_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "set_private_key",
            "description": "Set your TRON private key for this session. Address is derived automatically. Enables write tools: transfer_trx, transfer_trc20, approve_trc20, execute_swap, deposit_trx. Key stays local - never sent to Merx servers.",
            "inputSchema": {
              "properties": {
                "private_key": {
                  "description": "Your TRON private key (64 hex characters)",
                  "type": "string"
                }
              },
              "required": [
                "private_key"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "deposit_trx",
            "description": "Deposit TRX to your Merx account. Requires MERX_API_KEY + TRON_PRIVATE_KEY.",
            "inputSchema": {
              "properties": {
                "amount_trx": {
                  "description": "Amount of TRX to deposit",
                  "type": "string"
                }
              },
              "required": [
                "amount_trx"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "enable_auto_deposit",
            "description": "Configure automatic top-up when balance drops below a threshold. The configuration lives ONLY in the current MCP session — it is held in memory by the MCP server process and is lost on server restart, MCP client reconnect, or server redeploy. Top-ups are signed locally with TRON_PRIVATE_KEY and sent to your Merx deposit address (memo-routed). For persistent auto-deposit you currently need to call this tool again at the start of each session.",
            "inputSchema": {
              "properties": {
                "deposit_amount_trx": {
                  "description": "Amount of TRX per deposit",
                  "type": "string"
                },
                "max_daily_deposits": {
                  "description": "Max deposits per day (default 5)",
                  "type": "number"
                },
                "threshold_trx": {
                  "description": "Balance threshold in TRX",
                  "type": "string"
                }
              },
              "required": [
                "threshold_trx",
                "deposit_amount_trx"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "pay_invoice",
            "description": "Pay an x402 invoice by signing and broadcasting a TRX transfer to the invoice address, then verifying the payment with the facilitator. x402 (Coinbase + Cloudflare HTTP 402 standard) is the protocol AI agents use to pay APIs per call. Use this when you receive an invoice_id from a paywalled service or another agent. REQUIRES: TRON_PRIVATE_KEY in env (use set_private_key first) AND a valid invoice_id from create_invoice or x402 challenge response. The transfer is signed locally — your private key never leaves the MCP process.",
            "inputSchema": {
              "properties": {
                "invoice_id": {
                  "description": "Invoice ID to pay",
                  "type": "string"
                }
              },
              "required": [
                "invoice_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "create_paid_order",
            "description": "Create a zero-registration order via x402 pay-per-use. Requires TRON_PRIVATE_KEY.",
            "inputSchema": {
              "properties": {
                "amount": {
                  "description": "Amount of resource units",
                  "type": "number"
                },
                "duration_sec": {
                  "description": "Duration in seconds",
                  "type": "number"
                },
                "resource_type": {
                  "description": "Resource type",
                  "enum": [
                    "ENERGY",
                    "BANDWIDTH"
                  ],
                  "type": "string"
                },
                "target_address": {
                  "description": "TRON address to receive resources",
                  "type": "string"
                }
              },
              "required": [
                "resource_type",
                "amount",
                "duration_sec",
                "target_address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "execute_intent",
            "description": "Plan a multi-step operation (transfer, swap, buy resources, etc) and return a cost estimate, total energy/bandwidth needed, and the cheapest resource acquisition strategy. NOTE: actual on-chain execution of multi-step intents is not yet wired up — currently returns the same plan as simulate, regardless of dry_run. Use this for planning; for real execution call the underlying tools (create_order, transfer_trc20, execute_swap) yourself in sequence. Auth required.",
            "inputSchema": {
              "properties": {
                "dry_run": {
                  "description": "If true, simulate only without executing (default: false).",
                  "type": "boolean"
                },
                "resource_strategy": {
                  "description": "Resource acquisition strategy (default: batch_cheapest).",
                  "enum": [
                    "batch_cheapest",
                    "per_step",
                    "no_resources"
                  ],
                  "type": "string"
                },
                "steps": {
                  "description": "Array of { action, params } steps to execute.",
                  "type": "array"
                }
              },
              "required": [
                "steps"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "simulate",
            "description": "Dry-run a multi-step operation (transfer, swap, buy resources, etc) without sending anything on-chain. Returns per-step energy and bandwidth estimates plus a total TRX cost. Use this to preview a plan before committing — for example, before transferring USDT to multiple recipients you can simulate to see the total energy cost. No auth required.",
            "inputSchema": {
              "properties": {
                "resource_strategy": {
                  "description": "Resource acquisition strategy (default: batch_cheapest).",
                  "enum": [
                    "batch_cheapest",
                    "per_step",
                    "no_resources"
                  ],
                  "type": "string"
                },
                "steps": {
                  "description": "Array of { action, params } steps to simulate.",
                  "type": "array"
                }
              },
              "required": [
                "steps"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_standing_order",
            "description": "Create a server-side standing order with trigger-based automation. Auth required.",
            "inputSchema": {
              "properties": {
                "action_params": {
                  "description": "Action parameters: { resource_type, amount, duration_sec, target_address }.",
                  "type": "object"
                },
                "action_type": {
                  "description": "Action to perform when triggered.",
                  "enum": [
                    "buy_resource",
                    "ensure_resources",
                    "notify_only"
                  ],
                  "type": "string"
                },
                "budget_trx": {
                  "description": "Maximum budget in TRX (converted to SUN internally).",
                  "type": "string"
                },
                "expires_at": {
                  "description": "ISO 8601 expiration date (optional).",
                  "type": "string"
                },
                "max_executions": {
                  "description": "Maximum number of times this order can execute.",
                  "type": "number"
                },
                "trigger_params": {
                  "description": "Trigger parameters: { resource, threshold_sun } or { cron }.",
                  "type": "object"
                },
                "trigger_type": {
                  "description": "Condition that triggers the order.",
                  "enum": [
                    "price_below",
                    "price_above",
                    "schedule",
                    "balance_below"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "trigger_type",
                "trigger_params",
                "action_type",
                "action_params",
                "budget_trx",
                "max_executions"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_standing_orders",
            "description": "List all standing orders with optional status filter. Auth required.",
            "inputSchema": {
              "properties": {
                "status": {
                  "description": "Filter by status.",
                  "enum": [
                    "ACTIVE",
                    "TRIGGERED",
                    "EXHAUSTED",
                    "EXPIRED",
                    "CANCELLED"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_standing_order",
            "description": "Get full details of a single standing order by its UUID. Returns trigger config, action params, budget, executions count, and status. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "order_id": {
                  "description": "Standing order UUID (from list_standing_orders).",
                  "type": "string"
                }
              },
              "required": [
                "order_id"
              ],
              "type": "object"
            }
          },
          {
            "name": "cancel_standing_order",
            "description": "Cancel a standing order by its UUID. The order is moved to CANCELLED status and will not trigger again. Already-executed actions are NOT reversed. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "order_id": {
                  "description": "Standing order UUID to cancel.",
                  "type": "string"
                }
              },
              "required": [
                "order_id"
              ],
              "type": "object"
            }
          },
          {
            "name": "create_monitor",
            "description": "Create a persistent server-side monitor that fires notifications when a condition is met. Four monitor types: delegation_expiry (warns when leased energy is about to expire so you can re-rent), balance_threshold (fires when an address goes below a TRX/USDT level), price_alert (fires when energy/bandwidth price crosses a SUN threshold), address_activity (fires on any incoming TX). Notification defaults to webhook=true if omitted. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "monitor_type": {
                  "description": "Type of monitor to create.",
                  "enum": [
                    "delegation_expiry",
                    "balance_threshold",
                    "price_alert",
                    "address_activity"
                  ],
                  "type": "string"
                },
                "notify": {
                  "description": "Notification config: { webhook?: boolean, telegram_chat_id?: string }. Defaults to { webhook: true } if omitted.",
                  "type": "object"
                },
                "params": {
                  "description": "Type-specific params. delegation_expiry: { alert_before_sec, auto_renew, resource_type }. balance_threshold: { resource: \"TRX\"|\"ENERGY\"|\"BANDWIDTH\", below: number }. price_alert: { resource: \"ENERGY\"|\"BANDWIDTH\", above_sun?: number, below_sun?: number }. address_activity: { min_amount_trx?: number }.",
                  "type": "object"
                },
                "target_address": {
                  "description": "TRON address to monitor. Required for delegation_expiry, balance_threshold, address_activity. Not used for price_alert.",
                  "type": "string"
                }
              },
              "required": [
                "monitor_type",
                "params"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "list_monitors",
            "description": "List all monitors you created with create_monitor, optionally filtered by status (ACTIVE/CANCELLED). Each row shows the full monitor UUID (pass to cancel_monitor), monitor type, target address, and status. Note: the Target column will be empty for monitor types that do not have a single watched address — specifically price_alert and balance_threshold (when watching the API key holder rather than a third-party address). For delegation_expiry and address_activity monitors, Target will always be set. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "status": {
                  "description": "Filter by monitor status.",
                  "enum": [
                    "ACTIVE",
                    "CANCELLED"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "cancel_monitor",
            "description": "Cancel an active monitor by its UUID. The monitor stops firing notifications. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "monitor_id": {
                  "description": "Monitor UUID to cancel.",
                  "type": "string"
                }
              },
              "required": [
                "monitor_id"
              ],
              "type": "object"
            }
          },
          {
            "name": "withdraw",
            "description": "Withdraw TRX or USDT from your Merx account to an external TRON address. The \"amount\" parameter is interpreted in the currency specified by \"currency\" — i.e. for currency=TRX it is TRX units, for currency=USDT it is USDT units. (The legacy parameter \"amount_trx\" is still accepted as an alias for backwards compatibility, but is misleading when currency is USDT — prefer \"amount\" in new code.) Requires MERX_API_KEY.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "Destination TRON address (starts with T).",
                  "type": "string"
                },
                "amount": {
                  "description": "Amount to withdraw, in units of the chosen currency. E.g. \"100\" with currency=TRX = 100 TRX, \"100\" with currency=USDT = 100 USDT.",
                  "type": "string"
                },
                "amount_trx": {
                  "description": "DEPRECATED alias for \"amount\" — kept for backwards compatibility. Pass \"amount\" instead in new code.",
                  "type": "string"
                },
                "currency": {
                  "description": "Currency to withdraw. Default: TRX.",
                  "enum": [
                    "TRX",
                    "USDT"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "compile_policy",
            "description": "Convert a natural language energy management policy into MERX automation. Creates standing orders and monitors based on your instructions.\n\nExamples:\n- \"Keep 500k energy on my wallet, buy when price is below 55 SUN, max 200 TRX/week\"\n- \"Buy energy every day at 6 AM UTC, 1 million units, for 24 hours\"\n- \"Alert me when my energy drops below 100k\"\n\nReturns a preview of what will be created. Set apply=true to execute.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address this policy applies to (optional)",
                  "type": "string"
                },
                "apply": {
                  "description": "Set to true to create the standing orders. Default false (preview only).",
                  "type": "boolean"
                },
                "instruction": {
                  "description": "Natural language description of the desired automation policy",
                  "type": "string"
                }
              },
              "required": [
                "instruction"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "resource_broadcast",
            "description": "Broadcast a signed TRON transaction with automatic energy optimization.\nIf the target address lacks sufficient energy, MERX purchases the deficit at the best\nmarket price before broadcasting. One call: estimate, buy energy, wait for delegation, broadcast.\n\nRequires MERX_API_KEY with the \"broadcast\" scope, and a pre-signed transaction.\nReturns txid on success, refunds on timeout.\n\nNOTE: This endpoint is currently behind a feature flag and disabled by default in production.\nIf you get a 503 MAINTENANCE error, use the manual flow instead: call ensure_resources to\nprovision energy, then sign and broadcast the transaction with your own TronWeb client.",
            "inputSchema": {
              "properties": {
                "signed_tx": {
                  "description": "Hex-encoded signed TRON transaction",
                  "type": "string"
                },
                "target_address": {
                  "description": "TRON address that will execute the transaction (must match TX sender)",
                  "type": "string"
                }
              },
              "required": [
                "signed_tx",
                "target_address"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "register_agent",
            "description": "Register your TRON address as an agent on agent.merx.exchange. Required ONCE before using request_payment, create_invoice, watch_address, agent_status, or any other agent payment tool. Pass the TRON address you want to use as the on-chain identity for this API key. Idempotent — calling twice with the same key returns the existing registration. Auth required (API key).",
            "inputSchema": {
              "properties": {
                "label": {
                  "description": "Optional human-readable label (max 64 chars)",
                  "type": "string"
                },
                "tron_address": {
                  "description": "Your TRON address (T...) that will receive payments and act as the agent identity.",
                  "type": "string"
                }
              },
              "required": [
                "tron_address"
              ],
              "type": "object"
            }
          },
          {
            "name": "request_payment",
            "description": "Create a TRC20 payment request on TRON (USDT, USDC, USDD, or any TRC20). Returns a payment address. Fires webhook when payment arrives (\u003c3 seconds). Use for receiving payments from other agents or humans. Requires agent registration first — call register_agent if you get AGENT_NOT_REGISTERED error.",
            "inputSchema": {
              "properties": {
                "amount_usdt": {
                  "description": "Amount in token units (e.g. \"5.00\")",
                  "type": "string"
                },
                "description": {
                  "description": "What this payment is for",
                  "type": "string"
                },
                "timeout_seconds": {
                  "description": "Wait timeout (10-3600, default 300)",
                  "type": "number"
                },
                "tolerance_pct": {
                  "description": "Amount tolerance % (default 0 = exact)",
                  "type": "number"
                },
                "webhook_url": {
                  "description": "URL to notify on payment (optional)",
                  "type": "string"
                }
              },
              "required": [
                "amount_usdt"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "lookup_invoice",
            "description": "Look up a MERX invoice. Shows amount, recipient, token, and status. Agent must sign and broadcast the transfer separately (non-custodial).",
            "inputSchema": {
              "properties": {
                "invoice_id": {
                  "description": "Invoice UUID (e.g. eaa00c4e-1234-5678-90ab-cdef12345678) returned by create_invoice, or a full payment URL containing /pay/\u003cuuid\u003e.",
                  "type": "string"
                }
              },
              "required": [
                "invoice_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_invoice",
            "description": "Create an invoice for another agent or human to pay. Returns payment URL, address, and QR code. Payment is detected automatically via ZeroMQ (\u003c3 seconds).",
            "inputSchema": {
              "properties": {
                "amount_usdt": {
                  "description": "Amount in USDT",
                  "type": "string"
                },
                "description": {
                  "description": "What the invoice is for",
                  "type": "string"
                },
                "expires_in": {
                  "description": "Expiry in seconds (60-86400, default 3600)",
                  "type": "number"
                }
              },
              "required": [
                "amount_usdt"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "watch_address",
            "description": "Watch any TRON address for TRC20 transfers (USDT, USDC, USDD, or any token). Fires webhook on each matching transfer. Persistent - runs 24/7 even when conversation ends.",
            "inputSchema": {
              "properties": {
                "address": {
                  "description": "TRON address to watch (T...)",
                  "type": "string"
                },
                "event_types": {
                  "description": "Event types to watch",
                  "items": {
                    "enum": [
                      "usdt_incoming",
                      "usdt_outgoing",
                      "trx_incoming"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                },
                "min_amount_usdt": {
                  "description": "Minimum amount filter (default \"0\")",
                  "type": "string"
                },
                "ttl_hours": {
                  "description": "Watch duration in hours (1-720, default 24)",
                  "type": "number"
                },
                "webhook_url": {
                  "description": "Webhook URL for notifications",
                  "type": "string"
                }
              },
              "required": [
                "address",
                "webhook_url"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "agent_status",
            "description": "Get a snapshot of your agent payment service: registered TRON address, count of pending payment requests (request_payment), active address watches (watch_address), and outstanding invoices (create_invoice). Use this right after register_agent to confirm the agent is set up, or any time you want to see how much in-flight activity your agent has. Auth required (API key) and agent must be registered first via register_agent.",
            "inputSchema": {
              "properties": {},
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "readOnlyHint": true
            }
          }
        ]
      },
      "name": "MERX - TRON Resource Exchange",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "npm",
          "identifier": "merx-mcp",
          "version": "1.0.5",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/merx-mcp.json",
      "popularity": {
        "githubStars": 3,
        "npmWeekly": 93
      },
      "registryName": "exchange.merx/mcp",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://merx.exchange/mcp/sse"
        }
      ],
      "repository": "https://github.com/Hovsteder/merx-mcp",
      "reviewed": false,
      "slug": "merx-mcp",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=exchange.merx/mcp",
      "summary": "TRON energy exchange for AI agents. 54 tools, 30 prompts, 21 resources. A2A + ACP.",
      "updatedAt": "2026-04-02T18:54:13Z",
      "url": "https://www.anchorterminal.com/tools/merx-mcp",
      "vendor": "merx.exchange",
      "vendorUrl": "https://merx.exchange",
      "version": "1.0.5",
      "websiteUrl": "",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/merx-mcp",
    "json": "https://www.anchorterminal.com/tools/merx-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/merx-mcp.md",
    "slim": "https://www.anchorterminal.com/tools/merx-mcp.min.md"
  },
  "markdown": "# MERX - TRON Resource Exchange\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by merx.exchange (https://merx.exchange)\n- Listed because: It's published in the registry under merx.exchange, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: TRON energy exchange for AI agents. 54 tools, 30 prompts, 21 resources. A2A + ACP.\n\n## Facts\n\n- MCP registry: `exchange.merx/mcp` 1.0.5\n- Endpoint: https://merx.exchange/mcp/sse (streamable HTTP)\n- Package: npm `merx-mcp` (stdio)\n- Source: https://github.com/Hovsteder/merx-mcp\n- npm downloads a week: 93\n- GitHub stars: 3\n- Registry entry updated: 2026-04-02\n\n## Tools\n\n- Tools it lists (66, about 10,230 tokens of context, `tools/list` without credentials, checked 2026-10-04 22:25 UTC):\n  - `get_prices` (read-only): Get current energy and bandwidth prices from all Merx providers, sorted by best (minimum) price across all duration tiers. Each provider lists ALL its duration…\n  - `get_best_price` (read-only): Quick lookup of the single cheapest provider for a resource type, with optional minimum amount filter. CAVEAT: this returns a single representative price per…\n  - `analyze_prices` (read-only): Market price analysis with trends and recommendations. No auth required.\n  - `get_price_history` (read-only): Historical price snapshots. No auth required.\n  - `compare_providers` (read-only): Side-by-side provider comparison with prices and availability. No auth required.\n  - `estimate_transaction_cost` (read-only): Estimate cost of a TRON transaction BEFORE sending. Aliases: estimate_cost, calculate_cost, transaction_cost, energy_cost, transfer_cost. Calculate exactly how…\n  - `check_address_resources` (read-only): Check energy, bandwidth, and TRX balance for any TRON address. No auth required.\n  - `create_order` (writes): Buy energy or bandwidth at the Merx market quote, fulfilled by PowerSun. Confirmed Merx funds and API key required; no commission.\n  - `get_order` (read-only): Get order status by UUID. Aliases: get_order_status, check_order, order_status, order_details, fetch_order. Check the status and fill details of an existing…\n  - `list_orders` (read-only): List recent orders with optional status filter. Auth required.\n  - `ensure_resources` (writes): Declarative resource provisioning. Checks current resources on target address and purchases only what is missing. Auth required.\n  - `wait_for_delegation`: Block until an order reaches a terminal state (FILLED, PARTIAL, FAILED, or CANCELLED) by polling get_order at fixed intervals. Use this right after…\n  - `get_balance` (read-only): Get your Merx account balance (TRX, USDT, locked). Requires MERX_API_KEY.\n  - `get_deposit_info` (read-only): Get your Merx deposit address and memo. Requires MERX_API_KEY.\n  - `get_transaction_history` (read-only): Get your Merx account transaction history. Requires MERX_API_KEY.\n  - `explain_concept` (read-only): Explain a TRON or Merx concept in plain language. Hardcoded topics (exact match): energy, bandwidth, staking, delegation, sun_units, burn_vs_rent,…\n  - `suggest_duration` (read-only): Recommend a rental duration based on your use case. No authentication required.\n  - `calculate_savings` (read-only): Calculate savings from renting energy vs burning TRX. No authentication required.\n  - `list_providers` (read-only): List all Merx providers with types, durations, and availability. No authentication required.\n  - `get_account_info` (read-only): Inspect any TRON address. Aliases: check_address, get_address_info, get_wallet_info, address_info, account_status. Read the full on-chain state of ANY TRON…\n  - `get_trx_balance` (read-only): Quick TRX balance for a TRON address. No auth required.\n  - `get_trc20_balance` (read-only): Get TRC-20 token balance for an address. Supports symbol (USDT, USDC) or contract address. No auth required.\n  - `get_transaction` (read-only): Look up a transaction by ID on TRON. No auth required.\n  - `get_block` (read-only): Get TRON block info by number (or latest if omitted). No auth required.\n  - `get_chain_parameters` (read-only): Get TRON network parameters (energy fee, bandwidth cost, etc.) with Merx price comparison. No auth required.\n  - `convert_address` (read-only): Convert TRON address between base58 (T...) and hex (41...) formats. No auth required.\n  - `get_trx_price` (read-only): Get current TRX price from CoinGecko. No auth required.\n  - `validate_address` (read-only): Validate a TRON address format and check on-chain status. No auth required.\n  - `search_transaction_history` (read-only): Get on-chain transaction history for a TRON address. No auth required.\n  - `transfer_trx` (writes): Send TRX to an address. Checks bandwidth, buys via Merx if needed. Signs and broadcasts on-chain. Requires TRON_PRIVATE_KEY.\n  - `transfer_trc20` (writes): Transfer TRC-20 tokens with automatic energy optimization. Signs and broadcasts on-chain. Requires TRON_PRIVATE_KEY.\n  - `approve_trc20` (writes): Approve TRC-20 spending allowance. Signs and broadcasts on-chain. Requires TRON_PRIVATE_KEY.\n  - `get_token_info` (read-only): Get TRC-20 token metadata: name, symbol, decimals, total supply. No auth required.\n  - `read_contract` (read-only): Call a view/pure function on a TRON smart contract. No auth or private key required.\n  - `estimate_contract_call` (read-only): Estimate energy and bandwidth cost for a smart contract call. Compares rental vs burn cost. No auth required.\n  - `call_contract` (writes): Execute a state-changing smart contract function. Estimates resources, buys via Merx if needed. Requires TRON_PRIVATE_KEY and TRON_ADDRESS.\n  - `get_contract_info`: Get on-chain metadata for a TRON smart contract: existence check, owner address, energy origin, code hash, contract name (if set), ABI entries count. Use this…\n  - `get_swap_quote` (read-only): Get a real swap quote from SunSwap V2. No auth required.\n  - `execute_swap` (writes): Execute a token swap on SunSwap V2. Requires TRON_PRIVATE_KEY.\n  - `get_token_price` (read-only): Get token price via SunSwap quote + CoinGecko USD rate. No auth required.\n  - `create_account` (writes): Create a new Merx account, generate an API key, and get deposit info. No auth needed.\n  - `login` (writes): Log in to an existing Merx account. No MERX_API_KEY needed.\n  - `set_api_key` (writes): Set your Merx API key for this session. Unlocks all authenticated tools (trading, balance, orders). Use this if you already have an API key.\n  - `set_private_key` (writes): Set your TRON private key for this session. Address is derived automatically. Enables write tools: transfer_trx, transfer_trc20, approve_trc20, execute_swap,…\n  - `deposit_trx` (writes): Deposit TRX to your Merx account. Requires MERX_API_KEY + TRON_PRIVATE_KEY.\n  - `enable_auto_deposit` (writes): Configure automatic top-up when balance drops below a threshold. The configuration lives ONLY in the current MCP session — it is held in memory by the MCP…\n  - `pay_invoice` (writes): Pay an x402 invoice by signing and broadcasting a TRX transfer to the invoice address, then verifying the payment with the facilitator. x402 (Coinbase +…\n  - `create_paid_order` (writes): Create a zero-registration order via x402 pay-per-use. Requires TRON_PRIVATE_KEY.\n  - `execute_intent` (writes): Plan a multi-step operation (transfer, swap, buy resources, etc) and return a cost estimate, total energy/bandwidth needed, and the cheapest resource…\n  - `simulate` (read-only): Dry-run a multi-step operation (transfer, swap, buy resources, etc) without sending anything on-chain. Returns per-step energy and bandwidth estimates plus a…\n  - `create_standing_order` (writes): Create a server-side standing order with trigger-based automation. Auth required.\n  - `list_standing_orders` (read-only): List all standing orders with optional status filter. Auth required.\n  - `get_standing_order`: Get full details of a single standing order by its UUID. Returns trigger config, action params, budget, executions count, and status. Auth required (API key).\n  - `cancel_standing_order`: Cancel a standing order by its UUID. The order is moved to CANCELLED status and will not trigger again. Already-executed actions are NOT reversed. Auth…\n  - `create_monitor` (writes): Create a persistent server-side monitor that fires notifications when a condition is met. Four monitor types: delegation_expiry (warns when leased energy is…\n  - `list_monitors` (read-only): List all monitors you created with create_monitor, optionally filtered by status (ACTIVE/CANCELLED). Each row shows the full monitor UUID (pass to…\n  - `cancel_monitor`: Cancel an active monitor by its UUID. The monitor stops firing notifications. Auth required (API key).\n  - `withdraw` (writes): Withdraw TRX or USDT from your Merx account to an external TRON address. The \"amount\" parameter is interpreted in the currency specified by \"currency\" — i.e.…\n  - `compile_policy` (writes): Convert a natural language energy management policy into MERX automation. Creates standing orders and monitors based on your instructions. Examples: - \"Keep…\n  - `resource_broadcast` (writes): Broadcast a signed TRON transaction with automatic energy optimization. If the target address lacks sufficient energy, MERX purchases the deficit at the best…\n  - `register_agent`: Register your TRON address as an agent on agent.merx.exchange. Required ONCE before using request_payment, create_invoice, watch_address, agent_status, or any…\n  - `request_payment` (writes): Create a TRC20 payment request on TRON (USDT, USDC, USDD, or any TRC20). Returns a payment address. Fires webhook when payment arrives (\u003c3 seconds). Use for…\n  - `lookup_invoice` (read-only): Look up a MERX invoice. Shows amount, recipient, token, and status. Agent must sign and broadcast the transfer separately (non-custodial).\n  - `create_invoice` (writes): Create an invoice for another agent or human to pay. Returns payment URL, address, and QR code. Payment is detected automatically via ZeroMQ (\u003c3 seconds).\n  - `watch_address` (writes): Watch any TRON address for TRC20 transfers (USDT, USDC, USDD, or any token). Fires webhook on each matching transfer. Persistent - runs 24/7 even when…\n  - `agent_status` (read-only): Get a snapshot of your agent payment service: registered TRON address, count of pending payment requests (request_payment), active address watches…\n- How its tools read to an agent (0 errors, 11 warnings, 1 note, about 10,230 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC13 create_monitor: notify (object with no properties), params (object with no properties)\n  - warn TC13 create_standing_order: action_params (object with no properties), trigger_params (object with no properties)\n  - warn TC13 execute_intent: steps (array with no items)\n  - warn TC13 simulate: steps (array with no items)\n  - warn TC16 cancel_monitor: no readOnlyHint or destructiveHint\n  - warn TC16 cancel_standing_order: no readOnlyHint or destructiveHint\n  - warn TC16 get_contract_info: no readOnlyHint or destructiveHint\n  - warn TC16 get_standing_order: no readOnlyHint or destructiveHint\n  - warn TC16 register_agent: no readOnlyHint or destructiveHint\n  - warn TC16 wait_for_delegation: no readOnlyHint or destructiveHint\n  - warn TC23 server: 66 tools\n  - note TC24 server: 66 of 66 tools have no outputSchema\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/merx-mcp.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "MERX - TRON Resource Exchange",
        "url": ""
      }
    ],
    "description": "MERX - TRON Resource Exchange, an MCP server by merx.exchange, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. TRON energy exchange for AI agents. 54 tools, 30 prompts, 21 resources. A2A + ACP.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "MERX - TRON Resource Exchange",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/merx-mcp",
    "published": "",
    "section": "indexed",
    "title": "MERX - TRON Resource Exchange, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/tools/merx-mcp"
  },
  "tokens": {
    "markdown": 3150,
    "slim": 3080
  },
  "version": 1
}
