9
9
ListResourcesRequestSchema ,
10
10
ListResourceTemplatesRequestSchema ,
11
11
ListToolsRequestSchema ,
12
+ LoggingLevel ,
12
13
ReadResourceRequestSchema ,
13
14
Resource ,
14
15
SetLevelRequestSchema ,
@@ -99,10 +100,10 @@ export const createServer = () => {
99
100
) ;
100
101
101
102
let subscriptions : Set < string > = new Set ( ) ;
102
- let updateInterval : NodeJS . Timeout | undefined ;
103
-
103
+ let subsUpdateInterval : NodeJS . Timeout | undefined ;
104
104
// Set up update interval for subscribed resources
105
- updateInterval = setInterval ( ( ) => {
105
+
106
+ subsUpdateInterval = setInterval ( ( ) => {
106
107
for ( const uri of subscriptions ) {
107
108
server . notification ( {
108
109
method : "notifications/resources/updated" ,
@@ -111,6 +112,34 @@ export const createServer = () => {
111
112
}
112
113
} , 5000 ) ;
113
114
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
+
114
143
// Helper method to request sampling from client
115
144
const requestSampling = async (
116
145
context : string ,
@@ -451,7 +480,7 @@ export const createServer = () => {
451
480
452
481
if ( name === ToolName . ANNOTATED_MESSAGE ) {
453
482
const { messageType, includeImage } = AnnotatedMessageSchema . parse ( args ) ;
454
-
483
+
455
484
const content = [ ] ;
456
485
457
486
// Main message with different priorities/audiences based on type
@@ -511,7 +540,7 @@ export const createServer = () => {
511
540
if ( ! resourceId ) return { completion : { values : [ ] } } ;
512
541
513
542
// 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 =>
515
544
id . startsWith ( argument . value )
516
545
) ;
517
546
return { completion : { values, hasMore : false , total : values . length } } ;
@@ -522,7 +551,7 @@ export const createServer = () => {
522
551
const completions = EXAMPLE_COMPLETIONS [ argument . name as keyof typeof EXAMPLE_COMPLETIONS ] ;
523
552
if ( ! completions ) return { completion : { values : [ ] } } ;
524
553
525
- const values = completions . filter ( value =>
554
+ const values = completions . filter ( value =>
526
555
value . startsWith ( argument . value )
527
556
) ;
528
557
return { completion : { values, hasMore : false , total : values . length } } ;
@@ -533,24 +562,24 @@ export const createServer = () => {
533
562
534
563
server . setRequestHandler ( SetLevelRequestSchema , async ( request ) => {
535
564
const { level } = request . params ;
565
+ logLevel = level ;
536
566
537
567
// Demonstrate different log levels
538
568
await server . notification ( {
539
569
method : "notifications/message" ,
540
570
params : {
541
571
level : "debug" ,
542
572
logger : "test-server" ,
543
- data : `Logging level set to: ${ level } ` ,
573
+ data : `Logging level set to: ${ logLevel } ` ,
544
574
} ,
545
575
} ) ;
546
576
547
577
return { } ;
548
578
} ) ;
549
579
550
580
const cleanup = async ( ) => {
551
- if ( updateInterval ) {
552
- clearInterval ( updateInterval ) ;
553
- }
581
+ if ( subsUpdateInterval ) clearInterval ( subsUpdateInterval ) ;
582
+ if ( logsUpdateInterval ) clearInterval ( logsUpdateInterval ) ;
554
583
} ;
555
584
556
585
return { server, cleanup } ;
0 commit comments