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: 'listLabels', | |
| description: | |
| 'Lists all Gmail labels for the authenticated user, including system labels (INBOX, SENT, STARRED, UNREAD, etc.) and custom user-created labels. Use the returned IDs with modifyMessageLabels or listMessages labelIds filter.', | |
| parameters: z.strictObject({}), | |
| execute: async (_args, { log }) => { | |
| const gmail = await getGmailClient(); | |
| log.info('Listing Gmail labels'); | |
| try { | |
| const response = await gmail.users.labels.list({ userId: 'me' }); | |
| const labels = (response.data.labels ?? []).map((label) => ({ | |
| id: label.id, | |
| name: label.name, | |
| type: label.type, | |
| messageListVisibility: label.messageListVisibility, | |
| labelListVisibility: label.labelListVisibility, | |
| })); | |
| return JSON.stringify({ labels, count: labels.length }, null, 2); | |
| } catch (error: any) { | |
| log.error(`Error listing Gmail labels: ${error.message || error}`); | |
| if (error.code === 403) | |
| throw new UserError('Permission denied. Confirm the gmail.modify scope was granted.'); | |
| throw new UserError(`Failed to list Gmail labels: ${error.message || 'Unknown error'}`); | |
| } | |
| }, | |
| }); | |
| } | |