import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
import express from "express";
import type { z } from "zod";
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<T = Record<string, unknown>> {
/**
* Session store to use for managing active sessions
*/
sessionStore?: SessionStore<StreamableHTTPServerTransport>;
/**
* Zod schema for config validation
*/
schema?: z.ZodSchema<T>;
/**
* Express app instance to use (optional)
*/
app?: express.Application;
}
/**
* 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
* @param options Configuration options including optional schema validation and Express app
* @returns Express app
*/
export declare function createStatefulServer<T = Record<string, unknown>>(createMcpServer: CreateServerFn<T>, options?: StatefulServerOptions<T>): {
app: express.Application;
};