Skip to main content
Glama

validate_stacks_address

Verify Stacks blockchain address format and network compatibility to ensure valid transactions and interactions with the blockchain.

Instructions

Validate a Stacks address format and check if it's correctly formatted for the specified network.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressYesAddress to validate
networkNoNetwork to validate against

Implementation Reference

  • Full implementation of the validate_stacks_address tool, including the execute handler that performs address format validation, network prefix checking, and optional account info lookup.
    export const validateStacksAddressTool: Tool<undefined, typeof AddressValidationScheme> = {
      name: "validate_stacks_address",
      description: "Validate a Stacks address format and check if it's correctly formatted for the specified network.",
      parameters: AddressValidationScheme,
      execute: async (args, context) => {
        try {
          await recordTelemetry({ action: "validate_stacks_address" }, context);
          
          const address = args.address.trim();
          const network = args.network || 'mainnet';
          
          // Basic format validation
          const isValidFormat = /^S[TPMNX][A-Z0-9]{36,41}$/.test(address);
          
          if (!isValidFormat) {
            return `# Address Validation Result
    
    **Address**: ${address}
    **Valid Format**: ❌ No
    **Network**: ${network}
    
    ## Issues Detected
    - Address does not match Stacks address format
    - Expected format: S[TPMNX][A-Z0-9]{36-41}
    
    ## Valid Examples
    - **Mainnet**: SP1H1733V5MZ3SZ9XRW9FKYGEZT0JDGEB8Y634C7R
    - **Testnet**: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM
    
    ## Next Steps
    - Check address spelling and format
    - Ensure you're using the correct network prefix (SP for mainnet, ST for testnet)`;
          }
    
          // Network-specific validation
          const prefix = address.substring(0, 2);
          const expectedMainnetPrefix = 'SP';
          const expectedTestnetPrefix = 'ST';
          
          let networkMatch = true;
          let actualNetwork = 'unknown';
          
          if (prefix === expectedMainnetPrefix) {
            actualNetwork = 'mainnet';
            networkMatch = (network === 'mainnet');
          } else if (prefix === expectedTestnetPrefix) {
            actualNetwork = 'testnet';
            networkMatch = (network === 'testnet');
          } else {
            networkMatch = false;
          }
    
          // Try to get additional info if address is valid
          let additionalInfo = '';
          if (isValidFormat && networkMatch) {
            try {
              const apiService = new StacksApiService();
              const validNetwork = network as "mainnet" | "testnet" | "devnet";
              const accountInfo = await apiService.getAccountInfo(address, validNetwork);
              const balance = (parseInt(accountInfo.balance) / 1000000).toLocaleString();
              
              additionalInfo = `\n## Account Status
    - **STX Balance**: ${balance} STX
    - **Account Nonce**: ${accountInfo.nonce}
    - **Status**: Account exists and is active`;
              
            } catch (error) {
              additionalInfo = `\n## Account Status
    - **Status**: Valid format but account may not exist or be inactive
    - **Note**: ${error}`;
            }
          }
    
          return `# Address Validation Result
    
    **Address**: ${address}
    **Valid Format**: ${isValidFormat ? '✅ Yes' : '❌ No'}
    **Expected Network**: ${network}
    **Actual Network**: ${actualNetwork}
    **Network Match**: ${networkMatch ? '✅ Yes' : '❌ No'}
    
    ## Address Details
    - **Prefix**: ${prefix}
    - **Length**: ${address.length} characters
    - **Format**: ${isValidFormat ? 'Correct Stacks address format' : 'Invalid format'}
    
    ${!networkMatch && isValidFormat ? `\n⚠️ **Network Mismatch**: Address is for ${actualNetwork} but you specified ${network}` : ''}
    
    ${additionalInfo}
    
    ## Supported Networks
    - **Mainnet**: Addresses start with 'SP'
    - **Testnet**: Addresses start with 'ST'`;
          
        } catch (error) {
          return `❌ Failed to validate address: ${error}`;
        }
      },
    };
  • Zod schema defining the input parameters for the validate_stacks_address tool.
    const AddressValidationScheme = z.object({
      address: z.string().describe("Address to validate"),
      network: z.enum(["mainnet", "testnet"]).optional().describe("Network to validate against"),
    });
  • Registration of the validateStacksAddressTool in the FastMCP server.
    server.addTool(validateStacksAddressTool);
  • Import statement that brings the validateStacksAddressTool into the index for registration.
      getStacksAccountInfoTool,
      checkSTXBalanceTool,
      getTransactionHistoryTool,
      validateStacksAddressTool
    } from "./stacks_blockchain/accounts/stacks_account.js";

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/exponentlabshq/stacks-clarity-mcp'

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