Connect Zoho Mail to Claude, ChatGPT and any AI agent. Search, read, send and reply to emails, manage drafts, folders and labels, all through one secure connection.
Encrypted at rest, isolated from the model
Resolved from an AES-256-GCM vault at the moment of the call and attached to the request — the model never sees the secrets.
Try asking
Retrieves all account details of the authenticated user, including each account's accountId, email addresses, storage, send-mail details, forwarding and vacation-reply settings. The accountId returned here is required by every account-scoped endpoint. A linked external (non-Zoho) account returns a smaller object than a native Zoho account, and some fields such as address, mailForward, and vacationResponse are absent when not configured — use mailboxAddress or sendMailDetails[].fromAddress, not emailAddress[].isPrimary, to find the address usable for sending mail.
Lists all folders within the specified account, returning each folder's ID, name, path, type, IMAP access flag, and archive flag. folderType is not unique — Zoho-created folders such as Notification or Newsletter can also carry folderType "Inbox", so identify the actual Inbox by path ("/Inbox") rather than by folderType.
Retrieves all labels for the specified Zoho Mail account, returning each label's labelId, tagId, displayName, color and sequence. The labelId returned here is required by label-specific and email/thread labelling endpoints.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Applies one or more labels to every email in messageId (or threadId) at once, in a single bulk call. This overwrites the current label set for every matched message or thread — the original label state is not returned and cannot be recovered from this call. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly how many messages/threads will be affected and which labels will be applied, and wait for their explicit written confirmation before proceeding.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Deletes a single email identified by accountId, folderId and messageId. By default the email is moved to the Trash folder; set expunge to true to delete it permanently without moving it to Trash — this is irreversible and the email cannot be recovered. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly what will be deleted and whether it is a permanent deletion, and wait for their explicit written confirmation before proceeding.
Retrieves the body content of a specific email by accountId, folderId and messageId. Returns the HTML content and the messageId; on a threaded message, pass includeBlockContent=true to get the reply (content) and the quoted parent (blockContent) separately — omitting it returns only the combined original content.
Lists emails in a mailbox folder, or filtered by read/unread status, flag, label, thread or attachment presence, with start/limit paging. limit accepts 1-200 (default 10); start is the 1-based sequence number to page from (default 1). For a free-text or search-syntax query, use search_emails instead.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Marks every email in messageId (or threadId) as read in a single bulk call. This overwrites the current read/unread state for every matched message or thread — the original state is not returned and cannot be recovered from this call. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly how many messages/threads will be marked read, and wait for their explicit written confirmation before proceeding.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Marks every email in messageId (or threadId) as unread in a single bulk call. This overwrites the current read/unread state for every matched message or thread — the original state is not returned and cannot be recovered from this call. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly how many messages/threads will be marked unread, and wait for their explicit written confirmation before proceeding.
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Moves every email in messageId (or whole threads in threadId) from its current folder to destfolderId, in a single bulk call. This changes the folder of every matched message or thread — the original folder is not returned and cannot be recovered from this call. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly how many messages/threads will be moved and to which folder, and wait for their explicit written confirmation before proceeding.
Sends a reply to an existing email identified by messageId, immediately or scheduled when isSchedule is true. action must be sent as the lowercase value reply — the uppercase form documented elsewhere is rejected. fromAddress must be the account's Zoho mailbox address (mailboxAddress from list_accounts), not an external address, or delivery can fail even though the call returns success. scheduleType 6 requires both timeZone and scheduleTime; other scheduleType values need neither. Returns the sent reply's messageId and mailId.
Saves an email as a draft or a template without sending it, selected via mode (draft or template). Omitting mode falls through to sending a real email instead of saving a draft, since the request is then processed as a normal send. fromAddress must be the account's Zoho mailbox address (mailboxAddress from list_accounts), not an external address, or delivery can fail even though the call returns success. For a draft reply pass inReplyTo (the Message-ID header, not the numeric messageId, from get_email_headers or get_original_message), and refHeader as well when the reply is part of an existing thread. To send immediately instead, use send_email. Returns the saved draft's messageId and mailId.
Searches emails using a searchKey built with Zoho Mail search syntax (for example entire:<text>, sender:<address>, subject:<text>, in:<folder>) and returns matching messages with start/limit paging. By default only emails received more than 2 minutes ago are returned, unless receivedTime (a Unix timestamp in milliseconds) is given. limit accepts 1-200 (default 10); start is the 1-based sequence number to page from (default 1). To browse a folder or filter by status, flag or label without a search query, use list_emails instead.
Sends an email immediately from the given account, or schedules it for later when isSchedule is true. fromAddress must be the account's Zoho mailbox address (mailboxAddress from list_accounts), not an external address, or delivery can fail even though the call returns success. scheduleType 6 requires both timeZone and scheduleTime; other scheduleType values need neither. Returns the sent email's messageId and mailId. To save an email without sending it, use save_draft instead; to reply to an existing message, use reply_to_email instead.
Zoho Mail MCP Server is open source. Tell the MewCP maintainers.
One endpoint, the same key, whichever client you use.
~/Library/Application Support/Claude/claude_desktop_config.json (Mac) · %APPDATA%\Claude\claude_desktop_config.json (Windows)
Replace API_KEY with your own key.
Already have an "mcpServers" section in your config? Just add the server entry inside it.
Discovery, routing, credentials, tool scoping and execution logs all happen at the gateway→connections stay ACTIVE with no work from you
Zoho Mail runs through a gateway that holds the credentials, scopes the access and records every call.
Managed auth, hosted MCP servers, and every Zoho Mail tool your agent needs.
Free to start.