Skip to main content
Glama

list_threads

Retrieve email conversation threads from your Gmail mailbox, with options to filter by search queries, labels, and other criteria.

Instructions

List threads in the user's mailbox

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
maxResultsNoMaximum number of threads to return
pageTokenNoPage token to retrieve a specific page of results
qNoOnly return threads matching the specified query
labelIdsNoOnly return threads with labels that match all of the specified label IDs
includeSpamTrashNoInclude threads from SPAM and TRASH in the results
includeBodyHtmlNoWhether to include the parsed HTML in the return for each body, excluded by default because they can be excessively large

Implementation Reference

  • The handler function for the 'list_threads' tool. It uses handleTool to authenticate and execute the Gmail API call to list threads with the provided parameters, processes each thread's messages by decoding and filtering their payloads if includeBodyHtml is specified, and returns the formatted response.
    async (params) => { return handleTool(config, async (gmail: gmail_v1.Gmail) => { const { data } = await gmail.users.threads.list({ userId: 'me', ...params }) if (data.threads) { data.threads = data.threads.map(thread => { if (thread.messages) { thread.messages = thread.messages.map(message => { if (message.payload) { message.payload = processMessagePart( message.payload, params.includeBodyHtml ) } return message }) } return thread }) } return formatResponse(data) }) }
  • Zod input schema defining parameters for the list_threads tool: maxResults, pageToken, q (search query), labelIds, includeSpamTrash, includeBodyHtml.
    { maxResults: z.number().optional().describe("Maximum number of threads to return"), pageToken: z.string().optional().describe("Page token to retrieve a specific page of results"), q: z.string().optional().describe("Only return threads matching the specified query"), labelIds: z.array(z.string()).optional().describe("Only return threads with labels that match all of the specified label IDs"), includeSpamTrash: z.boolean().optional().describe("Include threads 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"), },
  • src/index.ts:753-787 (registration)
    Registration of the 'list_threads' tool on the MCP server, including name, description, input schema, and handler function.
    server.tool("list_threads", "List threads in the user's mailbox", { maxResults: z.number().optional().describe("Maximum number of threads to return"), pageToken: z.string().optional().describe("Page token to retrieve a specific page of results"), q: z.string().optional().describe("Only return threads matching the specified query"), labelIds: z.array(z.string()).optional().describe("Only return threads with labels that match all of the specified label IDs"), includeSpamTrash: z.boolean().optional().describe("Include threads 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) => { const { data } = await gmail.users.threads.list({ userId: 'me', ...params }) if (data.threads) { data.threads = data.threads.map(thread => { if (thread.messages) { thread.messages = thread.messages.map(message => { if (message.payload) { message.payload = processMessagePart( message.payload, params.includeBodyHtml ) } return message }) } return thread }) } return formatResponse(data) }) } )
  • Helper function used by list_threads to process message parts: decodes base64 data for non-HTML or specified HTML bodies, recurses on parts, filters headers to specific list.
    const processMessagePart = (messagePart: MessagePart, includeBodyHtml = false): MessagePart => { if ((messagePart.mimeType !== 'text/html' || includeBodyHtml) && messagePart.body) { messagePart.body = decodedBody(messagePart.body) } if (messagePart.parts) { messagePart.parts = messagePart.parts.map(part => processMessagePart(part, includeBodyHtml)) } if (messagePart.headers) { messagePart.headers = messagePart.headers.filter(header => RESPONSE_HEADERS_LIST.includes(header.name || '')) } return messagePart }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/faithk7/gmail-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server