UNPKG

@inso_web/els-mcp

Version:

MCP-сервер поверх INSO Error Logs Service. Read-only tools (search, analytics, fingerprinting, correlations) для подключения Claude Desktop/Code и ChatGPT к логам ошибок. Streamable HTTP transport + stdio для npx-запуска.

55 lines 2.76 kB
/** * Tool-handler middleware: * 1. Quota check (`checkQuota`) перед основным запросом. * 2. AI quota check (`checkAiQuota`) для AI-tools (см. `isAiTool`). * 3. Audit log + usage tracker (fire-and-forget) после. * 4. Redaction items в response (если ENV redactionEnabled = true). * 5. Prometheus метрики (`mcp_requests_total`, `mcp_request_duration_seconds`, * `mcp_errors_total`, `mcp_auth_rejections_total`). * * Не вносит изменений в существующие tool handlers — оборачивает их в * registry. */ import type { Logger } from 'pino'; import type { ToolResult } from '../types.js'; import { type RedactionConfig } from '../redaction/index.js'; import { type AuditService } from '../audit/service.js'; import { type UsageTracker } from '../billing/tracker.js'; import { type Tier, type QuotaDecision } from '../billing/limits.js'; export interface ToolContext { /** Текущий app (из API-key / OAuth claim / config.defaultAppId). */ appId: string; /** Prefix API-key (8 chars). */ keyId: string; /** Tier для quota-check. */ tier: Tier; /** Optional logger. */ log?: Logger; /** Optional request meta для audit (ip/userAgent/sessionId). */ ip?: string | null; userAgent?: string | null; sessionId?: string | null; } export interface MiddlewareDeps { audit?: AuditService; usage?: UsageTracker; redactionConfig?: RedactionConfig; /** Опциональный override основной (per-day) quota check; default — usage tracker. */ quotaCheck?: (ctx: ToolContext) => Promise<QuotaDecision>; /** Опциональный override AI-quota check (используется только для AI-tools). */ aiQuotaCheck?: (ctx: ToolContext) => Promise<QuotaDecision>; } type AnyArgs = Record<string, unknown>; type Handler<TArgs extends AnyArgs, TClient> = (args: TArgs, client: TClient) => Promise<ToolResult>; /** * Оборачивает существующий tool handler. * * Семантика: * - Если `quotaCheck`-result `allowed=false` → возвращаем ToolError('TIER_QUOTA_EXCEEDED'). * - При `overage=true` (grace) добавляем `_meta.overage=true` к ответу. * - После handler-вызова прогоняем items / log через redaction. * - Audit + usage пишутся fire-and-forget (void). */ export declare function withMiddleware<TArgs extends AnyArgs, TClient>(toolName: string, handler: Handler<TArgs, TClient>, getContext: (args: TArgs, client: TClient) => ToolContext, deps?: MiddlewareDeps): Handler<TArgs, TClient>; export {}; //# sourceMappingURL=withMiddleware.d.ts.map