/** * MCP SDK compatibility layer * * Provides unified API for registering tools, resources, and prompts * across different MCP SDK versions. * * CRITICAL: This layer MUST register JSON-RPC request handlers for: * - tools/list, tools/call * - resources/list, resources/read, resources/templates/list * - prompts/list, prompts/get * * Following MCP SDK v1.x specification: * https://github.com/modelcontextprotocol/typescript-sdk */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import type { Tool, ToolAnnotations, Resource, ResourceTemplate, Prompt } from '@modelcontextprotocol/sdk/types.js'; import type { SapMcpContext } from '../../core/src/types.js'; type ResourceHandler = () => Promise; type ResourceTemplateHandler = (uri: string, args: Record) => Promise; type PromptHandler = (args: Record) => Promise; type ResourceTemplateMatch = { args: Record; }; /** * @name matchResourceTemplateUri * @description Matches MCP resource URI templates without converting attacker-controlled text into a regular expression. */ export declare function matchResourceTemplateUri(uriTemplate: string, resourceUri: string): ResourceTemplateMatch | undefined; /** * Associates runtime context with an MCP server so tool calls can enforce policy and key-safety guards. */ export declare function setToolExecutionContext(server: Server, context: SapMcpContext): void; /** * Tool registration helper * * Registers a tool and ensures JSON-RPC handlers are set up for tools/list and tools/call */ export declare function registerTool(server: Server, name: string, definition: { title?: string; description: string; inputSchema: unknown; outputSchema?: unknown; annotations?: ToolAnnotations; /** MCP Apps extension: maps a tool to a `ui://` resource for visual rendering. */ _meta?: Record; }, handler: (input: TInput) => Promise): { inputSchema: { [x: string]: unknown; type: "object"; properties?: { [x: string]: object; } | undefined; required?: string[] | undefined; }; name: string; description?: string | undefined; outputSchema?: { [x: string]: unknown; type: "object"; properties?: { [x: string]: object; } | undefined; required?: string[] | undefined; } | undefined; annotations?: { title?: string | undefined; readOnlyHint?: boolean | undefined; destructiveHint?: boolean | undefined; idempotentHint?: boolean | undefined; openWorldHint?: boolean | undefined; } | undefined; execution?: { taskSupport?: "optional" | "required" | "forbidden" | undefined; } | undefined; _meta?: { [x: string]: unknown; } | undefined; icons?: { src: string; mimeType?: string | undefined; sizes?: string[] | undefined; theme?: "light" | "dark" | undefined; }[] | undefined; title?: string | undefined; }; /** * Resource registration helper * * Registers a resource and ensures JSON-RPC handlers are set up for resources/list and resources/read */ export declare function registerResource(server: Server, uri: string, _schema: unknown, definition: { name: string; description?: string; mimeType?: string; }, handler: ResourceHandler): { uri: string; name: string; description?: string | undefined; mimeType?: string | undefined; size?: number | undefined; annotations?: { audience?: ("user" | "assistant")[] | undefined; priority?: number | undefined; lastModified?: string | undefined; } | undefined; _meta?: { [x: string]: unknown; } | undefined; icons?: { src: string; mimeType?: string | undefined; sizes?: string[] | undefined; theme?: "light" | "dark" | undefined; }[] | undefined; title?: string | undefined; }; /** * Resource template registration helper * * Registers a resource template and ensures JSON-RPC handlers are set up */ export declare function registerResourceTemplate(server: Server, uriTemplate: string, _schema: unknown, definition: { name: string; description?: string; mimeType?: string; }, handler: ResourceTemplateHandler): { uriTemplate: string; name: string; description?: string | undefined; mimeType?: string | undefined; annotations?: { audience?: ("user" | "assistant")[] | undefined; priority?: number | undefined; lastModified?: string | undefined; } | undefined; _meta?: { [x: string]: unknown; } | undefined; icons?: { src: string; mimeType?: string | undefined; sizes?: string[] | undefined; theme?: "light" | "dark" | undefined; }[] | undefined; title?: string | undefined; }; /** * Prompt registration helper * * Registers a prompt and ensures JSON-RPC handlers are set up for prompts/list and prompts/get */ export declare function registerPrompt(server: Server, name: string, _schema: unknown, definition: { description: string; arguments?: Array<{ name: string; description: string; required?: boolean; }>; }, handler: PromptHandler): { name: string; description?: string | undefined; arguments?: { name: string; description?: string | undefined; required?: boolean | undefined; }[] | undefined; _meta?: { [x: string]: unknown; } | undefined; icons?: { src: string; mimeType?: string | undefined; sizes?: string[] | undefined; theme?: "light" | "dark" | undefined; }[] | undefined; title?: string | undefined; }; /** * Get registered tools */ export declare function getRegisteredTools(server: Server): Tool[]; /** * Get registered resources */ export declare function getRegisteredResources(server: Server): Resource[]; /** * Get registered resource templates */ export declare function getRegisteredResourceTemplates(server: Server): ResourceTemplate[]; /** * Get registered prompts */ export declare function getRegisteredPrompts(server: Server): Prompt[]; /** * Get handler registration status */ export declare function getHandlerStatus(server: Server): { tools: boolean; resources: boolean; prompts: boolean; }; export {}; //# sourceMappingURL=sdk-compat.d.ts.map