Send transactional and one-to-one emails to contacts through the GHL MCP server. This tool supports HTML content, file attachments, CC/BCC recipients, and full conversation threading. Emails are sent via POST /conversations/messages with the type set to Email, and you can retrieve email details with GET /messages/email/{id}.
Prerequisites
Before sending your first email, confirm the following:
- A GoHighLevel sub-account with email sending configured (SMTP or Mailgun integration active)
- A verified sender email address in your location settings
- A Private Integration Token (PIT) with the
conversationsscope enabled - The contact ID of the recipient
- Your email content ready in plain text or HTML format
Navigate to Settings > Email Services in GHL to verify your email provider is connected and your sending domain has proper SPF, DKIM, and DMARC records.
Set Up Authentication
Create a PIT from Settings > Integrations > Private Integrations in your sub-account. Click Create New, name it something like “MCP Email Sender,” and enable the conversations scope. Copy the token immediately since it is only shown once.
Include these headers on every request: Authorization: Bearer YOUR_PIT_TOKEN, Content-Type: application/json, and Version: 2021-07-28. Your MCP client configuration should store the token as an environment variable rather than hardcoding it.
Make Your First Call
Send an email using POST /conversations/messages with the following body:
type— set to"Email"contactId— the recipient contact’s GHL IDmessage— the email body (supports HTML for rich formatting)subject— the email subject lineemailFrom— your verified sender email addressemailCc— optional array of CC email addressesemailBcc— optional array of BCC email addressesattachments— optional array of file URLs to attach
For HTML emails, include your full markup in the message field. Keep images hosted externally and reference them with <img> tags rather than embedding base64 data.
To retrieve full email details after sending, call GET /messages/email/{id} using the message ID from the send response. This returns the complete email record including delivery status and thread context.
Handle the Response
A successful send returns a JSON object with the messageId, delivery status, and conversation details. The status field indicates whether the email was accepted for delivery.
If the call fails, check for common issues: an unverified sender address, a missing subject field, or an invalid contactId. The error response includes a descriptive message to help you diagnose the problem.
Emails sent through MCP appear in the contact’s conversation timeline in the GHL inbox. They are threaded with previous email exchanges, so the contact’s full communication history stays unified.
Test Your Setup
Send a test email to a contact whose email address you can access. Verify these items:
- The email arrives in the recipient’s inbox (check spam folders)
- The sender name and address match your configuration
- HTML formatting renders correctly if you used markup
- The email appears in the Conversations tab in GHL
- CC/BCC recipients receive their copies if included
- Retrieve the email via
GET /messages/email/{id}to confirm the full record is stored
Check the full Email Send guide for advanced patterns like templated HTML, dynamic merge fields, and error handling. For managing the conversation thread itself, see Conversation CRUD.