Skip to main content
Glama
cordlesssteve

Claude Telemetry MCP

get_usage_trends

Analyze usage patterns over time to identify trends and monitor activity in Claude Code sessions.

Instructions

Get usage trends over time to identify patterns

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
days_backNoNumber of days to look back (default: 7)

Implementation Reference

  • Core handler function that executes the tool logic: queries Prometheus range data for tokens, cost, and sessions over the specified number of days and constructs UsageTrend array.
    async getUsageTrends(daysBack: number = 7): Promise<UsageTrend[]> { const endTime = new Date(); const startTime = new Date(endTime.getTime() - (daysBack * 24 * 60 * 60 * 1000)); const [tokensResult, costResult, sessionsResult] = await Promise.all([ this.prometheus.queryRange('claude_code_token_usage_tokens_total', startTime, endTime, '1h'), this.prometheus.queryRange('claude_code_cost_usage_USD_total', startTime, endTime, '1h'), this.prometheus.queryRange('claude_code_session_count_total', startTime, endTime, '1h') ]); const tokensSeries = this.prometheus.getTimeSeries(tokensResult); const costSeries = this.prometheus.getTimeSeries(costResult); const sessionsSeries = this.prometheus.getTimeSeries(sessionsResult); // Combine the series data const trends: UsageTrend[] = []; for (let i = 0; i < tokensSeries.length; i++) { trends.push({ timestamp: tokensSeries[i].timestamp.toISOString(), tokens: tokensSeries[i].value, cost: costSeries[i]?.value || 0, sessions: sessionsSeries[i]?.value || 0 }); } return trends; }
  • src/index.ts:133-146 (registration)
    Tool registration in ListToolsRequest handler, defining name, description, and inputSchema with days_back parameter.
    { name: 'get_usage_trends', description: 'Get usage trends over time to identify patterns', inputSchema: { type: 'object', properties: { days_back: { type: 'number', description: 'Number of days to look back (default: 7)', default: 7, }, }, }, },
  • Type definition for the output structure UsageTrend used by getUsageTrends.
    export interface UsageTrend { timestamp: string; tokens: number; cost: number; sessions: number; }
  • MCP CallToolRequest dispatcher case that parses arguments, calls the core handler, formats response, and returns MCP content.
    case 'get_usage_trends': { const daysBack = typeof args?.days_back === 'number' ? args.days_back : 7; const trends = await this.telemetryService.getUsageTrends(daysBack); return { content: [ { type: 'text', text: this.formatUsageTrends(trends, daysBack), }, ], }; }
  • Helper function to format the UsageTrend data into a markdown table for the MCP response.
    private formatUsageTrends(trends: UsageTrend[], daysBack: number): string { let result = `## Usage Trends (${daysBack} days)\n\n`; if (trends.length === 0) { return result + 'No trend data available.'; } result += '| Time | Tokens | Cost | Sessions |\n'; result += '|------|--------|------|---------|\n'; trends.slice(-10).forEach(trend => { const time = new Date(trend.timestamp).toLocaleString(); result += `| ${time} | ${trend.tokens.toLocaleString()} | $${trend.cost.toFixed(3)} | ${trend.sessions} |\n`; }); return result; }

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