mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-14 04:59:41 +02:00
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
import type { Color, Icon } from '@yaakapp/api';
|
|
import * as z from 'zod';
|
|
import type { McpServerContext } from '../types.js';
|
|
|
|
const ICON_VALUES = [
|
|
'alert_triangle',
|
|
'check',
|
|
'check_circle',
|
|
'chevron_down',
|
|
'copy',
|
|
'info',
|
|
'pin',
|
|
'search',
|
|
'trash',
|
|
] as const satisfies readonly Icon[];
|
|
|
|
const COLOR_VALUES = [
|
|
'primary',
|
|
'secondary',
|
|
'info',
|
|
'success',
|
|
'notice',
|
|
'warning',
|
|
'danger',
|
|
] as const satisfies readonly Color[];
|
|
|
|
export function registerToastTools(server: McpServer, ctx: McpServerContext) {
|
|
server.registerTool(
|
|
'show_toast',
|
|
{
|
|
title: 'Show Toast',
|
|
description: 'Show a toast notification in Yaak',
|
|
inputSchema: {
|
|
message: z.string().describe('The message to display'),
|
|
icon: z.enum(ICON_VALUES).optional().describe('Icon name'),
|
|
color: z.enum(COLOR_VALUES).optional().describe('Toast color'),
|
|
timeout: z.number().optional().describe('Timeout in milliseconds'),
|
|
},
|
|
},
|
|
async ({ message, icon, color, timeout }) => {
|
|
await ctx.yaak.toast.show({
|
|
message,
|
|
icon,
|
|
color,
|
|
timeout,
|
|
});
|
|
|
|
return {
|
|
content: [
|
|
{
|
|
type: 'text' as const,
|
|
text: `✓ Toast shown: "${message}"`,
|
|
},
|
|
],
|
|
};
|
|
},
|
|
);
|
|
}
|