Skip to content

Commit 6236085

Browse files
Merge branch 'main' into patch-1
2 parents 1b87dca + e328131 commit 6236085

File tree

6 files changed

+456
-20
lines changed

6 files changed

+456
-20
lines changed

README.md

Lines changed: 137 additions & 7 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 144 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/everything/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,20 @@ Resource features:
9696
- `style` (string): Output style preference
9797
- Returns: Multi-turn conversation with images
9898

99+
### Logging
100+
101+
The server sends random-leveled log messages every 15 seconds, e.g.:
102+
103+
```json
104+
{
105+
"method": "notifications/message",
106+
"params": {
107+
"level": "info",
108+
"data": "Info-level message"
109+
}
110+
}
111+
```
112+
99113
## Usage with Claude Desktop
100114

101115
Add to your `claude_desktop_config.json`:

src/everything/everything.ts

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
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

Comments
 (0)