Manage Loops contacts, mailing lists, and transactional/event emails.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates a contact in Loops (additive). Loops API: POST /v1/contacts/create.
Contact email address (required).
Source label for where the contact came from.
Your app's user id for this contact.
Last name.
First name.
User group segment name.
Arbitrary custom contact properties (string/number/boolean); merged into the request body.
Whether the contact is subscribed to email.
Map of mailing-list id -> subscribed boolean.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Creates a contact in Loops (additive). Loops API: POST /v1/contacts/create.
| Argument | Type | Description |
|---|---|---|
| email* | string | Contact email address (required). |
| source | string | Source label for where the contact came from. |
| userId | string | Your app's user id for this contact. |
| lastName | string | Last name. |
| firstName | string | First name. |
| userGroup | string | User group segment name. |
| properties | object | Arbitrary custom contact properties (string/number/boolean); merged into the request body. |
| subscribed | boolean | Whether the contact is subscribed to email. |
| mailingLists | object | Map of mailing-list id -> subscribed boolean. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Contact email address (required)."
},
"source": {
"type": "string",
"description": "Source label for where the contact came from."
},
"userId": {
"type": "string",
"description": "Your app's user id for this contact."
},
"lastName": {
"type": "string",
"description": "Last name."
},
"firstName": {
"type": "string",
"description": "First name."
},
"userGroup": {
"type": "string",
"description": "User group segment name."
},
"properties": {
"type": "object",
"description": "Arbitrary custom contact properties (string/number/boolean); merged into the request body.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"subscribed": {
"type": "boolean",
"description": "Whether the contact is subscribed to email."
},
"mailingLists": {
"type": "object",
"description": "Map of mailing-list id -> subscribed boolean.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "boolean"
}
}
}
}Creates a custom contact property/field (additive schema change). Loops API: POST /v1/contacts/properties.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name of the custom property to create (required). |
| type* | string | Data type of the property (required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"type"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the custom property to create (required)."
},
"type": {
"enum": [
"string",
"number",
"boolean",
"date"
],
"type": "string",
"description": "Data type of the property (required)."
}
}
}Deletes a contact from Loops. Destructive. Supply email OR userId. Loops API: POST /v1/contacts/delete.
| Argument | Type | Description |
|---|---|---|
| string | Email of the contact to delete. | |
| userId | string | userId of the contact to delete. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"email": {
"type": "string",
"description": "Email of the contact to delete."
},
"userId": {
"type": "string",
"description": "userId of the contact to delete."
}
}
}Find a contact by email or userId (supply at least one). Loops API: GET /v1/contacts/find.
| Argument | Type | Description |
|---|---|---|
| string | Contact email address to look up. | |
| userId | string | Contact userId to look up (your app's user id). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"email": {
"type": "string",
"description": "Contact email address to look up."
},
"userId": {
"type": "string",
"description": "Contact userId to look up (your app's user id)."
}
}
}List contact fields / custom properties defined in Loops. Loops API: GET /v1/contacts/properties.
| Argument | Type | Description |
|---|---|---|
| list | string | Which properties to return: all (default) or custom only. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"list": {
"enum": [
"all",
"custom"
],
"type": "string",
"description": "Which properties to return: all (default) or custom only."
}
}
}List all mailing lists in the Loops account (id + name). Loops API: GET /v1/lists.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Sends an event to Loops for a contact — TRIGGERS any automations/loops subscribed to this event. Loops API: POST /v1/events/send.
| Argument | Type | Description |
|---|---|---|
| string | Contact email (supply email or userId). | |
| userId | string | Contact userId (supply email or userId). |
| eventName* | string | The event name to send (required). |
| mailingLists | object | Map of mailing-list id -> subscribed boolean. |
| eventProperties | object | Properties attached to this event. |
| contactProperties | object | Contact properties to update alongside the event. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"eventName"
],
"properties": {
"email": {
"type": "string",
"description": "Contact email (supply email or userId)."
},
"userId": {
"type": "string",
"description": "Contact userId (supply email or userId)."
},
"eventName": {
"type": "string",
"description": "The event name to send (required)."
},
"mailingLists": {
"type": "object",
"description": "Map of mailing-list id -> subscribed boolean.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "boolean"
}
},
"eventProperties": {
"type": "object",
"description": "Properties attached to this event.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"contactProperties": {
"type": "object",
"description": "Contact properties to update alongside the event.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
}
}
}SENDS a real transactional email via a Loops template. This dispatches an actual email to the recipient. Loops API: POST /v1/transactional.
| Argument | Type | Description |
|---|---|---|
| email* | string | Recipient email address (required). |
| attachments | array | Optional attachments: array of { filename, contentType, data } objects. |
| addToAudience | boolean | Whether to add the recipient to your audience. |
| dataVariables | object | Template data variables (string/number) to interpolate into the template. |
| transactionalId* | string | The Loops transactional template id (required). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"transactionalId",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Recipient email address (required)."
},
"attachments": {
"type": "array",
"items": {},
"description": "Optional attachments: array of { filename, contentType, data } objects."
},
"addToAudience": {
"type": "boolean",
"description": "Whether to add the recipient to your audience."
},
"dataVariables": {
"type": "object",
"description": "Template data variables (string/number) to interpolate into the template.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number"
]
}
},
"transactionalId": {
"type": "string",
"description": "The Loops transactional template id (required)."
}
}
}Verify the configured Loops API key and return the team name — a good first call. Loops API: GET /v1/api-key.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Updates (or creates) a contact by email/userId. Upserts — creates the contact if not found. Loops API: PUT /v1/contacts/update.
| Argument | Type | Description |
|---|---|---|
| email* | string | Contact email address (required; identifies the contact). |
| source | string | Source label. |
| userId | string | Your app's user id (alternative identifier). |
| lastName | string | Last name. |
| firstName | string | First name. |
| userGroup | string | User group segment name. |
| properties | object | Arbitrary custom contact properties (string/number/boolean); merged into the request body. |
| subscribed | boolean | Whether the contact is subscribed to email. |
| mailingLists | object | Map of mailing-list id -> subscribed boolean. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Contact email address (required; identifies the contact)."
},
"source": {
"type": "string",
"description": "Source label."
},
"userId": {
"type": "string",
"description": "Your app's user id (alternative identifier)."
},
"lastName": {
"type": "string",
"description": "Last name."
},
"firstName": {
"type": "string",
"description": "First name."
},
"userGroup": {
"type": "string",
"description": "User group segment name."
},
"properties": {
"type": "object",
"description": "Arbitrary custom contact properties (string/number/boolean); merged into the request body.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"subscribed": {
"type": "boolean",
"description": "Whether the contact is subscribed to email."
},
"mailingLists": {
"type": "object",
"description": "Map of mailing-list id -> subscribed boolean.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "boolean"
}
}
}
}