commune-mcp
Server 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_schemaA | 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_schemaC | 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_threadsB | 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_statusA | 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_threadB | 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_statsB | 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) |
| list_phone_numbersA | List all provisioned phone numbers in your Commune account. Returns each number's ID, number, type, capabilities, and status. Use the phone_number_id with SMS tools or update_phone_number. |
| get_phone_numberA | Get details for a single provisioned phone number. Args: phone_number_id: The phone number ID (from list_phone_numbers) |
| update_phone_numberA | Update a phone number's friendly name or auto-reply message. Args: phone_number_id: The phone number ID (from list_phone_numbers) friendly_name: Human-readable label for this number (optional) auto_reply: Automatic reply text sent to all inbound SMS (optional, empty string to disable) |
| list_available_phone_numbersA | List available phone numbers to purchase. Browse numbers before buying with provision_phone_number. Args: type: Number type — "TollFree" (default) or "Local" country: Two-letter country code (default: "US") limit: Max results (default: 10) |
| provision_phone_numberA | Purchase/provision a phone number for SMS. Deducts credits from your balance. Use list_available_phone_numbers first to browse options. Args: phone_number: Specific E.164 number to buy, e.g. "+18005551234" (optional, auto-selected if omitted) type: Number type — "tollfree" (default) or "local" friendly_name: Human-readable label for this number (optional) |
| release_phone_numberA | Release a provisioned phone number. The number will be returned to the pool. No credit refund. Message history is retained. Args: phone_number_id: The phone number ID to release (from list_phone_numbers) |
| send_smsA | Send an SMS message. Returns message_id, message_sid, status, and credits_charged. Args: to: Recipient phone number in E.164 format, e.g. "+15551234567" body: SMS message text phone_number_id: Send from a specific phone number (optional, auto-assigned if omitted) |
| list_sms_conversationsA | List SMS conversation threads. Returns a summary of each thread: remote number, last message snippet, and message count. Args: phone_number_id: Filter conversations by phone number (optional, lists all if omitted) limit: Max results, 1-100 (default: 20) |
| get_sms_threadA | Get all messages in an SMS thread with a specific number. Returns chronological messages with direction, body, and timestamps. Args: remote_number: The external phone number in E.164 format, e.g. "+15551234567" phone_number_id: Your Commune phone number ID for this conversation |
| search_smsA | Semantic search across SMS messages. Returns matching messages with body, direction, and timestamps. Args: query: Search query (searches message content) phone_number_id: Scope search to a specific phone number (optional) limit: Max results, 1-100 (default: 20) |
| set_phone_number_webhookA | Configure a webhook for a phone number to receive SMS event notifications. When set, Commune will POST to your endpoint on sms.received and sms.sent events. Args: phone_number_id: The phone number ID (from list_phone_numbers) endpoint: HTTPS URL to receive webhook payloads secret: Optional webhook signing secret for payload verification events: Event types to subscribe to (default: ["sms.received", "sms.sent"]) |
| set_phone_number_allow_listA | Set the allow list for a phone number (only these numbers can send SMS to it). Replaces the existing allow list. Pass an empty list to clear it. Args: phone_number_id: The phone number ID (from list_phone_numbers) numbers: List of E.164 phone numbers to allow, e.g. ["+15551234567"] |
| set_phone_number_block_listA | Set the block list for a phone number (these numbers are rejected). Replaces the existing block list. Pass an empty list to clear it. Args: phone_number_id: The phone number ID (from list_phone_numbers) numbers: List of E.164 phone numbers to block, e.g. ["+15551234567"] |
| list_sms_suppressionsA | List phone numbers suppressed from receiving SMS (opted out via STOP keyword). Args: phone_number_id: Filter by phone number ID (optional, lists all if omitted) |
| remove_sms_suppressionA | Remove a phone number from the SMS suppression list (re-enable SMS delivery). Use this when a user sends UNSTOP or contacts support to re-subscribe. Args: phone_number: The E.164 phone number to remove from suppressions, e.g. "+15551234567" |
| 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
- 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/shanjairaj7/commune-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server