CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Commune

shanjai-raj/commune-mcp
121 toolsauthSTDIOregistry active
Summary

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.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

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

21 tools
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
namevalue
domain_idvalue
local_partstring
display_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
inbox_idstring
domain_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
limitinteger
default: 20
orderstring
default: desc
cursorvalue
inbox_idvalue
domain_idvalue
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
tostring
htmlvalue
textvalue
subjectstring
inbox_idvalue
reply_tovalue
domain_idvalue
thread_idvalue
attachmentsvalue
from_addressvalue
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
expires_ininteger
default: 3600
attachment_idstring
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
limitinteger
default: 20
querystring
inbox_idvalue
domain_idvalue
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
thread_idstring
assigned_tovalue
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
periodstring
default: 7d
inbox_idvalue
domain_idvalue
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
limitinteger
default: 50
inbox_idvalue
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
limitinteger
default: 50
inbox_idvalue
event_typevalue
message_idvalue

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.

Your AI agent can:

  • Read email — list threads, search by topic, get full message history
  • Send email — reply in existing threads, compose fresh messages, attach files
  • Manage inboxes — create programmatic inboxes, set up custom domains, triage with tags and status
  • Track delivery — get delivery stats, suppression lists, bounce and complaint events
  • Send and receive SMS — provision phone numbers, send messages, search SMS history

Works with Claude Desktop, Cursor, Windsurf, or any MCP client.


Install via Smithery

smithery badge

Commune is published on Smithery. One-line install for any supported client:

# Install Smithery CLI (once)
npm install -g @smithery/cli@latest

# Add Commune to your client
npx @smithery/cli install commune-dev/commune --client claude      # Claude Desktop
npx @smithery/cli install commune-dev/commune --client cursor      # Cursor
npx @smithery/cli install commune-dev/commune --client windsurf    # Windsurf
npx @smithery/cli install commune-dev/commune --client vscode      # VS Code
npx @smithery/cli install commune-dev/commune --client claude-code # Claude Code
npx @smithery/cli install commune-dev/commune --client cline       # Cline
npx @smithery/cli install commune-dev/commune --client roo-cline   # Roo Code
npx @smithery/cli install commune-dev/commune --client goose       # Goose

Or connect via the Smithery API for agent-to-agent use:

https://commune--commune-dev.run.tools

Example prompts

Once configured, you can give your AI assistant natural language instructions for email and SMS:

Reading email:

  • "Check my support inbox for new emails"
  • "Show me all unread threads in the billing inbox"
  • "Find emails from customers asking about refunds this week"
  • "Search for all threads about the payment issue from last month"
  • "What's the full conversation history for thread conv_abc123?"
  • "Show me all threads that haven't been replied to"

Sending email:

  • "Reply to John's email saying we'll process his refund within 48 hours"
  • "Send an email to alice@example.com with subject 'Meeting tomorrow' and tell her the meeting is moved to 3pm"
  • "Reply to the last message in the support thread about the broken login, staying in thread"
  • "Send a follow-up to all leads from last week who didn't respond"

Organizing and triaging:

  • "Tag this thread as urgent and assign it to the billing team"
  • "Mark all threads older than 30 days with no reply as closed"
  • "Show me the deliverability stats for the past 7 days"
  • "List all suppressed email addresses in the support inbox"

SMS:

  • "Provision a phone number for my agent"
  • "Send an SMS to +14155551234 saying 'Your order has shipped'"
  • "Show me all my SMS conversations"
  • "Search my SMS messages for anything about delivery issues"

Domain and inbox management:

  • "Create a new inbox called 'billing' under example.com"
  • "What DNS records do I need to add to verify example.com?"
  • "Show me all my verified domains"

Setup

1. Get your API key

Create an API key from your Commune dashboard. It starts with comm_.

2. Add to your MCP client

Pick your client and add the Commune server. No local files needed — uvx fetches the package automatically.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "commune": {
      "command": "uvx",
      "args": ["commune-mcp"],
      "env": {
        "COMMUNE_API_KEY": "comm_your_key_here"
      }
    }
  }
}

Cursor

Open Settings → MCP → Add Server:

{
  "commune": {
    "command": "uvx",
    "args": ["commune-mcp"],
    "env": {
      "COMMUNE_API_KEY": "comm_your_key_here"
    }
  }
}

Windsurf

Open Settings → MCP, same format as Cursor.

Alternative: pip install

If you prefer pip over uvx:

pip install commune-mcp

Then use commune-mcp as the command:

{
  "commune": {
    "command": "commune-mcp",
    "env": {
      "COMMUNE_API_KEY": "comm_your_key_here"
    }
  }
}

How It Works

Once configured, your AI agent can use Commune tools in natural conversation:

You: Check my support inbox for new emails

Agent: (calls list_domains → list_inboxes → list_threads) You have 3 new threads in support@example.com:

  1. "Order not received" — 4 messages, last activity 2h ago
  2. "Billing question" — 1 message, received today
  3. "Feature request" — 2 messages, last activity yesterday

You: What's the order issue about?

Agent: (calls get_thread_messages) Customer john@gmail.com says their order #4521 shipped 5 days ago but hasn't arrived. They've followed up twice asking for tracking info.

You: Reply that we're checking with shipping and will update within 24h

Agent: (calls send_email with thread_id) Done — reply sent to john@gmail.com in the existing thread.

The agent decides which tools to call based on your request. You don't need to specify tool names.


How email flows through Commune MCP

Inbound (you receive email):

  User sends email
       |
       v
  Commune receives at your inbox (support@yourdomain.com)
       |
       v
  Commune fires webhook to your app (8 retries, HMAC signed)
       |
       v
  Your MCP client reads thread via list_threads / get_thread_messages
       |
       v
  You ask Claude: "Reply to John saying we're on it"
       |
       v
  Claude calls send_email with thread_id --> reply appears in John's email thread

Outbound (you send email):

  You: "Send an update email to all VIP customers"
       |
       v
  Claude calls list_threads --> get_thread_messages --> send_email (per thread)
       |
       v
  Commune delivers via DKIM-signed SMTP
       |
       v
  Delivery events tracked: sent --> delivered / bounced / complained

Tools Reference

Domain Tools

These manage your email domains. Domains must be verified via DNS before you can send/receive.

list_domains

List all email domains in your account.

Parameters: None

Output:

[
  {
    "id": "d_abc123",
    "name": "example.com",
    "status": "verified",
    "region": "us-east-1"
  }
]

create_domain

Create a new custom domain. After creating, use get_domain_records to see required DNS entries, then verify_domain to check.

ParameterTypeRequiredDescription
namestrYesDomain name (e.g. "example.com")
regionstrNoAWS region (e.g. "us-east-1")

Output: The created domain object with its ID and status.


get_domain_records

Get DNS records you need to add at your registrar before verification passes.

ParameterTypeRequiredDescription
domain_idstrYesDomain ID from list_domains

Output:

[
  { "type": "MX", "name": "example.com", "value": "inbound-smtp.us-east-1.amazonaws.com", "status": "pending" },
  { "type": "TXT", "name": "example.com", "value": "v=spf1 include:amazonses.com ~all", "status": "pending" }
]

verify_domain

Trigger DNS verification. Call after adding records at your registrar.

ParameterTypeRequiredDescription
domain_idstrYesDomain ID

Inbox Tools

Inboxes are mailboxes under a domain. support under example.com → support@example.com.

list_inboxes

List inboxes. Without domain_id, lists all inboxes across all domains.

ParameterTypeRequiredDescription
domain_idstrNoFilter by domain (lists all if omitted)

Output:

[
  {
    "id": "i_xyz789",
    "localPart": "support",
    "address": "support@example.com",
    "webhook": { "endpoint": "https://..." }
  }
]

create_inbox

Create a new inbox. Domain is auto-resolved if not provided — no DNS setup needed.

ParameterTypeRequiredDescription
local_partstrYesPart before @ (e.g. "support", "billing")
domain_idstrNoDomain to create under. Auto-resolved if omitted.
namestrNoAgent name for the inbox
display_namestrNoSender display name shown in email clients
webhook_endpointstrNoURL for email notifications

delete_inbox

Delete an inbox permanently.

ParameterTypeRequiredDescription
domain_idstrYesDomain ID
inbox_idstrYesInbox ID

set_extraction_schema

Configure structured extraction for an inbox using a JSON Schema.

ParameterTypeRequiredDescription
domain_idstrYesDomain ID
inbox_idstrYesInbox ID
namestrYesSchema name
schemastrYesJSON string of schema object
descriptionstrNoHuman-readable description
enabledboolNoEnable extraction (default true)

remove_extraction_schema

Remove structured extraction from an inbox.

ParameterTypeRequiredDescription
domain_idstrYesDomain ID
inbox_idstrYesInbox ID

Thread Tools

Threads are email conversations — groups of related messages. These are the most commonly used tools.

list_threads

List threads for an inbox with cursor-based pagination. Returns newest first by default.

ParameterTypeRequiredDescription
inbox_idstrOne of theseFilter by inbox
domain_idstrrequiredFilter by domain
limitintNo1–100, default 20
cursorstrNoPagination cursor from previous response
orderstrNo"desc" (newest first) or "asc"

Output:

{
  "data": [
    {
      "thread_id": "conv_abc123",
      "subject": "Order not received",
      "message_count": 4,
      "last_message_at": "2025-03-15T14:30:00Z",
      "snippet": "Hi, I ordered 5 days ago and still haven't...",
      "last_direction": "inbound",
      "has_attachments": false
    }
  ],
  "next_cursor": "eyJsYXN0...",
  "has_more": true
}

To get the next page, pass next_cursor as the cursor parameter.


get_thread_messages

Get all messages in a thread. Returns oldest first (chronological).

ParameterTypeRequiredDescription
thread_idstrYesThread ID from list_threads
limitintNo1–1000, default 50
orderstrNo"asc" (chronological) or "desc"

Output:

[
  {
    "message_id": "msg_001",
    "direction": "inbound",
    "participants": [
      { "role": "sender", "identity": "john@gmail.com" },
      { "role": "to", "identity": "support@example.com" }
    ],
    "content": "Hi, I placed order #4521 five days ago...",
    "metadata": {
      "subject": "Order not received",
      "created_at": "2025-03-10T09:15:00Z"
    }
  },
  {
    "message_id": "msg_002",
    "direction": "outbound",
    "content": "We're looking into this for you...",
    "metadata": {
      "subject": "Re: Order not received",
      "created_at": "2025-03-10T10:30:00Z"
    }
  }
]

Search Tools

search_threads

Search across email threads by subject or content. Uses vector search (semantic) when available, falls back to text matching.

ParameterTypeRequiredDescription
querystrYesSearch query (natural language)
inbox_idstrOne of theseFilter by inbox
domain_idstrrequiredFilter by domain
limitintNo1–100, default 20

Triage Tools

Manage thread status, tags, and assignment — agent-native workflow primitives.

get_thread_metadata

Get triage metadata for a thread: tags, status, and assignment.

ParameterTypeRequiredDescription
thread_idstrYesThread ID

set_thread_status

Set the triage status of a thread.

ParameterTypeRequiredDescription
thread_idstrYesThread ID
statusstrYes"open", "needs_reply", "waiting", or "closed"

tag_thread

Add tags/labels to a thread. Tags are additive — existing tags are preserved.

ParameterTypeRequiredDescription
thread_idstrYesThread ID
tagsstrYesComma-separated tags (e.g. "urgent,vip,sales-lead")

untag_thread

Remove tags from a thread.

ParameterTypeRequiredDescription
thread_idstrYesThread ID
tagsstrYesComma-separated tags to remove

assign_thread

Assign a thread to an agent or user. Pass empty to unassign.

ParameterTypeRequiredDescription
thread_idstrYesThread ID
assigned_tostrNoAgent/user identifier (empty to unassign)

Deliverability Tools

get_deliverability_stats

Get delivery metrics: sent, delivered, bounced, complained, failed counts and rates.

ParameterTypeRequiredDescription
inbox_idstrOne of theseFilter by inbox
domain_idstrrequiredFilter by domain
periodstrNo"24h", "7d", "30d" (default: "7d")

get_suppressions

List suppressed email addresses (bounces, complaints, unsubscribes).

ParameterTypeRequiredDescription
inbox_idstrNoFilter by inbox
domain_idstrNoFilter by domain
limitintNoMax results (default: 50)

get_delivery_events

Get delivery event log for tracking individual emails.

ParameterTypeRequiredDescription
message_idstrNoFilter for a specific message
inbox_idstrNoFilter by inbox
domain_idstrNoFilter by domain
event_typestrNo"sent", "delivered", "bounced", "complained", "failed"
limitintNoMax results (default: 50)

Message Tools

send_email

Send an email. Can send fresh emails or reply within an existing thread.

ParameterTypeRequiredDescription
tostrYesRecipient(s), comma-separated for multiple
subjectstrYesSubject line
htmlstrNo*HTML body
textstrNo*Plain text body
from_addressstrNoSender address
reply_tostrNoReply-to address
thread_idstrNoReply in existing thread
inbox_idstrNoSend from specific inbox
domain_idstrNoSend from specific domain
attachmentsstrNoComma-separated attachment IDs

*Provide at least html or text.

To reply in a thread, pass the thread_id from list_threads or get_thread_messages. The email will be threaded in the recipient's mailbox.


Attachment Tools

upload_attachment

Upload a file. Returns an attachment_id to use with send_email.

ParameterTypeRequiredDescription
contentstrYesBase64-encoded file content
filenamestrYesFilename (e.g. "report.pdf")
mime_typestrYesMIME type (e.g. "application/pdf")

Output:

{
  "attachment_id": "att_abc123",
  "filename": "report.pdf",
  "mime_type": "application/pdf",
  "size": 45230
}

get_attachment_url

Get a temporary download URL for an attachment.

ParameterTypeRequiredDescription
attachment_idstrYesAttachment ID
expires_inintNoSeconds until URL expires (default: 3600)

Output:

{
  "url": "https://res.cloudinary.com/...",
  "expires_in": 3600,
  "filename": "report.pdf",
  "mime_type": "application/pdf",
  "size": 45230
}

Phone Number Tools

Manage provisioned phone numbers for SMS.

list_phone_numbers

List all provisioned phone numbers in your account.

Parameters: None


get_phone_number

Get details for a single provisioned phone number.

ParameterTypeRequiredDescription
phone_number_idstrYesPhone number ID from list_phone_numbers

list_available_phone_numbers

Browse available phone numbers before purchasing.

ParameterTypeRequiredDescription
typestrNo"TollFree" (default) or "Local"
countrystrNoTwo-letter country code (default: "US")
limitintNoMax results (default: 10)

provision_phone_number

Purchase a phone number for SMS. Deducts credits from your balance.

ParameterTypeRequiredDescription
phone_numberstrNoSpecific E.164 number to buy (auto-selected if omitted)
typestrNo"tollfree" (default) or "local"
friendly_namestrNoHuman-readable label

update_phone_number

Update a phone number's friendly name or auto-reply message.

ParameterTypeRequiredDescription
phone_number_idstrYesPhone number ID
friendly_namestrNoHuman-readable label
auto_replystrNoAuto-reply text for all inbound SMS (empty string to disable)

release_phone_number

Release a provisioned phone number back to the pool. No credit refund. Message history is retained.

ParameterTypeRequiredDescription
phone_number_idstrYesPhone number ID to release

set_phone_number_webhook

Configure a webhook for a phone number to receive SMS event notifications.

ParameterTypeRequiredDescription
phone_number_idstrYesPhone number ID
endpointstrYesHTTPS URL to receive webhook payloads
secretstrNoWebhook signing secret for payload verification
eventslistNoEvent types (default: ["sms.received", "sms.sent"])

set_phone_number_allow_list

Set the allow list for a phone number — only these numbers can send SMS to it. Replaces existing list.

ParameterTypeRequiredDescription
phone_number_idstrYesPhone number ID
numberslistYesE.164 phone numbers to allow (empty list to clear)

set_phone_number_block_list

Set the block list for a phone number — these numbers are rejected. Replaces existing list.

ParameterTypeRequiredDescription
phone_number_idstrYesPhone number ID
numberslistYesE.164 phone numbers to block (empty list to clear)

SMS Tools

send_sms

Send an SMS message.

ParameterTypeRequiredDescription
tostrYesRecipient in E.164 format (e.g. "+15551234567")
bodystrYesSMS message text
phone_number_idstrNoSend from a specific phone number (auto-assigned if omitted)

list_sms_conversations

List SMS conversation threads.

ParameterTypeRequiredDescription
phone_number_idstrNoFilter by phone number (lists all if omitted)
limitintNo1–100, default 20

get_sms_thread

Get all messages in an SMS thread with a specific number.

ParameterTypeRequiredDescription
remote_numberstrYesExternal phone number in E.164 format
phone_number_idstrYesYour Commune phone number ID

search_sms

Semantic search across SMS messages.

ParameterTypeRequiredDescription
querystrYesSearch query
phone_number_idstrNoScope to a specific phone number
limitintNo1–100, default 20

list_sms_suppressions

List phone numbers suppressed from receiving SMS (opted out via STOP keyword).

ParameterTypeRequiredDescription
phone_number_idstrNoFilter by phone number (lists all if omitted)

remove_sms_suppression

Remove a phone number from the SMS suppression list (re-enable SMS delivery).

ParameterTypeRequiredDescription
phone_numberstrYesE.164 phone number to remove from suppressions

Credits Tools

get_credit_balance

Get current credit balance for your Commune account.

Parameters: None


list_credit_bundles

List available credit bundles that can be purchased.

Parameters: None


credits_checkout

Create a Stripe checkout session to purchase a credit bundle.

ParameterTypeRequiredDescription
bundlestrYesBundle ID: "starter", "growth", or "scale"
return_urlstrNoURL to redirect to after payment

FAQ

How do I add Commune to Claude Desktop? Edit ~/Library/Application Support/Claude/claude_desktop_config.json and add the commune MCP server block (see Setup above). Restart Claude Desktop. The Commune tools will appear in Claude's tool list automatically.

What's the difference between commune-mcp and the Python/TypeScript SDKs? commune-mcp is for interactive use in MCP clients like Claude Desktop or Cursor — you give natural language instructions and the AI calls the tools. The Python/TypeScript SDKs are for building autonomous agents programmatically in code. Both connect to the same Commune backend.

Does it work with Cursor's agent mode? Yes. Add commune-mcp to Cursor via Settings → MCP → Add Server using the JSON block shown in the Setup section. Once configured, Cursor's agent mode can use all Commune tools — reading threads, sending email, and managing inboxes — during any chat or Composer session.

How do I create a new inbox through the MCP server? Just ask: "Create a new inbox called support under example.com." The agent will call create_inbox with local_part: "support" and your domain ID. If you don't specify a domain, Commune auto-assigns one — so you can create an inbox with just a local part and no DNS configuration.

Can Claude actually send real emails through this? Yes. When the agent calls send_email, Commune delivers a real email via DKIM-signed SMTP to the recipient's inbox. The email appears exactly like a normal email — it threads correctly in Gmail and Outlook, supports HTML and attachments, and generates delivery events you can track.

What happens to emails that arrive while I'm not in a chat session? Commune stores all inbound emails and threads persistently. When you open a new chat and ask to check your inbox, the agent calls list_threads and retrieves everything that arrived since your last session. Optionally, you can configure a webhook on each inbox so your app gets notified in real-time (8 retries, HMAC-signed).

How do I reply in a thread instead of starting a new email? Pass the thread_id to send_email. The easiest way is to say "Reply to this thread saying..." after asking the agent to show you a thread — it will keep the thread_id in context and pass it automatically. The reply appears threaded in the recipient's email client.

Is my email content private? Your email content is transmitted over TLS and stored encrypted at rest on Commune's infrastructure. API keys authenticate every request, and webhooks are HMAC-signed so your app can verify the payload hasn't been tampered with. Your content is never used for training AI models.

Can I use this with my own email domain? Yes. Use create_domain to register your domain, then get_domain_records to see the required MX, TXT, and CNAME records, add them at your registrar, and call verify_domain. Once verified, all inboxes under that domain use your domain as the sender address (e.g. support@yourdomain.com).

What does the API key look like? Commune API keys start with the prefix comm_ followed by a random string — for example, comm_sk_live_abc123xyz. Create one from your Commune dashboard. Keep it secret: treat it like a password and never commit it to source control.

How do I search my inbox for a specific topic? Use the search_threads tool by asking naturally: "Search my support inbox for emails about refunds." The agent calls search_threads with your query. Commune uses semantic search, so it finds relevant threads even if the exact words don't match — for example, "money back" will surface threads about refunds.

Can multiple people use the same Commune MCP server? Yes. Commune uses organizations — multiple team members can share the same account and API key, or each member can have their own API key scoped to the same organization. All keys access the same domains and inboxes. For isolation between projects, create separate inboxes (e.g. billing@, support@) and filter by inbox_id in tool calls.


Environment Variables

VariableRequiredDescription
COMMUNE_API_KEYYesYour API key (starts with comm_)
COMMUNE_BASE_URLNoOverride API URL (default: Commune cloud)

Ecosystem

PackageDescription
communeEmail & SMS infrastructure — self-hostable backend
commune-aiTypeScript/Node.js SDK
commune-pythonPython SDK
commune-mcpMCP server for Claude Desktop, Cursor, Windsurf
commune-cliCommand-line interface

License

Apache-2.0

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Configuration

COMMUNE_API_KEY*secret

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

Categories
Communication & MessagingSearch & Web Crawling
Registryactive
Packagecommune-mcp
TransportSTDIO
AuthRequired
UpdatedMar 3, 2026
View on GitHub

Related Communication & Messaging MCP Servers

View all →
Microsoft 365 Teams

io.github.mindstone/mcp-server-microsoft-teams

Microsoft 365 Teams via Graph: list chats, read/send messages, list teams/channels, presence.
8
Outlook Email

com.mintmcp/outlook-email

A MCP server for Outlook email that lets you search, read, and draft emails and replies.
8
Resend Email MCP

helbertparanhos/resend-email-mcp

Complete Resend email MCP: full API coverage + debug layer (deliverability, DNS, bounces).
Email Mcp

marlinjai/email-mcp

Unified email MCP server for Gmail, Outlook, iCloud, and IMAP with batch operations
13
Email (IMAP/SMTP)

io.github.mindstone/mcp-server-email-imap

Email IMAP/SMTP MCP server: iCloud, Gmail, Yahoo, Outlook, and custom IMAP providers
8
HTML Email Playbook

io.github.osamahassouna/email-playbook-mcp

Teaches AI to write HTML email that renders in Outlook, Gmail, and Apple Mail. 19 rules, 6 comps.