import type { Readable, Writable } from 'node:stream'; import type { ToolContext } from './tools.js'; export interface McpServerOptions { /** 허브 주소 (예: http://127.0.0.1:7788) */ hubUrl: string; /** 테스트 주입용 — 기본은 프로세스 stdio */ input?: Readable; output?: Writable; /** * 입력이 닫히고 처리 중이던 요청이 모두 응답된 뒤 호출된다. * 클라이언트가 stdin을 닫는 것이 MCP stdio의 정상 종료 신호다. */ onInputEnd?: () => void; } export interface McpServer { close(): void; } export declare function startMcpServer(options: McpServerOptions): McpServer; /** * MCP stdio 프레이밍: 줄바꿈으로 구분된 JSON. 요청 하나에 응답 한 줄. * (전송을 주입할 수 있게 분리 — 스트림 두 개로 테스트된다) * * `onInputEnd`는 stdin이 닫히고 **처리 중이던 요청이 모두 응답된 뒤** 호출된다. * 닫히는 즉시 종료하면 아직 쓰이지 않은 응답이 잘려 나간다 (실측). */ export declare function serveStdio(input: Readable, output: Writable, ctx: ToolContext, onInputEnd?: () => void): void; /** * http(s):// 허브 주소 → 대시보드 WS 엔드포인트. * 쿼리(접속 토큰)는 그대로 옮긴다 — 노출된 허브는 토큰 없이 붙을 수 없다. * * 경로는 갈아치우지 않고 뒤에 붙인다 — 허브가 경로 접두사를 가진 리버스 프록시나 * 터널 뒤에 있을 수 있다(`--hub https://x.example/__crosspane`). 에이전트 쪽 * `agentUrl`과 같은 규칙이다. */ export declare function toWebSocketUrl(hubUrl: string): string;