Skip to main content
Glama
cordlesssteve

Claude Telemetry MCP

get_usage_warnings

Monitor Claude usage and receive alerts when approaching typical limits to prevent unexpected costs or interruptions.

Instructions

Get usage warnings with default thresholds (80% and 90% of typical limits)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The MCP tool handler for 'get_usage_warnings'. Uses default token limits, calls checkUsageLimits on TelemetryService, and formats warnings for response.
    case 'get_usage_warnings': {
      // Use default thresholds
      const defaultLimits: UsageLimits = {
        dailyTokenLimit: 100000, // Example default
        weeklyTokenLimit: 500000, // Example default
        sessionTokenLimit: 50000, // Example default
      };
    
      const warnings = await this.telemetryService.checkUsageLimits(defaultLimits);
      return {
        content: [
          {
            type: 'text',
            text: this.formatUsageWarnings(warnings, true),
          },
        ],
      };
    }
  • src/index.ts:105-112 (registration)
    Tool registration in ListTools response, specifying name, description, and empty input schema.
    {
      name: 'get_usage_warnings',
      description: 'Get usage warnings with default thresholds (80% and 90% of typical limits)',
      inputSchema: {
        type: 'object',
        properties: {},
      },
    },
  • Core helper function that computes usage warnings by comparing current metrics against provided limits at 80% and 90% thresholds.
    async checkUsageLimits(limits: UsageLimits): Promise<UsageWarnings> {
      const summary = await this.getUsageSummary();
      const warnings: string[] = [];
      const percentages: any = {};
    
      // Check daily limits
      if (limits.dailyTokenLimit) {
        const dailyPercent = (summary.today.tokens / limits.dailyTokenLimit) * 100;
        percentages.dailyTokens = dailyPercent;
        if (dailyPercent > 90) {
          warnings.push(`Daily token usage at ${dailyPercent.toFixed(1)}% of limit`);
        } else if (dailyPercent > 80) {
          warnings.push(`Daily token usage approaching limit (${dailyPercent.toFixed(1)}%)`);
        }
      }
    
      // Check weekly limits
      if (limits.weeklyTokenLimit) {
        const weeklyPercent = (summary.thisWeek.tokens / limits.weeklyTokenLimit) * 100;
        percentages.weeklyTokens = weeklyPercent;
        if (weeklyPercent > 90) {
          warnings.push(`Weekly token usage at ${weeklyPercent.toFixed(1)}% of limit`);
        } else if (weeklyPercent > 80) {
          warnings.push(`Weekly token usage approaching limit (${weeklyPercent.toFixed(1)}%)`);
        }
      }
    
      // Check session limits
      if (limits.sessionTokenLimit) {
        const sessionPercent = (summary.currentSession.tokens / limits.sessionTokenLimit) * 100;
        percentages.sessionTokens = sessionPercent;
        if (sessionPercent > 90) {
          warnings.push(`Session token usage at ${sessionPercent.toFixed(1)}% of limit`);
        } else if (sessionPercent > 80) {
          warnings.push(`Session token usage approaching limit (${sessionPercent.toFixed(1)}%)`);
        }
      }
    
      // Similar checks for cost limits...
      if (limits.dailyCostLimit) {
        const dailyCostPercent = (summary.today.cost / limits.dailyCostLimit) * 100;
        percentages.dailyCost = dailyCostPercent;
        if (dailyCostPercent > 80) {
          warnings.push(`Daily cost approaching limit (${dailyCostPercent.toFixed(1)}%)`);
        }
      }
    
      return {
        warnings,
        usage: {
          current: summary.today,
          limits,
          percentages
        }
      };
    }
  • Helper method to format UsageWarnings into a user-friendly markdown response.
    private formatUsageWarnings(warnings: UsageWarnings, isDefault: boolean = false): string {
      let result = '## Usage Warnings\n\n';
      
      if (warnings.warnings.length === 0) {
        result += '✅ No usage warnings - you\'re within safe limits\n\n';
      } else {
        result += '⚠️ **Warnings**:\n';
        warnings.warnings.forEach((warning: string) => {
          result += `- ${warning}\n`;
        });
        result += '\n';
      }
    
      if (isDefault) {
        result += '_Note: Using default limit thresholds. Use check_usage_limits with custom limits for precise tracking._\n\n';
      }
    
      result += '**Current Usage**:\n';
      result += `- Tokens: ${warnings.usage.current.tokens.toLocaleString()}\n`;
      result += `- Cost: $${warnings.usage.current.cost.toFixed(4)}\n`;
      result += `- Sessions: ${warnings.usage.current.sessions}\n`;
    
      return result;
    }
  • TypeScript interfaces defining UsageLimits (input-like for limits) and UsageWarnings (output structure) used by the tool.
    export interface UsageLimits {
      dailyTokenLimit?: number;
      weeklyTokenLimit?: number;
      sessionTokenLimit?: number;
      dailyCostLimit?: number;
      weeklyCostLimit?: number;
      sessionCostLimit?: number;
    }
    
    export interface UsageWarnings {
      warnings: string[];
      usage: {
        current: UsageData;
        limits: UsageLimits;
        percentages: {
          dailyTokens?: number;
          weeklyTokens?: number;
          sessionTokens?: number;
          dailyCost?: number;
          weeklyCost?: number;
          sessionCost?: number;
        };
      };
    }

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/cordlesssteve/claude-telemetry-mcp'

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