import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { type SessionStore } from "./session.js";
/**
 * Arguments when we create a new instance of your server
 */
export interface CreateServerArg<T = Record<string, unknown>> {
    sessionId: string;
    config: T;
}
export type CreateServerFn<T = Record<string, unknown>> = (arg: CreateServerArg<T>) => Server;
/**
 * Configuration options for the stateful server
 */
export interface StatefulServerOptions {
    /**
     * Session store to use for managing active sessions
     */
    sessionStore?: SessionStore<StreamableHTTPServerTransport>;
}
/**
 * Creates a stateful server for handling MCP requests.
 * For every new session, we invoke createMcpServer to create a new instance of the server.
 * @param createMcpServer Function to create an MCP server
 * @returns Express app
 */
export declare function createStatefulServer<T = Record<string, unknown>>(createMcpServer: CreateServerFn<T>, options?: StatefulServerOptions): {
    app: import("express-serve-static-core").Express;
};
