@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-запуска.
149 lines • 4.76 kB
TypeScript
/**
* Shared TypeScript types для ELS MCP-сервера.
*
* Источник истины — `error-logs-service/prisma/schema.prisma` (model ErrorLog).
* Здесь хранятся плоские DTO, удобные для MCP-tool responses.
*/
export type ErrorLevel = 'CRITICAL' | 'ERROR' | 'WARNING' | 'INFO' | 'DEBUG';
export type ErrorSource = 'CLIENT' | 'SERVER';
/**
* ErrorLog в API-формате (как отдаёт ELS endpoint `GET /errors`).
*
* Все timestamp'ы — ISO-8601 strings (после `.toISOString()` на стороне ELS).
* Опциональные поля приходят как null или отсутствуют.
*/
export interface ErrorLog {
id: string;
traceId: string;
message: string;
stack: string | null;
componentStack: string | null;
url: string;
timestamp: string;
receivedAt: string;
level: ErrorLevel | string;
source: ErrorSource | string;
browser: string;
urlPath: string;
errorCategory: string;
appSlug: string;
serviceName: string;
deploymentEnv: string;
userAgent: string;
language: string | null;
screenSize: string | null;
viewportSize: string | null;
referrer: string | null;
ip: string;
fingerprint: string | null;
sessionId: string | null;
appVersion: string | null;
httpStatus?: number | null;
durationMs?: number | null;
aiDiagnosis?: unknown;
}
/**
* Compact-вариант (response_format=compact): без stack/componentStack/userAgent,
* message ≤ 200ch.
*/
export interface ErrorLogCompact {
traceId: string;
level: string;
message: string;
serviceName: string | null;
url: string | null;
fingerprint: string | null;
receivedAt: string;
}
/**
* Summary-вариант (response_format=summary): минимум для ranked list.
*/
export interface ErrorLogSummary {
traceId: string;
message: string;
level: string;
count?: number;
lastSeen?: string;
}
export interface FacetValue {
value: string;
count: number;
}
export interface Facets {
source?: FacetValue[];
level?: FacetValue[];
browser?: FacetValue[];
urlPath?: FacetValue[];
language?: FacetValue[];
ip?: FacetValue[];
errorCategory?: FacetValue[];
app?: FacetValue[];
serviceName?: FacetValue[];
deploymentEnv?: FacetValue[];
appVersion?: FacetValue[];
}
export interface HistogramBucket {
ts: string;
count: number;
byLevel?: Record<string, number>;
}
export interface SearchLogsRawResponse {
items: ErrorLog[];
total: number;
page: number;
limit: number;
totalPages: number;
facets: Facets;
histogram: HistogramBucket[];
}
/**
* ResponseMeta — добавляется ко всем tool responses.
*
* Содержит `elsRequestId` (если ELS вернул), флаг `cached`, факт применения
* redaction и пр. служебные поля.
*/
export interface ResponseMeta {
elsRequestId?: string | null;
cached: boolean;
ttlSec?: number;
redactionApplied: boolean;
truncated?: boolean;
degraded?: boolean;
warnings?: string[];
}
/**
* Seek-cursor payload (внутренний, base64url-кодируется).
*
* Transitional wrapper над offset-based ELS API. Зашиваем page/limit, чтобы
* сохранить совместимость до момента переключения ELS на seek-based
* pagination — формат cursor останется тот же.
*/
export interface CursorPayload {
/** ISO timestamp anchor — для seek-base (после миграции ELS). */
anchorReceivedAt: string;
/** id записи, использованной как anchor. */
anchorId: string;
/** Хэш текущих фильтров — детект изменения filters между страницами. */
filtersHash: string;
/** Версия cursor-формата (для future migrations). */
v: 1;
/** Offset-based page для backwards-compat (до миграции ELS на seek). */
page?: number;
/** Размер страницы (до миграции ELS на seek). */
limit?: number;
}
export type ResponseFormat = 'compact' | 'full' | 'summary';
/**
* MCP-стандартный tool result. Совпадает по форме с CallToolResult из MCP SDK,
* но даёт нам типизированный shortcut в handler'ах.
*/
export interface ToolResult {
structuredContent?: Record<string, unknown>;
content: Array<{
type: 'text';
text: string;
}>;
isError?: boolean;
_meta?: Record<string, unknown>;
}
//# sourceMappingURL=types.d.ts.map