MCP server for Oraichain blockchain operations including staking, token transfers, balance queries, and transaction broadcasting
14 tools with mostly complete schemas and descriptions, but significant gaps in error handling, parameter validation, and output documentation. Tool names follow verb_noun convention (get_, delegate, undelegate, etc.), which is good. Descriptions are present but often generic and lack actionable guidance for LLM selection. Schemas use Zod with type definitions, but many lack enum constraints for categorical parameters. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Error responses are JSON-wrapped but lack recovery guidance. Output schemas are not documented, LLMs cannot predict response structure for chaining.
Claim validator commission rewards on Oraichain. Inputs (input is an object): validatorAddress: string - The address of the validator publicKey: string - The validator's public key for signing
Delegate tokens to a validator on Oraichain. Inputs: delegatorAddress: string - The address of the delegator. validatorAddress: string - The address of the validator to delegate to. amount: string - The amount to delegate to. If the denom is fully uppercase, multiply the input amount by 10^6. If the denom is fully lowercase, let it be. denom: string - The denom of the amount to delegate to. publicKey: string - The delegator's public key for signing.
Get all delegations for a delegator on Oraichain. Inputs (input is an object): delegatorAddress: string - The address of the delegator
Get all validators information including commission on Oraichain. You don't need to provide any input. This tool is useful when you want to get all validators information. It will return a list of validators with their information including moniker, operator address, commission rate, etc. You should use this tool when users want to ask you about a validator without knowing the validator address, but only know the moniker. Inputs (input is empty)
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk levels. Tools marked WRITE (transfer, delegate, broadcast) should declare destructiveHint=true; READ_ONLY tools should declare readOnlyHint=true. This prevents LLMs from treating all tools as safe.
Output schemas not documented. Tools return JSON with {status, message, data} structure, but LLMs cannot predict the 'data' field schema for chaining. E.g., oraichain_balance returns {coin, address, denom} but this is not declared in tool metadata. Agents cannot plan downstream calls without guessing response structure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Get validator information including commission on Oraichain given a validator address. Inputs (input is an object): validatorAddress: string - The address of the validator
Auto compound ORAI staking token on Oraichain. This tool will claim ORAI staking rewards from all validators on Oraichain and stake them again into the same validators. Inputs (input is an object): none
Get the balance of a Oraichain wallet. If you want to get the balance of your first wallet, you don't need to provide the accountIndex. Inputs ( input is an object ): denom: string, eg: "orai", address: string, eg: "orai1...",
Broadcast a sign doc base64 to the network. Inputs (input is an object): signDocBase64: string - The sign doc base64 signature: string - The signature
Broadcast a signed transaction to the network. Inputs (input is an object): signedTx: string - The signed transaction in base64 format
Broadcast a signed transaction to the network using signed body bytes, auth bytes and signature. Inputs (input is an object): signedBodyBytes: string - The signed transaction body in base64 format signedAuthBytes: string - The signed transaction auth info in base64 format signatures: string[] - The signatures for the transaction in base64 format
Generate a transfer message for a token with an amount to a recipient address. Inputs (input is an object): senderAddress: string - The sender address recipient: string - The recipient address publicKey: string - The public key of the sender amount: { amount: string - The amount of tokens to transfer denom: string - The denom of the token to transfer }
Get the info of a transaction hash. You can use this tool to get the info of a transaction hash after broadcasting a transaction. It can be used to check the status of a transaction and get the transaction details. It is a proof that the transaction is successfully executed. Note: code 0 means the transaction is successfully executed. non-zero code means the transaction is failed. Inputs (input is an object): txHash: string - The transaction hash in hex format.
Redelegate tokens from one validator to another on Oraichain. Inputs (input is an object): delegatorAddress: string - The address of the delegator validatorSrcAddress: string - The address of the source validator validatorDstAddress: string - The address of the destination validator amount: string - The amount to redelegate in ORAI publicKey: string - The delegator's public key for signing
Undelegate tokens from a validator on Oraichain. Inputs (input is an object): delegatorAddress: string - The address of the delegator validatorAddress: string - The address of the validator to undelegate from amount: string - The amount to undelegate in ORAI publicKey: string - The delegator's public key for signing
Error responses lack recovery guidance. All tools catch errors and return {status: 'error', message, code}, but do not tell the LLM what to do next. E.g., 'Failed to get balance' should suggest 'Verify the address format (orai1...) or try a different denom.' This forces agents to guess recovery steps.
Parameter descriptions lack format/constraint details. E.g., 'amount' in delegate is described as 'The amount to delegate to' with a note about denom case sensitivity, but no min/max bounds, no example format. 'publicKey' and 'signedTx' lack encoding format hints (base64, hex). LLMs cannot validate inputs without explicit constraints.
Inconsistent tool naming convention. Most tools use snake_case (oraichain_balance, oraichain_token_transfer), but some use camelCase (claimCommission, getDelegations). This inconsistency forces LLMs to reason about naming patterns and risks tool selection errors. Standardize to snake_case verb_noun.