@diskd-ai/email-mcp 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +155 -0
- package/README.md +820 -0
- package/dist/cli/account-commands.d.ts +10 -0
- package/dist/cli/account-commands.d.ts.map +1 -0
- package/dist/cli/account-commands.js +703 -0
- package/dist/cli/account-commands.js.map +1 -0
- package/dist/cli/config-commands.d.ts +9 -0
- package/dist/cli/config-commands.d.ts.map +1 -0
- package/dist/cli/config-commands.js +156 -0
- package/dist/cli/config-commands.js.map +1 -0
- package/dist/cli/guard.d.ts +11 -0
- package/dist/cli/guard.d.ts.map +1 -0
- package/dist/cli/guard.js +18 -0
- package/dist/cli/guard.js.map +1 -0
- package/dist/cli/install-commands.d.ts +12 -0
- package/dist/cli/install-commands.d.ts.map +1 -0
- package/dist/cli/install-commands.js +320 -0
- package/dist/cli/install-commands.js.map +1 -0
- package/dist/cli/notify.d.ts +8 -0
- package/dist/cli/notify.d.ts.map +1 -0
- package/dist/cli/notify.js +143 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/providers.d.ts +13 -0
- package/dist/cli/providers.d.ts.map +1 -0
- package/dist/cli/providers.js +180 -0
- package/dist/cli/providers.js.map +1 -0
- package/dist/cli/scheduler.d.ts +8 -0
- package/dist/cli/scheduler.d.ts.map +1 -0
- package/dist/cli/scheduler.js +268 -0
- package/dist/cli/scheduler.js.map +1 -0
- package/dist/cli/setup.d.ts +12 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +15 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/test.d.ts +7 -0
- package/dist/cli/test.d.ts.map +1 -0
- package/dist/cli/test.js +67 -0
- package/dist/cli/test.js.map +1 -0
- package/dist/config/loader.d.ts +34 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +339 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +351 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +165 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/xdg.d.ts +27 -0
- package/dist/config/xdg.d.ts.map +1 -0
- package/dist/config/xdg.js +30 -0
- package/dist/config/xdg.js.map +1 -0
- package/dist/connections/manager.d.ts +42 -0
- package/dist/connections/manager.d.ts.map +1 -0
- package/dist/connections/manager.js +266 -0
- package/dist/connections/manager.js.map +1 -0
- package/dist/connections/types.d.ts +13 -0
- package/dist/connections/types.d.ts.map +1 -0
- package/dist/connections/types.js +2 -0
- package/dist/connections/types.js.map +1 -0
- package/dist/logging.d.ts +46 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +63 -0
- package/dist/logging.js.map +1 -0
- package/dist/main.d.ts +13 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +206 -0
- package/dist/main.js.map +1 -0
- package/dist/prompts/actions.prompt.d.ts +9 -0
- package/dist/prompts/actions.prompt.d.ts.map +1 -0
- package/dist/prompts/actions.prompt.js +64 -0
- package/dist/prompts/actions.prompt.js.map +1 -0
- package/dist/prompts/calendar.prompt.d.ts +9 -0
- package/dist/prompts/calendar.prompt.d.ts.map +1 -0
- package/dist/prompts/calendar.prompt.js +55 -0
- package/dist/prompts/calendar.prompt.js.map +1 -0
- package/dist/prompts/cleanup.prompt.d.ts +9 -0
- package/dist/prompts/cleanup.prompt.d.ts.map +1 -0
- package/dist/prompts/cleanup.prompt.js +78 -0
- package/dist/prompts/cleanup.prompt.js.map +1 -0
- package/dist/prompts/compose.prompt.d.ts +8 -0
- package/dist/prompts/compose.prompt.d.ts.map +1 -0
- package/dist/prompts/compose.prompt.js +116 -0
- package/dist/prompts/compose.prompt.js.map +1 -0
- package/dist/prompts/register.d.ts +8 -0
- package/dist/prompts/register.d.ts.map +1 -0
- package/dist/prompts/register.js +20 -0
- package/dist/prompts/register.js.map +1 -0
- package/dist/prompts/thread.prompt.d.ts +9 -0
- package/dist/prompts/thread.prompt.d.ts.map +1 -0
- package/dist/prompts/thread.prompt.js +58 -0
- package/dist/prompts/thread.prompt.js.map +1 -0
- package/dist/prompts/triage.prompt.d.ts +9 -0
- package/dist/prompts/triage.prompt.d.ts.map +1 -0
- package/dist/prompts/triage.prompt.js +64 -0
- package/dist/prompts/triage.prompt.js.map +1 -0
- package/dist/resources/accounts.resource.d.ts +9 -0
- package/dist/resources/accounts.resource.d.ts.map +1 -0
- package/dist/resources/accounts.resource.js +26 -0
- package/dist/resources/accounts.resource.js.map +1 -0
- package/dist/resources/mailboxes.resource.d.ts +10 -0
- package/dist/resources/mailboxes.resource.d.ts.map +1 -0
- package/dist/resources/mailboxes.resource.js +33 -0
- package/dist/resources/mailboxes.resource.js.map +1 -0
- package/dist/resources/register.d.ts +12 -0
- package/dist/resources/register.d.ts.map +1 -0
- package/dist/resources/register.js +20 -0
- package/dist/resources/register.js.map +1 -0
- package/dist/resources/scheduled.resource.d.ts +9 -0
- package/dist/resources/scheduled.resource.d.ts.map +1 -0
- package/dist/resources/scheduled.resource.js +31 -0
- package/dist/resources/scheduled.resource.js.map +1 -0
- package/dist/resources/stats.resource.d.ts +10 -0
- package/dist/resources/stats.resource.d.ts.map +1 -0
- package/dist/resources/stats.resource.js +45 -0
- package/dist/resources/stats.resource.js.map +1 -0
- package/dist/resources/templates.resource.d.ts +9 -0
- package/dist/resources/templates.resource.d.ts.map +1 -0
- package/dist/resources/templates.resource.js +34 -0
- package/dist/resources/templates.resource.js.map +1 -0
- package/dist/resources/unread.resource.d.ts +11 -0
- package/dist/resources/unread.resource.d.ts.map +1 -0
- package/dist/resources/unread.resource.js +46 -0
- package/dist/resources/unread.resource.js.map +1 -0
- package/dist/safety/audit.d.ts +17 -0
- package/dist/safety/audit.d.ts.map +1 -0
- package/dist/safety/audit.js +50 -0
- package/dist/safety/audit.js.map +1 -0
- package/dist/safety/rate-limiter.d.ts +22 -0
- package/dist/safety/rate-limiter.d.ts.map +1 -0
- package/dist/safety/rate-limiter.js +52 -0
- package/dist/safety/rate-limiter.js.map +1 -0
- package/dist/safety/validation.d.ts +44 -0
- package/dist/safety/validation.d.ts.map +1 -0
- package/dist/safety/validation.js +113 -0
- package/dist/safety/validation.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +25 -0
- package/dist/server.js.map +1 -0
- package/dist/services/calendar.service.d.ts +22 -0
- package/dist/services/calendar.service.d.ts.map +1 -0
- package/dist/services/calendar.service.js +115 -0
- package/dist/services/calendar.service.js.map +1 -0
- package/dist/services/event-bus.d.ts +28 -0
- package/dist/services/event-bus.d.ts.map +1 -0
- package/dist/services/event-bus.js +16 -0
- package/dist/services/event-bus.js.map +1 -0
- package/dist/services/hooks.service.d.ts +77 -0
- package/dist/services/hooks.service.d.ts.map +1 -0
- package/dist/services/hooks.service.js +498 -0
- package/dist/services/hooks.service.js.map +1 -0
- package/dist/services/imap.service.d.ts +133 -0
- package/dist/services/imap.service.d.ts.map +1 -0
- package/dist/services/imap.service.js +1393 -0
- package/dist/services/imap.service.js.map +1 -0
- package/dist/services/label-strategy.d.ts +20 -0
- package/dist/services/label-strategy.d.ts.map +1 -0
- package/dist/services/label-strategy.js +237 -0
- package/dist/services/label-strategy.js.map +1 -0
- package/dist/services/local-calendar.service.d.ts +126 -0
- package/dist/services/local-calendar.service.d.ts.map +1 -0
- package/dist/services/local-calendar.service.js +428 -0
- package/dist/services/local-calendar.service.js.map +1 -0
- package/dist/services/notifier.service.d.ts +69 -0
- package/dist/services/notifier.service.d.ts.map +1 -0
- package/dist/services/notifier.service.js +319 -0
- package/dist/services/notifier.service.js.map +1 -0
- package/dist/services/oauth.service.d.ts +47 -0
- package/dist/services/oauth.service.d.ts.map +1 -0
- package/dist/services/oauth.service.js +140 -0
- package/dist/services/oauth.service.js.map +1 -0
- package/dist/services/presets.d.ts +36 -0
- package/dist/services/presets.d.ts.map +1 -0
- package/dist/services/presets.js +173 -0
- package/dist/services/presets.js.map +1 -0
- package/dist/services/reminders.service.d.ts +63 -0
- package/dist/services/reminders.service.d.ts.map +1 -0
- package/dist/services/reminders.service.js +281 -0
- package/dist/services/reminders.service.js.map +1 -0
- package/dist/services/scheduler.service.d.ts +42 -0
- package/dist/services/scheduler.service.d.ts.map +1 -0
- package/dist/services/scheduler.service.js +260 -0
- package/dist/services/scheduler.service.js.map +1 -0
- package/dist/services/smtp.service.d.ts +40 -0
- package/dist/services/smtp.service.d.ts.map +1 -0
- package/dist/services/smtp.service.js +151 -0
- package/dist/services/smtp.service.js.map +1 -0
- package/dist/services/template.service.d.ts +33 -0
- package/dist/services/template.service.d.ts.map +1 -0
- package/dist/services/template.service.js +123 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/services/watcher.service.d.ts +36 -0
- package/dist/services/watcher.service.d.ts.map +1 -0
- package/dist/services/watcher.service.js +241 -0
- package/dist/services/watcher.service.js.map +1 -0
- package/dist/tools/accounts.tool.d.ts +7 -0
- package/dist/tools/accounts.tool.d.ts.map +1 -0
- package/dist/tools/accounts.tool.js +29 -0
- package/dist/tools/accounts.tool.js.map +1 -0
- package/dist/tools/analytics.tool.d.ts +9 -0
- package/dist/tools/analytics.tool.d.ts.map +1 -0
- package/dist/tools/analytics.tool.js +27 -0
- package/dist/tools/analytics.tool.js.map +1 -0
- package/dist/tools/attachments.tool.d.ts +7 -0
- package/dist/tools/attachments.tool.d.ts.map +1 -0
- package/dist/tools/attachments.tool.js +45 -0
- package/dist/tools/attachments.tool.js.map +1 -0
- package/dist/tools/bulk.tool.d.ts +7 -0
- package/dist/tools/bulk.tool.d.ts.map +1 -0
- package/dist/tools/bulk.tool.js +75 -0
- package/dist/tools/bulk.tool.js.map +1 -0
- package/dist/tools/calendar.tool.d.ts +19 -0
- package/dist/tools/calendar.tool.d.ts.map +1 -0
- package/dist/tools/calendar.tool.js +538 -0
- package/dist/tools/calendar.tool.js.map +1 -0
- package/dist/tools/contacts.tool.d.ts +7 -0
- package/dist/tools/contacts.tool.d.ts.map +1 -0
- package/dist/tools/contacts.tool.js +44 -0
- package/dist/tools/contacts.tool.js.map +1 -0
- package/dist/tools/drafts.tool.d.ts +8 -0
- package/dist/tools/drafts.tool.d.ts.map +1 -0
- package/dist/tools/drafts.tool.js +92 -0
- package/dist/tools/drafts.tool.js.map +1 -0
- package/dist/tools/emails.tool.d.ts +7 -0
- package/dist/tools/emails.tool.d.ts.map +1 -0
- package/dist/tools/emails.tool.js +400 -0
- package/dist/tools/emails.tool.js.map +1 -0
- package/dist/tools/folders.tool.d.ts +7 -0
- package/dist/tools/folders.tool.d.ts.map +1 -0
- package/dist/tools/folders.tool.js +111 -0
- package/dist/tools/folders.tool.js.map +1 -0
- package/dist/tools/health.tool.d.ts +10 -0
- package/dist/tools/health.tool.d.ts.map +1 -0
- package/dist/tools/health.tool.js +78 -0
- package/dist/tools/health.tool.js.map +1 -0
- package/dist/tools/label.tool.d.ts +11 -0
- package/dist/tools/label.tool.d.ts.map +1 -0
- package/dist/tools/label.tool.js +165 -0
- package/dist/tools/label.tool.js.map +1 -0
- package/dist/tools/locate.tool.d.ts +11 -0
- package/dist/tools/locate.tool.d.ts.map +1 -0
- package/dist/tools/locate.tool.js +59 -0
- package/dist/tools/locate.tool.js.map +1 -0
- package/dist/tools/mailboxes.tool.d.ts +7 -0
- package/dist/tools/mailboxes.tool.d.ts.map +1 -0
- package/dist/tools/mailboxes.tool.js +38 -0
- package/dist/tools/mailboxes.tool.js.map +1 -0
- package/dist/tools/manage.tool.d.ts +7 -0
- package/dist/tools/manage.tool.d.ts.map +1 -0
- package/dist/tools/manage.tool.js +125 -0
- package/dist/tools/manage.tool.js.map +1 -0
- package/dist/tools/register.d.ts +20 -0
- package/dist/tools/register.d.ts.map +1 -0
- package/dist/tools/register.js +53 -0
- package/dist/tools/register.js.map +1 -0
- package/dist/tools/scheduler.tool.d.ts +9 -0
- package/dist/tools/scheduler.tool.d.ts.map +1 -0
- package/dist/tools/scheduler.tool.js +104 -0
- package/dist/tools/scheduler.tool.js.map +1 -0
- package/dist/tools/send.tool.d.ts +7 -0
- package/dist/tools/send.tool.d.ts.map +1 -0
- package/dist/tools/send.tool.js +123 -0
- package/dist/tools/send.tool.js.map +1 -0
- package/dist/tools/templates.tool.d.ts +12 -0
- package/dist/tools/templates.tool.d.ts.map +1 -0
- package/dist/tools/templates.tool.js +140 -0
- package/dist/tools/templates.tool.js.map +1 -0
- package/dist/tools/thread.tool.d.ts +10 -0
- package/dist/tools/thread.tool.d.ts.map +1 -0
- package/dist/tools/thread.tool.js +146 -0
- package/dist/tools/thread.tool.js.map +1 -0
- package/dist/tools/watcher.tool.d.ts +9 -0
- package/dist/tools/watcher.tool.d.ts.map +1 -0
- package/dist/tools/watcher.tool.js +282 -0
- package/dist/tools/watcher.tool.js.map +1 -0
- package/dist/types/index.d.ts +271 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/calendar-notes.d.ts +31 -0
- package/dist/utils/calendar-notes.d.ts.map +1 -0
- package/dist/utils/calendar-notes.js +99 -0
- package/dist/utils/calendar-notes.js.map +1 -0
- package/dist/utils/calendar-state.d.ts +27 -0
- package/dist/utils/calendar-state.d.ts.map +1 -0
- package/dist/utils/calendar-state.js +85 -0
- package/dist/utils/calendar-state.js.map +1 -0
- package/dist/utils/conference-details.d.ts +12 -0
- package/dist/utils/conference-details.d.ts.map +1 -0
- package/dist/utils/conference-details.js +71 -0
- package/dist/utils/conference-details.js.map +1 -0
- package/dist/utils/meeting-url.d.ts +10 -0
- package/dist/utils/meeting-url.d.ts.map +1 -0
- package/dist/utils/meeting-url.js +30 -0
- package/dist/utils/meeting-url.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools: move_email, delete_email, mark_email
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import audit from '../safety/audit.js';
|
|
6
|
+
import { sanitizeMailboxName } from '../safety/validation.js';
|
|
7
|
+
export default function registerManageTools(server, imapService) {
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// move_email
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
server.tool('move_email', 'Move an email to a different mailbox folder. ' +
|
|
12
|
+
'The sourceMailbox must be a real folder, not a virtual one like "All Mail". ' +
|
|
13
|
+
'Use find_email_folder first if the email was discovered in a virtual folder.', {
|
|
14
|
+
account: z.string().describe('Account name from list_accounts'),
|
|
15
|
+
emailId: z.string().describe('Email ID to move (from list_emails)'),
|
|
16
|
+
sourceMailbox: z.string().describe('Current mailbox (e.g., INBOX)'),
|
|
17
|
+
destinationMailbox: z
|
|
18
|
+
.string()
|
|
19
|
+
.describe('Target mailbox (e.g., Archive). Use list_mailboxes to see options.'),
|
|
20
|
+
}, { readOnlyHint: false, destructiveHint: false, idempotentHint: true }, async ({ account, emailId, sourceMailbox, destinationMailbox }) => {
|
|
21
|
+
try {
|
|
22
|
+
const cleanSource = sanitizeMailboxName(sourceMailbox);
|
|
23
|
+
const cleanDest = sanitizeMailboxName(destinationMailbox);
|
|
24
|
+
await imapService.moveEmail(account, emailId, cleanSource, cleanDest);
|
|
25
|
+
await audit.log('move_email', account, { emailId, sourceMailbox, destinationMailbox }, 'ok');
|
|
26
|
+
return {
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: 'text',
|
|
30
|
+
text: `✅ Email moved from "${sourceMailbox}" to "${destinationMailbox}".`,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
37
|
+
await audit.log('move_email', account, { emailId, sourceMailbox, destinationMailbox }, 'error', errMsg);
|
|
38
|
+
return {
|
|
39
|
+
isError: true,
|
|
40
|
+
content: [
|
|
41
|
+
{
|
|
42
|
+
type: 'text',
|
|
43
|
+
text: `Failed to move email: ${errMsg}`,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// delete_email
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
server.tool('delete_email', 'Delete an email. By default moves to Trash. Set permanent=true for permanent deletion (⚠️ irreversible). ' +
|
|
53
|
+
'The mailbox must be a real folder. Use find_email_folder first if the email was found in a virtual folder.', {
|
|
54
|
+
account: z.string().describe('Account name from list_accounts'),
|
|
55
|
+
emailId: z.string().describe('Email ID to delete (from list_emails)'),
|
|
56
|
+
mailbox: z.string().default('INBOX').describe('Mailbox containing the email'),
|
|
57
|
+
permanent: z.boolean().default(false).describe('⚠️ Permanently delete (skip Trash)'),
|
|
58
|
+
}, { readOnlyHint: false, destructiveHint: true }, async ({ account, emailId, mailbox, permanent }) => {
|
|
59
|
+
try {
|
|
60
|
+
const cleanMailbox = sanitizeMailboxName(mailbox);
|
|
61
|
+
await imapService.deleteEmail(account, emailId, cleanMailbox, permanent);
|
|
62
|
+
await audit.log('delete_email', account, { emailId, mailbox, permanent }, 'ok');
|
|
63
|
+
return {
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: 'text',
|
|
67
|
+
text: permanent ? `⚠️ Email permanently deleted.` : `🗑️ Email moved to Trash.`,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
74
|
+
await audit.log('delete_email', account, { emailId, mailbox, permanent }, 'error', errMsg);
|
|
75
|
+
return {
|
|
76
|
+
isError: true,
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: `Failed to delete email: ${errMsg}`,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// mark_email
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
server.tool('mark_email', 'Change email flags — mark as read/unread, flag/unflag. Idempotent: marking an already-read email as read is a no-op.', {
|
|
90
|
+
account: z.string().describe('Account name from list_accounts'),
|
|
91
|
+
id: z.string().describe('Email ID (UID) from list_emails or search_emails'),
|
|
92
|
+
mailbox: z.string().default('INBOX').describe('Mailbox containing the email'),
|
|
93
|
+
action: z
|
|
94
|
+
.enum(['read', 'unread', 'flag', 'unflag'])
|
|
95
|
+
.describe('Action: read, unread, flag (star), or unflag (unstar)'),
|
|
96
|
+
}, { readOnlyHint: false, destructiveHint: false, idempotentHint: true }, async ({ account, id, mailbox, action }) => {
|
|
97
|
+
try {
|
|
98
|
+
await imapService.setFlags(account, id, mailbox, action);
|
|
99
|
+
await audit.log('mark_email', account, { id, mailbox, action }, 'ok');
|
|
100
|
+
const labels = {
|
|
101
|
+
read: '📖 Marked as read',
|
|
102
|
+
unread: '📩 Marked as unread',
|
|
103
|
+
flag: '⭐ Flagged',
|
|
104
|
+
unflag: '☆ Unflagged',
|
|
105
|
+
};
|
|
106
|
+
return {
|
|
107
|
+
content: [{ type: 'text', text: `${labels[action]}.` }],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
112
|
+
await audit.log('mark_email', account, { id, mailbox, action }, 'error', errMsg);
|
|
113
|
+
return {
|
|
114
|
+
isError: true,
|
|
115
|
+
content: [
|
|
116
|
+
{
|
|
117
|
+
type: 'text',
|
|
118
|
+
text: `Failed to mark email: ${errMsg}`,
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=manage.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage.tool.js","sourceRoot":"","sources":["../../src/tools/manage.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registration — single wiring point.
|
|
3
|
+
*
|
|
4
|
+
* Registers all MCP tools with the server instance.
|
|
5
|
+
* In read-only mode, write tools are not registered at all.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import type ConnectionManager from '../connections/manager.js';
|
|
9
|
+
import type CalendarService from '../services/calendar.service.js';
|
|
10
|
+
import type HooksService from '../services/hooks.service.js';
|
|
11
|
+
import type ImapService from '../services/imap.service.js';
|
|
12
|
+
import type LocalCalendarService from '../services/local-calendar.service.js';
|
|
13
|
+
import type RemindersService from '../services/reminders.service.js';
|
|
14
|
+
import type SchedulerService from '../services/scheduler.service.js';
|
|
15
|
+
import type SmtpService from '../services/smtp.service.js';
|
|
16
|
+
import type TemplateService from '../services/template.service.js';
|
|
17
|
+
import type WatcherService from '../services/watcher.service.js';
|
|
18
|
+
import type { AppConfig } from '../types/index.js';
|
|
19
|
+
export default function registerAllTools(server: McpServer, connections: ConnectionManager, imapService: ImapService, smtpService: SmtpService, config: AppConfig, templateService: TemplateService, calendarService: CalendarService, localCalendarService: LocalCalendarService, remindersService: RemindersService, schedulerService: SchedulerService, watcherService: WatcherService, hooksService: HooksService): void;
|
|
20
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,iBAAiB,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,eAAe,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,oBAAoB,MAAM,uCAAuC,CAAC;AAC9E,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,eAAe,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,cAAc,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAqBnD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,iBAAiB,EAC9B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,EAC1C,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,GACzB,IAAI,CAkCN"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool registration — single wiring point.
|
|
3
|
+
*
|
|
4
|
+
* Registers all MCP tools with the server instance.
|
|
5
|
+
* In read-only mode, write tools are not registered at all.
|
|
6
|
+
*/
|
|
7
|
+
import registerAccountsTools from './accounts.tool.js';
|
|
8
|
+
import registerAnalyticsTools from './analytics.tool.js';
|
|
9
|
+
import registerAttachmentTools from './attachments.tool.js';
|
|
10
|
+
import registerBulkTools from './bulk.tool.js';
|
|
11
|
+
import registerCalendarTools from './calendar.tool.js';
|
|
12
|
+
import registerContactsTools from './contacts.tool.js';
|
|
13
|
+
import registerDraftTools from './drafts.tool.js';
|
|
14
|
+
import registerEmailsTools from './emails.tool.js';
|
|
15
|
+
import registerFolderTools from './folders.tool.js';
|
|
16
|
+
import registerHealthTools from './health.tool.js';
|
|
17
|
+
import registerLabelTools from './label.tool.js';
|
|
18
|
+
import registerLocateTools from './locate.tool.js';
|
|
19
|
+
import registerMailboxesTools from './mailboxes.tool.js';
|
|
20
|
+
import registerManageTools from './manage.tool.js';
|
|
21
|
+
import registerSchedulerTools from './scheduler.tool.js';
|
|
22
|
+
import registerSendTools from './send.tool.js';
|
|
23
|
+
import { registerTemplateReadTools, registerTemplateWriteTools } from './templates.tool.js';
|
|
24
|
+
import registerThreadTools from './thread.tool.js';
|
|
25
|
+
import registerWatcherTools from './watcher.tool.js';
|
|
26
|
+
export default function registerAllTools(server, connections, imapService, smtpService, config, templateService, calendarService, localCalendarService, remindersService, schedulerService, watcherService, hooksService) {
|
|
27
|
+
const { readOnly } = config.settings;
|
|
28
|
+
// Read tools — always registered
|
|
29
|
+
registerAccountsTools(server, connections);
|
|
30
|
+
registerMailboxesTools(server, imapService);
|
|
31
|
+
registerEmailsTools(server, imapService);
|
|
32
|
+
registerAttachmentTools(server, imapService);
|
|
33
|
+
registerContactsTools(server, imapService);
|
|
34
|
+
registerThreadTools(server, imapService);
|
|
35
|
+
registerTemplateReadTools(server, templateService);
|
|
36
|
+
registerCalendarTools(server, imapService, calendarService, localCalendarService, remindersService);
|
|
37
|
+
registerAnalyticsTools(server, imapService);
|
|
38
|
+
registerHealthTools(server, connections, imapService);
|
|
39
|
+
registerLocateTools(server, imapService);
|
|
40
|
+
registerWatcherTools(server, watcherService, hooksService);
|
|
41
|
+
// Write tools — skipped in read-only mode
|
|
42
|
+
if (!readOnly) {
|
|
43
|
+
registerSendTools(server, smtpService);
|
|
44
|
+
registerManageTools(server, imapService);
|
|
45
|
+
registerLabelTools(server, imapService);
|
|
46
|
+
registerBulkTools(server, imapService);
|
|
47
|
+
registerDraftTools(server, imapService, smtpService);
|
|
48
|
+
registerFolderTools(server, imapService);
|
|
49
|
+
registerTemplateWriteTools(server, templateService, imapService, smtpService);
|
|
50
|
+
registerSchedulerTools(server, schedulerService);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;AACvD,OAAO,sBAAsB,MAAM,qBAAqB,CAAC;AACzD,OAAO,uBAAuB,MAAM,uBAAuB,CAAC;AAC5D,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAC/C,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;AACvD,OAAO,qBAAqB,MAAM,oBAAoB,CAAC;AACvD,OAAO,kBAAkB,MAAM,kBAAkB,CAAC;AAClD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AACnD,OAAO,mBAAmB,MAAM,mBAAmB,CAAC;AACpD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AACnD,OAAO,kBAAkB,MAAM,iBAAiB,CAAC;AACjD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AACnD,OAAO,sBAAsB,MAAM,qBAAqB,CAAC;AACzD,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AACnD,OAAO,sBAAsB,MAAM,qBAAqB,CAAC;AACzD,OAAO,iBAAiB,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,mBAAmB,MAAM,kBAAkB,CAAC;AACnD,OAAO,oBAAoB,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,MAAiB,EACjB,WAA8B,EAC9B,WAAwB,EACxB,WAAwB,EACxB,MAAiB,EACjB,eAAgC,EAChC,eAAgC,EAChC,oBAA0C,EAC1C,gBAAkC,EAClC,gBAAkC,EAClC,cAA8B,EAC9B,YAA0B;IAE1B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IAErC,iCAAiC;IACjC,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,sBAAsB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5C,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7C,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACnD,qBAAqB,CACnB,MAAM,EACN,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,gBAAgB,CACjB,CAAC;IACF,sBAAsB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5C,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACtD,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAE3D,0CAA0C;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvC,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACzC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACxC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvC,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACrD,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACzC,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9E,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools: schedule_email, list_scheduled, cancel_scheduled
|
|
3
|
+
*
|
|
4
|
+
* Email scheduling tools for "send later" functionality.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type SchedulerService from '../services/scheduler.service.js';
|
|
8
|
+
export default function registerSchedulerTools(server: McpServer, schedulerService: SchedulerService): void;
|
|
9
|
+
//# sourceMappingURL=scheduler.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.tool.d.ts","sourceRoot":"","sources":["../../src/tools/scheduler.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AAErE,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,MAAM,EAAE,SAAS,EACjB,gBAAgB,EAAE,gBAAgB,GACjC,IAAI,CAiIN"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tools: schedule_email, list_scheduled, cancel_scheduled
|
|
3
|
+
*
|
|
4
|
+
* Email scheduling tools for "send later" functionality.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import audit from '../safety/audit.js';
|
|
8
|
+
export default function registerSchedulerTools(server, schedulerService) {
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// schedule_email (write)
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
server.tool('schedule_email', 'Schedule an email to be sent at a specific time in the future. The email is queued locally and sent automatically when the time arrives.', {
|
|
13
|
+
account: z.string().describe('Account name to send from'),
|
|
14
|
+
to: z.array(z.string()).min(1).describe('Recipient email addresses'),
|
|
15
|
+
subject: z.string().describe('Email subject'),
|
|
16
|
+
body: z.string().describe('Email body'),
|
|
17
|
+
send_at: z.string().describe("When to send (ISO 8601 datetime, e.g. '2025-02-20T09:00:00Z')"),
|
|
18
|
+
cc: z.array(z.string()).optional().describe('CC recipients'),
|
|
19
|
+
bcc: z.array(z.string()).optional().describe('BCC recipients'),
|
|
20
|
+
html: z.boolean().default(false).describe('Send as HTML (default: false)'),
|
|
21
|
+
in_reply_to: z.string().optional().describe('Message-ID to reply to'),
|
|
22
|
+
}, { readOnlyHint: false, destructiveHint: false }, async (params) => {
|
|
23
|
+
const scheduled = await schedulerService.schedule(params.account, {
|
|
24
|
+
to: params.to,
|
|
25
|
+
subject: params.subject,
|
|
26
|
+
body: params.body,
|
|
27
|
+
sendAt: params.send_at,
|
|
28
|
+
cc: params.cc,
|
|
29
|
+
bcc: params.bcc,
|
|
30
|
+
html: params.html,
|
|
31
|
+
inReplyTo: params.in_reply_to,
|
|
32
|
+
});
|
|
33
|
+
const result = {
|
|
34
|
+
schedule_id: scheduled.id,
|
|
35
|
+
send_at: scheduled.sendAt,
|
|
36
|
+
draft_saved: !!scheduled.draftMessageId,
|
|
37
|
+
status: 'scheduled',
|
|
38
|
+
};
|
|
39
|
+
await audit.log('schedule_email', params.account, params, 'ok');
|
|
40
|
+
return {
|
|
41
|
+
content: [
|
|
42
|
+
{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: JSON.stringify(result, null, 2),
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// list_scheduled (read)
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
server.tool('list_scheduled', 'List scheduled emails. Shows pending, sent, or all scheduled emails.', {
|
|
53
|
+
account: z.string().optional().describe('Filter by account name (all accounts if omitted)'),
|
|
54
|
+
status: z
|
|
55
|
+
.enum(['pending', 'sent', 'failed', 'all'])
|
|
56
|
+
.default('pending')
|
|
57
|
+
.describe('Filter by status (default: pending)'),
|
|
58
|
+
}, { readOnlyHint: true, destructiveHint: false }, async ({ account, status }) => {
|
|
59
|
+
const emails = await schedulerService.list({
|
|
60
|
+
account,
|
|
61
|
+
status,
|
|
62
|
+
});
|
|
63
|
+
const summary = emails.map((e) => ({
|
|
64
|
+
id: e.id,
|
|
65
|
+
account: e.account,
|
|
66
|
+
to: e.to.join(', '),
|
|
67
|
+
subject: e.subject,
|
|
68
|
+
send_at: e.sendAt,
|
|
69
|
+
status: e.status,
|
|
70
|
+
attempts: e.attempts,
|
|
71
|
+
overdue: e.status === 'pending' && new Date(e.sendAt).getTime() < Date.now(),
|
|
72
|
+
last_error: e.lastError,
|
|
73
|
+
}));
|
|
74
|
+
return {
|
|
75
|
+
content: [
|
|
76
|
+
{
|
|
77
|
+
type: 'text',
|
|
78
|
+
text: JSON.stringify({ scheduled_emails: summary, count: summary.length }, null, 2),
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// cancel_scheduled (write)
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
server.tool('cancel_scheduled', 'Cancel a scheduled email. Removes it from the queue and deletes the associated draft.', {
|
|
87
|
+
schedule_id: z.string().describe('Schedule ID to cancel'),
|
|
88
|
+
}, { readOnlyHint: false, destructiveHint: true }, async ({ schedule_id: scheduleId }) => {
|
|
89
|
+
const result = await schedulerService.cancel(scheduleId);
|
|
90
|
+
await audit.log('cancel_scheduled', 'system', { scheduleId }, 'ok');
|
|
91
|
+
return {
|
|
92
|
+
content: [
|
|
93
|
+
{
|
|
94
|
+
type: 'text',
|
|
95
|
+
text: JSON.stringify({
|
|
96
|
+
cancelled: result.cancelled,
|
|
97
|
+
draft_deleted: result.draftDeleted,
|
|
98
|
+
}, null, 2),
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=scheduler.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.tool.js","sourceRoot":"","sources":["../../src/tools/scheduler.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools: send_email, reply_email, forward_email
|
|
3
|
+
*/
|
|
4
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
|
+
import type SmtpService from '../services/smtp.service.js';
|
|
6
|
+
export default function registerSendTools(server: McpServer, smtpService: SmtpService): void;
|
|
7
|
+
//# sourceMappingURL=send.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.tool.d.ts","sourceRoot":"","sources":["../../src/tools/send.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAE3D,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAqK3F"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools: send_email, reply_email, forward_email
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import audit from '../safety/audit.js';
|
|
6
|
+
import { validateInputLength } from '../safety/validation.js';
|
|
7
|
+
export default function registerSendTools(server, smtpService) {
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// send_email
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
server.tool('send_email', 'Send a new email. Supports plain text or HTML body, CC, and BCC.', {
|
|
12
|
+
account: z.string().describe('Account name from list_accounts'),
|
|
13
|
+
to: z.array(z.string().email()).min(1).describe('Recipient email addresses'),
|
|
14
|
+
subject: z.string().describe('Email subject'),
|
|
15
|
+
body: z.string().describe('Email body content'),
|
|
16
|
+
cc: z.array(z.string().email()).optional().describe('CC recipients'),
|
|
17
|
+
bcc: z.array(z.string().email()).optional().describe('BCC recipients'),
|
|
18
|
+
html: z.boolean().default(false).describe('Send as HTML (default: plain text)'),
|
|
19
|
+
}, { readOnlyHint: false, destructiveHint: false, openWorldHint: true }, async (params) => {
|
|
20
|
+
try {
|
|
21
|
+
validateInputLength(params.subject, 998, 'Subject');
|
|
22
|
+
validateInputLength(params.body, 5_000_000, 'Body');
|
|
23
|
+
const result = await smtpService.sendEmail(params.account, params);
|
|
24
|
+
await audit.log('send_email', params.account, { to: params.to, subject: params.subject }, 'ok');
|
|
25
|
+
return {
|
|
26
|
+
content: [
|
|
27
|
+
{
|
|
28
|
+
type: 'text',
|
|
29
|
+
text: `✅ Email sent successfully!\nTo: ${params.to.join(', ')}\nSubject: ${params.subject}\nMessage-ID: ${result.messageId}`,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
36
|
+
await audit.log('send_email', params.account, { to: params.to, subject: params.subject }, 'error', errMsg);
|
|
37
|
+
return {
|
|
38
|
+
isError: true,
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: `Failed to send email: ${errMsg}`,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// reply_email
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
server.tool('reply_email', 'Reply to an email with proper threading (In-Reply-To & References headers). Use get_email first to read the original.', {
|
|
52
|
+
account: z.string().describe('Account name from list_accounts'),
|
|
53
|
+
emailId: z.string().describe('Email ID to reply to (from list_emails or get_email)'),
|
|
54
|
+
mailbox: z.string().default('INBOX').describe('Mailbox where the original email is'),
|
|
55
|
+
body: z.string().describe('Reply body content'),
|
|
56
|
+
replyAll: z.boolean().default(false).describe('Reply to all recipients'),
|
|
57
|
+
html: z.boolean().default(false).describe('Send as HTML'),
|
|
58
|
+
}, { readOnlyHint: false, destructiveHint: false, openWorldHint: true }, async (params) => {
|
|
59
|
+
try {
|
|
60
|
+
const result = await smtpService.replyToEmail(params.account, params);
|
|
61
|
+
await audit.log('reply_email', params.account, { emailId: params.emailId, mailbox: params.mailbox }, 'ok');
|
|
62
|
+
return {
|
|
63
|
+
content: [
|
|
64
|
+
{
|
|
65
|
+
type: 'text',
|
|
66
|
+
text: `✅ Reply sent successfully!\nMessage-ID: ${result.messageId}`,
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
73
|
+
await audit.log('reply_email', params.account, { emailId: params.emailId, mailbox: params.mailbox }, 'error', errMsg);
|
|
74
|
+
return {
|
|
75
|
+
isError: true,
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: 'text',
|
|
79
|
+
text: `Failed to reply: ${errMsg}`,
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// forward_email
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
server.tool('forward_email', 'Forward an email to new recipients with optional additional message. Original email is quoted below.', {
|
|
89
|
+
account: z.string().describe('Account name from list_accounts'),
|
|
90
|
+
emailId: z.string().describe('Email ID to forward (from list_emails or get_email)'),
|
|
91
|
+
mailbox: z.string().default('INBOX').describe('Mailbox where the original email is'),
|
|
92
|
+
to: z.array(z.string().email()).min(1).describe('Forward to these recipients'),
|
|
93
|
+
body: z.string().optional().describe('Additional message above the forwarded content'),
|
|
94
|
+
cc: z.array(z.string().email()).optional().describe('CC recipients'),
|
|
95
|
+
}, { readOnlyHint: false, destructiveHint: false, openWorldHint: true }, async (params) => {
|
|
96
|
+
try {
|
|
97
|
+
const result = await smtpService.forwardEmail(params.account, params);
|
|
98
|
+
await audit.log('forward_email', params.account, { to: params.to, emailId: params.emailId }, 'ok');
|
|
99
|
+
return {
|
|
100
|
+
content: [
|
|
101
|
+
{
|
|
102
|
+
type: 'text',
|
|
103
|
+
text: `✅ Email forwarded successfully!\nTo: ${params.to.join(', ')}\nMessage-ID: ${result.messageId}`,
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
110
|
+
await audit.log('forward_email', params.account, { to: params.to, emailId: params.emailId }, 'error', errMsg);
|
|
111
|
+
return {
|
|
112
|
+
isError: true,
|
|
113
|
+
content: [
|
|
114
|
+
{
|
|
115
|
+
type: 'text',
|
|
116
|
+
text: `Failed to forward: ${errMsg}`,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=send.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.tool.js","sourceRoot":"","sources":["../../src/tools/send.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tools: list_templates, apply_template
|
|
3
|
+
*
|
|
4
|
+
* User-defined email templates with {{variable}} substitution.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type ImapService from '../services/imap.service.js';
|
|
8
|
+
import type SmtpService from '../services/smtp.service.js';
|
|
9
|
+
import type TemplateService from '../services/template.service.js';
|
|
10
|
+
export declare function registerTemplateReadTools(server: McpServer, templateService: TemplateService): void;
|
|
11
|
+
export declare function registerTemplateWriteTools(server: McpServer, templateService: TemplateService, imapService: ImapService, smtpService: SmtpService): void;
|
|
12
|
+
//# sourceMappingURL=templates.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.tool.d.ts","sourceRoot":"","sources":["../../src/tools/templates.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,WAAW,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,eAAe,MAAM,iCAAiC,CAAC;AAEnE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,eAAe,GAC/B,IAAI,CAgDN;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,GACvB,IAAI,CAiHN"}
|