Skip to main content
Glama
tatumio

Tatum MCP Server

Official

get_wallet_balance_by_time_v4

Retrieve native wallet balances for up to 10 addresses at a specific block number, time, or Unix timestamp on supported blockchains using Tatum MCP Server’s API.

Instructions

[blockchain_data] /v4/data/wallet/balance/time 100 credits per API call Get native balances for a specific wallet addresses by time on the following blockchains: Ethereum - ethereum-mainnet Bitcoin - bitcoin-mainnet Base - base-mainnet Arbitrum - arb-one-mainnet BSC - bsc-mainnet Polygon - polygon-mainnet Optimism - optimism-mainnet Celo - celo-mainnet To get started, provide a chain name, comma-separated list of addresses and specify one of the filters listed below (combination of the filters is not allowed): block number time unix If you pass a block number that is in the future (beyond the current latest block), the system will return the balance for the latest block. If you pass a time or Unix timestamp that is in the future, the system will also return the balance for the latest block. If you pass a time or Unix timestamp in the past (dating back to or earlier than the blockchain's genesis block), the system will return the balance for the first block (genesis block).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressesYesThe blockchain public wallet addresses. It is possible to enter list of up to 10 addresses as a comma separated string.
blockNumberNoBlock number.
chainYesThe blockchain to work with.
timeNoTime when block is processed.
unixNoUnix timestamp when block is processed.

Implementation Reference

  • The handler function getWalletBalanceByTime that executes the tool logic by calling the Tatum API v4 endpoint /v4/data/wallet/balance/time with the provided parameters.
    async getWalletBalanceByTime(args: any): Promise<any> {
      const url = `/v4/data/wallet/balance/time`;
      const parameters: any = {
        chain: args.chain,
        addresses: args.addresses
      };
      if (args.blockNumber) parameters.blockNumber = args.blockNumber;
      if (args.time) parameters.time = args.time;
      if (args.unix) parameters.unix = args.unix;
      
      return await this.apiClient.executeRequest('GET', url, parameters);
    }
  • Input schema definition for the get_wallet_balance_by_time tool, including parameters like chain, addresses, blockNumber, time, unix.
    {
      name: 'get_wallet_balance_by_time',
      description: 'Get native wallet balances at specific time or block.',
      inputSchema: {
        type: 'object',
        properties: {
          chain: {
            type: 'string',
            description: 'The blockchain to work with.',
            example: 'ethereum-mainnet'
          },
          addresses: {
            type: 'string',
            description: 'The blockchain public wallet addresses. It is possible to enter list of up to 10 addresses as a comma separated string.'
          },
          blockNumber: {
            type: 'string',
            description: 'Block number.'
          },
          time: {
            type: 'string',
            description: 'Time when block is processed.'
          },
          unix: {
            type: 'number',
            description: 'Unix timestamp when block is processed.'
          }
        },
        required: ['chain', 'addresses']
      }
    },
  • src/index.ts:121-125 (registration)
    Registration and dispatch of the get_wallet_balance_by_time tool in the MCP server's executeDataTool switch statement, which calls the DataService handler.
    case 'get_wallet_balance_by_time':
      if (!args.chain || !args.addresses) {
        throw new McpError(ErrorCode.InvalidParams, 'Missing required parameters: chain, addresses');
      }
      return await this.dataService.getWalletBalanceByTime(args);
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: cost ('100 credits per API call'), supported blockchains, handling of future/past inputs (e.g., 'If you pass a block number that is in the future...'), and constraints on filter usage. However, it lacks details on error handling, rate limits, or authentication needs, which are important for a paid API tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with key information (purpose, cost, supported chains) but becomes verbose with repetitive explanations of input handling (e.g., future/past scenarios stated twice). Some sentences could be condensed for better efficiency, though overall it remains reasonably structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, no output schema, no annotations), the description is moderately complete. It covers purpose, usage, behaviors, and constraints adequately, but lacks details on output format, error responses, or integration with sibling tools. For a tool with no output schema, more information on return values would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds some context by explaining filter constraints (e.g., 'combination of the filters is not allowed') and input handling rules (e.g., future/past values), but does not provide significant additional semantics beyond what the schema descriptions offer. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get native balances for a specific wallet addresses by time on the following blockchains.' It specifies the verb ('Get'), resource ('native balances'), and scope ('by time'), but does not explicitly differentiate it from sibling tools like 'get_balances_v4' or 'get_wallet_balances_v4', which may have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage: 'To get started, provide a chain name, comma-separated list of addresses and specify one of the filters listed below (combination of the filters is not allowed).' It includes specific prerequisites and constraints (e.g., no filter combinations), but does not explicitly mention when to use this tool versus alternatives like 'get_balances_v4' or 'get_wallet_balances_v4'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tatumio/tatum-mcp'

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