Commune
Commune gives AI agents a persistent identity in the real world — a real email address, a real phone number, and the full infrastructure to send, receive, and…
What it can do
- List Domains: 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 Domain: 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: 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:
What data it sees
Do you need an account
No: the server works without sign-in
Commune gives AI agents a persistent identity in the real world — a real email address, a real phone number, and the full infrastructure to send, receive, and manage communications at any scale. From a single outbound message to complex multi-agent conversation workflows, Commune is the communication layer agents are built on.
How to connect
How to connect Commune to Claude
The server address to paste into Claude settings:
https://commune--commune-dev.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Commune to ChatGPT
The server address to paste into ChatGPT settings:
https://commune--commune-dev.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Commune to Cursor
The server address to paste into Cursor settings:
https://commune--commune-dev.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (21)
Raw names from tools/list. Only developers need these.
| list_domains | 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_domain | 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" region: AWS region (optional), e.g. "us-east-1" or "eu-west-1" |
| verify_domain | 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_records | 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_inboxes | 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_inbox | 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" <email>' in Gmail/Outlook. webhook_endpoint: URL to receive notifications on new emails (optional) |
| delete_inbox | Delete an inbox. Args: domain_id: The domain ID inbox_id: The inbox ID to delete |
| list_threads | 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_messages | 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_email | 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_attachment | 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_url | 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_threads | 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_metadata | Get triage metadata for a thread: tags, status, and assignment. Args: thread_id: The thread ID |
| set_thread_status | 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_thread | 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_thread | Remove tags/labels from a thread. Args: thread_id: The thread ID tags: Comma-separated tags to remove (e.g. "urgent,vip") |
| assign_thread | 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_stats | 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_suppressions | 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) |
| get_delivery_events | 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", "delivered", "bounced", "complained", "failed" limit: Max results (default: 50) |