msexchange-mcp
Version:
MCP server for Microsoft Exchange/Outlook email operations via Microsoft Graph API
69 lines • 3.31 kB
JavaScript
import { z } from 'zod';
import { MailService } from '../mail/mailService.js';
import accountsConfig from '../config/accountsLoader.js';
export const listMailRulesTool = {
name: 'list_mail_rules',
description: 'List all mail rules configured for the user\'s mailbox',
parameters: z.object({
user_id: z.string().describe('The user ID or email address'),
include_disabled: z.boolean().optional().default(false).describe('Include disabled rules in the list'),
}),
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);
const rules = await mailService.listMailRules();
// Filter rules based on enabled status if requested
const filteredRules = params.include_disabled
? rules
: rules.filter((rule) => rule.isEnabled);
// Sort rules by sequence order
const sortedRules = filteredRules.sort((a, b) => (a.sequence || 0) - (b.sequence || 0));
return {
content: [
{
type: 'text',
text: JSON.stringify({
summary: {
totalRules: rules.length,
enabledRules: rules.filter((rule) => rule.isEnabled).length,
disabledRules: rules.filter((rule) => !rule.isEnabled).length,
showingDisabled: params.include_disabled,
},
rules: sortedRules.map((rule) => ({
id: rule.id,
displayName: rule.displayName,
sequence: rule.sequence,
isEnabled: rule.isEnabled,
hasConditions: Object.keys(rule.conditions || {}).length > 0,
hasActions: Object.keys(rule.actions || {}).length > 0,
conditions: rule.conditions,
actions: rule.actions,
})),
managementTips: [
'Rules are executed in sequence order (lower numbers first)',
'Disabled rules are kept but not executed',
'Use modify_mail_rule to update existing rules',
'Test rule changes with a few emails before applying broadly'
]
}, null, 2),
},
],
};
}
catch (error) {
return {
content: [
{
type: 'text',
text: `Error listing mail rules: ${error instanceof Error ? error.message : 'Unknown error'}`,
},
],
};
}
},
};
//# sourceMappingURL=listMailRules.js.map