Skip to main content
Glama

addressbook_manage

Manage Hedera account address books for multi-account workflows. Add, import, list, update, or remove accounts to organize and reference them efficiently.

Instructions

Manage Hedera account address book for multi-account workflows.

OPERATIONS:

  • add: Add account to address book (reference only, no private key)

  • import: Import account WITH private key for transaction signing

  • list: Show all saved accounts with aliases and metadata

  • update: Update account nickname

  • remove: Remove account from address book

USE THIS FOR: Managing multiple accounts, organizing workflows, quick account reference.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
operationYesAddress book operation
accountIdNoHedera account ID (for add/import)
aliasNoUnique alias for quick reference
nicknameNoHuman-readable name
privateKeyNoPrivate key in DER format (for import only)

Implementation Reference

  • Main handler function for the 'addressbook_manage' tool. Dispatches to specific accountTools based on the 'operation' parameter (add, list, remove, update, import).
    export async function addressBookManage(args: {
      operation: 'add' | 'list' | 'remove' | 'update' | 'import';
      // Common
      alias?: string;
      nickname?: string;
      // Add/Import specific
      accountId?: string;
      privateKey?: string;
    }): Promise<ToolResult> {
      try {
        logger.info('Address book operation', { operation: args.operation });
    
        switch (args.operation) {
          case 'add':
            return await accountTools.addToAddressBook({
              accountId: args.accountId!,
              alias: args.alias!,
              nickname: args.nickname,
            });
    
          case 'list':
            return await accountTools.listAddressBook();
    
          case 'remove':
            return await accountTools.removeFromAddressBook({
              alias: args.alias!,
            });
    
          case 'update':
            return await accountTools.updateAddressBook({
              alias: args.alias!,
              nickname: args.nickname!,
            });
    
          case 'import':
            return await accountTools.importAccount({
              accountId: args.accountId!,
              privateKey: args.privateKey!,
              alias: args.alias!,
              nickname: args.nickname,
            });
    
          default:
            return {
              success: false,
              error: `Unknown address book operation: ${args.operation}`,
            };
        }
      } catch (error) {
        logger.error('Address book operation failed', { operation: args.operation, error });
        return {
          success: false,
          error: error instanceof Error ? error.message : 'Unknown error',
        };
      }
    }
  • Tool schema definition for 'addressbook_manage' including name, description, and inputSchema with operation enum and parameters.
      {
        name: 'addressbook_manage',
        description: `Manage Hedera account address book for multi-account workflows.
    
    OPERATIONS:
    - add: Add account to address book (reference only, no private key)
    - import: Import account WITH private key for transaction signing
    - list: Show all saved accounts with aliases and metadata
    - update: Update account nickname
    - remove: Remove account from address book
    
    USE THIS FOR: Managing multiple accounts, organizing workflows, quick account reference.`,
        inputSchema: {
          type: 'object' as const,
          properties: {
            operation: {
              type: 'string',
              enum: ['add', 'import', 'list', 'remove', 'update'],
              description: 'Address book operation',
            },
            accountId: {
              type: 'string',
              description: 'Hedera account ID (for add/import)',
            },
            alias: {
              type: 'string',
              description: 'Unique alias for quick reference',
            },
            nickname: {
              type: 'string',
              description: 'Human-readable name',
            },
            privateKey: {
              type: 'string',
              description: 'Private key in DER format (for import only)',
            },
          },
          required: ['operation'],
        },
      },
  • src/index.ts:591-592 (registration)
    Registration and dispatch of 'addressbook_manage' tool call in the main MCP server request handler switch statement.
    case 'addressbook_manage':
      result = await addressBookManage(args as any);
  • Helper function 'addToAddressBook' called by addressbook_manage for 'add' operation. Adds account reference to address book service.
    export async function addToAddressBook(args: {
      accountId: string;
      alias: string;
      nickname?: string;
    }): Promise<ToolResult> {
      try {
        logger.info('Adding to address book', { accountId: args.accountId, alias: args.alias });
    
        if (addressBook.count() === 0) {
          await addressBook.initialize();
        }
    
        // Verify the account exists
        const accountInfo = await hederaClient.getAccountInfo(args.accountId);
    
        await addressBook.add({
          accountId: args.accountId,
          alias: args.alias,
          nickname: args.nickname,
          publicKey: accountInfo.key,
          memo: accountInfo.memo,
        });
    
        return {
          success: true,
          data: {
            accountId: args.accountId,
            alias: args.alias,
            addedToAddressBook: true,
          },
        };
      } catch (error) {
        logger.error('Failed to add to address book', { error });
        return {
          success: false,
          error: error instanceof Error ? error.message : 'Unknown error',
        };
      }
    }
  • Helper function 'listAddressBook' called by addressbook_manage for 'list' operation. Lists all address book entries without exposing private keys.
    export async function listAddressBook(): Promise<ToolResult> {
      try {
        if (addressBook.count() === 0) {
          await addressBook.initialize();
        }
    
        const entries = addressBook.list();
    
        // Remove private keys from the response
        const safeEntries = entries.map((entry) => ({
          accountId: entry.accountId,
          alias: entry.alias,
          nickname: entry.nickname,
          publicKey: entry.publicKey,
          memo: entry.memo,
          createdAt: entry.createdAt,
          updatedAt: entry.updatedAt,
          hasPrivateKey: !!entry.privateKey,
        }));
    
        return {
          success: true,
          data: {
            count: entries.length,
            accounts: safeEntries,
          },
        };
      } catch (error) {
        logger.error('Failed to list address book', { error });
        return {
          success: false,
          error: error instanceof Error ? error.message : 'Unknown error',
        };
      }
    }

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/justmert/hashpilot'

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