Skip to main content
Glama

gmail_search

Search your Gmail inbox using Gmail's query syntax to find emails by sender, subject, date, attachments, or read status.

Instructions

Search emails using Gmail query syntax. Returns a list of matching emails with subject, sender, date, and snippet. Use Gmail search operators like 'from:', 'to:', 'subject:', 'is:unread', 'has:attachment', 'after:', 'before:'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesGmail search query string. Examples: 'from:john@example.com', 'subject:meeting is:unread', 'after:2024/01/01 has:attachment'.
max_resultsNoMaximum number of emails to return. Must be between 1 and 100. Default is 20.

Implementation Reference

  • Registration of the gmail_search tool including its schema definition within the list_tools() function.
    Tool(
        name="gmail_search",
        description="Search emails using Gmail query syntax or natural language. "
        "Examples: 'from:john@example.com', 'subject:meeting', 'is:unread'",
        inputSchema={
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Gmail search query or natural language search",
                },
                "max_results": {
                    "type": "integer",
                    "description": "Maximum number of results (default: 20, max: 100)",
                    "default": 20,
                },
            },
            "required": ["query"],
        },
    ),
  • Handler implementation in call_tool() that parses arguments, calls GmailClient.search_emails(), formats results with _format_email_list, and returns TextContent.
    if name == "gmail_search":
        query = arguments.get("query", "")
        max_results = arguments.get("max_results", 20)
        results = await client.search_emails(query, max_results)
        return [
            TextContent(
                type="text",
                text=_format_email_list(results),
            )
        ]
  • GmailClient.search_emails method: converts tool parameters to SearchQuery object and delegates to list_emails() which performs the actual Gmail API search.
    async def search_emails(self, query: str, max_results: int = 20) -> list[EmailSummary]:
        """Simple search interface for natural language queries."""
        search = SearchQuery(query=query, max_results=max_results)
        return await self.list_emails(search)
  • Helper function to format the list of EmailSummary objects returned from search into a readable text response.
    def _format_email_list(emails: list) -> str:
        """Format email list for display."""
        if not emails:
            return "No emails found."
    
        lines = [f"Found {len(emails)} email(s):\n"]
        for email in emails:
            status = "📬" if not email.is_read else "📭"
            star = "⭐" if email.is_starred else ""
            attachment = "📎" if email.has_attachments else ""
            categories = f" [{', '.join(email.categories)}]" if email.categories else ""
    
            lines.append(
                f"{status}{star}{attachment} **{email.subject}**{categories}\n"
                f"   From: {email.sender}\n"
                f"   Date: {email.date.strftime('%Y-%m-%d %H:%M')}\n"
                f"   ID: `{email.id}`\n"
                f"   {email.snippet[:100]}...\n"
            )
        return "\n".join(lines)

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/murphy360/mcp_gmail'

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