Skip to content

@airmcp-dev/meter

MCP 서버를 위한 7계층 호출 분류와 메트릭 수집.

설치

bash
npm install @airmcp-dev/meter

Meter는 @airmcp-dev/core에 미들웨어로도 포함되어 있습니다. 독립 패키지는 고급 기능을 추가합니다.

MeterConfig

typescript
interface MeterConfig {
  enabled?: boolean;          // 기본: true
  classify?: boolean;         // 7계층 자동 분류 (기본: true)
  trackCalls?: boolean;       // 호출 추적 (기본: true)
  trackTokens?: boolean;      // 토큰 사용 추적 (기본: false)
  budget?: {
    dailyLimit?: number;
    monthlyLimit?: number;
    maxTokensPerCall?: number;
    onExceed?: 'warn' | 'block';
  };
}

7계층 분류

계층매칭 패턴설명
L1ping, health, version, echo정적 응답
L2get, read, find, lookup, list, show단순 조회
L3convert, transform, format, parse, encode, decode데이터 변환
L4compute, calculate, aggregate, analyze, summarize집계/계산 (기본값)
L5fetch, request, call_api, webhook, http, post, put, delete외부 API
L6generate, complete, chat, embed, infer, predictLLM 호출
L7agent, think, plan, execute, reason, chain, orchestrate에이전트 체인

매칭 안 되면 L4. defineToollayer 속성으로 수동 지정 가능.

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;

내부 저장

Ring Buffer (최대 10,000건). O(1) push, 가장 오래된 기록 자동 삭제. 일정 메모리 사용.

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

Meter 가이드

Released under the Apache-2.0 License.