Skip to main content
Glama
rishipradeep-think41

Google Workspace MCP Server

list_emails

Extract and display recent emails from a Gmail inbox using a specific search query, with options to limit the number of results.

Instructions

List recent emails from Gmail inbox

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
maxResultsNoMaximum number of emails to return (default: 10)
queryNoSearch query to filter emails

Implementation Reference

  • The primary handler function for executing the 'list_emails' tool. It retrieves recent emails from the Gmail inbox, extracts headers and body content, and formats the response as JSON.
    private async handleListEmails(args: any) { try { const maxResults = args?.maxResults || 10; const query = args?.query || ""; const getEmailBody = (payload: any): string => { if (!payload) return ""; if (payload.body && payload.body.data) { return Buffer.from(payload.body.data, "base64").toString("utf-8"); } if (payload.parts && payload.parts.length > 0) { for (const part of payload.parts) { if (part.mimeType === "text/plain") { return Buffer.from(part.body.data, "base64").toString("utf-8"); } } } return "(No body content)"; }; const response = await this.gmail.users.messages.list({ userId: "me", maxResults, q: query, }); const messages = response.data.messages || []; const emailDetails = await Promise.all( messages.map(async (msg) => { const detail = await this.gmail.users.messages.get({ userId: "me", id: msg.id!, }); const headers = detail.data.payload?.headers; const subject = headers?.find((h) => h.name === "Subject")?.value || ""; const from = headers?.find((h) => h.name === "From")?.value || ""; const date = headers?.find((h) => h.name === "Date")?.value || ""; const body = getEmailBody(detail.data.payload); return { id: msg.id, subject, from, date, body, }; }) ); return { content: [ { type: "text", text: JSON.stringify(emailDetails, null, 2), }, ], }; } catch (error: any) { return { content: [ { type: "text", text: `Error fetching emails: ${error.message}`, }, ], isError: true, }; } }
  • Input schema definition for the 'list_emails' tool, specifying optional parameters for maxResults and query.
    inputSchema: { type: "object", properties: { maxResults: { type: "number", description: "Maximum number of emails to return (default: 10)", }, query: { type: "string", description: "Search query to filter emails", }, }, },
  • src/index.ts:63-79 (registration)
    Registration of the 'list_emails' tool in the ListToolsRequestSchema handler, including name, description, and input schema.
    { name: "list_emails", description: "List recent emails from Gmail inbox", inputSchema: { type: "object", properties: { maxResults: { type: "number", description: "Maximum number of emails to return (default: 10)", }, query: { type: "string", description: "Search query to filter emails", }, }, }, },
  • src/index.ts:274-275 (registration)
    Dispatch case in the CallToolRequestSchema switch statement that routes calls to the 'list_emails' handler.
    case "list_emails": return await this.handleListEmails(request.params.arguments);
  • Inner helper function used by handleListEmails to extract plain text body from Gmail message payloads, handling both simple and multipart messages.
    const getEmailBody = (payload: any): string => { if (!payload) return ""; if (payload.body && payload.body.data) { return Buffer.from(payload.body.data, "base64").toString("utf-8"); } if (payload.parts && payload.parts.length > 0) { for (const part of payload.parts) { if (part.mimeType === "text/plain") { return Buffer.from(part.body.data, "base64").toString("utf-8"); } } } return "(No body content)"; };

Other Tools

Related Tools

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/rishipradeep-think41/gsuite-mcp'

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