้ขๅ Agent ็้ฎไปถไฟกๆฏ้้ โ ่ฎฉ AI ้่ฟ MCP/REST/Webhook ่ฏปๅใๅค็ใไปฃๅ้ฎไปถ
missive-mail ไธๅชๆฏ้ฎไปถๅฎขๆท็ซฏใๅฎๆฏ Agent ่ฟๆฅ็ฐๅฎไธ็็ๅบ็ก่ฎพๆฝโโ้ฎไปถๆฏๅ จ็ๆ้็จ็ๅ่ฎฎ๏ผๆๆๆๅก้ฝ่ฝๅ้ฎไปถใmissive-mail ่ฎฉ Agent ๆไธบไฝ ็ๆถๅๅฎคใ
GitHub ้็ฅ โ ๆถไปถ็ฎฑ โ Agent ่ชๅจๅๅปบ Issue
้ถ่ก่ดฆๅ โ ๆถไปถ็ฎฑ โ Agent ๅฝๆกฃ + ๅๆๆฏๅบ
ๆๅกๅจๅ่ญฆ โ ๆถไปถ็ฎฑ โ Agent ๆจ้ๅฐ Matrix ็พค
ๅฎขๆทๅจ่ฏข โ ๆถไปถ็ฎฑ โ Agent ่็จฟๅๅค โ ไบบๅทฅ็กฎ่ฎคๅ้
missive-mail ๆไพไธ็ง Agent ๆฅๅ ฅๆนๅผ๏ผ่ฆ็ๆๆๅบๆฏ๏ผ
ๅ ็ฝฎ McpAgent๏ผๅบไบ Cloudflare Agents SDK๏ผๆฏไธช Agent ่ฟๆฅๆฅๆ็ฌ็ซ Durable Object + SQL ๆฐๆฎๅบ๏ผ
// Hermes / OpenClaw / ไปปไฝ MCP ๅฎขๆท็ซฏ็ดๆฅ่ฟๆฅ
const tools = await mcp.connect("https://missive-mail.ialer.workers.dev/mcp");
// 7 ไธชๅ
็ฝฎ Tools
await tools.mail_list({ folder: "inbox", filter: "from:github.com" });
await tools.mail_read({ id: "msg_abc123" });
await tools.mail_send({ to: "user@example.com", subject: "Hi", body: "Hello!" });
await tools.mail_reply({ id: "msg_abc123", body: "ๆถๅฐ๏ผๆไผๅค็" });
await tools.mail_manage({ action: "archive", ids: ["msg_abc123"] });
await tools.mail_analyze({ filter: "last 7 days" });
await tools.mail_search({ query: "ๅ็ฅจ OR invoice" });็นๆง๏ผ
- Streamable HTTP ไผ ่พ๏ผๅฎๆนๅ่ฎฎ๏ผ
- ๆฏไธช Agent ่ฟๆฅๆ็ฌ็ซ็ถๆ๏ผ่ฎฐไฝไธไธๆใ็ผๅญๆฅ่ฏข็ปๆ๏ผ
- ๅ ็ฝฎ OAuth ๆฏๆ๏ผๅฏ้๏ผ
- Agent ็ญพๅ๏ผ
โโ็ฑใ{agent_name}ใไปฃๅ
้็จ Agent/่ๆฌ่ฐ็จ๏ผX-Agent-Token ่ฎค่ฏ๏ผ
# Agent ่ฎค่ฏ๏ผไธไฝฟ็จ JWT๏ผ็ดๆฅ API Key๏ผ
curl -H "X-Agent-Token: aam_xxxxxxxx" \
https://missive-mail.ialer.workers.dev/api/v1/mails
# ๅ้้ฎไปถ
curl -X POST -H "X-Agent-Token: aam_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"to":"user@example.com","subject":"Report","text":"Daily summary..."}' \
https://missive-mail.ialer.workers.dev/api/v1/mails/sendไบไปถ้ฉฑๅจ๏ผHMAC-SHA256 ็ญพๅ้ช่ฏ๏ผQueue ๅผๆญฅๆ้ + ้่ฏ๏ผ
// ๆณจๅ Webhook
POST /api/v1/webhooks
{
"url": "https://your-agent.com/webhook",
"events": ["mail.received", "mail.read", "mail.flagged"],
"filter": { "importance": "high" },
"secret": "your-webhook-secret"
}
// ๆจ้ๆ ผๅผ
{
"event": "mail.received",
"timestamp": "2026-05-07T12:00:00Z",
"mail": { "id": "...", "from": "alert@github.com", "subject": "Issue #42" },
"signature": "hmac-sha256=..."
}| ๅฑ็บง | ๆชๆฝ |
|---|---|
| ่ฎค่ฏ | JWT + Agent API Key + Turnstile CAPTCHA |
| 2FA | TOTP ๅๅ ็ด + ๆขๅค็ + ๆพๅฎฝ็ญ็ฅ |
| ้ๆต | KV ๆปๅจ็ชๅฃ๏ผIP/็จๆท/Agent ไธ็บง๏ผ |
| ๅ ๅฏ | PGP ็ซฏๅฐ็ซฏ๏ผๆต่งๅจ็ซฏ openpgp.js๏ผ |
| ไผ ่พ | CF ่ชๅจ SPF/DKIM/DMARC + TLS |
| ๅฎก่ฎก | D1 ๅ จๆไฝๆฅๅฟ + ็ปๅฝๅๅฒ |
| ๅๅพ่ฟๆปค | 5 ๅฑ่ฟๆปค้พ |
- ๐จ๐ณ ไธญๆ๏ผ้ป่ฎค๏ผ/ ๐บ๐ธ English
- 300+ ็ฟป่ฏ้ฎ๏ผ่ฆ็ๆๆ้กต้ข
- ้กถๆ ไธ้ฎๅๆข๏ผlocalStorage ่ฎฐๅฟ
- ๆถไฟก: CF Email Routing๏ผๅ ่ดนๆ ้๏ผ+ postal-mime ่งฃๆ
- ๅไฟก: CF Email Service๏ผ3,000ๅฐ/ๆๅ ่ดน๏ผ
- ๅญๅจ: D1 ็ปๆๅ + R2 ้ไปถ + KV ็ผๅญ
- ่ฟฝ่ธช: D1 ๅ็ๅทฒ่ฏป + MDN ๅๆง + ่ฟฝ่ธชๅ็ด
- ๅฏน่ฏ: ๆฐๆณกๅผ้ฎไปถ่งๅพ๏ผAgent ไปฃๅๆ ่ฎฐ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Cloudflare ่พน็ผ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ CF Email Worker โ โ Hono HTTP Worker โ โ
โ โ (ๆถไฟกๅ
ฅๅฃ) โ โ REST API + Webhook + ้ๆ่ตๆบโ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ McpAgent (DO) โ โ CF ๅ
จๅฎถๆกถๅญๅจ โ โ
โ โ /mcp โ โ D1 + KV + R2 + Queue โ โ
โ โ ๆฏAgent็ฌ็ซ็ถๆ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ CF Email Serviceโ โ ๅไฟกๅบๅฃ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| ็ปไปถ | ๆๆฏ |
|---|---|
| ่ฟ่กๆถ | Cloudflare Workers๏ผ$5/ๆไป่ดน่ฎกๅ๏ผ |
| HTTP | Hono |
| MCP | CF Agents SDK๏ผMcpAgent + Durable Object๏ผ |
| ๆฐๆฎๅบ | D1๏ผSQLite๏ผ+ Drizzle ORM |
| ็ผๅญ | KV๏ผ้ๆต/ไผ่ฏ/Token๏ผ |
| ๅญๅจ | R2๏ผ้ไปถ/้ๆ่ตๆบ๏ผ |
| ้ๅ | CF Queues๏ผWebhook ๅผๆญฅๆ้ + DLQ๏ผ |
| ๅ็ซฏ | React + TailwindCSS + shadcn/ui |
| ๅฝ้ ๅ | react-i18next๏ผไธญ/่ฑ๏ผ |
| ้ฎไปถ่งฃๆ | postal-mime |
| PGP | openpgp.js v6๏ผๆต่งๅจ็ซฏ๏ผ |
| ๆต่ฏ | Vitest๏ผ70 tests๏ผ |
- Node.js โฅ 18
- Wrangler CLI โฅ 4
- Cloudflare ่ดฆๆท๏ผWorkers ไป่ดน่ฎกๅ๏ผ
git clone https://github.com/ialer/missive-mail.git
cd missive-mail
npm install
cd web && npm install && cd ..
# ๅฏๅจๅผๅๆๅกๅจ
npm run dev
# ่ฟ่กๆต่ฏ
npm test
# ๆๅปบๅ็ซฏ
npm run build:web# ่ฎพ็ฝฎ Cloudflare ่ฎค่ฏ
export CLOUDFLARE_API_TOKEN=<your-token>
# ไธ้ฎ้จ็ฝฒ๏ผๅๅปบ D1/KV/R2/Queue + ่ฟ็งป + ่ฎพ็ฝฎๅฏ้ฅ + ๆๅปบ + ้จ็ฝฒ๏ผ
bash scripts/deploy.sh# ้
็ฝฎ CF Email Routing๏ผ้่ฆๅจ CF Dashboard ๆไฝ๏ผ
bash scripts/setup-email.sh yourdomain.com# hermes config.yaml
mcp_servers:
missive-mail:
url: https://missive-mail.ialer.workers.dev/mcp
transport: streamable-http{
"mcpServers": {
"missive-mail": {
"url": "https://missive-mail.ialer.workers.dev/mcp",
"transport": "streamable-http"
}
}
}# ๅๅปบ Agent ๆถ่ฎพ็ฝฎ็ญพๅๆจกๆฟ
curl -X POST -H "X-Agent-Token: aam_xxxxxxxx" \
-d '{"name":"my-agent","signature_template":"โโ็ฑใ{name}ใไปฃๅ"}' \
https://missive-mail.ialer.workers.dev/api/v1/agents| ่ง่ฒ | ่ฏป้ฎไปถ | ๅ้ฎไปถ | ๅๅค | ็ฎก็ๆ ็ญพ | ๅ ้ค | ็ฎก่ดฆๆท | ็ฎก่งๅ |
|---|---|---|---|---|---|---|---|
| ๅช่ฏป | โ | โ | โ | โ | โ | โ | โ |
| ๅฉ็ | โ | โ | โ | โ | โ | โ | โ |
| ็ฎก็ | โ | โ | โ | โ | โ | โ | โ |
| ๅ จๆ | โ | โ | โ | โ | โ | โ | โ |
ๅๅบ้ฎไปถ๏ผๆฏๆๆไปถๅคน่ฟๆปคๅๅ้กตใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| folder | string | ๅฆ | inbox/sent/draft/archive/spam |
| filter | string | ๅฆ | ๅ จๆๆ็ดขๅ ณ้ฎ่ฏ |
| page | number | ๅฆ | ้กต็ ๏ผ้ป่ฎค 1 |
่ฏปๅ้ฎไปถๅฎๆดๅ ๅฎน๏ผ่ชๅจๆ ่ฎฐๅทฒ่ฏปใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| id | string | ๆฏ | ้ฎไปถ ID |
ๅ้้ฎไปถใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| to | string | ๆฏ | ๆถไปถไบบ |
| subject | string | ๆฏ | ไธป้ข |
| body | string | ๆฏ | ๆญฃๆ |
| cc | string | ๅฆ | ๆ้ |
| bcc | string | ๅฆ | ๅฏ้ |
| signature | string | ๅฆ | ่ชๅฎไน็ญพๅ๏ผ่ฆ็้ป่ฎค๏ผ |
ๅๅค้ฎไปถใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| id | string | ๆฏ | ๅ้ฎไปถ ID |
| body | string | ๆฏ | ๅๅคๆญฃๆ |
| signature | string | ๅฆ | ่ชๅฎไน็ญพๅ |
ๆน้็ฎก็้ฎไปถใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| action | enum | ๆฏ | archive/label/delete/star |
| ids | string[] | ๆฏ | ้ฎไปถ ID ๅ่กจ |
| label | string | ๅฆ | ๆ ็ญพๅ๏ผaction=label ๆถๅฟ ๅกซ๏ผ |
้ฎไปถ็ป่ฎกๅๆใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| filter | string | ๅฆ | ๆถ้ด่ๅด่ฟๆปค |
ๅ จๆๆ็ดขใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| query | string | ๆฏ | ๆ็ดขๅ ณ้ฎ่ฏ |
| folder | string | ๅฆ | ้ๅฎๆไปถๅคน |
missive-mail/
โโโ src/
โ โโโ worker.ts # Worker ๅ
ฅๅฃ๏ผHono + Email Handler๏ผ
โ โโโ mcp/mail-mcp.ts # McpAgent MCP Server๏ผ7 tools๏ผ
โ โโโ schema/index.ts # Drizzle ORM Schema๏ผ10 ๅผ ่กจ๏ผ
โ โโโ lib/
โ โ โโโ auth.ts # JWT + ๅฏ็ + API Key
โ โ โโโ db.ts # D1 ่ฟๆฅ
โ โ โโโ queue.ts # Webhook Queue Producer/Consumer
โ โ โโโ spam.ts # 5 ๅฑๅๅพ่ฟๆปค
โ โ โโโ rate-limit.ts # KV ๆปๅจ็ชๅฃ้ๆต
โ โ โโโ turnstile.ts # Turnstile CAPTCHA
โ โโโ routes/
โ โโโ auth.ts # ่ฎค่ฏ่ทฏ็ฑ
โ โโโ mails.ts # ้ฎไปถ CRUD
โ โโโ agents.ts # Agent ็ฎก็
โ โโโ webhooks.ts # Webhook ็ฎก็
โ โโโ admin.ts # ็ฎก็ๅๅฐ
โโโ web/ # React ๅ็ซฏ๏ผไธญ/่ฑๅ่ฏญ๏ผ
โโโ migrations/ # D1 ่ฟ็งป SQL
โโโ scripts/ # ้จ็ฝฒ่ๆฌ
โโโ test/ # ๆต่ฏ๏ผ70 tests๏ผ
โโโ wrangler.toml # CF Workers ้
็ฝฎ
| ๅ้ | ่ฏดๆ | ๅฟ ๅกซ |
|---|---|---|
JWT_SECRET |
JWT ็ญพๅๅฏ้ฅ | โ |
TURNSTILE_SECRET_KEY |
Turnstile CAPTCHA ๅฏ้ฅ | ๅฏ้ |
TURNSTILE_SITE_KEY |
Turnstile ๅ็ซฏ Key | ๅฏ้ |
CF_EMAIL_SERVICE_API_KEY |
CF Email Service API Key | ๅฏ้ |
| ๆๅก | ๅ ่ดน้ขๅบฆ | ้ขไผฐ็จ้ | ๆ่ดน |
|---|---|---|---|
| Workers | 10M ่ฏทๆฑ | ~50K | $0 |
| D1 | 25B ่ฏป/50M ๅ | ~100K | $0 |
| KV | 10M ่ฏป/1M ๅ | ~200K | $0 |
| R2 | 10GB | <1GB | $0 |
| DO | 1M ่ฏทๆฑ | ~10K | $0 |
| Queue | 1M ๆไฝ | ~10K | $0 |
| CF Email Service | 3,000ๅฐ/ๆ | ~500ๅฐ | $0 |
| ๅ่ฎก | $5/ๆ |
MIT