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-запуска.

72 lines 2.94 kB
/** * Audit log service. * * Контракт: * - `recordToolCall` записывает строку в `mcp_audit.audit_log`. * - Hash-chain: каждая запись хранит sha256(prev row content) и sha256(этой * row). Внутри транзакции SELECT FOR UPDATE предыдущей строки + INSERT. * - Silent fail: если БД недоступна / ошибка вставки — логируем warn и не * падаем (tool-call продолжает работать). Audit не блокирует business flow. * - Hash считается над **detерминированным** JSON-представлением полей (см. * `rowContent`), чтобы потом chain-verifier мог пересчитать. * * См. 06-security.md §3. */ import type { Logger } from 'pino'; import { type McpPrismaClient } from './prisma.js'; export interface RecordToolCallParams { appId: string; /** Первые 8 chars API-ключа (НЕ полный key). */ keyId: string; tool: string; args: Record<string, unknown>; resultBytes: number; latencyMs: number; cacheHit?: boolean; ip?: string | null; userAgent?: string | null; sessionId?: string | null; statusCode: number; error?: string | null; } export interface AuditServiceOptions { databaseUrl?: string; log?: Logger; /** Для тестов — позволяет инжектировать mock-prisma. */ prismaOverride?: McpPrismaClient | null; } /** * Детерминированная сериализация для hash-chain. Поля упорядочены, BigInt'ы * приведены к string, undefined пропущены. Если когда-нибудь захотим * пересчитать chain — будем использовать ту же функцию. */ export declare function rowContent(p: { appId: string; keyId: string; tool: string; args: Record<string, unknown>; resultBytes: number; latencyMs: number; cacheHit: boolean; statusCode: number; error?: string | null; createdAt: string; prevHash: string | null; }): string; export declare function sha256Hex(input: string): string; export interface AuditService { recordToolCall(params: RecordToolCallParams): Promise<void>; /** Для тестов / health-checks. */ verifyChain(appId: string): Promise<{ ok: boolean; brokenAt?: string; }>; } /** * Создаёт audit-service. Если prisma недоступен — все методы no-op. */ export declare function createAuditService(opts?: AuditServiceOptions): AuditService; export declare function getAuditService(opts?: AuditServiceOptions): AuditService; /** Для тестов. */ export declare function setAuditServiceForTests(svc: AuditService | null): void; //# sourceMappingURL=service.d.ts.map