UNPKG

msexchange-mcp

Version:

MCP server for Microsoft Exchange/Outlook email operations via Microsoft Graph API

57 lines 2.65 kB
import { z } from 'zod'; import { MailService } from '../mail/mailService.js'; import accountsConfig from '../config/accountsLoader.js'; export const updateEmailCategoriesTool = { name: 'update_email_categories', description: 'Update email categories (labels) - set, add, or remove', parameters: z.object({ user_id: z.string().describe('The user ID or email address'), message_id: z.string().describe('The email message ID'), categories: z.array(z.string()).describe('Categories to set (replaces all existing)'), add_categories: z.array(z.string()).optional().describe('Categories to add to existing'), remove_categories: z.array(z.string()).optional().describe('Categories to remove from existing'), }), execute: async (params) => { try { const account = accountsConfig.accounts.find(acc => acc.id === params.user_id || acc.email === params.user_id); if (!account) { throw new Error(`User not found: ${params.user_id}`); } const mailService = new MailService(account.email); let finalCategories = params.categories; // If adding or removing, we need to get current categories first if (!finalCategories && (params.add_categories || params.remove_categories)) { const email = await mailService.getEmailById(params.message_id); finalCategories = email.categories || []; if (params.add_categories) { finalCategories = [...new Set([...finalCategories, ...params.add_categories])]; } if (params.remove_categories) { finalCategories = finalCategories.filter(cat => !params.remove_categories.includes(cat)); } } await mailService.updateEmail(params.message_id, { categories: finalCategories || [] }); return { content: [ { type: 'text', text: `Email categories updated successfully. New categories: ${(finalCategories || []).join(', ') || 'none'}`, }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error updating email categories: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], }; } }, }; //# sourceMappingURL=updateEmailCategories.js.map