邮件和短信管理工具

Commune是一款为AI代理提供真实电子邮件和短信收件箱功能的工具,支持读取、发送邮件,管理收件箱,跟踪投递状态以及发送和接收短信。

  • by commune-dev
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 shanjairaj7/commune-mcp

使用说明

Claude Desktop、Cursor和Windsurf的电子邮件

给Claude(或任何MCP客户端)一个真正的电子邮件收件箱和短信。30秒内安装——不需要克隆。

您的AI代理可以:

  • 阅读电子邮件 --列出线程,按主题搜索,获取完整的消息历史记录
  • 发送邮件 --在现有线程中回复、撰写新消息、附加文件
  • 管理收件箱 --创建程序化收件箱,设置自定义域,用标签和状态进行分类
  • 跟踪交货 --获取交货统计数据、抑制列表、退货和投诉事件
  • 发送和接收短信 --提供电话号码、发送消息、搜索短信历史记录

适用于Claude Desktop、Cursor、Windsurf或任何 主控程序 客户。


通过Smithery安装

《公社》在Smithery出版。对任何受支持的客户端进行一行安装:

# 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

或通过Smithery API进行连接,以供代理使用:

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

示例提示

配置后,您可以为AI助手提供电子邮件和短信的自然语言指令:

正在阅读电子邮件:

  • “检查我的支持收件箱以获取新电子邮件”
  • “显示账单收件箱中的所有未读帖子”
  • “查找本周客户询问退款的电子邮件”
  • “搜索上个月有关付款问题的所有帖子”
  • “线程conv_abc123的完整对话历史记录是什么?”
  • “显示所有尚未回复的帖子”

发送电子邮件:

  • “回复约翰的电子邮件,说我们将在48小时内处理他的退款”
  • “发送电子邮件至alice@example.com主题为“明天开会”,并告诉她会议已移至下午3点
  • “回复支持线程中关于登录失败的最后一条消息,留在线程中”
  • “对上周没有回复的所有线索进行跟进”

组织和分类:

  • “将此线程标记为紧急,并将其分配给计费团队”
  • “将所有超过30天没有回复的线程标记为已关闭”
  • “显示过去7天的送达率统计数据”
  • “列出支持收件箱中所有被抑制的电子邮件地址”

短讯服务:

  • “为我的代理人提供电话号码”
  • “发送短信至+14155551234,告知'您的订单已发货'”
  • “显示我的所有短信对话”
  • “在我的短信中搜索有关传递问题的任何信息”

域和收件箱管理:

  • “在example.com下创建一个名为‘billion’的新收件箱”
  • “我需要添加哪些DNS记录来验证example.com?”
  • “显示我所有已验证的域”

设置

1.获取API密钥

从您的 公社仪表板。它始于 comm_.

2.添加到您的MCP客户端

选择您的客户端并添加Commune服务器。不需要本地文件-- uvx 自动提取包裹。

克劳德桌面版

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

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

光标

打开 设置→ MCP → 添加服务器:

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

帆板运动

打开 设置→ MCP,格式与游标相同。

替代方案:pip安装

如果你愿意 pip 超过 uvx:

pip install commune-mcp

然后使用 commune-mcp 作为命令:

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

运作原理

配置后,您的AI代理可以在自然对话中使用Commune工具:

你: 查看我的支持收件箱以获取新电子邮件

代理人: (电话 list_domains → list_inboxes → list_threads) 您在中有3个新线程support@example.com:

  1. “订单未收到”--4条消息,最后一个活动发生在2小时前
  2. “账单问题”--今天收到1条消息
  3. “功能请求”--2条消息,昨天的最后一个活动

你: 订单问题是关于什么的?

代理人: (电话 get_thread_messages) 客户john@gmail.com说他们的订单#4521 5天前发货,但还没有到。他们已经跟进了两次,要求提供追踪信息。

你: 回复我们正在检查发货情况,并将在24小时内更新

代理人: (电话 send_email 随着 thread_id) 已完成--回复已发送至john@gmail.com在现有线程中。

代理根据您的请求决定调用哪些工具。您不需要指定工具名称。


电子邮件如何在Commune MCP中流动

入站(您收到电子邮件):

  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

出站(您发送电子邮件):

  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

工具参考

域名工具

这些管理您的电子邮件域。在发送/接收之前,必须通过DNS验证域名。

list_domains

列出您帐户中的所有电子邮件域。

参数: 无

输出:

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

create_domain

创建新的自定义域。创建后,使用 get_domain_records 要查看所需的DNS条目,则 verify_domain 检查。

参数 类型 必填 说明
name str 是 域名(例如。 "example.com")
region str 否 AWS区域(例如。 "us-east-1")

输出: 创建的域对象及其ID和状态。


get_domain_records

在验证通过之前,在注册商处获取您需要添加的DNS记录。

参数 类型 必填 说明
domain_id str 是 域ID来自 list_domains

输出:

[
  { "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

触发DNS验证。在注册商处添加记录后致电。

参数 类型 必填 说明
domain_id str 是 域ID

收件箱工具

收件箱是域下的邮箱。 support 在...之下 example.com → support@example.com.

list_inboxes

列出收件箱。没有 domain_id,列出所有域中的所有收件箱。

参数 类型 必填 说明
domain_id str 否 按域筛选(如果省略,则列出所有)

输出:

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

create_inbox

创建新收件箱。域名是 自动解决 如果没有提供,则不需要DNS设置。

参数 类型 必填 说明
local_part str 是 之前的部分 @ (例如。 "support", "billing")
domain_id str 无 要创建的域。如果省略,则自动解析。
name str 否 收件箱的代理名称
display_name str 否 电子邮件客户端中显示发件人显示名称
webhook_endpoint str 没有 电子邮件通知的URL

delete_inbox

永久删除收件箱。

参数 类型 必填 说明
domain_id str 是 域ID
inbox_id str 是 收件箱ID

set_extraction_schema

使用JSON模式为收件箱配置结构化提取。

参数 类型 必填 说明
domain_id str 是 域ID
inbox_id str 是 收件箱ID
name str 是 架构名称
schema str 是 模式对象的JSON字符串
description str 否 人类可读的描述
enabled bool 否 启用提取(默认为true)

remove_extraction_schema

从收件箱中删除结构化提取。

参数 类型 必填 说明
domain_id str 是 域ID
inbox_id str 是 收件箱ID

主题工具

线程是电子邮件对话——一组相关的消息。这些是最常用的工具。

list_threads

使用基于光标的分页列出收件箱的线程。默认情况下,首先返回最新值。

参数 类型 必填 说明
inbox_id str 其中之一 按收件箱筛选
domain_id str 必需 按域筛选
limit int 否 1-100,默认值20
cursor str 否 来自上一个响应的分页光标
order str 没有 "desc" (最新优先)或 "asc"

输出:

{
  "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
}

要获取下一页,请通过 next_cursor 随着 cursor 参数。


get_thread_messages

获取一个线程中的所有消息。首先返回最旧的(按时间顺序)。

参数 类型 必填 说明
thread_id str 是 来自的线程ID list_threads
limit int 否 1–1000,默认值50
order str 没有 "asc" (按时间顺序)或 "desc"

输出:

[
  {
    "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_threads

按主题或内容在电子邮件线程中搜索。在可用的情况下使用矢量搜索(语义),回退到文本匹配。

参数 类型 必填 说明
query str 是 搜索查询(自然语言)
inbox_id str 其中之一 按收件箱筛选
domain_id str 必需 按域筛选
limit int 否 1-100,默认值20

分类工具

管理线程状态、标签和分配——代理本机工作流原语。

get_thread_metadata

获取线程的分类元数据:标签、状态和分配。

参数 类型 必填 说明
thread_id str 是 线程ID

set_thread_status

设置线程的分流状态。

参数 类型 必填 说明
thread_id str 是 线程ID
status str 是的 "open", "needs_reply", "waiting",或 "closed"

tag_thread

为线程添加标签。标签是可添加的——保留现有的标签。

参数 类型 必填 说明
thread_id str 是 线程ID
tags str 是 逗号分隔的标签(例如。 "urgent,vip,sales-lead")

untag_thread

从线程中删除标签。

参数 类型 必填 说明
thread_id str 是 线程ID
tags str 是 要删除逗号分隔的标签

assign_thread

为代理或用户分配线程。将空传递给未分配。

参数 类型 必填 说明
thread_id str 是 线程ID
assigned_to str 否 代理/用户标识符(空表示取消分配)

交付工具

get_deliverability_stats

获取交付指标:发送、交付、退回、投诉、失败计数和比率。

参数 类型 必填 说明
inbox_id str 其中之一 按收件箱筛选
domain_id str 必需 按域筛选
period str 没有 "24h", "7d", "30d" (默认值: "7d")

get_suppressions

列出被屏蔽的电子邮件地址(跳出、投诉、取消订阅)。

参数 类型 必填 说明
inbox_id str 否 按收件箱筛选
domain_id str 否 按域筛选
limit int 否 最大结果(默认值:50)

get_delivery_events

获取用于跟踪单个电子邮件的传递事件日志。

参数 类型 必填 说明
message_id str 否 筛选特定邮件
inbox_id str 否 按收件箱筛选
domain_id str 否 按域筛选
event_type str 没有 "sent", "delivered", "bounced", "complained", "failed"
limit int 否 最大结果(默认值:50)

消息工具

send_email

发送一封电子邮件。可以发送新邮件或在现有帖子中回复。

参数 类型 必填 说明
to str 是 收件人,逗号分隔为多个
subject str 是 主题行
html str 否* HTML正文
text str 否* 纯文本正文
from_address str 否 发件人地址
reply_to str 否 回复地址
thread_id str 否 在现有线程中回复
inbox_id str 否 从特定收件箱发送
domain_id str 否 从特定域发送
attachments str 否 逗号分隔的附件ID

*至少提供 html 或 text.

在帖子中回复,通过 thread_id 从 list_threads 或 get_thread_messages。电子邮件将被插入收件人的邮箱。


随机工具

upload_attachment

上传文件。返回一个 attachment_id 与一起使用 send_email.

参数 类型 必填 说明
content str 是 Base64编码文件内容
filename str 是 文件名(例如。 "report.pdf")
mime_type str 是 MIME类型(例如。 "application/pdf")

输出:

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

get_attachment_url

获取附件的临时下载URL。

参数 类型 必填 说明
attachment_id str 是 附件ID
expires_in int 否 URL过期前的秒数(默认值:3600)

输出:

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

电话号码工具

管理短信的预设电话号码。

list_phone_numbers

列出您帐户中所有已配置的电话号码。

参数: 无


get_phone_number

获取单个已配置电话号码的详细信息。

参数 类型 必填 说明
phone_number_id str 是 来自的电话号码ID list_phone_numbers

list_available_phone_numbers

购买前浏览可用的电话号码。

参数 类型 必填 说明
type str 没有 "TollFree" (默认)或 "Local"
country str 否 两个字母的国家代码(默认值: "US")
limit int 否 最大结果(默认值:10)

provision_phone_number

购买短信电话号码。从您的余额中扣除积分。

参数 类型 必填 说明
phone_number str 否 要购买的特定E.164号码(如果省略,则自动选择)
type str 没有 "tollfree" (默认)或 "local"
friendly_name str 否 人类可读标签

update_phone_number

更新电话号码的友好名称或自动回复消息。

参数 类型 必填 说明
phone_number_id str 是 电话号码ID
friendly_name str 否 人类可读标签
auto_reply str 否 所有入站短信的自动回复文本(禁用空字符串)

release_phone_number

将已配置的电话号码释放回池中。不退款。保留消息历史记录。

参数 类型 必填 说明
phone_number_id str 是 要发布的电话号码ID

set_phone_number_webhook

为接收短信事件通知的电话号码配置webhook。

参数 类型 必填 说明
phone_number_id str 是 电话号码ID
endpoint str 是 用于接收webhook有效负载的HTTPS URL
secret str 否 用于有效载荷验证的Webhook签名密钥
events list 否 事件类型(默认值: ["sms.received", "sms.sent"])

set_phone_number_allow_list

设置电话号码的允许列表——只有这些号码可以向其发送短信。替换现有列表。

参数 类型 必填 说明
phone_number_id str 是 电话号码ID
numbers list 是 E.164允许使用的电话号码(清除空列表)

set_phone_number_block_list

设置电话号码的阻止列表——这些号码将被拒绝。替换现有列表。

参数 类型 必填 说明
phone_number_id str 是 电话号码ID
numbers list 是 E.164要阻止的电话号码(要清除空列表)

短信工具

send_sms

发送短信。

参数 类型 必填 说明
to str 是 E.164格式的收件人(例如。 "+15551234567")
body str 是 短信文本
phone_number_id str 否 从特定电话号码发送(如果省略,则自动分配)

list_sms_conversations

列出短信对话线程。

参数 类型 必填 说明
phone_number_id str 否 按电话号码筛选(如果省略,则列出所有号码)
limit int 否 1-100,默认值20

get_sms_thread

获取具有特定号码的短信线程中的所有消息。

参数 类型 必填 说明
remote_number str 是 E.164格式的外部电话号码
phone_number_id str 是 您的公社电话号码ID

search_sms

跨短信的语义搜索。

参数 类型 必填 说明
query str 是 搜索查询
phone_number_id str 否 适用于特定电话号码
limit int 否 1-100,默认值20

list_sms_suppressions

列出被禁止接收短信的电话号码(通过STOP关键字选择退出)。

参数 类型 必填 说明
phone_number_id str 否 按电话号码筛选(如果省略,则列出所有号码)

remove_sms_suppression

从短信抑制列表中删除电话号码(重新启用短信传递)。

参数 类型 必填 说明
phone_number str 是 要从抑制中删除的E.164电话号码

信用工具

get_credit_balance

获取您公社账户的当前信用余额。

参数: 无


list_credit_bundles

列出可以购买的可用信用包。

参数: 无


credits_checkout

创建Stripe结账会话以购买信用包。

参数 类型 必填 说明
bundle str 是 捆绑包ID: "starter", "growth",或 "scale"
return_url str 无 付款后重定向到的URL

常见问题解答

如何将Commune添加到Claude Desktop? 编辑 ~/Library/Application Support/Claude/claude_desktop_config.json 并添加公社MCP服务器块(请参阅上面的设置)。重新启动克劳德桌面。Commune工具将自动出现在Claude的工具列表中。

commune mcp和Python/TypeScript SDK之间有什么区别? commune mcp是用于mcp客户端(如Claude Desktop或Cursor)的交互式使用——你给出自然语言指令,人工智能调用这些工具。Python/TypeScript SDK用于在代码中以编程方式构建自治代理。两者都连接到同一个Commune后端。

它是否适用于Cursor的代理模式? 对。通过设置将commune mcp添加到游标→ MCP → 使用设置部分中显示的JSON块添加服务器。配置后,Cursor的代理模式可以在任何聊天或Composer会话期间使用所有Commune工具——读取线程、发送电子邮件和管理收件箱。

如何通过MCP服务器创建新收件箱? 只需问:“在example.com下创建一个名为support的新收件箱。”客服将致电 create_inbox 随着 local_part: "support" 以及您的域ID。如果您没有指定域,Commune会自动分配一个域,这样您就可以创建一个只有本地部分而没有DNS配置的收件箱。

克劳德真的能通过这个发送真正的电子邮件吗? 对。当代理人来电时 send_email,Commune通过DKIM签名的SMTP将真实的电子邮件发送到收件人的收件箱。这封电子邮件看起来和普通电子邮件完全一样——它在Gmail和Outlook中正确地运行,支持HTML和附件,并生成可以跟踪的传递事件。

当我不在聊天会话中时,收到的电子邮件会发生什么? Commune持久存储所有入站电子邮件和线程。当你打开一个新的聊天室并要求查看收件箱时,客服会打电话给你 list_threads 并检索自上次会话以来到达的所有内容。您可以在每个收件箱上配置一个webhook,以便您的应用程序实时收到通知(8次重试,HMAC签名)。

我如何在帖子中回复,而不是开始新的电子邮件? 通过 thread_id 到 send_email。最简单的方法是在要求代理向您展示一个线程后说“回复这个线程说…”——它将保留 thread_id 在上下文中自动传递。回复显示在收件人的电子邮件客户端中。

我的电子邮件内容是私人的吗? 您的电子邮件内容通过TLS传输,并加密存储在Commune的基础设施上。API密钥对每个请求进行身份验证,并且webhook是HMAC-签名的,因此您的应用程序可以验证有效负载没有被篡改。你的内容永远不会用于训练人工智能模型。

我可以将其用于我自己的电子邮件域吗? 对。使用 create_domain 注册您的域名,然后 get_domain_records 要查看所需的MX、TXT和CNAME记录,请在您的注册商处添加它们,然后致电 verify_domain。一旦验证,该域下的所有收件箱都将使用您的域作为发件人地址(例如。 support@yourdomain.com).

API密钥是什么样子的? 公共API密钥以前缀开头 comm_ 后面跟着一个随机字符串——例如, comm_sk_live_abc123xyz.从您的 公社仪表板。保密:将其视为密码,永远不要将其提交给源代码管理。

如何在收件箱中搜索特定主题? 使用 search_threads 该工具自然地问:“在我的支持收件箱中搜索有关退款的电子邮件。”客服打电话给 search_threads 与您的查询。Commune使用语义搜索,因此即使确切的单词不匹配,它也会找到相关的线索——例如,“退款”会出现关于退款的线索。

多个人可以使用同一个Commune MCP服务器吗? 对。Commune使用组织-多个团队成员可以共享同一个帐户和API密钥,或者每个成员可以在同一组织中拥有自己的API密钥。所有密钥都访问相同的域和收件箱。为了在项目之间进行隔离,请创建单独的收件箱(例如。 billing@, support@)并按以下方式过滤 inbox_id 在工具调用中。


环境变量

变量 必填 描述
COMMUNE_API_KEY 是 您的API密钥(以 comm_)
COMMUNE_BASE_URL 否 覆盖API URL(默认值:Commune cloud)

生态系统

包装 描述
公社 电子邮件和短信基础设施——可自托管后端
公社ai Types/Node.js SDK
公社python Python SDK
公社mcp 适用于Claude Desktop、Cursor、Windsurf的MCP服务器
公社气候 命令行界面

许可证

阿帕奇-2.0