Zoho Mail MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZOHO_CLIENT_ID | Yes | Client ID from your Zoho API console Self Client. | |
| ZOHO_ACCOUNT_ID | No | Optional. Empty uses your default mail account. | |
| ZOHO_DATA_CENTER | Yes | Zoho data center: com, in, eu, com.au, jp, sa or ca. | |
| ZOHO_DOWNLOAD_DIR | No | Optional. Where attachments are saved. | |
| ZOHO_FROM_ADDRESS | No | Optional default sender. Empty uses the account's primary address. | |
| ZOHO_CLIENT_SECRET | Yes | Client secret from your Zoho API console Self Client. | |
| ZOHO_REFRESH_TOKEN | Yes | Refresh token obtained by exchanging the generated code. | |
| ZOHO_ALLOW_PERMANENT_DELETE | No | Optional. true lets zoho_delete_email delete permanently. Off by default, so deleting moves mail to Trash. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| zoho_get_accountsB | Get all mail accounts of the authenticated user (accountId, email addresses, display name, storage, send-mail details). |
| zoho_get_accountA | Get details of one mail account. Defaults to the configured account. |
| zoho_list_foldersA | List all folders (folderId, folderName, path, folderType, isArchived). The response has no unread count; use zoho_list_emails with status=unread to find unread mail. |
| zoho_get_folderC | Get details of a single folder. |
| zoho_list_emailsA | List emails in a folder (or across folders if folderId is omitted), newest first by default. Returns summary, subject, sender, fromAddress, toAddress, messageId, folderId, threadId, receivedTime, status, flagid, hasAttachment. |
| zoho_search_emailsA | Search emails using Zoho search syntax. searchKey is "parameter:value" terms joined with "::" (AND) or ":or:" (OR). Parameters: entire:, content:, sender:, to:, cc:, subject:, fileName:, fileContent:, has:attachment (also has:flags, has:convo), in:, label:, fromDate:/toDate: (DD-MMM-YYYY, e.g. fromDate:12-Sep-2025), inclspamtrash:true, groupResult:true. The special key "newMails" returns newly arrived mail. Example: subject:Invoice::sender:billing@acme.com::has:attachment |
| zoho_get_email_contentB | Get the body (HTML) of an email. |
| zoho_get_email_metadataB | Get metadata of an email (subject, sender, recipients, times, size, status, flag, attachment flags, summary). |
| zoho_get_email_headersB | Get the internet message headers of an email (Message-ID, References, Received, authentication results…). |
| zoho_get_original_messageB | Get the full original MIME source of an email (headers + all parts). |
| zoho_get_attachment_infoB | List the attachments of an email (attachmentId, attachmentName, attachmentSize), optionally with inline images and their cid. |
| zoho_download_attachmentA | Download an email attachment to the local disk and return the saved path. Get attachmentId and the name from zoho_get_attachment_info. |
| zoho_download_inline_imageA | Download an inline image of an email to the local disk. contentId is the cid from zoho_get_attachment_info (includeInline=true). |
| zoho_send_emailA | Send an email (optionally with attachments and/or scheduled). This sends real mail immediately — confirm recipients and content with the user first. For attachments, call zoho_upload_attachment first and pass the returned objects. |
| zoho_save_draftA | Save an email as a draft or as a template without sending it. To make it a threaded reply draft, set inReplyTo/refHeader from the original email's headers. |
| zoho_reply_to_emailA | Reply to an existing email (keeps it in the same thread). This sends real mail immediately — confirm with the user first. |
| zoho_upload_attachmentA | Upload a local file to Zoho so it can be attached to an email. Returns { storeName, attachmentPath, attachmentName } to pass in |
| zoho_mark_emails_readA | Mark emails as read. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_mark_emails_unreadA | Mark emails as unread. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_move_emailsA | Move emails to another folder. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_flag_emailsA | Set or clear the flag on emails. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_remove_all_labels_from_emailsA | Remove every label from emails. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_archive_emailsA | Archive emails. On most accounts this moves them to the Archive folder; use zoho_move_emails to move them back. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_mark_emails_spamA | Mark emails as spam (moves them to the Spam folder). Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_mark_emails_not_spamB | Mark emails as not spam. Target individual emails with messageId, or whole conversations with threadId (give one of the two). |
| zoho_flag_threadsC | Set or clear the flag on whole threads. |
| zoho_move_threadsC | Move whole threads to another folder. |
| zoho_remove_all_labels_from_threadsB | Remove every label from whole threads. |
| zoho_mark_threads_readC | Mark whole threads as read. |
| zoho_mark_threads_unreadC | Mark whole threads as unread. |
| zoho_mark_threads_spamC | Mark whole threads as spam. |
| zoho_mark_threads_not_spamC | Mark whole threads as not spam. |
| zoho_delete_emailA | Delete an email. By default it is moved to Trash (recoverable). expunge=true deletes permanently and only works when the server is started with ZOHO_ALLOW_PERMANENT_DELETE=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 33 tools
The set includes parallel email-level and thread-level tools (e.g., zoho_mark_emails_read vs zoho_mark_threads_read, zoho_move_emails vs zoho_move_threads). The email-level tools explicitly accept either messageId or threadId, making the thread-specific tools largely redundant and creating ambiguity about which tool to use when a threadId is available. While descriptions help distinguish some other tools (content vs metadata vs headers), this overlap is a notable boundary issue.
All tools share a consistent zoho_ prefix and snake_case convention, mostly following a verb_noun or verb_noun_state pattern. Minor inconsistencies exist in singular/plural forms (e.g., zoho_get_accounts vs zoho_get_account, zoho_list_folders vs zoho_get_folder), but the overall naming is predictable and readable.
With 33 tools, the server is far above the typical sweet spot and includes many redundant email/thread pairs that could be consolidated with a parameter. This inflates the surface unnecessarily, making the toolset feel heavy and harder to navigate than the domain requires.
Core email operations—send, reply, save draft, search, attachments, read/unread, move, spam, archive, delete—are well covered. However, notable gaps remain in folder and label management (no create/delete folder or add-label tools) and there is no direct send-draft operation; agents can work around these but the surface is not fully complete.