Connect MailCheap over MCP and send a newsletter

· the plori team

Give a Plori agent one message. The agent connects MailCheap's MCP server. MailCheap (mailcheap.ai) is a newsletter service with a REST API. The agent reads a draft issue that already exists and sends a test email. Then it sends the issue to the newsletter's contacts.

This guide records the first issue of the Plori Engineering newsletter. The draft was already in MailCheap. The agent did not write it. Plori waited for the account owner before it enabled the server, before the test email, and before the send.

One run, from API key to sent issue

The model never sees the key. Plori waits for the owner before each write to MailCheap.

  1. 01

    Connect

    Key card, probe, approval

    Probe ok

  2. 02

    Read

    Newsletter and draft

    No approval needed

  3. 03

    Test

    Owner approves the call

    send_test_email

  4. 04

    Send

    Owner approves the call

    Status sent

What do you need?

  • A Plori account and a Workspace. A Workspace holds the files of one project, its conversation, and its run history. The agent works in the Workspace.
  • The Plori web app. The secret card and the approval cards appear there. Only the account owner can approve a card.
  • A MailCheap newsletter with a draft campaign that is ready to send. Note the exact subject of the draft.
  • A MailCheap full access API key. Create it on MailCheap's API keys page.
  • The MailCheap MCP endpoint, https://mailcheap.ai/mcp. It takes the key in this header: Authorization: Bearer <key>.

What prompt should you give Plori?

This is the message that the owner sent. To send your own issue, replace the newsletter name, the newsletter slug, and the subject. Keep these parts:

  • the secure secret request
  • the order of the steps
  • the request to state the subject and the contact count before the send
  • the last line
plori prompt
Send the first issue of our newsletter, Plori Engineering, which runs on MailCheap.
1. Connect the MailCheap MCP server at https://mailcheap.ai/mcp. It uses an API key sent as the header "Authorization: Bearer <key>". Ask me for the key with a secure secret request; do not ask me to paste it in chat.
2. With list_newsletters, confirm the newsletter "plori-engineering" exists. With get_campaign, read the draft campaign with the subject "Firecracker hosts: $179 a month on Vultr, $300 on AWS, $474 on Azure". Do not change its content, subject or preview text.
3. Send a test email of that campaign with send_test_email.
4. Then send the campaign to the newsletter's contacts with send_campaign. Before you call it, tell me the subject and how many contacts it goes to.
5. Reply with what you did: the campaign id, its status after sending, the test email result, and the recipient count.
Do not create, edit or delete any other campaign, contact, domain, key or newsletter setting.

Why does the prompt name each tool?

The prompt names the MailCheap tool for each step. You can compare each approval card with the prompt. The test email comes before the send. Before the agent calls send_campaign, it must state the subject and the contact count. You can check both before you approve. The last line forbids changes to any other campaign, contact, domain, key, or newsletter setting.

How does the agent connect MailCheap?

The agent connects the server in three steps. The owner acts in two of them.

  1. The agent registers the server with its mcp_register tool.
  2. The agent asks for the key with a secure secret request. A secret card appears in the Plori web app. The owner pastes the MailCheap key into the card. The model receives only {set: true}. It never sees the key.
  3. The agent probes the server, and the probe returns ok. The agent then asks to enable the server. Plori shows an approval card with this question: "Enable this MCP server for this agent? Its tools become callable by the agent, authenticated with the stored credential." The owner approves the card in the web app.

After the approval, the agent can use the tools of the server. MailCheap exposes 44 tools. When a server has five or more tools, Plori lists them through tool_search.

What did the real run do?

After the connection, the agent used four MailCheap tools in this order:

Step MailCheap tool Approval
Check that the newsletter exists list_newsletters None. Read-only tool.
Read the draft campaign get_campaign None. Read-only tool.
Send a test email send_test_email The owner approved the card.
Send the campaign to the contacts send_campaign The owner approved the card.

For send_test_email, Plori paused and showed an approval card that named the tool and its arguments. The owner approved the card. MailCheap sent the test email to the address of the MailCheap account owner at 14:45:13 UTC.

The agent then told the owner the subject and that the campaign goes to 1 contact. It called send_campaign. Plori paused again, and the owner approved the card. MailCheap reported the status sent at 14:45:56 UTC.

The agent's reply stated these results:

  • The newsletter exists.
  • The subject of the campaign.
  • MailCheap sent the test email and recorded testSentAt.
  • The campaign status is sent.
  • The campaign had 1 recipient. MailCheap sent and delivered 1 email, and 0 failed.

MailCheap's statistics for the campaign after the send were: recipients 1, sent 1, delivered 1, opened 1, clicked 1, bounced 0, complained 0. The archive page of the issue went live on the newsletter's public site, plori-engineering.mailcheap.ai. The whole flow cost less than $0.10 in Plori credits.

The run proves one path. A Plori agent connected MailCheap with an API key and sent a draft issue that already existed. Plori paused each write until the owner approved it. The limits below list what the run does not prove.

What did the owner approve?

The owner approved three times: to enable the server, to send the test email, and to send the campaign. The two reads, list_newsletters and get_campaign, ran without approval.

Approval cards are owner-only. The model that calls the tools cannot approve them. Plori pauses a write to an external system until the owner approves it or a standing approval covers it.

How do you check the send before you approve it?

  1. Read the approval card for send_test_email. Check the tool name and the arguments.
  2. Approve the card. send_test_email sends only to the address of the MailCheap account owner.
  3. Open the test email. Read it.
  4. Wait for the agent to state the subject and the contact count.
  5. Do not approve send_campaign until the subject and the contact count are correct.
  6. Read the approval card for send_campaign. Approve it.
  7. Check the reply. The campaign status must be sent. The failed count must be 0.
  8. Open the archive page of the newsletter. Look for the issue.

A campaign that is already sending or sent returns a conflict error. This comes from MailCheap's own description of send_campaign. A retry therefore does not send the campaign twice.

What are the limits?

  • The list had one contact, the owner. The run did not test delivery at scale, bounces, or complaints. The counts of 0 bounced and 0 complained come from one delivery. The counts of 1 opened and 1 clicked also come from that one contact.
  • The run used only MailCheap's API-key connection. Plori registers a remote MCP server with a header secret. The run did not use MailCheap's OAuth sign-in for ChatGPT-style connectors.
  • The agent did not write the issue. It read a draft that already existed. The run does not show how well an agent drafts an issue.
  • The agent sent the issue at once. The run did not use schedule_campaign.
  • The MailCheap key has full access. The last line of the prompt and the approval cards are the controls on what the agent changes in MailCheap.

Common questions about sending a newsletter with an AI agent

Can an AI agent send a newsletter issue? Yes, for an issue that already exists as a draft. In this run, a Plori agent connected the MailCheap MCP server, sent a test email, and sent the campaign to the 1 contact on the list. The owner approved the test email and the send. The agent did not write the issue.

Does the agent see the MailCheap API key? No. The owner pastes the key into a secure secret card in the Plori web app. The model receives only {set: true}. Plori authenticates the calls to the server with the stored credential.

Can the agent send the campaign without my approval? No. Plori pauses before a write to an external system until the account owner approves it, on the card or through a standing approval the owner set earlier. The model that calls the tools cannot approve. In this run, the read-only tools list_newsletters and get_campaign ran without approval. send_test_email and send_campaign waited for the owner.

Which MailCheap tools did the run use? list_newsletters, get_campaign, send_test_email, and send_campaign. MailCheap exposes 44 tools. Plori lists the tools of a server through tool_search when the server has five or more.

Can the agent schedule an issue instead of sending it at once? MailCheap has a schedule_campaign tool. This run did not use it, so this guide has no evidence for scheduling.

What did the run cost? The whole flow cost less than $0.10 in Plori credits. See what a credit buys for how Plori bills.

Build it in plori

Open a Plori agent and paste the prompt. Add the MailCheap key only in the secret card, never in chat.

Review the prompt before sending.

Read the Workspaces guide