Sendmux Email Inbox API + Sending
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SENDMUX_API_KEY | No | Fallback API key for single-key setups; smx_mbx_* or smx_root_* | |
| SENDMUX_MCP_HOST | No | HTTP host | 127.0.0.1 |
| SENDMUX_MCP_PATH | No | HTTP path | /mcp |
| SENDMUX_MCP_PORT | No | HTTP port | 8765 |
| OPENAPI_INPUT_DIR | No | Alternative OpenAPI input directory | |
| SENDMUX_APP_BASE_URL | No | App API base URL | https://app.sendmux.ai/api/v1 |
| SENDMUX_MCP_SURFACES | No | Comma-separated list of surfaces (mailbox, management, sending) for combined server | |
| SENDMUX_MCP_TRANSPORT | No | Transport (stdio, http, streamable-http) | stdio |
| SENDMUX_MAILBOX_API_KEY | No | Mailbox API key (smx_mbx_*), required when mailbox surface is selected | |
| SENDMUX_MCP_APP_OPENAPI | No | Override app OpenAPI snapshot path or URL | |
| SENDMUX_SENDING_API_KEY | No | Sending API key (smx_mbx_*), required when sending surface is selected | |
| SENDMUX_SENDING_BASE_URL | No | Sending API base URL | https://smtp.sendmux.ai/api/v1 |
| SENDMUX_MANAGEMENT_API_KEY | No | Management API key (smx_root_*), required when management surface is selected | |
| SENDMUX_MCP_ALLOWED_ORIGINS | No | Allowed browser origins (comma-separated) | |
| SENDMUX_MCP_SENDING_OPENAPI | No | Override sending OpenAPI snapshot path or URL | |
| SENDMUX_MCP_TIMEOUT_SECONDS | No | Request timeout in seconds | 30 |
| SENDMUX_MCP_HTTP_BEARER_TOKEN | No | Bearer token for HTTP transport (required unless SENDMUX_MCP_ALLOW_UNAUTHENTICATED_HTTP is true) | |
| SENDMUX_MCP_OPENAPI_INPUT_DIR | No | Override OpenAPI input directory | |
| SENDMUX_MCP_RETRY_MAX_ATTEMPTS | No | Maximum retry attempts | 3 |
| SENDMUX_MCP_ALLOW_UNAUTHENTICATED_HTTP | No | Allow unauthenticated HTTP connections | false |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| mailbox_get_attachmentA | Use this after finding a message attachment. It returns metadata plus a fresh short-lived download_url for that exact attachment; fetch the URL promptly, and call this tool again if it expires. |
| mailbox_read_attachmentA | Use this after finding a message attachment when you need the attachment contents. Text-like attachments are downloaded server-side and returned as text, so agents do not need a generic web_fetch tool. Binary or oversized attachments return metadata plus a fresh download link. |
| mailbox_upload_attachmentA | Use this before sending a mailbox attachment. Cheapest mode: file_path on local stdio MCP reads the user-approved local file without putting bytes in model context. Hosted or shell-capable agents should set presign_upload_url=true with filename, content_type, and size_bytes, then PUT the file to the returned short-lived URL promptly and send the returned blob_id. Inline content_base64 is a last resort for tiny agent-authored files only and is capped at 32 KiB decoded. |
| mailbox_wait_for_messageA | Use this to wait briefly for new mail instead of manual polling. It polls for up to 25 seconds, returns a matching message with attachment metadata when found, or a clean no_message result so you can call again. |
| mailbox_get_changesA | Use this to resume mailbox sync from a prior state cursor. Do not use it for ad hoc message search. |
| mailbox_list_foldersA | Use this to inspect mailbox folders before filing or moving messages. It is read-only. |
| mailbox_list_identitiesA | Use this to list sender identities available to the mailbox. Prefer mailbox_get_identity when only the default identity is needed. |
| mailbox_get_identityA | Use this to read the mailbox sender identity and display name. Use it before composing replies when the sender should match the mailbox identity. |
| mailbox_update_identityA | Use this only when the user explicitly asks to change sender identity details. Do not use it for one-off message composition. |
| mailbox_list_granted_mailboxesA | Use this first when the token can access more than one mailbox. It searches only the mailboxes granted to this connection and returns IDs to pass as mailbox_id. |
| mailbox_get_meA | Use this to identify the authenticated mailbox before acting on mail. It returns profile details for the mailbox key currently in use. |
| mailbox_list_messagesA | Use this to scan mailbox messages by cursor without fetching full bodies. Filter by folder_id, keyword/not_keyword, dates, sender/recipient, text query, unread state, or has_attachment; attachment metadata includes a short-lived download_url. |
| mailbox_batch_delete_messagesA | Use this only when the user explicitly asks to delete messages and supplies or confirms the message IDs. Deletion is a mailbox mutation. |
| mailbox_batch_get_messagesA | Use this when the user supplies several message IDs or a prior search returns multiple candidates. It avoids repeated single-message calls. |
| mailbox_batch_update_messagesA | Use this to mark, flag, move to a folder, or set keywords/labels on multiple messages after the user has confirmed the desired change. Do not use it for read-only tasks. |
| mailbox_get_messageA | Use this to fetch one message summary or detail by message_id. Use mailbox_list_body or mailbox_list_content when the body content is required. |
| mailbox_list_bodyA | Use this to read the raw or simplified body for a known message_id. Prefer it when the task needs message text but not every MIME detail. |
| mailbox_list_contentB | Use this to read structured content for a known message_id. Prefer it when headers, participants, or body parts affect the answer. |
| mailbox_count_messagesA | Use this to count messages matching mailbox filters without listing every result. Follow with mailbox_list_messages only when examples are needed. |
| mailbox_search_message_snippetsA | Use this to search message snippets by query text. Narrow with folder_id, keyword/not_keyword, dates, sender/recipient, unread state, or has_attachment; use returned message IDs with a read tool before making content-specific claims. |
| mailbox_send_messageA | Use this to send a message from the authenticated mailbox. For attachments, call mailbox_upload_attachment first using file_path, presign_upload_url, or tiny content_base64, then pass the returned blob_id. Include an Idempotency-Key for retries. |
| mailbox_get_sessionA | Use this before complex mailbox work to discover supported mailbox capabilities, limits, and endpoint metadata. Do not use it for message search. |
| mailbox_list_threadsA | Use this to scan conversation threads without loading every message. Continue with next_cursor only when additional threads are needed. |
| mailbox_get_threadA | Use this to read one thread summary by thread_id. Use mailbox_list_thread_messages when the task needs the messages in the thread. |
| mailbox_list_thread_messagesA | Use this to list messages inside a known thread. Use message body tools only for messages that need full content. |
| sending_upload_attachmentA | Use this before sending a Sending API attachment. Cheapest mode: file_path on local stdio MCP reads the user-approved local file without putting bytes in model context. Hosted agents should use sending_create_attachment_upload and PUT the file outside model context. Inline content_base64 is a last resort for tiny agent-authored files only and is capped at 32 KiB decoded. |
| sending_create_attachment_uploadA | Use this when a remote or shell-capable agent needs a short-lived upload URL for an outbound Sending API attachment. Provide filename, content_type, and exact size_bytes, PUT the file bytes outside model context with the returned headers, then pass the returned attachment_id to sending_send_email. |
| sending_get_attachmentA | Use this to inspect a temporary Sending attachment_id before sending. It returns metadata only, not file bytes. |
| sending_send_emailA | Use this to send one outbound email through the sending API. For attachments, call sending_upload_attachment first for local/tiny content or sending_create_attachment_upload for delegated file PUTs, then pass attachments as attachment_id refs. Inline base64 is only for tiny generated content. Include an Idempotency-Key so retries do not create duplicate sends. |
| sending_send_email_batchA | Use this to send multiple outbound emails in one request. For attachments, prefer uploaded attachment_id refs; avoid inline base64 except for tiny generated content. Use it only when the user confirms every recipient and message. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Sendmux/sendmux-sdk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server