Mailcheer
by mailcheer.com · remote · no sign-in to list tools · v1.1.0 · published by com.mailcheer
Email API + newsletters. 17 MCP tools. OAuth 2.1 PKCE or API key. EU-hosted (Hetzner + SES).
19 tools: 5 can delete or cancel things, 6 change things and 8 only read.
Scanned Oct 21, 2026
- Deletes or cancels5Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things6Claude Code: ask: see these tools
- Only reads8Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http mailcheer https://mailcheer.com/api/mcp --header 'Authorization: <your-authorization>'Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
19 tools
Deletes or cancels 5Claude Code: deny
add_suppressionAdds an address to the workspace's suppression list.No findings
Why it is in this group
- The name "add_suppression" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Adds an address to the workspace's suppression list. By default (`manual`), it will receive nothing further, neither campaigns nor individual emails; with `unsubscribe`, only campaigns, automations, and sends carrying `unsubscribe_url` are refused to it. Use when someone requests no further contact outside the unsubscribe link.
Annotations the server declares
- title: Suppress an address
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
erase_subscriberErases a person from the workspace at THEIR request (right to erasure): record, name, fields, proof of consent, tags.No findings
Why it is in this group
- The name "erase_subscriber" says "erase": a word for removing or ending something.
- The description says "IRREVERSIBLE".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Erases a person from the workspace at THEIR request (right to erasure): record, name, fields, proof of consent, tags. Statistics of campaigns already sent do not move; the suppression list is not touched. To stop someone receiving anything, use remove_subscriber — not this one. IRREVERSIBLE: only use it on the explicit request of the person concerned, relayed by the user.
Annotations the server declares
- title: Erase a person (GDPR)
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
remove_subscriberUnsubscribes an address and adds it to the workspace's suppression list: no more campaigns, automations, or sends carrying `unsubscribe_url`.No findings
Why it is in this group
- The name "remove_subscriber" says "remove": a word for removing or ending something.
- The description says "cannot be reversed".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Unsubscribes an address and adds it to the workspace's suppression list: no more campaigns, automations, or sends carrying `unsubscribe_url`. The record is not deleted — that is what prevents the address from coming back on the next file import. This action cannot be reversed via the API: only the person can re-subscribe.
Annotations the server declares
- title: Unsubscribe a subscriber
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
send_campaign⚠[U+FE0F] IRREVERSIBLE.No findings
Why it is in this group
- The name "send_campaign" says "send": a word for sending, and what is sent cannot be taken back.
- The description says "IRREVERSIBLE".
- The input addresses people (input.to): what it sends cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote itContains invisible characters, shown as [U+…] ⚠[U+FE0F] IRREVERSIBLE. Locks the recipient list and triggers sending to ALL active subscribers in the workspace — or, with `to`, only to the requested addresses that are active subscribers (never an unsubscribed or suppressed address). A sent email cannot be recalled. First call preview_campaign_send with the same parameters, then ask the person for explicit confirmation, telling them how many people will receive the message. Messages go out progressively; get_campaign_stats tracks progress.
Annotations the server declares
- title: Send a campaign
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
send_emailSends a single (transactional) email to one or more addresses.No findings
Why it is in this group
- The name "send_email" says "send": a word for sending, and what is sent cannot be taken back.
- The description says "cannot be undone".
- The input addresses people (input.to): what it sends cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Sends a single (transactional) email to one or more addresses. The sender must belong to a verified domain of the workspace — call get_account to see which ones. An address suppressed for a bounce, a complaint or by hand fails the entire call, with its reason. An unsubscribed address still gets an individual email (a reply, an invoice, an appointment); a newsletter or a prospecting email must carry `unsubscribe_url`, and is then refused to an unsubscribed address. At most 50 addresses in all, to, cc and bcc together. Every address (to, cc, bcc) counts against the plan's monthly quota: past it, the call is refused (`quota_exceeded`) with the figures and the reset date — do not retry before that date. The email is sent immediately: this action cannot be undone.
Annotations the server declares
- title: Send an email
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
Changes things 6Claude Code: ask
add_subscriberAdds or updates a subscriber.No findings
Why it is in this group
- The name "add_subscriber" says "add": a word for a change.
Description, as the server wrote it Adds or updates a subscriber. By default the person enters as PENDING and receives a confirmation email: that is double opt-in, and it protects the workspace's sending reputation. `double_opt_in: false` subscribes directly and must only be used when consent was already collected elsewhere — never on your own initiative. A suppressed or unsubscribed address is refused. An address gets at most one confirmation every 2 minutes and 3 per 24 hours: do not retry in a loop, read `confirmation_not_sent_reason` and `confirmation_retry_at` in the response.
Annotations the server declares
- title: Add a subscriber
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
create_campaignCreates a DRAFT.No findings
Why it is in this group
- The name "create_campaign" says "create": a word for a change.
Description, as the server wrote it Creates a DRAFT. Nothing is sent: you then need to call send_campaign, or send it from the Mailcheer workspace. Content is written in plain text in `text` — a blank line separates paragraphs, "#" at the start of a line makes a heading. Always have the draft reviewed before sending.
Annotations the server declares
- title: Create a campaign draft
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
tag_subscriberAdds (`add`) and removes (`remove`) tags on ONE existing subscriber, and nothing else: no subscription, no confirmation email, no status touched.No findings
Why it is in this group
- The description's first verb is "add": a word for a change.
Description, as the server wrote it Adds (`add`) and removes (`remove`) tags on ONE existing subscriber, and nothing else: no subscription, no confirmation email, no status touched. Prefer it to add_subscriber for changing tags: add_subscriber is a subscription and sends the confirmation again to a pending person. An unknown address is not created (404). The response says what really changed (`added`, `removed`).
Annotations the server declares
- title: Add or remove tags
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
update_campaignEdits a DRAFT: name, subject, preheader, kind, sender, content (`text`).No findings
Why it is in this group
- The name "update_campaign" says "update": a word for a change.
Description, as the server wrote it Edits a DRAFT: name, subject, preheader, kind, sender, content (`text`). Nothing is sent. Prefer it to create_campaign to rework a text: otherwise the old draft stays in the list. A scheduled, sending or sent campaign cannot be edited (409).
Annotations the server declares
- title: Edit a campaign draft
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
update_subscriberUpdates the first name (`first_name`), last name (`last_name`) and custom fields (`fields`, by technical key) of an existing subscriber.No findings
Why it is in this group
- The name "update_subscriber" says "update": a word for a change.
Description, as the server wrote it Updates the first name (`first_name`), last name (`last_name`) and custom fields (`fields`, by technical key) of an existing subscriber. The email address cannot be changed: it is the identifier. Tags are managed with `tag_subscriber`. Unknown fields are rejected (400). The response contains the updated record and the `fields` keys that were ignored (`ignored_fields`).
Annotations the server declares
- title: Update a subscriber
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
verify_emailVerifies one or more addresses (up to 100) BEFORE writing to them, without sending anything: syntax, a domain that receives mail, a mailbox that already hard-bounced on Mailcheer, …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Verifies one or more addresses (up to 100) BEFORE writing to them, without sending anything: syntax, a domain that receives mail, a mailbox that already hard-bounced on Mailcheer, disposable or role mailboxes, and DNS signals of a dead mailbox. Each address gets a verdict: `invalid` (writing to it will bounce), `risky` (may bounce, or is not a person), `unknown` (DNS did not answer) or `valid` (nothing known against it — not a proof that the mailbox exists). Use it before prospecting, or before importing a list you did not collect yourself.
Annotations the server declares
- title: Verify email addresses
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 8Claude Code: allow
get_accountReturns the workspace this key grants access to, its scopes, plan, remaining emails this month (queued sends included), when the counter resets, billing status, member and domain l…No findings
Why it is in this group
- The name "get_account" says "get": a word for reading.
Description, as the server wrote it Returns the workspace this key grants access to, its scopes, plan, remaining emails this month (queued sends included), when the counter resets, billing status, member and domain limits, sending domains (verified or not) and registered senders. Call this FIRST: it tells you which address to send from before attempting anything.
Annotations the server declares
- title: Workspace info
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_campaign_statsStatus and figures for a campaign: recipients, sent, delivered, opened, clicked, bounced, complained.No findings
Why it is in this group
- The name "get_campaign_stats" says "get": a word for reading.
Description, as the server wrote it Status and figures for a campaign: recipients, sent, delivered, opened, clicked, bounced, complained. Rates are calculated on delivered messages, not on recipients. Every rate comes twice: open_rate and click_rate include bots (security gateways, preloads), human_open_rate and human_click_rate set them aside — that is the figure to give the person when they ask how many read it.
Annotations the server declares
- title: Campaign statistics
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_emailStatus of an email sent via send_email: sent, delivered, bounced, or complained.No findings
Why it is in this group
- The name "get_email" says "get": a word for reading.
Description, as the server wrote it Status of an email sent via send_email: sent, delivered, bounced, or complained. Amazon's delivery callback arrives a few seconds to a few minutes after sending — a "sent" status right after the call is normal.
Annotations the server declares
- title: Sent email status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_campaignsThe workspace's campaigns, from newest to oldest, with their status: draft, scheduled, sending, or sent.No findings
Why it is in this group
- The name "list_campaigns" says "list": a word for reading.
Description, as the server wrote it The workspace's campaigns, from newest to oldest, with their status: draft, scheduled, sending, or sent.
Annotations the server declares
- title: List campaigns
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_subscribersLists the workspace's subscribers, page by page.No findings
Why it is in this group
- The name "list_subscribers" says "list": a word for reading.
Description, as the server wrote it Lists the workspace's subscribers, page by page. Use `cursor` with the `next_cursor` value from the response to get the next page. `status` filters on subscribed, pending, unsubscribed, bounced, or complained.
Annotations the server declares
- title: List subscribers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_suppressionSuppressed addresses, with their reason: bounced, complained or manually suppressed (nothing goes to them), or unsubscribed (no more campaigns, automations, or sends carrying `unsu…No findings
Why it is in this group
- The name "list_suppression" says "list": a word for reading.
Description, as the server wrote it Suppressed addresses, with their reason: bounced, complained or manually suppressed (nothing goes to them), or unsubscribed (no more campaigns, automations, or sends carrying `unsubscribe_url`, but an individual email still reaches them). The `scope` field tells whether the address is suppressed for this workspace only or for the entire platform. No tool removes an address from this list: that action is done manually in the Mailcheer workspace, because it is the one that can suspend a sending capability.
Annotations the server declares
- title: List suppression entries
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_tagsThe workspace's tags, with how many subscribers carry each one (`subscribers`) and, among them, the active ones (`subscribed`).No findings
Why it is in this group
- The name "list_tags" says "list": a word for reading.
Description, as the server wrote it The workspace's tags, with how many subscribers carry each one (`subscribers`) and, among them, the active ones (`subscribed`). Read this before tagging: reuse an existing name rather than creating a near-duplicate.
Annotations the server declares
- title: List tags
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
preview_campaign_sendRead-only: nothing is sent.No findings
Why it is in this group
- The name "preview_campaign_send" says "preview": a word for reading.
Description, as the server wrote it Read-only: nothing is sent. Returns exactly what send_campaign would do right now — would it go out (and if not, why), and how many people would receive it. With `to`, reports address by address who is kept and who is excluded, with the reason (unsubscribed, bounced, complained, not in the list…). If the monthly quota is not enough, `would_send` is false, `blocked_code` is `quota_exceeded` and `blocked_details` gives the figures and the reset date. Call it BEFORE send_campaign, and give that number to the person when you ask them to confirm.
Annotations the server declares
- title: Preview a campaign send
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http mailcheer https://mailcheer.com/api/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__mailcheer__get_account",
"mcp__mailcheer__list_subscribers",
"mcp__mailcheer__list_tags",
"mcp__mailcheer__list_suppression",
"mcp__mailcheer__list_campaigns",
"mcp__mailcheer__preview_campaign_send",
"mcp__mailcheer__get_campaign_stats",
"mcp__mailcheer__get_email"
],
"ask": [
"mcp__mailcheer__add_subscriber",
"mcp__mailcheer__update_subscriber",
"mcp__mailcheer__tag_subscriber",
"mcp__mailcheer__create_campaign",
"mcp__mailcheer__update_campaign",
"mcp__mailcheer__verify_email"
],
"deny": [
"mcp__mailcheer__send_email",
"mcp__mailcheer__remove_subscriber",
"mcp__mailcheer__erase_subscriber",
"mcp__mailcheer__add_suppression",
"mcp__mailcheer__send_campaign"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as mailcheer. Review it before you use it.