Spaces:
Sleeping
Sleeping
| import type { FastMCP } from 'fastmcp'; | |
| import { UserError } from 'fastmcp'; | |
| import { z } from 'zod'; | |
| import { getGmailClient } from '../../clients.js'; | |
| export function register(server: FastMCP) { | |
| server.addTool({ | |
| name: 'trashMessage', | |
| description: | |
| 'Moves a Gmail message to Trash. This is the same as clicking Delete in the Gmail UI — reversible from the Trash folder for 30 days. Not a permanent delete.', | |
| parameters: z.strictObject({ | |
| messageId: z.string().describe('The Gmail message ID to move to Trash.'), | |
| }), | |
| execute: async (args, { log }) => { | |
| const gmail = await getGmailClient(); | |
| log.info(`Trashing Gmail message ${args.messageId}`); | |
| try { | |
| const response = await gmail.users.messages.trash({ | |
| userId: 'me', | |
| id: args.messageId, | |
| }); | |
| return JSON.stringify( | |
| { | |
| success: true, | |
| id: response.data.id, | |
| threadId: response.data.threadId, | |
| labelIds: response.data.labelIds ?? [], | |
| message: `Message ${args.messageId} moved to Trash. Recoverable from the Trash folder in the Gmail UI.`, | |
| }, | |
| null, | |
| 2 | |
| ); | |
| } catch (error: any) { | |
| log.error(`Error trashing Gmail message: ${error.message || error}`); | |
| if (error.code === 404) | |
| throw new UserError(`Gmail message not found (ID: ${args.messageId}).`); | |
| if (error.code === 403) | |
| throw new UserError('Permission denied. Confirm the gmail.modify scope was granted.'); | |
| throw new UserError(`Failed to trash message: ${error.message || 'Unknown error'}`); | |
| } | |
| }, | |
| }); | |
| } | |