APRESMAIL API & MCP
MCP server
Connect ApresMail's MCP server to ChatGPT, Claude, Grok Bot, Claude Code, Codex or Cursor, and see every tool your AI agent can use.
Added to the help center: November 5, 2026
On this page
ChatGPT, Claude and Grok Bot connect to https://mail.apresly.com/mcp: you sign in to ApresMail and allow them, no key to copy. Claude Code, Codex and Cursor use a scoped API key. Each sees only tools allowed by its grant, with the same inputs, checks and errors as the REST API.
For audience v2, use Subscriber tools for the one person profile and separate newsletter subscriptions. Contact tools remain compatibility aliases for a newsletter subscription ID; legacy Recipient tools serve v1 accounts and return conflict on v2. A group has one newsletter parent, and neither membership nor CSV import grants consent. The CSV preview is read-only. For the current import workflow, see Importing contacts.
Choose agent permissions
Create a key on the API keys page. Content read/write is the default; sending and subscriber data stay unchecked. Keys expire after 7, 30 or 90 days. OAuth connections select a subset of the permissions the app requests.
- Read content: Read drafts, newsletter content and aggregate results.
- Create and edit content: Work on drafts and media. Pause or cancel campaigns.
- Send messages and run automations: Send tests, approve or schedule campaigns, resume sequences and enable sending flows.
- Read subscriber data: Read people, contact exports, memberships and individual activity.
- Manage subscribers: Change subscribers, imports and memberships. Operations returning personal data also need read access.
- Manage settings and publication: Manage newsletter settings, sending domains, forms and archives. Live sending settings also need send access.
Send permission also covers tests, scheduling, sequence publication/resumption, live group joins and signup-form publication. Changes to newsletter or sender settings need both settings and send permission. An app requesting only legacy full access must reconnect with granular scopes or use a scoped key.
Connector URL
https://mail.apresly.com/mcp
ChatGPT
- Go to Plugins (chatgpt.com/plugins), click + and pick Add custom MCP server.
- Name it ApresMail, enter https://mail.apresly.com/mcp as the server URL and pick OAuth, with no client ID or secret. If ChatGPT asks how to register, pick Client ID Metadata Document.
- Check I understand and want to continue, then click Create as a plugin.
- Install the plugin, sign in to ApresMail when ChatGPT asks, choose permissions and click Allow.
- In a chat, type @ and pick ApresMail.
Custom MCP servers are on ChatGPT on the web, for Business, Enterprise and Edu workspaces: on Business, admins and owners add them; on Enterprise and Edu, so can the members an admin allows. On Pro, ChatGPT only uses the read-only tools for now.
Claude
- Go to Customize › Connectors and click Add custom connector.
- Name it ApresMail and enter https://mail.apresly.com/mcp. If Claude asks how it identifies itself, keep Use Claude’s published identity. Click Add.
- Click Connect, sign in to ApresMail, choose permissions and click Allow.
- The connector works in claude.ai, Claude Desktop and the mobile apps. Turn it on or off in a chat from + › Connectors.
On Team and Enterprise plans, an owner adds it once in Organization settings › Connectors › Add › Custom › Web, then each member clicks Connect under Customize › Connectors. The Free plan has one custom connector.
Grok Bot
- In a chat, ask Grok Bot to add the custom MCP server https://mail.apresly.com/mcp.
- Sign in to ApresMail when it asks, choose permissions and click Allow.
Claude Code
Terminal
claude mcp add --transport http --scope user apresmail https://mail.apresly.com/mcp \
--header "Authorization: Bearer $APRESMAIL_API_KEY"
The shell puts the key in Claude Code’s settings when the command runs. –scope user makes the server available in every project; run /mcp in Claude Code to check it’s connected.
Codex
~/.codex/config.toml
[mcp_servers.apresmail]
url = "https://mail.apresly.com/mcp"
bearer_token_env_var = "APRESMAIL_API_KEY"
Codex reads the key from APRESMAIL_API_KEY each time it starts, so export it in your shell profile. The same server from the terminal: codex mcp add apresmail –url https://mail.apresly.com/mcp –bearer-token-env-var APRESMAIL_API_KEY
Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"apresmail": {
"url": "https://mail.apresly.com/mcp",
"headers": {
"Authorization": "Bearer ${env:APRESMAIL_API_KEY}"
}
}
}
}
Cursor reads APRESMAIL_API_KEY from the environment it was opened in. If it isn’t set there, put the key itself after Bearer, and keep the file out of version control.
Sends can’t be undone
schedule_campaign, send_campaign, send_campaign_to_more, resume_campaign, approve_campaign_review are marked destructive, and their descriptions ask the assistant to check with you first. Most clients ask before running them. send_test_email sends only to the account owner.
Connected apps
An app gets only the permissions you select, in your account only. Sending and subscriber data are separate. Older full grants stay labeled legacy until you revoke or replace them. The API keys page lists connected apps with when they were last used. Revoke one there and its tokens stop working right away; it has to ask you again to come back.
Tools
A scoped key sees its permitted tools. Some arguments, such as resuming a sequence, require extra permission. Credential management is only available in the dashboard for scoped users. Each tool’s inputs and outputs are in the API reference.
Campaigns
- list_native_campaigns Read-only
- validate_native_countdown Read-only
- list_campaigns Read-only
- get_campaign Read-only
- get_campaign_report Read-only
- create_campaign
- update_campaign Safe to repeat
- delete_campaign Can’t be undone Safe to repeat
- duplicate_campaign
- send_test_email
- schedule_campaign Can’t be undone Safe to repeat
- unschedule_campaign Safe to repeat
- send_campaign Can’t be undone Safe to repeat
- send_campaign_to_more Can’t be undone
- pause_campaign Safe to repeat
- resume_campaign Can’t be undone Safe to repeat
- cancel_campaign Can’t be undone Safe to repeat
- update_campaign_archive Safe to repeat
- preview_campaign_cleanup Read-only
- preview_campaign_audience Read-only
- prepare_campaign_review Safe to repeat
- get_campaign_review Read-only
- list_campaign_review_recipients Read-only
- get_campaign_review_preview Read-only
- approve_campaign_review Can’t be undone Safe to repeat
Overview
- get_overview Read-only
Newsletters
- list_newsletters Read-only
- get_newsletter Read-only
- create_newsletter
- update_newsletter Safe to repeat
- list_themes Read-only
- check_newsletter_slug Read-only
- send_welcome_test_email
SMS
- get_sms_settings Read-only
- list_sms_senders Read-only
- update_newsletter_sms_consent Safe to repeat
- get_subscriber_sms Read-only
- remove_subscriber_sms_phone Can’t be undone Safe to repeat
- withdraw_subscriber_sms Safe to repeat
Contacts
- inspect_import_recipients Read-only
- create_subscriber_import Safe to repeat
- upload_subscriber_import_chunk Safe to repeat
- stage_subscriber_import Safe to repeat
- preview_subscriber_import Safe to repeat
- get_subscriber_import Read-only
- list_subscriber_imports Read-only
- get_subscriber_import_rows Read-only
- approve_subscriber_import Safe to repeat
- apply_subscriber_import Safe to repeat
- cancel_subscriber_import Can’t be undone Safe to repeat
- export_subscriber_import_report Read-only
- list_contacts Read-only
- get_contact Read-only
- add_contact
- update_contact_status Can’t be undone Safe to repeat
- delete_contact Can’t be undone Safe to repeat
- import_contacts Can’t be undone Safe to repeat
- export_contacts Read-only
Subscribers
- list_subscribers Read-only
- get_subscriber Read-only
- list_subscriptions Read-only
- list_subscription_groups Read-only
- list_subscription_events Read-only
- update_subscriber Safe to repeat
- withdraw_subscription Can’t be undone Safe to repeat
- delete_subscription Can’t be undone Safe to repeat
- erase_subscriber Can’t be undone Safe to repeat
Recipients
- list_recipients Read-only
- get_recipient Read-only
Segments
- list_segments Read-only
- get_segment Read-only
- count_segment Read-only
- create_segment
- update_segment Safe to repeat
- delete_segment Can’t be undone Safe to repeat
Sequences
- import_classic_sequence Safe to repeat
- list_sequences Read-only
- get_sequence Read-only
- create_sequence Safe to repeat
- update_sequence Safe to repeat
- preview_sequence Read-only
- publish_sequence Safe to repeat
- sequence_lifecycle Safe to repeat
- list_sequence_participants Read-only
- get_sequence_participant Read-only
- sequence_participant_lifecycle Safe to repeat
Groups
- list_groups Read-only
- get_group Read-only
- create_group
- update_group Safe to repeat
- archive_group Safe to repeat
- list_group_members Read-only
- add_group_member Safe to repeat
- remove_group_member Safe to repeat
Signup forms
- list_forms Read-only
- get_form Read-only
- create_form
- update_form
- publish_form Safe to repeat
- archive_form Safe to repeat
Domains
- list_domains Read-only
- add_domain
- check_domain Safe to repeat
- remove_domain Can’t be undone Safe to repeat
Images
- list_images Read-only
- upload_image
API keys
- list_api_keys Read-only
- create_api_key
- revoke_api_key Can’t be undone Safe to repeat
- list_connected_apps Read-only
- revoke_connected_app Can’t be undone Safe to repeat
Protocol
The server is stateless: no sessions, every request carries a key or a token. It speaks the 2026-07-28 revision and answers clients on the 2025 revisions the same way. /api/mcp is the same server, for clients that want an /api path.
OAuth follows the MCP authorization spec. A request without credentials gets a 401 pointing at /.well-known/oauth-protected-resource/mcp, whose authorization server is https://mail.apresly.com. Apps identify themselves with a client metadata document (Grok Bot, on Cursor’s agents, registers instead), sign the user in with the authorization code flow and PKCE, and get tokens bound to https://mail.apresly.com/mcp with the mailcheap:content:read mailcheap:content:write mailcheap:messages:send mailcheap:audience:read mailcheap:audience:write mailcheap:settings:manage scope. Access tokens last an hour; refresh tokens rotate and keep the connection for 90 days after its last use.