/**
 * 最小 ambient 类型声明:@modelcontextprotocol/sdk 的两个 server 子模块。
 *
 * 为什么手写:SDK 的 .d.ts 是 NodeNext 风格(相对导入带 `.js` 后缀),本项目用经典
 * `moduleResolution: Node`(配 `module: CommonJS`,不能改否则牵动整库),跟不动 SDK 内部
 * 的 `.js` 相对导入 → 类型无法解析。运行时则 OK(Node 的 exports map 放行 clean subpath)。
 * 故此处只声明我们用到的那几个 API,类型与运行时解耦。升级 SDK 时若签名变,改这里即可。
 */
declare module '@modelcontextprotocol/sdk/server/mcp.js' {
  import type { ZodRawShape } from 'zod';

  export type McpToolResult = {
    content: Array<{ type: 'text'; text: string }>;
    isError?: boolean;
  };

  export class McpServer {
    constructor(info: { name: string; version: string });
    registerTool(
      name: string,
      config: { title?: string; description?: string; inputSchema?: ZodRawShape },
      // eslint-disable-next-line @typescript-eslint/no-explicit-any
      cb: (args: any) => McpToolResult | Promise<McpToolResult>,
    ): unknown;
    connect(transport: unknown): Promise<void>;
    close(): Promise<void>;
  }
}

declare module '@modelcontextprotocol/sdk/server/streamableHttp.js' {
  import type { IncomingMessage, ServerResponse } from 'node:http';

  export class StreamableHTTPServerTransport {
    constructor(options?: {
      sessionIdGenerator?: (() => string) | undefined;
      enableJsonResponse?: boolean;
    });
    handleRequest(req: IncomingMessage, res: ServerResponse, parsedBody?: unknown): Promise<void>;
    close(): Promise<void>;
  }
}
