้ขๅ Agent ็้ฎไปถไฟกๆฏ้้ โ ่ฎฉ AI ้่ฟ MCP/REST/Webhook ่ฏปๅใๅค็ใไปฃๅ้ฎไปถ
missive-mail ไธๅชๆฏ้ฎไปถๅฎขๆท็ซฏใๅฎๆฏ Agent ่ฟๆฅ็ฐๅฎไธ็็ๅบ็ก่ฎพๆฝโโ้ฎไปถๆฏๅ จ็ๆ้็จ็ๅ่ฎฎ๏ผๆๆๆๅก้ฝ่ฝๅ้ฎไปถใmissive-mail ่ฎฉ Agent ๆไธบไฝ ็ๆถๅๅฎคใ
GitHub ้็ฅ โ ๆถไปถ็ฎฑ โ Agent ่ชๅจๅๅปบ Issue
้ถ่ก่ดฆๅ โ ๆถไปถ็ฎฑ โ Agent ๅฝๆกฃ + ๅๆๆฏๅบ
ๆๅกๅจๅ่ญฆ โ ๆถไปถ็ฎฑ โ Agent ๆจ้ๅฐ Matrix ็พค
ๅฎขๆทๅจ่ฏข โ ๆถไปถ็ฎฑ โ Agent ่็จฟๅๅค โ ไบบๅทฅ็กฎ่ฎคๅ้
็บฟไธๅฐๅ: mail.snbar.top
missive-mail ๆไพไธ็ง Agent ๆฅๅ ฅๆนๅผ๏ผ่ฆ็ๆๆๅบๆฏ๏ผ
ๅ ็ฝฎ McpAgent๏ผๅบไบ Cloudflare Agents SDK๏ผๆฏไธช Agent ่ฟๆฅๆฅๆ็ฌ็ซ Durable Object + SQL ๆฐๆฎๅบ๏ผ
// Hermes / OpenClaw / ไปปไฝ MCP ๅฎขๆท็ซฏ็ดๆฅ่ฟๆฅ
const tools = await mcp.connect("https://mail.snbar.top/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 ่ฟๆฅๆ็ฌ็ซ็ถๆ๏ผ่ฎฐไฝไธไธๆใ็ผๅญๆฅ่ฏข็ปๆ๏ผ
- Agent ็ญพๅ๏ผ
โโ็ฑใ{agent_name}ใไปฃๅ
้็จ Agent/่ๆฌ่ฐ็จ๏ผX-Agent-Token ่ฎค่ฏ๏ผ
# Agent ่ฎค่ฏ๏ผไธไฝฟ็จ JWT๏ผ็ดๆฅ API Key๏ผ
curl -H "X-Agent-Token: aam_xxxxxxxx" \
https://mail.snbar.top/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://mail.snbar.top/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-08T12:00:00Z",
"mail": { "id": "...", "from": "alert@github.com", "subject": "Issue #42" },
"signature": "hmac-sha256=..."
}| ๅฑ็บง | ๆชๆฝ |
|---|---|
| ่ฎค่ฏ | JWT๏ผAccess 15min + Refresh 7d๏ผ+ Agent API Key + Turnstile CAPTCHA |
| 2FA | TOTP ๅๅ ็ด + ๆขๅค็ + ๆพๅฎฝ็ญ็ฅ |
| ้ๆต | KV ๆปๅจ็ชๅฃ๏ผIP/็จๆท/Agent ไธ็บง๏ผ |
| ไผ ่พ | CF ่ชๅจ SPF/DKIM/DMARC + TLS |
| ๅฎก่ฎก | D1 ๅ จๆไฝๆฅๅฟ + ็ปๅฝๅๅฒ |
- ๐จ๐ณ ไธญๆ๏ผ้ป่ฎค๏ผ/ ๐บ๐ธ English
- 171 ็ฟป่ฏ้ฎ๏ผ่ฆ็ๆๆ้กต้ข
- ้กถๆ ไธ้ฎๅๆข๏ผlocalStorage ่ฎฐๅฟ
- ๆถไฟก: CF Email Worker๏ผpostal-mime ่งฃๆ๏ผ+
/api/v1/mails/inboundAPI - ๅไฟก: Resend API๏ผๆฏๆๅค้จ้ฎ็ฎฑๆ้๏ผ
- ๅญๅจ: D1 ็ปๆๅ + R2 ้ไปถ + KV ็ผๅญ
- ๅฏน่ฏ: ็บฟ็จๅผ้ฎไปถ่งๅพ๏ผๅป้ sent/inbox ๅฏๆฌ๏ผๆญฃ็กฎ่ฏๅซๅๅคๆถไปถไบบ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Cloudflare ่พน็ผ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ CF Email Worker โ โ Hono HTTP Worker โ โ
โ โ (ๆถไฟกๅ
ฅๅฃ) โ โ REST API + Webhook + ้ๆ่ตๆบโ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ McpAgent (DO) โ โ CF ๅ
จๅฎถๆกถๅญๅจ โ โ
โ โ /mcp โ โ D1 + KV + R2 + Queue โ โ
โ โ ๆฏAgent็ฌ็ซ็ถๆ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ Resend API โ โ ๅไฟกๅบๅฃ๏ผๅค้จ้ฎ็ฎฑๆ้๏ผ โ
โ โโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| ็ปไปถ | ๆๆฏ |
|---|---|
| ่ฟ่กๆถ | Cloudflare Workers๏ผ$5/ๆไป่ดน่ฎกๅ๏ผ |
| HTTP | Hono |
| MCP | CF Agents SDK๏ผMcpAgent + Durable Object๏ผ |
| ๆฐๆฎๅบ | D1๏ผSQLite๏ผ+ Drizzle ORM |
| ็ผๅญ | KV๏ผ้ๆต/ไผ่ฏ/Token๏ผ |
| ๅญๅจ | R2๏ผ้ไปถ๏ผ |
| ้ๅ | CF Queues๏ผWebhook ๅผๆญฅๆ้ + DLQ๏ผ |
| ๅ็ซฏ | React 19 + TailwindCSS 4 + Vite 6 |
| ๅฝ้ ๅ | react-i18next๏ผไธญ/่ฑ๏ผ |
| ้ฎไปถ่งฃๆ | postal-mime |
| ๅไฟก | Resend API |
| ๆต่ฏ | Vitest๏ผ71 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_here
# ้จ็ฝฒ Worker๏ผๅซๅ็ซฏ้ๆ่ตๆบ๏ผ
npm run build:web
npm run deploy| ๅ้ | ่ฏดๆ | ๅฟ ๅกซ |
|---|---|---|
JWT_SECRET |
JWT ็ญพๅๅฏ้ฅ | โ |
RESEND_API_KEY |
Resend API Key๏ผๅไฟก๏ผ | โ |
TURNSTILE_SECRET_KEY |
Turnstile CAPTCHA ๅฏ้ฅ | ๅฏ้ |
TURNSTILE_SITE_KEY |
Turnstile ๅ็ซฏ Key | ๅฏ้ |
# hermes config.yaml
mcp_servers:
missive-mail:
url: https://mail.snbar.top/mcp
transport: streamable-http{
"mcpServers": {
"missive-mail": {
"url": "https://mail.snbar.top/mcp",
"transport": "streamable-http"
}
}
}| ่ง่ฒ | ่ฏป้ฎไปถ | ๅ้ฎไปถ | ๅๅค | ็ฎก็ๆ ็ญพ | ๅ ้ค | ็ฎก่ดฆๆท | ็ฎก่งๅ |
|---|---|---|---|---|---|---|---|
| ๅช่ฏป | โ | โ | โ | โ | โ | โ | โ |
| ๅฉ็ | โ | โ | โ | โ | โ | โ | โ |
| ็ฎก็ | โ | โ | โ | โ | โ | โ | โ |
| ๅ จๆ | โ | โ | โ | โ | โ | โ | โ |
ๅๅบ้ฎไปถ๏ผๆฏๆๆไปถๅคน่ฟๆปคๅๅ้กตใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| 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 | ๅฆ | ๅฏ้ |
ๅๅค้ฎไปถใ่ชๅจ่ฏๅซๆญฃ็กฎๆถไปถไบบ๏ผๆซๆๆดไธชๅฏน่ฏ็บฟ็จ๏ผ๏ผ้่ฟ Resend API ๅ้ใ
| ๅๆฐ | ็ฑปๅ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|---|
| id | string | ๆฏ | ๅ้ฎไปถ ID |
| body | 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 # ๅๅพ่ฟๆปค
โ โ โโโ rate-limit.ts # KV ๆปๅจ็ชๅฃ้ๆต
โ โ โโโ turnstile.ts # Turnstile CAPTCHA
โ โโโ routes/
โ โโโ auth.ts # ่ฎค่ฏ่ทฏ็ฑ
โ โโโ mails.ts # ้ฎไปถ CRUD + ๅฏน่ฏ็บฟ็จ + ๅๅค
โ โโโ agents.ts # Agent ็ฎก็
โ โโโ webhooks.ts # Webhook ็ฎก็
โ โโโ admin.ts # ็ฎก็ๅๅฐ
โโโ web/ # React 19 ๅ็ซฏ๏ผไธญ/่ฑๅ่ฏญ๏ผ
โ โโโ src/
โ โโโ components/ # ConversationView, MailList, ComposeMail...
โ โโโ pages/ # Login, Register, Admin, Settings
โ โโโ lib/api.ts # API ๅฎขๆท็ซฏ๏ผๅซ token ๅทๆฐ๏ผ
โ โโโ i18n/ # ๅฝ้
ๅ๏ผ171 ็ฟป่ฏ้ฎ๏ผ
โโโ migrations/ # D1 ่ฟ็งป SQL
โโโ test/ # ๆต่ฏ๏ผ71 tests๏ผ
โโโ wrangler.toml # CF Workers ้
็ฝฎ
| ๆนๆณ | ่ทฏๅพ | ่ฏดๆ |
|---|---|---|
| POST | /auth/register |
ๆณจๅ |
| POST | /auth/login |
็ปๅฝ |
| POST | /auth/refresh |
ๅทๆฐ Token |
| GET | /api/v1/mails |
้ฎไปถๅ่กจ๏ผๆฏๆ folder/search/starred/unread ๅ้กต๏ผ |
| GET | /api/v1/mails/:id |
ๅๅฐ้ฎไปถ |
| GET | /api/v1/mails/:id/conversation |
ๅฏน่ฏ็บฟ็จ๏ผ่ชๅจ่ๅ + ๅป้๏ผ |
| POST | /api/v1/mails/send |
ๅ้้ฎไปถ๏ผResend API๏ผ |
| POST | /api/v1/mails/:id/reply |
ๅๅค้ฎไปถ๏ผResend API๏ผ |
| POST | /api/v1/mails/:id/archive |
ๅฝๆกฃ |
| PUT | /api/v1/mails/:id/label |
่ฎพ็ฝฎๆ ็ญพ |
| DELETE | /api/v1/mails/:id |
ๅ ้ค |
| POST | /api/v1/mails/inbound |
ๅค้จ้ฎไปถๆฅๆถๅ ฅๅฃ |
| GET | /api/v1/mails/analytics |
้ฎไปถ็ป่ฎก |
| POST | /api/v1/agents |
ๅๅปบ Agent |
| GET | /api/v1/agents |
Agent ๅ่กจ |
| POST | /api/v1/webhooks |
ๅๅปบ Webhook |
| POST | /api/mcp |
MCP Server๏ผStreamable HTTP๏ผ |
| ๆๅก | ๅ ่ดน้ขๅบฆ | ้ขไผฐ็จ้ | ๆ่ดน |
|---|---|---|---|
| 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 |
| Resend | 100ๅฐ/ๅคฉๅ ่ดน | ~500ๅฐ/ๆ | $0 |
| ๅ่ฎก | $5/ๆ |
- fix: ๅๅค็ซฏ็น็ฐๅจ้่ฟ Resend API ๅ้ๅฎ้ ้ฎไปถ๏ผไนๅๅชๅๆฐๆฎๅบไธๅไฟก๏ผ
- fix: ๅฏน่ฏ็บฟ็จ่งๅพๅป้ sent/inbox ๅฏๆฌ
- fix: ๅๅคๆถไปถไบบไฟฎๅค โ ๆซๆๆดไธชๅฏน่ฏ็บฟ็จๆพ็ฌฌไธไธช้่ชๅทฑ็ๅไปถไบบ
- fix: ๅพช็ฏๅฅ็ฆปๆๆ
Re:/RE:ๅ็ผๆญฃ็กฎๅน้ thread - fix: ๆทปๅ
RESEND_API_KEYๅฐ Env ็ฑปๅๅฎไน - data: ๆธ
็ 10 ๆก่ๆฐๆฎ๏ผ้่ฏฏ็
to_addr๏ผ
- feat: ๅฏน่ฏ็บฟ็จ่งๅพ๏ผconversation endpoint๏ผ
- feat: ๅๅคๆถๅๅปบ inbox ๅฏๆฌ็กฎไฟ thread ๅฎๆด
- feat: ๅ็ซฏ ConversationView ็ปไปถ
- fix: ่ทฏ็ฑ้กบๅบไฟฎๅค๏ผ
/:id/conversationๅจ/:idไนๅ๏ผ
MIT
