Skip to main content
Glama
solclaimer

SOL Claimer MCP Server

by solclaimer

analyze_burnable_accounts

Analyze a Solana wallet to identify token accounts with less than $1 USD value that can be burned and closed. Get details on each account to recover SOL rent.

Instructions

Analyze a Solana wallet for token accounts with balances worth less than $1 USD that can be burned and closed. Returns detailed information about each burnable account including token name, symbol, and USD value.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
wallet_addressYesThe Solana wallet address to analyze

Implementation Reference

  • The handler that processes the 'analyze_burnable_accounts' tool call. Extracts wallet_address from args, calls apiClient.analyzeBurnableAccounts(), and formats the response.
    } else if (name === "analyze_burnable_accounts") {
      const walletAddress = (args as Record<string, string>).wallet_address;
      if (!walletAddress) {
        throw new Error("wallet_address is required");
      }
    
      const result = await apiClient.analyzeBurnableAccounts(walletAddress);
      return {
        content: [
          {
            type: "text",
            text: formatBurnableAccountsResponse(result),
          },
        ],
      };
  • The BurnableAccountsAnalysis interface defines the response schema for the burnable accounts analysis, including accountsToBurn, totalSol, totalUsdValue, and accountDetails array.
    interface BurnableAccountsAnalysis {
      success: boolean;
      data: {
        accountsToBurn: number;
        totalSol: number;
        totalUsdValue: number;
        accountDetails: AccountDetail[];
      };
      timestamp: string;
    }
  • The AccountDetail interface defines the shape of each token account returned in the analysis, including pubkey, mint, amount, decimals, usdValue, tokenName, tokenSymbol, etc.
    interface AccountDetail {
      pubkey: string;
      mint: string;
      amount: string;
      decimals: number;
      uiAmount: number | null;
      lamports: number;
      state: string;
      closeAuthority: string | null;
      usdValue: number;
      tokenName?: string;
      tokenSymbol?: string;
      tokenLogo?: string;
      isVerifiedContract?: boolean;
    }
  • src/index.ts:195-210 (registration)
    The tool registration in the tools array with name 'analyze_burnable_accounts', description, and inputSchema requiring wallet_address.
    {
      name: "analyze_burnable_accounts",
      description:
        "Analyze a Solana wallet for token accounts with balances worth less than $1 USD that can be burned and closed. " +
        "Returns detailed information about each burnable account including token name, symbol, and USD value.",
      inputSchema: {
        type: "object" as const,
        properties: {
          wallet_address: {
            type: "string",
            description: "The Solana wallet address to analyze",
          },
        },
        required: ["wallet_address"],
      },
    },
  • The analyzeBurnableAccounts method on SolClaimerApiClient that calls the external API endpoint /api/v1/accounts/analyze-burnable via POST.
    async analyzeBurnableAccounts(walletAddress: string): Promise<BurnableAccountsAnalysis> {
      try {
        const response = await this.apiClient.post<BurnableAccountsAnalysis>(
          "/api/v1/accounts/analyze-burnable",
          { walletAddress }
        );
        return response.data;
      } catch (error) {
        throw new Error(`Failed to analyze burnable accounts: ${this.formatApiError(error)}`);
      }
    }
  • The formatBurnableAccountsResponse function that formats the API response into a human-readable text string for display to the user.
    function formatBurnableAccountsResponse(data: BurnableAccountsAnalysis): string {
      if (!data.success) {
        return "Failed to analyze burnable accounts";
      }
    
      let response = `
    Burnable Token Accounts Analysis
    =================================
    Total Accounts to Burn: ${data.data.accountsToBurn}
    Total SOL to Recover: ${data.data.totalSol} SOL
    Total USD Value: ${formatUsd(data.data.totalUsdValue)}
    
    Accounts Details:
    `;
    
      if (data.data.accountDetails.length === 0) {
        response += "No burnable token accounts found.\n";
      }
    
      data.data.accountDetails.forEach((account, index) => {
        response += `
    ${index + 1}. ${formatTokenLabel(account)}
       Mint: ${account.mint}
       Amount: ${formatTokenAmount(account)}
       USD Value: ${formatUsd(account.usdValue)}
       Lamports (rent): ${account.lamports}
       Verified Contract: ${account.isVerifiedContract ? "Yes" : "No"}
    `;
      });
    
      response += `
    Burn link: https://solclaimer.app
    `;
    
      return response;
    }
Behavior4/5

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

With no annotations provided, the description carries full burden. It clearly indicates the tool is read-only analysis (identifies burnable accounts without performing burn/close) and describes the output fields (token name, symbol, USD value). However, it could explicitly state that no destructive actions are taken.

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

Conciseness5/5

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

The description is two sentences, front-loading the core action and condition in the first sentence, and detailing return values in the second. No extraneous words or repetition. Highly concise.

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

Completeness4/5

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

The tool has no output schema, so the description should explain return values. It lists token name, symbol, and USD value. While sufficient for a simple analysis tool, it could benefit from mentioning additional fields like account address or mint, but overall covers the essential information.

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?

The input schema has 100% description coverage (1 parameter 'wallet_address' described as 'The Solana wallet address to analyze'). The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/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: analyzing a Solana wallet for token accounts worth less than $1 that can be burned and closed. It includes specific verb 'analyze' and resource 'Solana wallet', and distinguishes from siblings like analyze_empty_accounts and analyze_swappable_accounts.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus the sibling tools (analyze_empty_accounts, analyze_swappable_accounts). There is no mention of prerequisites or scenarios where this tool is preferred, leaving the agent without decision support.

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

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/solclaimer/mcp'

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