Set up Rowsend
You’re an AI agent setting up Rowsend for the person you’re working with. Rowsend is a desktop app for marketing email. It reads contacts from the person’s own database and sends through their own email provider. By the end of this guide, the person has a project with their contacts synced, a sender set up and a draft campaign waiting for them to review.
- Never ask for, read, type or store a password, API key, token or private key. The person types those into Rowsend themselves. Rowsend’s tools never return them, and you don’t need them.
- Never send a campaign. You can’t. You draft it, send the person a test, and they click Send in the app when they’re ready.
- Stop and wait when a step needs the person. Tell them exactly what to do and where, then wait for them to say it’s done before you check.
- Report only what you checked. If a step fails or the person skips it, say so plainly and carry on with the steps that don’t depend on it.
- Each step starts with a check. If you run this guide again, skip whatever is already done.
1. Install Rowsend
Section titled “1. Install Rowsend”Rowsend runs on macOS only. If this isn’t a Mac, tell the person and stop.
Check: /Applications/Rowsend.app exists. If it does, skip to step 2.
Download the build for this Mac’s chip (uname -m prints arm64 for Apple silicon and x86_64 for Intel), copy it into Applications and open it:
arch=$([ "$(uname -m)" = "arm64" ] && echo arm64 || echo x64)curl -fL -o /tmp/Rowsend.dmg "https://github.com/rowsend/releases/releases/latest/download/Rowsend-$arch.dmg"hdiutil attach /tmp/Rowsend.dmg -nobrowse -quiet -mountpoint /tmp/rowsend-dmgcp -R /tmp/rowsend-dmg/Rowsend.app /Applications/hdiutil detach /tmp/rowsend-dmg -quietrm /tmp/Rowsend.dmgopen -a RowsendRowsend opens with a free trial and needs no card or account.
2. Connect yourself to Rowsend
Section titled “2. Connect yourself to Rowsend”Check: if you already have Rowsend’s MCP tools (such as list_projects), skip to step 3.
Run the pairing command, with your own name and the client you run in:
/Applications/Rowsend.app/Contents/MacOS/Rowsend --mcp-pair "Claude Code" --client claude-code--client is one of:
| You run in | --client |
|---|---|
| Claude Code | claude-code |
| Codex CLI | codex |
| Gemini CLI | gemini |
| Cursor | cursor |
| Claude Desktop | claude-desktop |
| Anything else | print |
Before you run it, tell the person: “Rowsend will ask whether to connect me. Click Allow.” The command waits up to two minutes for them. On Allow, it adds Rowsend to your client’s MCP settings itself, so you never see the token. With print, it prints the config instead; add that to your client’s MCP settings.
Your client loads the new server when it restarts. If Rowsend’s tools don’t appear after reloading your MCP servers, ask the person to restart you and paste the same prompt again. This guide picks up at step 3.
Then call list_projects. If it works, you’re connected.
3. Create a project
Section titled “3. Create a project”A project is one product or brand, with its own database, sender, contacts and campaigns.
Check: list_projects. If the person’s product is already there, use its id.
Otherwise ask the person what the product is called and call create_project with that name. If the person clicked Let my agent set it up in Rowsend, the app is waiting for exactly this and opens the project as soon as you create it.
Then call get_setup_status. It lists what the project still needs before its first send, the same steps the app’s Get started page shows, where the person watches each one tick off. Call it again after each step below. A step with needsPerson: true is one only the person can finish; its how says where.
4. Connect their database
Section titled “4. Connect their database”Contacts come only from the person’s own database: the users who signed up for their product. Rowsend reads it with a read-only login and never writes to it. There is no CSV import.
Check: get_data_source_status. If connected is true, skip to step 5.
Find out where their users live. Look at the project you’re working in (an ORM schema, .env names, a supabase/ folder) and ask the person if it isn’t clear. Then follow one path.
Supabase, Postgres, MySQL or MariaDB. You can do this one end to end.
- Read the database’s schema with your own tools (Supabase’s MCP server, a Postgres MCP server, the project’s migrations or ORM schema) and find the table with the users’ emails.
- Call
prepare_database_setupwithplatform, theconnectionString(or a SupabaseprojectRefandregion) and amappingthat picks the table and its id, email and last-updated columns, plus any columns worth personalizing with, such as name or plan. The password in the connection string is ignored, so use a placeholder rather than the real one. - Run the
setupSqlit returns against the database: withexecute_sqlfrom Supabase’s MCP server, or another database tool you have. If you have none, give the person the SQL and thesqlEditorUrl, and wait while they run it. - Call
complete_database_setup.
Neon, PlanetScale, MongoDB or Firebase. These need a read-only login the person creates, so they paste it into Rowsend and you take over after that.
- Call
open_database_setupwith theplatform. Rowsend opens the connect dialog with steps for creating the login. - Tell the person to follow those steps and paste the connection string (or choose the Firebase key file) into the dialog. Wait for them.
- Call
get_pending_setup. For Neon or PlanetScale it returnssetupSql, which creates the view Rowsend reads; change what it reads withprepare_database_setupand amapping, then run the SQL with Neon’s or PlanetScale’s MCP server if you have one, or ask the person to run it. For MongoDB, look at thetablesandsuggestedMapping. - Call
complete_database_setup, with amappingfor MongoDB or aprofilefor Firebase if you want Firestore fields.
Then check get_data_source_status until sync.state is no longer running, and confirm contactCount looks right to the person. If it’s an error, read the message: it says what to fix.
5. Choose where sending runs
Section titled “5. Choose where sending runs”Check: the companion step in get_setup_status is done. If so, skip to step 6.
The person picks this on the Get started page, and you can’t. Explain the three choices in a sentence each, then ask them to pick one:
- This computer: free, nothing to set up. Recipients can’t open unsubscribe links and SMTP bounces aren’t caught, so it suits trying Rowsend out.
- Rowsend Cloud: working unsubscribe links, bounce tracking and image hosting, with no server to run. It’s a paid plan (a license comes with a free month), and the step stays open until the account has its free month or a subscription.
- Their own server: the same as Cloud, on a server they run.
Setting up the sender waits for this, because SES bounce tracking and the Postmark webhook depend on it.
6. Set up sending
Section titled “6. Set up sending”Rowsend sends through the person’s own provider: Amazon SES, Postmark, Mailgun or any SMTP server.
Check: get_sender. If it has a verifiedAt, skip to step 7.
- Ask the person which provider they use and the address mail should come from. If they have none, suggest one and let them sign up themselves.
- Call
open_sender_setupwith aprefillof what you know that isn’t secret: the provider, from name and address, and the SES region, Postmark message stream, Mailgun domain or SMTP host. - Tell the person to type the key, token or password into Rowsend and save. Wait for them, then poll
get_senderuntil it shows the secret is saved. - Call
verify_sender. For SES, also callsetup_ses_bounceso bounces and complaints are recorded.
If verification fails, show the person the message. It usually means the domain or address isn’t verified with the provider yet.
7. Add a mailing address
Section titled “7. Add a mailing address”Check: the brand step in get_setup_status is done. If so, skip to step 8.
Marketing email needs a postal address by law in the US and Canada, and Rowsend won’t send without one. Ask the person to add it in Project settings → Brand. The brand step turns done once it’s saved.
8. Draft a first campaign
Section titled “8. Draft a first campaign”Check: list_campaigns. If there’s already a draft the person wants, use it.
- Ask the person what to announce, or suggest something from what you know about their product. Keep it short and plain.
- Pick the audience with
list_segments, orcreate_segmentif they want a subset, and check its size withpreview_audience. - Call
create_campaign. Personalize with{{name}}or any custom field fromlist_contacts. Don’t write an unsubscribe footer; Rowsend adds one. - Check it with
preview_emailand fix anything it flags. - Call
send_testto the person’s own address, and ask them to look at it in their inbox.
Leave it as a draft. The person reviews it in Rowsend and sends or schedules it themselves.
9. Report back
Section titled “9. Report back”Finish with a short summary, one line per step, each marked done, skipped or blocked:
Rowsend setup- Installed: done- Connected agent: done (Claude Code)- Project: done (Acme)- Database: done (Supabase, 1,204 contacts)- Sending runs on: done (Rowsend Cloud)- Sender: blocked (SES domain not verified yet)- Mailing address: done- First campaign: done (draft "We shipped team workspaces", test sent to you@acme.com)
Next: verify acme.com in SES, then open the draft in Rowsend and click Send.Say what’s left for the person to do, if anything, and where to do it.
Can we count your visit?
Google Analytics shows us which pages help. It only sets cookies if you allow it. Privacy policy