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

75 lines 3.25 kB
import type { Request, Response } from 'express'; import type { Logger } from 'pino'; import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import type { Config } from '../config.js'; import { ElsClient } from '../elsClient.js'; import type { RequestContext } from '../http/types.js'; import { type RedisService } from '../cache/index.js'; import { type Tier } from '../billing/limits.js'; import type { MiddlewareDeps } from '../middleware/withMiddleware.js'; export interface SessionRecord { sessionId: string; transport: StreamableHTTPServerTransport; server: McpServer; client: ElsClient; /** Контекст последнего запроса (snapshot — для observability). */ lastContext?: RequestContext; createdAt: number; lastTouchedAt: number; /** AppSlug сессии (для concurrency-limit и SSE-метрик). */ appSlug: string; } export interface HttpTransportManagerOptions { config: Config; log: Logger; /** TTL idle-сессии, мс. Default 30 минут. */ sessionTtlMs?: number; /** Disable internal cleanup timer (для тестов). */ noCleanup?: boolean; /** * Redis для cache layer. Если задан и cacheEnabled — каждая сессия * получает CachedElsClient. Иначе — прямой ElsClient. */ redis?: RedisService | null; /** Middleware deps (audit / usage / redaction). */ middlewareDeps?: MiddlewareDeps; /** * Async tier resolver — резолвит tier per appSlug через LK API (с кэшем * 30 сек в Redis). По умолчанию возвращает `config.defaultTier` * (используется как fallback при недоступности LK). */ tierResolver?: (ctx: RequestContext) => Promise<Tier> | Tier; } export declare class HttpTransportManager { private readonly sessions; /** Per-app счётчик active sessions (для concurrency-limit). */ private readonly perAppCount; private readonly ttlMs; private readonly cleanupTimer; private readonly config; private readonly log; private readonly redis; private readonly cachePolicies; private readonly middlewareDeps; private readonly tierResolver; constructor(opts: HttpTransportManagerOptions); /** Closes all sessions and stops cleanup. Безопасно вызывать многократно. */ close(): Promise<void>; /** * Express handler для `POST /mcp`. Решает, создавать ли новую сессию * (если нет `Mcp-Session-Id` И тело — initialize) или использовать * существующую. */ handleRequest(req: Request, res: Response): Promise<void>; private createSession; private incrPerApp; private decrPerApp; /** Для тестов: текущее число sessions per app. */ perAppSize(appSlug: string): number; private touch; private gcExpired; /** Для тестов / observability. */ size(): number; } //# sourceMappingURL=http.d.ts.map