Skip to content

@airmcp-dev/meter

7-layer call classification and metrics collection for MCP servers.

Installation

bash
npm install @airmcp-dev/meter

Meter is also included in @airmcp-dev/core as middleware. The standalone package adds advanced features.

MeterConfig

typescript
interface MeterConfig {
  enabled?: boolean;          // Default: true
  classify?: boolean;         // 7-layer auto-classification (default: true)
  trackCalls?: boolean;       // Call tracking (default: true)
  trackTokens?: boolean;      // Token usage tracking (default: false)
  budget?: {
    dailyLimit?: number;
    monthlyLimit?: number;
    maxTokensPerCall?: number;
    onExceed?: 'warn' | 'block';
  };
}

7-Layer classification

LayerMatching patternsDescription
L1ping, health, version, echoStatic response
L2get, read, find, lookup, list, showSimple lookup
L3convert, transform, format, parse, encode, decodeData transformation
L4compute, calculate, aggregate, analyze, summarizeAggregation (default)
L5fetch, request, call_api, webhook, http, post, put, deleteExternal API
L6generate, complete, chat, embed, infer, predictLLM call
L7agent, think, plan, execute, reason, chain, orchestrateAgent chain

Unmatched tools default to L4. Override with defineTool's layer property.

API

getMetricsSnapshot()

typescript
function getMetricsSnapshot(): {
  totalCalls: number;
  successRate: number;              // 0–1
  avgLatencyMs: number;
  layerDistribution: Record<'L1'|'L2'|'L3'|'L4'|'L5'|'L6'|'L7', number>;
  toolCounts: Record<string, number>;
};

resetMetricsHistory()

typescript
function resetMetricsHistory(): void;

Internal storage

Ring Buffer (max 10,000 records). O(1) push, oldest records auto-evicted. Constant memory usage.

typescript
interface CallRecord {
  tool: string;
  layer: 'L1' | 'L2' | 'L3' | 'L4' | 'L5' | 'L6' | 'L7';
  latencyMs: number;
  success: boolean;
  timestamp: number;
}

Meter guide

Released under the Apache-2.0 License.