commune-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| COMMUNE_API_KEY | Yes | Your API key (starts with comm_) | |
| COMMUNE_BASE_URL | No | Override API URL (default: Commune cloud) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_domainsA | 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. |
| create_domainA | Create a new custom email domain. After creating a domain, you need to:
Args: name: Domain name, e.g. "example.com" region: AWS region (optional), e.g. "us-east-1" or "eu-west-1" |
| verify_domainA | 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) |
| get_domain_recordsA | 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) |
| list_inboxesA | 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, lists all if omitted) |
| create_inboxA | 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") domain_id: Domain to create under (optional, auto-resolved if omitted) name: Agent name for the inbox (optional, also used as display_name fallback) display_name: Sender display name shown in email clients (e.g. "Support Agent", "Acme Sales"). If set, outbound emails show as '"Display Name" ' in Gmail/Outlook. webhook_endpoint: URL to receive notifications on new emails (optional) |
| delete_inboxC | Delete an inbox. Args: domain_id: The domain ID inbox_id: The inbox ID to delete |
| set_extraction_schemaB | Set structured extraction schema for an inbox. Args: domain_id: Domain ID for the inbox. inbox_id: Inbox ID. name: Schema name. schema: JSON string of a valid JSON Schema object. description: Optional schema description. enabled: Enable extraction immediately (default: true). |
| remove_extraction_schemaB | Remove structured extraction schema from an inbox. |
| list_threadsA | 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 (recommended) domain_id: Filter threads by domain limit: Results per page, 1-100 (default: 20) cursor: Pagination cursor from a previous response's next_cursor order: "desc" for newest first (default), "asc" for oldest first |
| get_thread_messagesA | 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 |
| send_emailA | 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 automatically. Args: to: Recipient email address (for multiple, comma-separate) subject: Email subject line html: HTML body content text: Plain text body (fallback) from_address: Sender address (optional, uses inbox default) reply_to: Reply-to address (optional) thread_id: Reply within an existing thread (optional) inbox_id: Send from a specific inbox (recommended — domain is auto-resolved) domain_id: Send from a specific domain (optional, inferred from inbox_id) attachments: Comma-separated attachment IDs from upload_attachment (optional) |
| upload_attachmentA | 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" |
| get_attachment_urlA | Get a temporary download URL for an attachment. Args: attachment_id: The attachment ID expires_in: URL lifetime in seconds (default: 3600 = 1 hour) |
| search_threadsA | 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) domain_id: Filter by domain limit: Max results, 1-100 (default: 20) |
| get_thread_metadataB | Get triage metadata for a thread: tags, status, and assignment. Args: thread_id: The thread ID |
| set_thread_statusB | 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 |
| tag_threadA | 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") |
| untag_threadA | Remove tags/labels from a thread. Args: thread_id: The thread ID tags: Comma-separated tags to remove (e.g. "urgent,vip") |
| assign_threadA | 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) |
| get_deliverability_statsA | 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) domain_id: Filter metrics by domain period: Time period — "24h", "7d", "30d" (default: "7d") |
| get_suppressionsA | 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) domain_id: Filter by domain (optional) limit: Max results (default: 50) |
| get_delivery_eventsA | 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 domain_id: Filter events by domain event_type: Filter by type: "sent", "delivered", "bounced", "complained", "failed" limit: Max results (default: 50) |
| get_credit_balanceA | Get current credit balance for your Commune account. Returns included credits, purchased credits, total available, and credits used this billing cycle. |
| list_credit_bundlesA | List available credit bundles that can be purchased. Returns each bundle's ID, credit amount, price, and description. |
| credits_checkoutA | Create a Stripe checkout session to purchase a credit bundle. Returns a checkout_url to open in the browser to complete payment. Valid bundles: "starter", "growth", "scale". Args: bundle: The bundle ID to purchase — "starter", "growth", or "scale" return_url: URL to redirect to after payment (optional) |
| submit_feedbackA | Submit feedback about Commune to the product team. Use this tool whenever you encounter something worth reporting — an error, a missing capability, or an observation about what's working well or could be improved. Three feedback types: "error" — the API returned a non-2xx status, the response shape was wrong, or behavior was incorrect (not just unexpected). Include context: which tool you called, what you expected, what happened. Example: "list_threads returns 500 when the inbox has never received a message." "feature" — you need a capability that doesn't exist yet. Be specific about the use case. Example: "Need cursor-based pagination on search_threads — current limit cap blocks processing large backlogs." "signal" — the API succeeded but quality, latency, or behavior was unexpected. Also use for positive observations. Example: "Semantic search quality on long threads is excellent — intent matching across 40+ messages works." Example: "Thread metadata endpoint is slow (~3s) on inboxes with 1000+ threads — expected <500ms." The optional context dict lets you attach structured metadata that makes feedback actionable. For errors, include the tool name, any IDs, and status codes. For features, include the related tool and your use case. Args: type: Feedback type — "error", "feature", or "signal" message: Clear description of the feedback (max 4000 chars) context: Optional structured metadata, e.g. {"tool": "list_threads", "inbox_id": "inb_123", "status_code": 500} |
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
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/commune-dev/commune-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server