move_messages
Transfer email messages between different mailboxes to organize your iCloud email storage effectively.
Instructions
Move messages between mailboxes
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| destinationMailbox | Yes | Destination mailbox name | |
| messageIds | Yes | Array of message IDs to move | |
| sourceMailbox | Yes | Source mailbox name |
Implementation Reference
- src/index.ts:174-196 (registration)Registration of the move_messages tool in the ListTools response, including name, description, and input schema.{ name: 'move_messages', description: 'Move messages between mailboxes', inputSchema: { type: 'object', properties: { messageIds: { type: 'array', items: { type: 'string' }, description: 'Array of message IDs to move', }, sourceMailbox: { type: 'string', description: 'Source mailbox name', }, destinationMailbox: { type: 'string', description: 'Destination mailbox name', }, }, required: ['messageIds', 'sourceMailbox', 'destinationMailbox'], }, },
- src/index.ts:557-583 (handler)MCP server handler for calling the move_messages tool: checks connection, extracts parameters, invokes iCloudMailClient.moveMessages, and returns JSON response.case 'move_messages': { if (!mailClient) { throw new McpError( ErrorCode.InvalidRequest, 'iCloud Mail not configured. Please set ICLOUD_EMAIL and ICLOUD_APP_PASSWORD environment variables.' ); } const messageIds = args?.messageIds as string[]; const sourceMailbox = args?.sourceMailbox as string; const destinationMailbox = args?.destinationMailbox as string; const result = await mailClient.moveMessages( messageIds, sourceMailbox, destinationMailbox ); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; }
- src/lib/icloud-mail-client.ts:488-539 (handler)Core implementation of moveMessages in iCloudMailClient: opens source mailbox, searches all messages, moves them to destination using IMAP.async moveMessages( _messageIds: string[], sourceMailbox: string, destinationMailbox: string ): Promise<{ status: string; message: string }> { return new Promise((resolve) => { this.imap.openBox(sourceMailbox, false, (err: Error) => { if (err) { resolve({ status: 'error', message: `Failed to open source mailbox '${sourceMailbox}': ${err.message}`, }); return; } // Search for all messages to get sequence numbers this.imap.search(['ALL'], (err: Error, results: number[]) => { if (err) { resolve({ status: 'error', message: `Failed to search messages: ${err.message}`, }); return; } if (!results || results.length === 0) { resolve({ status: 'error', message: 'No messages found in source mailbox', }); return; } // Use the sequence numbers for moving this.imap.move(results, destinationMailbox, (err: Error) => { if (err) { resolve({ status: 'error', message: `Failed to move messages: ${err.message}`, }); return; } resolve({ status: 'success', message: `Successfully moved ${results.length} messages from '${sourceMailbox}' to '${destinationMailbox}'`, }); }); }); }); }); }