
day3
io.github.Mopra由 GitHub 帳號 Mopra 發布v1.0.0更新於 Oct 24, 2026
Draft email campaigns in day3 from Claude Code, Cursor or VS Code as editable composer blocks.
發布方自己的服務:Exit1 Uptime Monitoring
概覽
Day3 的遠端 MCP 伺服器讓助理起草電子郵件行銷活動,並以可編輯的編輯器區塊形式存入 Day3 應用程式。
- 可以做什麼
- 從 Claude Code、Cursor 或 VS Code 起草電子郵件行銷活動,並以可編輯的編輯器區塊形式落入 Day3。
- 圍繞專為小型 SaaS 團隊設計的郵件工具運作,涵蓋行銷活動、受眾與交易型郵件,並搭配公開 API 與 webhook。
- 此伺服器為無狀態且僅提供工具,助理的角色僅限於起草行銷內容,而非實際寄送。
- 適用情境
- 適合已透過 Day3 寄送產品更新或交易型郵件的小型 SaaS 團隊,希望助理直接把行銷文案起草進編輯器,而不必手動貼上。
- 執行需求
- 需要連線至 go.day3.app 的 Streamable HTTP 遠端端點。必須使用 OAuth,Authorization 標頭攜帶在 Day3 應用程式中建立的 Bearer API 金鑰。需要 Day3 帳號與組織;寄送還需有效的付費訂閱與剩餘月度額度。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 day3,將其新增到工作區。
- 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
- 為需要使用其工具的對話啟用該服務。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
交給代理程式安裝
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/io.github.Mopra%2Fday3/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。其他 MCP 客戶端
把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。
{
"mcpServers": {
"day3": {
"type": "http",
"url": "https://go.day3.app/api/mcp"
}
}
}README
Day3
Marketing and transactional email, billed by sends. $1/mo. No contact tax, no marketing suite to learn.
Source-available, not open source. This code is published for transparency and reference. See LICENSE for terms.
This repository is the Day3 product itself: the app at go.day3.app, the public REST API, the webhook and MCP endpoints, and the worker that sends the mail.
What it does
Day3 is a deliberately small email tool for small SaaS teams. Send product updates and changelogs to your users, and send your app's transactional email (password resets, receipts, magic links), through one verified domain, one monthly allowance, and one place to see delivery.
- Campaigns with a block composer, optional AI assist, scheduling, and per-send stats
- Audiences with segments (saved filters), topics (subscription categories), CSV import, and hosted signup forms
- Transactional email over
POST /v1/emails, Resend-compatible in shape, with per-email delivery status - Automations: onboarding and lifecycle flows drawn on a node canvas, published as immutable versions, unlimited on every tier
- Deliverability by default: verified sending domains, double opt-in, one-click unsubscribe, automatic bounce and complaint suppression, account auto-pause on bad reputation
- Metrics for deliverability, reputation and engagement, plus a searchable log of every email you ever sent
- Public API v1, signed webhooks, and an MCP server so Claude Code, Cursor or VS Code can draft a campaign that lands in Day3 as editable blocks
- Billed on sends, not subscribers. Free accounts set up domains, build audiences and send for real in sandbox mode. Paid plans buy the allowance to reach everyone else.
PRODUCT.md is the canonical description of what Day3 is, what it costs, and how every feature behaves. Read it before the code.
Tech stack
Quick Links
Built by Pradsgaard Labs. Also from the same workshop: exit1.dev, uptime monitoring.
Local development
Sign in with Clerk and create an organization, and you have a tenant. The campaign pipeline (review, generate recipients, batched queue sends, stats) works end to end locally.
Useful:
npm test: vitest against real Postgres (pglite). Applies migrations from scratch every run and asserts schema, journal and snapshots agree. Idempotency tests live here too.npm run typecheck/npm run lint/npm run buildnpm run db:generate: new Drizzle migration after schema changesnpm run db:studio: browse the local database
Migration discipline
src/db/schema.ts is the single source of truth. SQL under migrations/ is
forward-only and generated, never edited by hand. The journal
(migrations/meta/_journal.json) and the per-migration *_snapshot.json files
are part of the migration, so always commit them together.
Workflow when you change the schema:
- Edit
src/db/schema.ts. npm run db:generatewrites the nextNNNN_*.sql, its snapshot, and the journal entry.- Review the SQL (squash or rename within the same PR if the diff is noisy),
then commit the SQL and the
meta/changes in one commit. npm testproves it applies cleanly from scratch.
CI enforces this: it re-runs drizzle-kit generate and fails the build if that
produces any diff, meaning schema.ts and the committed migrations disagree or
a migration was added without its snapshot. Two contributors who both generate
a migration will collide on the next NNNN index. Resolve it by regenerating
one off the merged schema.ts so the journal stays linear.
Apply order in production is drizzle-kit migrate (see the deploy
checklist), which replays only the un-applied journal entries against
DATABASE_URL and records them in the __drizzle_migrations table. Never
db:push, which diffs live and can drop columns.
Required environment variables
Both processes validate their environment at startup (src/lib/env.ts) and
refuse to boot if a required variable is missing or a secret is too short
(min 16 chars). This prevents the empty-key failure mode where an unset
UNSUBSCRIBE_SECRET would sign HMAC tokens with "" (forgeable unsubscribe
and one-click links) or an unset OAUTH_STATE_SECRET would void OAuth CSRF
protection. The Next web tier validates on first server module load
(instrumentation.ts). The worker validates in worker/index.ts before it
starts consuming.
See .env.example (web) and .env.worker.example (worker) for the full list,
including non-secret config: Clerk publishable and secret keys, Redis, Supabase
Storage, and SES credentials.
Going to production (first deploy checklist)
The web tier runs on Vercel, the BullMQ worker on the VPS, Postgres on Supabase. Full provider walkthrough: docs/go-live.md.
- Provision Supabase Postgres, VPS Redis (
rediss://), and SES (see go-live). - Set env on Vercel (web) and
/opt/day3/.env.worker(worker), per.env.exampleand.env.worker.example. - Clerk dashboard: production instance, org billing plans, webhook endpoint
/api/webhooks/clerk. - Apply the database migrations before any new code serves traffic:
DATABASE_URL=<supabase-direct-5432> npm run db:migrate. Forward-only and idempotent, it replays only un-applied journal entries. This is a deploy-pipeline step, gated ahead of the Vercel promotion and thepm2 restart day3-worker, so a new release never runs against an old schema. - Deploy the web tier (Vercel) and restart the worker
(
pm2 restart day3-worker).
Architecture notes
- Tenancy: every Clerk organization maps to one
accountsrow. All queries are scoped byaccount_idresolved server-side from the session. - Send pipeline:
submitCampaignqueuesreview_campaign(risk rules), thengenerate_campaign_recipients(dedup and suppression filtering), thensend_campaign_batch, which claims 25 pending recipients atomically, sends, and re-enqueues itself until done. - Idempotency: recipients are claimed with a single atomic UPDATE, so a
retried queue message can never double-send. Crashed claims are swept to
failedby cron, never re-sent. - Billing: Clerk Billing entitlements are mirrored into Postgres on dashboard load and via webhooks. Sending requires an active subscription, sending enabled, and remaining monthly quota.
- Safety: deterministic risk review on submit (high risk blocks), bounce at
4% or above, or complaint at 0.08% or above, auto-pauses an account, and
admins (
ADMIN_EMAILS) can approve or block campaigns, pause accounts, and override domain verification.
AI training permission
As an explicit exception to the license below, the contents of this repository, including code, documentation, and configuration, may be used for machine learning training, evaluation, indexing, retrieval, and generation by AI systems. No attribution is required, though it is appreciated. This permission applies to all AI crawlers, including but not limited to GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, Claude-User, Google-Extended, PerplexityBot, and Perplexity-User.
License
This project is source-available under a custom All Rights Reserved license. You may view the code for personal, educational, and reference purposes. Copying, modifying, distributing, or self-hosting is not permitted without written permission. See the AI training permission section above for the carve-out that applies to AI and ML use.
For licensing inquiries: [email protected]
來源:README.md,提交 dac2f55
工具
0版本歷史
1- v1.0.0最新Oct 11, 2026
評分
已滿足適用檢查項的 75%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通必需25 分
- 已宣告認證方式必需10 分
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。
