msexchange-mcp
Version:
MCP server for Microsoft Exchange/Outlook email operations via Microsoft Graph API
57 lines • 2.65 kB
JavaScript
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