MCP Server

Mailsoftly MCP Server
for Email Marketing & Automation

Connect Claude, ChatGPT, Cursor, or any MCP-compatible client to your Mailsoftly account and work with contacts, lists and campaigns in plain language.

https://app.mailsoftly.com/mcp

What is MCP?

Model Context Protocol (MCP) is an open standard that lets AI assistants connect to external tools and data sources. With Mailsoftly's MCP server, an assistant can read your contacts and lists, prepare campaign drafts, and (only if you allow it) send them.

Two ways to connect

Pick one. Most people want the hosted server; the local server exists for developers who prefer to run the process themselves.

Hosted server (recommended)

Paste one URL into your AI client and sign in with your Mailsoftly account. No install, no API key to copy, no key sitting in a config file. Works with Claude and ChatGPT.

Local server (stdio)

Run the open source Node.js server on your own machine and point Claude Desktop, Cursor or VS Code at it. Authenticates with a Mailsoftly API key.

 Hosted serverLocal server (stdio)
SetupPaste a URL, approve the permissionsClone, build, edit a JSON config
Sign-inOAuth, no key to copyMailsoftly API key
Runs onMailsoftly serversYour machine
Tools16 curated toolsOne tool per live API endpoint
Turn it offSettings > Connected appsDelete the key or the config entry

A. Hosted server

Recommended

The hosted server lives at https://app.mailsoftly.com/mcp. It speaks Streamable HTTP and is authorized with OAuth, so the only thing you ever give your AI client is that URL. Your client registers itself, sends you to Mailsoftly to sign in, and receives a token scoped to exactly the permissions you approved.

Connect from Claude

1

Open Settings > Connectors

In Claude, go to Settings, then Connectors, then Add custom connector.

2

Paste the server URL

Give it the name Mailsoftly and the URL https://app.mailsoftly.com/mcp, then confirm.

3

Sign in and approve

Claude opens Mailsoftly in your browser. Sign in, read the list of permissions the app is asking for, and approve. You land back in Claude with the connector ready.

Connect from ChatGPT

1

Open the connector settings

In ChatGPT, open the settings area where connectors and apps are managed and choose to add one by URL.

2

Paste the same server URL

https://app.mailsoftly.com/mcp. ChatGPT walks the same sign-in and consent flow as Claude.

Any other MCP client that supports remote servers with OAuth works the same way: give it the server URL and let it discover the rest.

A Mailsoftly admin has to approve the connection

Connecting a third-party app is an admin action. If you are not an admin on your company, the consent screen tells you so and asks you to have an admin connect the app instead.

How the connection is set up

You do not have to do any of this by hand, but here is what happens behind the URL:

Permissions

An app has to ask for what it needs, and you see the request in plain language before anything is granted. Nothing is granted by default.

PermissionWhat the app can do with it
contacts:readRead your contacts, lists and tags
contacts:writeCreate and update contacts, lists and tags
campaigns:readRead your campaigns and their status
campaigns:draftCreate and edit campaign drafts. Drafts are never delivered on their own
campaigns:sendSend or schedule campaigns to your contacts. Separate opt-in, see below
suppressions:writeAdd addresses to your suppression list so they stop receiving mail
account:readRead your account and company profile

Sending is a separate opt-in

Sending mail cannot be undone, so approving an app never grants it on its own. When an app asks for campaigns:send, the consent screen shows a separate checkbox that starts unchecked. Leave it off and everything else still works: the app can research, draft and prepare, and you press send yourself.

What the hosted server can do

The hosted server publishes 16 curated tools rather than every API operation, so the assistant picks the right one instead of guessing between near-identical endpoints.

ToolWhat it doesPermission
search_contactsFind contacts by exact email, first name or last namecontacts:read
get_contactRead one contact by id, with an optional detailed viewcontacts:read
create_contactAdd one new person to the accountcontacts:write
update_contactChange fields on an existing contactcontacts:write
create_or_update_contactUpdate a contact by id, or create one when no id is givencontacts:write
create_contact_listCreate a new, empty contact listcontacts:write
add_contact_to_contact_listPut an existing contact into an existing listcontacts:write
list_contact_listsList the account's contact lists with their ids and sizescontacts:read
list_contacts_in_listReturn the contacts that belong to one listcontacts:read
list_tagsList the contact tags defined in the accountcontacts:read
get_custom_fieldsList the custom contact fields this account has definedcontacts:read
list_sendersList the senders a draft can send from, and which one is the defaultaccount:read
draft_campaignWrite an email campaign into the account as a draft. Sends nothingcampaigns:draft
get_campaign_statusReport where a draft stands and whether it is ready to sendcampaigns:read
send_campaignDeliver an existing draft to its recipients. Cannot be undonecampaigns:send
unsubscribe_contactGlobally unsubscribe an email address from every campaignsuppressions:write

Example prompts

"Which of my lists is the biggest, and how many people are on it?"
Uses list_contact_lists
"Add [email protected] to the Webinar list, and create the list if we do not have one"
Uses search_contacts, create_contact, list_contact_lists, create_contact_list, add_contact_to_contact_list
"Draft next week's newsletter for the Customers list and show it to me before anything goes out"
Uses draft_campaign, then get_campaign_status
"Take [email protected] off all our mailings, she asked twice"
Uses unsubscribe_contact

Tokens, and turning access off

B. Local server (stdio)

For developers

The local server is a small open source Node.js process that runs on your machine and talks to the Mailsoftly API with your API key. It builds its tools from the published OpenAPI spec, so it exposes one tool per live endpoint rather than the curated 16. Use it when your client cannot connect to a remote MCP server, or when you want to run everything yourself.

Prerequisites

1

Build the MCP server

The server lives in the Mailsoftly repository under mcp-server/.

Terminal
# Navigate to the MCP server directory
cd mcp-server

# Install dependencies
npm install

# Build the server
npm run build
2

Configure your API key

Create a .env file in the mcp-server/ directory with your Mailsoftly API key.

.env
API_KEY_API_KEY=your-mailsoftly-api-key-here
API_BASE_URL=https://app.mailsoftly.com
3

Connect to Claude Desktop

Add the following to your Claude Desktop configuration file.

Claude Desktop - claude_desktop_config.json
{
  "mcpServers": {
    "mailsoftly": {
      "command": "node",
      "args": ["/path/to/mcp-server/build/index.js"],
      "env": {
        "API_KEY_API_KEY": "your-mailsoftly-api-key",
        "API_BASE_URL": "https://app.mailsoftly.com"
      }
    }
  }
}
4

Connect to Cursor / VS Code

Add the same configuration to your Cursor or VS Code MCP settings.

Cursor - .cursor/mcp.json
{
  "mcpServers": {
    "mailsoftly": {
      "command": "node",
      "args": ["/path/to/mcp-server/build/index.js"],
      "env": {
        "API_KEY_API_KEY": "your-mailsoftly-api-key",
        "API_BASE_URL": "https://app.mailsoftly.com"
      }
    }
  }
}
5

Start using it

Restart your AI tool and ask it to work with your account. Try "List my contact lists" or "Create a new contact".

About API keys

API keys are managed in Settings > API Keys. A new key expires one year after it is created, is stored as a hash so the key itself is visible only once at creation, and records when it was last used, which makes an unused key easy to spot and revoke. Keys created before this change keep working exactly as before, with no expiry.

Direct API access

Both servers sit on top of the same REST API: 26 live endpoints covering contacts, contact lists, tags, custom fields, campaign drafts, sending and unsubscribes. If you would rather call it directly, or wire it into a platform that speaks OpenAPI instead of MCP, everything is documented at API Documentation with a machine-readable spec at app.mailsoftly.com/developers/openapi.json.

Custom GPTs

Use the OpenAPI spec in a custom GPT's actions to work with campaigns and contacts. Spec: /developers/openapi.json

Google Gemini / Vertex AI

Import the OpenAPI spec as a Vertex AI Extension to manage contacts and campaigns from Gemini.

Function calling anywhere

The same spec drives tool use and function calling in any framework that reads OpenAPI.

For direct API calls the key goes in the Authorization header without a Bearer prefix. OAuth access tokens from the hosted server are sent as Authorization: Bearer <token>.

Security

Hosted server. No key is ever pasted into a client. Access is granted by OAuth after a Mailsoftly admin approves it on a consent screen that lists the permissions in plain language, sending is a separate opt-in, access tokens are short-lived, refresh tokens rotate, and every connection can be revoked from Settings > Connected apps. Each tool call is checked against the permissions that were actually granted, and the connected app is recorded on the contact activity it creates, so you can see later which app did what.

Local server. The process runs on your machine and never sends your key anywhere except app.mailsoftly.com. The key sits in your .env file or MCP config, is stored hashed on our side, and expires a year after you create it.

Either way you are talking only to Mailsoftly: there is no third-party relay in between, and the data an assistant can reach is the data of the one account you connected. See our privacy policy for how account data is handled.

Ready to connect your assistant to your email marketing?

Add https://app.mailsoftly.com/mcp in your AI client and approve the permissions. That is the whole setup.

Sign Up for Free View API Documentation Learn about MCP