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.
Codex is OpenAI's coding agent for the terminal. It reads MCP servers from its config and signs in to remote ones with OAuth.
This guide connects Zoho Mail to Codex through MewCP, so Codex can use Zoho Mail's 14 tools, like list_accounts, list_folders and list_labels, without your Zoho Mail credentials ever reaching the app.
Zoho Mail signs in through managed OAuth. MewCP stores the token encrypted, refreshes it before it expires and injects it only at call time. Your agent never holds it, so it can never leak it.
More apps
Manage Gmail end to end with tools for sending, reading, replying to and organizing emails. Work with threads, labels, drafts, attachments and inbox workflows while keeping communication and email automation in one place.
Microsoft Outlook MCP Server gives AI agents full control over Outlook email and calendar workflows, including reading and sending emails, managing attachments, organizing mail, scheduling and updating meetings, managing contacts, and creating tasks.
Ask your AI to find companies, verify email addresses, and build leads lists with Hunter’s MCP.
Search Apollo's B2B contact and company database, enrich records in bulk, and manage email sequences from your connected Apollo account.
Other clients
Zoho Mail works the same way in every client below. Pick yours for its own guide.
Free to start.
Scope access to the exact Zoho Mail tools and accounts you allow, work and personal side by side. Anything outside that scope is refused at call time, even when the model asks for it.
Each call is logged: what ran, on which account, and whether it worked. Failures come back structured, so the agent knows whether to retry instead of guessing.
Every app sits behind one secure MCP URL, and there is no server for you to deploy or keep running. Add an integration in the dashboard and it is live on the next call, with no config to change and no new credentials to wire up. Tools load only when a task needs them, so your agent stays fast and focused however many apps you connect.
Run this and approve access in the browser window.
Start a new chat and ask: "List the tools you can use from MewCP." You should see your connected apps.
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.