99 ListResourcesRequestSchema ,
1010 ListResourceTemplatesRequestSchema ,
1111 ListToolsRequestSchema ,
12+ LoggingLevel ,
1213 ReadResourceRequestSchema ,
1314 Resource ,
1415 SetLevelRequestSchema ,
@@ -99,10 +100,10 @@ export const createServer = () => {
99100 ) ;
100101
101102 let subscriptions : Set < string > = new Set ( ) ;
102- let updateInterval : NodeJS . Timeout | undefined ;
103-
103+ let subsUpdateInterval : NodeJS . Timeout | undefined ;
104104 // Set up update interval for subscribed resources
105- updateInterval = setInterval ( ( ) => {
105+
106+ subsUpdateInterval = setInterval ( ( ) => {
106107 for ( const uri of subscriptions ) {
107108 server . notification ( {
108109 method : "notifications/resources/updated" ,
@@ -111,6 +112,34 @@ export const createServer = () => {
111112 }
112113 } , 5000 ) ;
113114
115+ let logLevel : LoggingLevel = "debug" ;
116+ let logsUpdateInterval : NodeJS . Timeout | undefined ;
117+ const messages = [
118+ { level : "debug" , data : "Debug-level message" } ,
119+ { level : "info" , data : "Info-level message" } ,
120+ { level : "notice" , data : "Notice-level message" } ,
121+ { level : "warning" , data : "Warning-level message" } ,
122+ { level : "error" , data : "Error-level message" } ,
123+ { level : "critical" , data : "Critical-level message" } ,
124+ { level : "alert" , data : "Alert level-message" } ,
125+ { level : "emergency" , data : "Emergency-level message" }
126+ ]
127+
128+ const isMessageIgnored = ( level :LoggingLevel ) :boolean => {
129+ const currentLevel = messages . findIndex ( ( msg ) => logLevel === msg . level ) ;
130+ const messageLevel = messages . findIndex ( ( msg ) => level === msg . level ) ;
131+ return messageLevel < currentLevel ;
132+ }
133+
134+ // Set up update interval for random log messages
135+ logsUpdateInterval = setInterval ( ( ) => {
136+ let message = {
137+ method : "notifications/message" ,
138+ params : messages [ Math . floor ( Math . random ( ) * messages . length ) ] ,
139+ }
140+ if ( ! isMessageIgnored ( message . params . level as LoggingLevel ) ) server . notification ( message ) ;
141+ } , 15000 ) ;
142+
114143 // Helper method to request sampling from client
115144 const requestSampling = async (
116145 context : string ,
@@ -451,7 +480,7 @@ export const createServer = () => {
451480
452481 if ( name === ToolName . ANNOTATED_MESSAGE ) {
453482 const { messageType, includeImage } = AnnotatedMessageSchema . parse ( args ) ;
454-
483+
455484 const content = [ ] ;
456485
457486 // Main message with different priorities/audiences based on type
@@ -511,7 +540,7 @@ export const createServer = () => {
511540 if ( ! resourceId ) return { completion : { values : [ ] } } ;
512541
513542 // Filter resource IDs that start with the input value
514- const values = EXAMPLE_COMPLETIONS . resourceId . filter ( id =>
543+ const values = EXAMPLE_COMPLETIONS . resourceId . filter ( id =>
515544 id . startsWith ( argument . value )
516545 ) ;
517546 return { completion : { values, hasMore : false , total : values . length } } ;
@@ -522,7 +551,7 @@ export const createServer = () => {
522551 const completions = EXAMPLE_COMPLETIONS [ argument . name as keyof typeof EXAMPLE_COMPLETIONS ] ;
523552 if ( ! completions ) return { completion : { values : [ ] } } ;
524553
525- const values = completions . filter ( value =>
554+ const values = completions . filter ( value =>
526555 value . startsWith ( argument . value )
527556 ) ;
528557 return { completion : { values, hasMore : false , total : values . length } } ;
@@ -533,24 +562,24 @@ export const createServer = () => {
533562
534563 server . setRequestHandler ( SetLevelRequestSchema , async ( request ) => {
535564 const { level } = request . params ;
565+ logLevel = level ;
536566
537567 // Demonstrate different log levels
538568 await server . notification ( {
539569 method : "notifications/message" ,
540570 params : {
541571 level : "debug" ,
542572 logger : "test-server" ,
543- data : `Logging level set to: ${ level } ` ,
573+ data : `Logging level set to: ${ logLevel } ` ,
544574 } ,
545575 } ) ;
546576
547577 return { } ;
548578 } ) ;
549579
550580 const cleanup = async ( ) => {
551- if ( updateInterval ) {
552- clearInterval ( updateInterval ) ;
553- }
581+ if ( subsUpdateInterval ) clearInterval ( subsUpdateInterval ) ;
582+ if ( logsUpdateInterval ) clearInterval ( logsUpdateInterval ) ;
554583 } ;
555584
556585 return { server, cleanup } ;
0 commit comments