shanjai-raj avatar

Commune

shanjai-raj/commune-mcp

A production-ready email and SMS gateway built on the Commune API, exposing 41 tools for reading, sending, and managing messages through Claude or any MCP client. You get full inbox operations (threads, search, tagging), deliverability tracking (bounces, complaints, suppressions), and SMS send/receive with phone number provisioning. Useful when you need AI agents to actually handle customer support queues, send transactional emails in thread context, or coordinate over SMS without writing API wrappers. Runs via uvx with just an API key, supports custom domains with DKIM signing, and includes webhook delivery for inbound messages. Ships with Smithery one-line install for Claude Desktop, Cursor, and Windsurf.

GitHub stars
1
tools
21
auth
Secret needed
transport
STDIO
env var
1
last updated
Mar 3, 2026

Tools

21 tools

Public tool metadata for what this MCP can expose to an agent.

list_domainsList all email domains in your Commune account. Returns each domain's ID, name, and verification status. Use the domain ID with other tools like list_inboxes or create_inbox.

List all email domains in your Commune account. Returns each domain's ID, name, and verification status. Use the domain ID with other tools like list_inboxes or create_inbox.

No parameter schema in public metadata yet.

create_domainCreate a new custom email domain. After creating a domain, you need to: 1. Call get_domain_records to see the required DNS records 2. Add those records at your domain registrar 3. Call verify_domain to check verification status Args: name: Domain name, e.g. "example.com" regio...2 params

Create a new custom email domain. After creating a domain, you need to: 1. Call get_domain_records to see the required DNS records 2. Add those records at your domain registrar 3. Call verify_domain to check verification status Args: name: Domain name, e.g. "example.com" regio...

Parameters* required
namestring
regionvalue
verify_domainTrigger DNS verification for a domain. Call this after adding the required DNS records at your registrar. Use get_domain_records first to see which records are needed. Args: domain_id: The domain ID (from list_domains)1 params

Trigger DNS verification for a domain. Call this after adding the required DNS records at your registrar. Use get_domain_records first to see which records are needed. Args: domain_id: The domain ID (from list_domains)

Parameters* required
domain_idstring
get_domain_recordsGet the DNS records required to verify a domain. Returns MX, TXT, and CNAME records that must be added at your domain registrar before calling verify_domain. Args: domain_id: The domain ID (from list_domains)1 params

Get the DNS records required to verify a domain. Returns MX, TXT, and CNAME records that must be added at your domain registrar before calling verify_domain. Args: domain_id: The domain ID (from list_domains)

Parameters* required
domain_idstring
list_inboxesList inboxes. Without domain_id, lists all inboxes across all domains. With domain_id, lists inboxes for that specific domain. Each inbox has a local_part (the part before @) that forms the email address: {local_part}@{domain_name} Args: domain_id: Filter by domain (optional,...1 params

List inboxes. Without domain_id, lists all inboxes across all domains. With domain_id, lists inboxes for that specific domain. Each inbox has a local_part (the part before @) that forms the email address: {local_part}@{domain_name} Args: domain_id: Filter by domain (optional,...

Parameters* required
domain_idvalue
create_inboxCreate a new inbox for receiving emails. The inbox email address will be {local_part}@{domain}. If no domain_id is provided, Commune auto-assigns your inbox to an available domain — no DNS setup required. Args: local_part: Part before @ (e.g. "support", "billing", "hello") dom...5 params

Create a new inbox for receiving emails. The inbox email address will be {local_part}@{domain}. If no domain_id is provided, Commune auto-assigns your inbox to an available domain — no DNS setup required. Args: local_part: Part before @ (e.g. "support", "billing", "hello") dom...

Parameters* required
display_namevalue
domain_idvalue
local_partstring
namevalue
webhook_endpointvalue
delete_inboxDelete an inbox. Args: domain_id: The domain ID inbox_id: The inbox ID to delete2 params

Delete an inbox. Args: domain_id: The domain ID inbox_id: The inbox ID to delete

Parameters* required
domain_idstring
inbox_idstring
list_threadsList email threads (conversations) with pagination. Returns thread summaries: subject, message count, last activity, snippet. Use next_cursor from the response to fetch the next page. Provide at least one of inbox_id or domain_id. Args: inbox_id: Filter threads by inbox (recom...5 params

List email threads (conversations) with pagination. Returns thread summaries: subject, message count, last activity, snippet. Use next_cursor from the response to fetch the next page. Provide at least one of inbox_id or domain_id. Args: inbox_id: Filter threads by inbox (recom...

Parameters* required
cursorvalue
domain_idvalue
inbox_idvalue
limitinteger
default: 20
orderstring
default: desc
get_thread_messagesGet all messages in an email thread. Returns the full conversation with sender, content, timestamps. Args: thread_id: The thread ID (from list_threads) limit: Max messages, 1-1000 (default: 50) order: "asc" for chronological (default), "desc" for newest first3 params

Get all messages in an email thread. Returns the full conversation with sender, content, timestamps. Args: thread_id: The thread ID (from list_threads) limit: Max messages, 1-1000 (default: 50) order: "asc" for chronological (default), "desc" for newest first

Parameters* required
limitinteger
default: 50
orderstring
default: asc
thread_idstring
send_emailSend an email message. Provide html or text (or both) for the body. To reply in an existing thread, pass thread_id. To attach files, first call upload_attachment, then pass the attachment IDs as a comma-separated string. You only need inbox_id to send — the domain is inferred...10 params

Send an email message. Provide html or text (or both) for the body. To reply in an existing thread, pass thread_id. To attach files, first call upload_attachment, then pass the attachment IDs as a comma-separated string. You only need inbox_id to send — the domain is inferred...

Parameters* required
attachmentsvalue
domain_idvalue
from_addressvalue
htmlvalue
inbox_idvalue
reply_tovalue
subjectstring
textvalue
thread_idvalue
tostring
upload_attachmentUpload a file for use when sending emails. Returns an attachment_id to pass to send_email's attachments parameter. Args: content: Base64-encoded file content filename: Original filename, e.g. "report.pdf" mime_type: MIME type, e.g. "application/pdf" or "image/png"3 params

Upload a file for use when sending emails. Returns an attachment_id to pass to send_email's attachments parameter. Args: content: Base64-encoded file content filename: Original filename, e.g. "report.pdf" mime_type: MIME type, e.g. "application/pdf" or "image/png"

Parameters* required
contentstring
filenamestring
mime_typestring
get_attachment_urlGet a temporary download URL for an attachment. Args: attachment_id: The attachment ID expires_in: URL lifetime in seconds (default: 3600 = 1 hour)2 params

Get a temporary download URL for an attachment. Args: attachment_id: The attachment ID expires_in: URL lifetime in seconds (default: 3600 = 1 hour)

Parameters* required
attachment_idstring
expires_ininteger
default: 3600
search_threadsSearch across email threads by subject or content. Returns matching thread summaries with subject, snippet, and message count. Provide at least one of inbox_id or domain_id. Args: query: Search query (searches subject and message content) inbox_id: Filter by inbox (recommended...4 params

Search across email threads by subject or content. Returns matching thread summaries with subject, snippet, and message count. Provide at least one of inbox_id or domain_id. Args: query: Search query (searches subject and message content) inbox_id: Filter by inbox (recommended...

Parameters* required
domain_idvalue
inbox_idvalue
limitinteger
default: 20
querystring
get_thread_metadataGet triage metadata for a thread: tags, status, and assignment. Args: thread_id: The thread ID1 params

Get triage metadata for a thread: tags, status, and assignment. Args: thread_id: The thread ID

Parameters* required
thread_idstring
set_thread_statusSet the status of a thread for triage. Valid statuses: "open", "needs_reply", "waiting", "closed" Args: thread_id: The thread ID status: New status — one of: open, needs_reply, waiting, closed2 params

Set the status of a thread for triage. Valid statuses: "open", "needs_reply", "waiting", "closed" Args: thread_id: The thread ID status: New status — one of: open, needs_reply, waiting, closed

Parameters* required
statusstring
thread_idstring
tag_threadAdd tags/labels to a thread. Tags are additive — existing tags are preserved. Use tags for categorization: "vip", "bug-report", "sales-lead", "urgent", etc. Args: thread_id: The thread ID tags: Comma-separated tags to add (e.g. "urgent,vip,sales-lead")2 params

Add tags/labels to a thread. Tags are additive — existing tags are preserved. Use tags for categorization: "vip", "bug-report", "sales-lead", "urgent", etc. Args: thread_id: The thread ID tags: Comma-separated tags to add (e.g. "urgent,vip,sales-lead")

Parameters* required
tagsstring
thread_idstring
untag_threadRemove tags/labels from a thread. Args: thread_id: The thread ID tags: Comma-separated tags to remove (e.g. "urgent,vip")2 params

Remove tags/labels from a thread. Args: thread_id: The thread ID tags: Comma-separated tags to remove (e.g. "urgent,vip")

Parameters* required
tagsstring
thread_idstring
assign_threadAssign a thread to an agent or user. Pass null/empty to unassign. Args: thread_id: The thread ID assigned_to: Agent/user identifier to assign to (empty or omit to unassign)2 params

Assign a thread to an agent or user. Pass null/empty to unassign. Args: thread_id: The thread ID assigned_to: Agent/user identifier to assign to (empty or omit to unassign)

Parameters* required
assigned_tovalue
thread_idstring
get_deliverability_statsGet email deliverability metrics: sent, delivered, bounced, complained, failed. Provides bounce rate, complaint rate, and delivery rate percentages. Use this to monitor sender reputation and identify deliverability issues. Args: inbox_id: Filter metrics by inbox (recommended)...3 params

Get email deliverability metrics: sent, delivered, bounced, complained, failed. Provides bounce rate, complaint rate, and delivery rate percentages. Use this to monitor sender reputation and identify deliverability issues. Args: inbox_id: Filter metrics by inbox (recommended)...

Parameters* required
domain_idvalue
inbox_idvalue
periodstring
default: 7d
get_suppressionsList suppressed email addresses (bounces, complaints, unsubscribes). Suppressed addresses are automatically skipped when sending. Use this to audit why certain recipients aren't receiving emails. Args: inbox_id: Filter by inbox (optional) limit: Max results (default: 50)2 params

List suppressed email addresses (bounces, complaints, unsubscribes). Suppressed addresses are automatically skipped when sending. Use this to audit why certain recipients aren't receiving emails. Args: inbox_id: Filter by inbox (optional) limit: Max results (default: 50)

Parameters* required
inbox_idvalue
limitinteger
default: 50
get_delivery_eventsGet delivery event log: sent, delivered, bounced, complained, failed. Track the lifecycle of individual emails or audit delivery across an inbox. Args: message_id: Filter events for a specific message inbox_id: Filter events by inbox event_type: Filter by type: "sent", "delive...4 params

Get delivery event log: sent, delivered, bounced, complained, failed. Track the lifecycle of individual emails or audit delivery across an inbox. Args: message_id: Filter events for a specific message inbox_id: Filter events by inbox event_type: Filter by type: "sent", "delive...

Parameters* required
event_typevalue
inbox_idvalue
limitinteger
default: 50
message_idvalue

Sponsors

Configuration

COMMUNE_API_KEY*secret

Your Commune API key (starts with comm_). Get one at https://app.commune.email

Readme

Email for Claude Desktop, Cursor & Windsurf

PyPI PyPI Downloads Python 3.9+ Apache-2.0 License MCP Works with Claude Works with Cursor commune.email

Give Claude (or any MCP client) a real email inbox and SMS. Install in 30 seconds — no cloning required.


View the full README on GitHub

Details

Repository
github.com/shanjai-raj/commune-mcp
Categories
Communication & Messaging, Search & Web Crawling
Package
commune-mcp
Transport
STDIO
Auth
Required
Registry
MCP registry, active

Related Communication & Messaging MCP servers

View all
1andreaacanfora avatarA2H: ask a humanandreaacanfora/a2h-gatewayAsk a human before acting: approvals by email, Telegram or push, signed answers, passkeys.0stars
2eztexting avatarEZTexting MCPeztexting/mcp-serverOfficial EZTexting MCP server: SMS/MMS messaging, contacts, workflows, reports.0stars
3mailbox-mcp avatarMailbox MCPcom.mailbox-mcp/mailbox-mcpRead, send, file and search email in any Gmail, Microsoft 365 or IMAP mailbox, plus its calendar.0stars
4pingfyr avatarPingfyrpingfyr/mcpSchedule reminders for AI agents via email, webhook, Slack, Discord, Telegram, or Google Calendar.0stars
5danboabes avatarMCPDomaindanboabes/mcpdomainBuy & manage domains from any AI chat: availability, register, DNS, email forwarding, AI bot stats.0stars
6chamade-io avatarChamadechamade-io/mcp-serverVoice and chat for AI agents — Discord, Teams, Meet, Slack, Zoom, Telegram, WhatsApp, NC Talk, SIP0stars