mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-23 22:35:21 +02:00
Add annotated message example
This commit is contained in:
@@ -45,6 +45,24 @@ This MCP server attempts to exercise all the features of the MCP protocol. It is
|
|||||||
- No inputs required
|
- No inputs required
|
||||||
- Returns: JSON string of all environment variables
|
- Returns: JSON string of all environment variables
|
||||||
|
|
||||||
|
7. `annotatedMessage`
|
||||||
|
- Demonstrates how annotations can be used to provide metadata about content
|
||||||
|
- Inputs:
|
||||||
|
- `messageType` (enum: "error" | "success" | "debug"): Type of message to demonstrate different annotation patterns
|
||||||
|
- `includeImage` (boolean, default: false): Whether to include an example image
|
||||||
|
- Returns: Content with varying annotations:
|
||||||
|
- Error messages: High priority (1.0), visible to both user and assistant
|
||||||
|
- Success messages: Medium priority (0.7), user-focused
|
||||||
|
- Debug messages: Low priority (0.3), assistant-focused
|
||||||
|
- Optional image: Medium priority (0.5), user-focused
|
||||||
|
- Example annotations:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"priority": 1.0,
|
||||||
|
"audience": ["user", "assistant"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Resources
|
### Resources
|
||||||
|
|
||||||
The server provides 100 test resources in two formats:
|
The server provides 100 test resources in two formats:
|
||||||
|
|||||||
@@ -60,6 +60,13 @@ const EXAMPLE_COMPLETIONS = {
|
|||||||
|
|
||||||
const GetTinyImageSchema = z.object({});
|
const GetTinyImageSchema = z.object({});
|
||||||
|
|
||||||
|
const AnnotatedMessageSchema = z.object({
|
||||||
|
messageType: z.enum(["error", "success", "debug"])
|
||||||
|
.describe("Type of message to demonstrate different annotation patterns"),
|
||||||
|
includeImage: z.boolean().default(false)
|
||||||
|
.describe("Whether to include an example image")
|
||||||
|
});
|
||||||
|
|
||||||
enum ToolName {
|
enum ToolName {
|
||||||
ECHO = "echo",
|
ECHO = "echo",
|
||||||
ADD = "add",
|
ADD = "add",
|
||||||
@@ -67,6 +74,7 @@ enum ToolName {
|
|||||||
PRINT_ENV = "printEnv",
|
PRINT_ENV = "printEnv",
|
||||||
SAMPLE_LLM = "sampleLLM",
|
SAMPLE_LLM = "sampleLLM",
|
||||||
GET_TINY_IMAGE = "getTinyImage",
|
GET_TINY_IMAGE = "getTinyImage",
|
||||||
|
ANNOTATED_MESSAGE = "annotatedMessage",
|
||||||
}
|
}
|
||||||
|
|
||||||
enum PromptName {
|
enum PromptName {
|
||||||
@@ -329,6 +337,11 @@ export const createServer = () => {
|
|||||||
description: "Returns the MCP_TINY_IMAGE",
|
description: "Returns the MCP_TINY_IMAGE",
|
||||||
inputSchema: zodToJsonSchema(GetTinyImageSchema) as ToolInput,
|
inputSchema: zodToJsonSchema(GetTinyImageSchema) as ToolInput,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: ToolName.ANNOTATED_MESSAGE,
|
||||||
|
description: "Demonstrates how annotations can be used to provide metadata about content",
|
||||||
|
inputSchema: zodToJsonSchema(AnnotatedMessageSchema) as ToolInput,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
return { tools };
|
return { tools };
|
||||||
@@ -436,6 +449,57 @@ export const createServer = () => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (name === ToolName.ANNOTATED_MESSAGE) {
|
||||||
|
const { messageType, includeImage } = AnnotatedMessageSchema.parse(args);
|
||||||
|
|
||||||
|
const content = [];
|
||||||
|
|
||||||
|
// Main message with different priorities/audiences based on type
|
||||||
|
if (messageType === "error") {
|
||||||
|
content.push({
|
||||||
|
type: "text",
|
||||||
|
text: "Error: Operation failed",
|
||||||
|
annotations: {
|
||||||
|
priority: 1.0, // Errors are highest priority
|
||||||
|
audience: ["user", "assistant"] // Both need to know about errors
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (messageType === "success") {
|
||||||
|
content.push({
|
||||||
|
type: "text",
|
||||||
|
text: "Operation completed successfully",
|
||||||
|
annotations: {
|
||||||
|
priority: 0.7, // Success messages are important but not critical
|
||||||
|
audience: ["user"] // Success mainly for user consumption
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (messageType === "debug") {
|
||||||
|
content.push({
|
||||||
|
type: "text",
|
||||||
|
text: "Debug: Cache hit ratio 0.95, latency 150ms",
|
||||||
|
annotations: {
|
||||||
|
priority: 0.3, // Debug info is low priority
|
||||||
|
audience: ["assistant"] // Technical details for assistant
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional image with its own annotations
|
||||||
|
if (includeImage) {
|
||||||
|
content.push({
|
||||||
|
type: "image",
|
||||||
|
data: MCP_TINY_IMAGE,
|
||||||
|
mimeType: "image/png",
|
||||||
|
annotations: {
|
||||||
|
priority: 0.5,
|
||||||
|
audience: ["user"] // Images primarily for user visualization
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return { content };
|
||||||
|
}
|
||||||
|
|
||||||
throw new Error(`Unknown tool: ${name}`);
|
throw new Error(`Unknown tool: ${name}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user