88 * - Tool schema generation helpers
99 */
1010
11- import { McpServer as SdkMcpServer } from 'mcp/server/mcp.js' ;
11+ import type { McpServer as SdkMcpServer } from 'mcp/server/mcp.js' ;
1212import type { CallToolResult } from 'mcp/types.js' ;
1313
1414// Import library components
15- import { Logger } from '../utils/Logger.ts' ;
15+ import type { Logger } from '../utils/Logger.ts' ;
1616import { toError } from '../utils/Error.ts' ;
1717
1818// Import types
@@ -21,7 +21,9 @@ import type {
2121 CreateMessageResult ,
2222 ElicitInputRequest ,
2323 ElicitInputResult ,
24+ //LoggingLevel,
2425 RegisteredTool ,
26+ SendNotificationRequest ,
2527} from '../types/BeyondMcpTypes.ts' ;
2628
2729/**
@@ -39,19 +41,24 @@ export class BeyondMcpSDKHelpers {
3941 /**
4042 * MCP Sampling API integration
4143 */
42- async createMessage ( request : CreateMessageRequest ) : Promise < CreateMessageResult > {
44+ async createMessage (
45+ request : CreateMessageRequest ,
46+ sessionId ?: string ,
47+ ) : Promise < CreateMessageResult > {
4348 this . logger . debug ( 'MCPSDKHelpers: Creating message via MCP sampling API' , {
4449 model : request . model ,
4550 messageCount : request . messages . length ,
4651 maxTokens : request . maxTokens ,
4752 temperature : request . temperature ,
53+ sessionId,
4854 } ) ;
4955
5056 try {
5157 // Cast to MCP SDK expected type
5258 const mcpRequest = {
5359 ...request ,
5460 maxTokens : request . maxTokens || 2000 , // Ensure maxTokens is present
61+ // deno-lint-ignore no-explicit-any
5562 } as any ;
5663
5764 const result = await this . sdkMcpServer . server . createMessage ( mcpRequest ) ;
@@ -60,6 +67,7 @@ export class BeyondMcpSDKHelpers {
6067 model : request . model ,
6168 hasContent : ! ! result ?. content ,
6269 contentLength : result ?. content ? JSON . stringify ( result . content ) . length : 0 ,
70+ sessionId,
6371 } ) ;
6472
6573 // Cast result to expected type with unknown intermediate
@@ -72,27 +80,65 @@ export class BeyondMcpSDKHelpers {
7280 }
7381 }
7482
83+ /**
84+ * MCP Notification API integration
85+ * Sends a logging message notification to the client
86+ */
87+ async sendNotification ( request : SendNotificationRequest , sessionId ?: string ) : Promise < void > {
88+ this . logger . debug ( 'MCPSDKHelpers: Sending notification via MCP notification API' , {
89+ level : request . level ,
90+ logger : request . logger ,
91+ hasData : ! ! request . data ,
92+ sessionId,
93+ } ) ;
94+
95+ try {
96+ // Send notification using SDK's sendLoggingMessage
97+ await this . sdkMcpServer . sendLoggingMessage (
98+ {
99+ level : request . level ,
100+ logger : request . logger ,
101+ data : request . data ,
102+ } ,
103+ sessionId ,
104+ ) ;
105+
106+ this . logger . debug ( 'MCPSDKHelpers: Notification sent successfully' , {
107+ level : request . level ,
108+ logger : request . logger ,
109+ } ) ;
110+ } catch ( error ) {
111+ this . logger . error ( 'MCPSDKHelpers: MCP notification failed:' , toError ( error ) ) ;
112+ throw new Error (
113+ `MCP notification failed: ${ error instanceof Error ? error . message : 'Unknown error' } ` ,
114+ ) ;
115+ }
116+ }
117+
75118 /**
76119 * MCP Elicitation API integration
77120 */
78- async elicitInput ( request : ElicitInputRequest ) : Promise < ElicitInputResult > {
121+ async elicitInput ( request : ElicitInputRequest , sessionId ?: string ) : Promise < ElicitInputResult > {
79122 this . logger . debug ( 'MCPSDKHelpers: Eliciting input via MCP elicitation API' , {
80123 messageLength : request . message . length ,
81124 hasSchema : ! ! request . requestedSchema ,
125+ sessionId,
82126 } ) ;
83127
84128 try {
85129 // Cast to MCP SDK expected type
86130 const mcpRequest = {
87131 ...request ,
132+ // deno-lint-ignore no-explicit-any
88133 requestedSchema : request . requestedSchema as any ,
89134 } ;
90-
135+ // deno-lint-ignore no-explicit-any
91136 const result = await this . sdkMcpServer . server . elicitInput ( mcpRequest as any ) ;
92137
93138 this . logger . debug ( 'MCPSDKHelpers: Input elicited successfully' , {
94139 action : result . action ,
95140 hasContent : ! ! result . content ,
141+ sessionId,
96142 } ) ;
97143
98144 // Cast result to expected type - handle action mapping
0 commit comments