Gmail semantic search MCP server powered by ZeroEntropy embeddings + reranking
zemail has clear, well-structured tool definitions with good descriptions (avg 180 chars) and complete input schemas. All 6 tools are explicitly registered with @mcp.tool() decorators and have type-annotated parameters. However, output schemas are not documented, responses are free-form strings rather than structured objects. Error handling is present but generic (returns error text without recovery guidance). Parameter descriptions are solid but lack format constraints (e.g., email_id format, max_emails bounds). No tool annotations (readOnlyHint, destructiveHint) despite clear read/write semantics.
Complete Gmail authorization with a manually-provided code. Use this when the automatic OAuth redirect can't reach the server (e.g. remote/SSH setups). The code is shown on the browser success page.
Get the full content of a specific email by its ID. Use this after search_emails_tool to read the full email body.
Check the status of the email search index. Returns information about how many emails are indexed and when the index was last updated.
Search your emails semantically using ZeroEntropy. Uses zembed-1 for embedding-based retrieval and zerank-2 for reranking to find the most relevant emails to your query. Unlike keyword search, this understands meaning — searching for "budget discussion" will find emails about "Q3 financial planning" even if they don't contain the word "budget".
Save your ZeroEntropy API key. Grab a free one (no credit card required) at https://dashboard.zeroentropy.dev/api-keys. The key is saved locally and persists across sessions.
Output schemas not documented. All tools return free-form strings instead of structured JSON objects. LLMs cannot parse results reliably or chain downstream calls.
search_emails_tool name is awkward ('_tool' suffix). Should be 'search_emails', the '_tool' suffix is redundant in MCP context.
No tool annotations (readOnlyHint, destructiveHint). sync_emails and set_api_key are destructive; search_emails_tool, get_email, index_status are read-only. Annotations help agents reason about side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Sync emails from Gmail and build the semantic search index. Fetches emails from your inbox, embeds them with zembed-1, and stores the index locally for fast semantic search. Supports incremental sync — only new emails are fetched and embedded.
Parameter constraints missing. max_emails lacks bounds (should be 1 - 10000); top_k lacks bounds (should be 1 - 100); query and auth_code lack format hints. Unbounded params invite invalid LLM inputs.
Error messages are generic. 'No email index found' does not guide the LLM to call sync_emails. Missing recovery hints per pattern:recovery-guide.