list_drafts
List email drafts from your Gmail mailbox using optional search queries, spam/trash filters, and result limits.
Instructions
List drafts in the user's mailbox
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum number of drafts to return. Accepts values between 1-500 | |
| q | No | Only return drafts matching the specified query. Supports the same query format as the Gmail search box | |
| includeSpamTrash | No | Include drafts from SPAM and TRASH in the results | |
| includeBodyHtml | No | Whether to include the parsed HTML in the return for each body, excluded by default because they can be excessively large |
Implementation Reference
- src/index.ts:333-369 (registration)Registration of the 'list_drafts' tool via server.tool() with Zod schema for input parameters (maxResults, q, includeSpamTrash, includeBodyHtml). The handler calls Gmail API's users.drafts.list, paginates through all results, and optionally processes message parts.
server.tool("list_drafts", "List drafts in the user's mailbox", { maxResults: z.number().optional().describe("Maximum number of drafts to return. Accepts values between 1-500"), q: z.string().optional().describe("Only return drafts matching the specified query. Supports the same query format as the Gmail search box"), includeSpamTrash: z.boolean().optional().describe("Include drafts from SPAM and TRASH in the results"), includeBodyHtml: z.boolean().optional().describe("Whether to include the parsed HTML in the return for each body, excluded by default because they can be excessively large"), }, async (params) => { return handleTool(config, async (gmail: gmail_v1.Gmail) => { let drafts: Draft[] = [] const { data } = await gmail.users.drafts.list({ userId: 'me', ...params }) drafts.push(...data.drafts || []) while (data.nextPageToken) { const { data: nextData } = await gmail.users.drafts.list({ userId: 'me', ...params, pageToken: data.nextPageToken }) drafts.push(...nextData.drafts || []) } if (drafts) { drafts = drafts.map(draft => { if (draft.message?.payload) { draft.message.payload = processMessagePart( draft.message.payload, params.includeBodyHtml ) } return draft }) } return formatResponse(drafts) }) } ) - src/index.ts:341-369 (handler)Handler function that executes the list_drafts logic: calls Gmail API, paginates through drafts, optionally processes message parts, and returns formatted response.
async (params) => { return handleTool(config, async (gmail: gmail_v1.Gmail) => { let drafts: Draft[] = [] const { data } = await gmail.users.drafts.list({ userId: 'me', ...params }) drafts.push(...data.drafts || []) while (data.nextPageToken) { const { data: nextData } = await gmail.users.drafts.list({ userId: 'me', ...params, pageToken: data.nextPageToken }) drafts.push(...nextData.drafts || []) } if (drafts) { drafts = drafts.map(draft => { if (draft.message?.payload) { draft.message.payload = processMessagePart( draft.message.payload, params.includeBodyHtml ) } return draft }) } return formatResponse(drafts) }) } ) - src/index.ts:335-340 (schema)Zod schema defining the input parameters for the list_drafts tool.
{ maxResults: z.number().optional().describe("Maximum number of drafts to return. Accepts values between 1-500"), q: z.string().optional().describe("Only return drafts matching the specified query. Supports the same query format as the Gmail search box"), includeSpamTrash: z.boolean().optional().describe("Include drafts from SPAM and TRASH in the results"), includeBodyHtml: z.boolean().optional().describe("Whether to include the parsed HTML in the return for each body, excluded by default because they can be excessively large"), },