day3

Remote MCP server for day3, email for small software teams billed by emails sent. Draft newsletters and product updates from Claude Code, Cursor or VS Code into day3 as editable blocks.

ホスト型 MCP サーバー

npx add-mcp 'https://go.day3.app/api/mcp'

Claude Code、Codex、Cursor などにインストールできます

ドキュメント

day3 runs a Model Context Protocol server, so an AI editor can work with your campaigns and automations directly. Drafts land as editable composer blocks, not opaque HTML, so you can still edit them by hand.

https://go.day3.app/api/mcp

One HTTP endpoint, authenticated with your API key. Nothing to install, nothing to run locally.

Setup

Every editor does the same thing: point at the URL, send the key as a header.

Run this in your project, then ask Claude to write you an email.

claude mcp add --transport http day3 https://go.day3.app/api/mcp --header "Authorization: Bearer $DAY3_API_KEY"

Keep it on one line. A \ continuation is bash only; on Windows the --header line runs as its own command and never arrives. The server is then added without a key, returns 401, and the client reports Invalid OAuth error response: Unrecognized token '<', which says nothing about the missing header.

Tools

ToolWhat it does
day3_contextAccount context: audiences, senders, plan state. Call this first.
day3_list_campaignsList campaigns.
day3_get_campaignRead one campaign, including its body.
day3_create_campaignCreate a draft.
day3_update_campaignEdit a draft.
day3_preview_campaignRender it, with theme, merge tags and footer applied.
day3_send_testSend to addresses the caller names. Never the audience.
day3_send_campaignSend to the whole audience. Needs campaigns:send.
day3_schedule_campaignSchedule a send. Needs campaigns:send.
day3_list_automationsList automations, with status and trigger.
day3_enroll_in_automationPut one person into a flow. Needs automations:enroll.

Sending is off by default

day3_send_campaign and day3_schedule_campaign need the campaigns:send scope. day3_enroll_in_automation needs automations:enroll. Both are off unless you enabled them when minting the key.

A script does what its author wrote. An agent decides for itself, and “email everyone on the list” is not a decision to hand over by default. Enrolling promises a stranger every email in a flow, so it is scoped too. Listing automations names flows, not people, and is not.

day3_send_test needs no scope. It only reaches addresses the caller names, and it is capped and rate-limited. The default key gives your assistant the full draft, preview, test loop and stops at the audience.

Want an agent to send? Mint a second key with the scope on. Scopes cannot be added to an existing key, so the grant stays visible in your key list.

A typical session

Read our last three campaigns, then draft an August release note in the same voice. Cover sending domains and the new API. Preview it and send me a test.

The assistant calls day3_context for your audience and sender, day3_list_campaigns and day3_get_campaign to learn the voice, day3_create_campaign to write the draft in day3 Markdown, day3_preview_campaign to check it, and day3_send_test to put it in your inbox.

The draft waits in day3 as real composer blocks. Nothing has reached your list.

Keep the key out of prompts

Prompts get copied into chat tools, issue trackers and logs. Set DAY3_API_KEY in your environment and let the editor config read it, as in the Claude Code and VS Code examples. When an assistant calls the REST API directly, tell it to read the key from the environment.