# Mailshake MCP connector

The Mailshake connector brings your campaigns, recipients, leads and reply activity to Claude, ChatGPT, Cursor and the Elaichi Agent, so your team can ask about outreach and act on it inside their own Mailshake access.

Source: https://elaichi.ai/connectors/mailshake/

## Facts

| | |
| --- | --- |
| Application | Mailshake |
| Category | Marketing Automation |
| AI tools | 32 |
| Authentication | Connects with an API key |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 32 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Mailshake is connected

- Which recipients replied to the partners campaign this week?
- Add these 40 contacts to the Q3 outbound campaign
- Show lead status changes since Monday by owner

## Connect Mailshake in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Mailshake.
2. Optionally set Share with, then press Connect.
3. Paste a Mailshake API key. One person generates a token in Mailshake and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Mailshake tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Mailshake to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Mailshake to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Mailshake to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Mailshake to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Mailshake tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Mailshake through Elaichi

### See who replied before the standup

Sales. Ask which recipients replied to a campaign overnight, read the replies together, and decide who gets a call first.

### Add a new list to a campaign

Outbound. Hand over a batch of names and email addresses and have them added to the right Mailshake campaign, then confirm they all went in.

### Pause a recipient who booked a meeting

Sales. When a prospect books time, pause or unsubscribe them so the next follow-up never lands in their inbox.

### Compare campaigns on opens and clicks

Marketing. Pull sends, opens and clicks across every active campaign and see which subject lines and sequences are earning attention this month.

### Track lead status changes for the week

Revenue operations. List the leads created, who they were assigned to, and every status change since Monday, ready for the pipeline review.

### Pause a campaign before the holiday

Sales leadership. Pause a whole campaign in Mailshake ahead of a quiet week, then unpause it when the team is back, without opening the app.

## Frequently asked questions

### How do I connect Mailshake to Claude?

Connect Mailshake in Elaichi by pasting the API key from your Mailshake account, then add the Elaichi endpoint https://api.elaichi.ai/mcp in Claude under Customize, then Connectors, then Add. There is no OAuth application to register and no client ID or secret to generate. Once Claude is connected, your Mailshake campaigns, recipients and leads are available to it.

### Does Mailshake work with ChatGPT and Cursor as well as Claude?

Yes. Once Mailshake is connected in Elaichi, the same endpoint https://api.elaichi.ai/mcp works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Mailshake once and every client picks it up.

### What can an AI agent actually do with my Mailshake data?

An agent can list your Mailshake campaigns, create a new one, pause or unpause a campaign, and add recipients to it. It can also read who was sent to, who opened, clicked or replied, and follow leads as they are created, assigned and change status. Short concrete asks such as "replies on the Q3 partners campaign this week" work better than long paragraphs.

### Does connecting Mailshake give the AI every campaign in the account?

The AI can only see what the Mailshake account behind the connected API key can see, and each person signs in to Elaichi as themselves, so the audit log names them. Elaichi can narrow that further by team, for example read only, or no campaign changes. It never widens access beyond what Mailshake already allows.

### Can my team share one Mailshake connection?

Yes. One person connects Mailshake with the API key and shares the connection with a team in Elaichi, and nobody else ever handles the key. Each teammate still signs in as themselves, so every campaign change and every recipient added is logged under the person who did it.

### Can I stop an agent from deleting or changing things in Mailshake?

Yes. Restrictions in Elaichi apply per action, so you can allow reading Mailshake campaigns, replies and leads while blocking creating campaigns, pausing them, or adding and unsubscribing recipients. A blocked action is never shown to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

### What happens to a Mailshake connection when someone leaves?

Offboarding a person in Elaichi ends their access to the Mailshake connection at once, in every client they used. A shared Mailshake connection keeps working for everyone else on the team. If you disconnect Mailshake in Elaichi, it is removed from Claude, ChatGPT, Cursor and every other client in one step.

## All 32 Mailshake tools

Every tool below is callable through https://api.elaichi.ai/mcp once Mailshake is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Mailshake me** (List). Get information about the current authenticated Mailshake user via the /me endpoint, which also serves as an authentication test. Returns: object, id, teamID, teamName, isTeamAdmin, isDisabled, emailAddress, fullName, first, last, teamBlockedDate.
- **List all Mailshake campaigns** (List). List all Mailshake campaigns for a team. Returns each campaign with id, title, created, isArchived, isPaused, messages, sender, and url. An optional search filter narrows results by campaign title.
- **Get single Mailshake campaign by ID** (Get). Get a single Mailshake campaign by campaignID, including its full message sequence. Returns the campaign object with id, title, created, isArchived, isPaused, messages, sender, and url. Required: campaignID. A not_found error is returned if the campaign could not be found.
- **Create a Mailshake campaign** (Create). Create a new campaign in Mailshake. The campaign cannot be sent until the user completes the setup wizard in Mailshake's UI, but recipients can be added immediately. Returns the created campaign object including id, title, created, isArchived, isPaused, messages, sender, and url.
- **Mailshake campaigns pause** (Pause). Pause all sending for a Mailshake campaign immediately. Emails in a batch currently being sent will not be stopped. Returns the campaign object including id, title, isPaused, isArchived, messages, and sender. Required: campaignID.
- **Mailshake campaigns unpause** (Action). Resume sending for a paused Mailshake campaign. The team's sending calendar reschedules itself to account for this campaign's pending emails. Returns the campaign object including id, title, isPaused, isArchived, messages, and sender. Required: campaignID.
- **Mailshake campaigns export** (Export). Start an asynchronous CSV export of one or more Mailshake campaigns. Returns: isEmpty, checkStatusID, code, error, time. Required: campaignIDs, exportType. timezone defaults to UTC.
- **Mailshake campaigns export status** (Export). Check the status of an asynchronous Mailshake campaign export. Returns: isFinished, csvDownloadUrl, code, error, time. When isFinished is true, csvDownloadUrl provides the downloadable CSV file. Required: statusID.
- **Mailshake recipients add** (Add). Add new recipients to a Mailshake campaign using listOfEmails, addresses, or csvData. Returns: code, error, time. Required: campaignID. Each campaign can hold up to 5,000 recipients; at least one of listOfEmails, addresses, or csvData must be provided.
- **Mailshake recipients add status** (Add). Check the status of an asynchronous recipient import in Mailshake. Returns: isFinished, problems, code, error, time. Required: statusID.
- **List all Mailshake recipients** (List). List recipients in a Mailshake campaign with optional search and activity-based filters. Returns: object, id, emailAddress, fullName, first, last, created, isPaused, contactID, fields. Required: campaignID.
- **Get single Mailshake recipient by ID** (Get). Get a single Mailshake recipient's basic information by recipient ID or campaign and email address. Returns: object, id, emailAddress, fullName, first, last, created, isPaused, contactID, fields, code, error, time. Required: recipientID, or campaignID and emailAddress. A not_found error is returned if the recipient could not be found.
- **Mailshake recipients pause** (Pause). Pause all sending for a single Mailshake recipient in a campaign. Returns the updated Recipient object including id, emailAddress, fullName, isPaused, created, and fields. Required: campaignID, emailAddress.
- **Mailshake recipients unpause** (Action). Resume sending for a paused Mailshake recipient in a campaign. Returns the recipient object including id, emailAddress, fullName, isPaused, created, and fields. Required: campaignID, emailAddress. It may take up to 5 minutes for the sending calendar to reflect the change.
- **Mailshake recipients unsubscribe** (Action). Unsubscribe a list of email addresses from Mailshake campaigns by adding them to your team's unsubscribe list. Returns an empty 204 response on success. Required: emailAddresses.
- **Mailshake activity sent** (Action). List the most recently sent emails in Mailshake, including campaign sequence messages and one-off Lead Catcher replies. Returns paginated SentMessage objects with id, actionDate, recipient, campaign, type, subject, and body. Max 25 per page.
- **Mailshake activity opens** (Action). List recently opened emails in Mailshake. Returns paginated Open models including id, actionDate, isDuplicate, recipient, campaign, and parent. Up to 100 results per page.
- **Mailshake activity clicks** (Action). List the most recent link clicks in Mailshake campaigns. Returns paginated Click objects including id, link, actionDate, isDuplicate, contactID, recipient, campaign, and parent message. Max 100 per page.
- **Mailshake activity replies** (Action). List recent replies to your sent emails in Mailshake, including bounces, out-of-office, and unsubscribe replies. Returns paginated Reply models with id, type, subject, body, recipient, campaign, and parent message. Max 25 per page.
- **Mailshake activity created leads** (Action). List the most recently created leads in Mailshake. Leads are usually created automatically by the rules configured in Lead Catcher, though users can also turn recipients into leads manually. Returns paginated Lead models with id, created, status, recipient, campaign and assignedTo. Filter with campaignID, recipientEmailAddress, assignedToEmailAddress, assignedToUserID or since.
- **Mailshake activity lead assignments** (Action). List the most recently assigned leads in Mailshake. Leads are assigned by members of your team assigning them manually. Returns paginated Lead models with id, created, assignedOnDate, assignedTo, status, recipient and campaign. Filter with campaignID, recipientEmailAddress, assignedToEmailAddress, assignedToUserID or since.
- **Mailshake activity lead status changes** (Action). List the most recently updated leads in Mailshake. A lead can be opened, closed, ignored or reopened; a reopened lead shows open as its status, having previously been ignored or closed. Returns paginated Lead models with id, status, lastStatusChangeDate, recipient, campaign and assignedTo. Filter with campaignID, recipientEmailAddress, assignedToEmailAddress, assignedToUserID or since.
- **List all Mailshake leads** (List). List Mailshake leads with optional filtering by campaign, status, assignee, or search term. Returns paginated Lead objects including id, status, created, openedDate, recipient, campaign, and assignedTo.
- **Get single Mailshake lead by ID** (Get). Get a single Mailshake lead. Returns the full Lead object including id, status, created, openedDate, recipient, campaign, and assignedTo. Specify one of leadID, recipientID, or emailAddress with campaignID.
- **Create a Mailshake lead** (Create). Create new Mailshake leads from existing campaign recipients by specifying recipientIDs, emailAddresses, or both. Returns a CreatedLeads object including leads, emailsNotFound, invalidEmails, recipientIDsNotFound, and isEmpty. Costs 25 quota units.
- **Mailshake leads close** (Close). Close a Mailshake lead by marking it as 'closed' or 'lost'. Returns an empty response on success. Costs 5 quota units. Defaults to 'closed' status.
- **Mailshake leads ignore** (Action). Ignore a Mailshake lead to mark it as not worth pursuing. Returns a LeadStatus object including status and leadID. Costs 5 quota units.
- **Mailshake leads reopen** (Action). Reopen a closed or ignored Mailshake lead, making it open again and available for review. Returns: status, leadID, code, error, time. Costs 5 quota units.
- **Mailshake team list members** (List). List all members of a Mailshake team. Returns paginated User models including id, emailAddress, fullName, isTeamAdmin, teamName, and teamBlockedDate.
- **List all Mailshake senders** (List). List all of a team's senders available for campaigns in Mailshake. Returns paginated Sender models including object, id, emailAddress, fromName, and created. No required parameters.
- **Create a Mailshake push** (Create). Create a push/webhook subscription in Mailshake to receive POST notifications for specific events such as clicks, opens, replies, and lead status changes. Returns: targetUrl, resource_url, code, error, time. Required: targetUrl, event. Costs 100 quota units.
- **Delete a Mailshake push by ID** (Delete). Delete a Mailshake push/webhook subscription by its target URL. Unsubscribes a push you previously created; since all subscribed pushes require a unique targetUrl, that is the only parameter needed. Returns an empty 204 response on success. Required: targetUrl.
