Mailcheer

Manage a Mailcheer email workspace: subscribers, segments, campaigns, transactional sends and stats.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
82%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,008Tokens (tool definitions)
~703 BTypical response size
Moderate attention impact (1.57% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mailcheer": {
      "url": "https://mailcheer.com/api/mcp"
    }
  }
}

Remote endpoints

https://mailcheer.com/api/mcpstreamable-http

What it can do

Tool inventory

Tools (13)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
πŸ”΄send_email(from, to, subject, html, text, ...)

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. A suppressed address fails the entire call, with its reason. The email is sent immediately: this action cannot be undone.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string",
      "description": "Sending address on a verified domain. \"Name <[email protected]>\" format accepted."
    },
    "to": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 50
        }
      ],
      "description": "Recipient, or list of recipients."
    },
    "subject": {
      "type": "string",
      "description": "Message subject."
    },
    "html": {
      "type": "string",
      "description": "HTML body."
    },
    "text": {
      "type": "string",
      "description": "Plain-text body. At least one of html or text is required."
    },
    "replyTo": {
      "type": "string",
      "description": "Reply-to address."
    }
  },
  "required": [
    "from",
    "to",
    "subject"
  ]
}
🟒get_account

Returns the workspace this key grants access to, its scopes, plan, remaining emails this month, sending domains (verified or not) and registered senders. Call this FIRST: it tells you which address to send from before attempting anything.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟒list_subscribers(limit, cursor, status, q)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "1 to 100, 50 by default."
    },
    "cursor": {
      "type": "string",
      "description": "Next-page cursor."
    },
    "status": {
      "type": "string"
    },
    "q": {
      "type": "string",
      "description": "Search by address or name."
    }
  }
}
🟒add_subscriber(email, firstName, lastName, tags, double_opt_in)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "firstName": {
      "type": "string"
    },
    "lastName": {
      "type": "string"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "double_opt_in": {
      "type": "boolean",
      "description": "false = direct subscription without confirmation. Only request this on explicit instruction from the person."
    }
  },
  "required": [
    "email"
  ]
}
πŸ”΄remove_subscriber(email)

Unsubscribes an address and adds it to the workspace's suppression list. 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.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    }
  },
  "required": [
    "email"
  ]
}
🟒list_suppression(limit, cursor, email)

Addresses that will receive nothing more: unsubscribed, bounced, or complained. 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.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number"
    },
    "cursor": {
      "type": "string"
    },
    "email": {
      "type": "string",
      "description": "Look up a specific address."
    }
  }
}
πŸ”΄add_suppression(email, reason)

Adds an address to the workspace's suppression list: it will receive nothing further, neither campaigns nor transactional emails. Use when someone requests no further contact outside the unsubscribe link.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "reason": {
      "type": "string",
      "enum": [
        "unsubscribe",
        "bounce",
        "complaint",
        "manual"
      ]
    }
  },
  "required": [
    "email"
  ]
}
🟒list_campaigns(limit, cursor, status)

The workspace's campaigns, from newest to oldest, with their status: draft, scheduled, sending, or sent.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number"
    },
    "cursor": {
      "type": "string"
    },
    "status": {
      "type": "string"
    }
  }
}
🟒create_campaign(name, subject, text, preheader, from, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Internal name, visible only in the workspace."
    },
    "subject": {
      "type": "string",
      "description": "Subject line seen by recipients."
    },
    "text": {
      "type": "string",
      "description": "Plain-text content."
    },
    "preheader": {
      "type": "string",
      "description": "Preview text shown after the subject in the inbox."
    },
    "from": {
      "type": "string",
      "description": "Address of an already-registered sender. Defaults to the workspace sender."
    },
    "kind": {
      "type": "string",
      "description": "newsletter, offer, announcement… newsletter by default."
    }
  },
  "required": [
    "name"
  ]
}
🟒preview_campaign_send(id, to)

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…). Call it BEFORE send_campaign, and give that number to the person when you ask them to confirm.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Campaign identifier."
    },
    "to": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional. The addresses to restrict the send to. Omitted = the campaign's whole audience."
    }
  },
  "required": [
    "id"
  ]
}
πŸ”΄send_campaign(id, to)

⚠️ 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.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Campaign identifier."
    },
    "to": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional. Restricts the send to these addresses. An empty list sends to nobody (refused); for the whole list, omit the field."
    }
  },
  "required": [
    "id"
  ]
}
🟒get_campaign_stats(id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}
🟒get_email(id)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools