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 |
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
} |
| 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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