Read Laposta lists, members, campaigns and reports; add members and build campaigns.
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.
WRITE: add one email address to a mailing list (subscribe). On a double opt-in list Laposta sends the confirmation email to that address. The address must have given consent. With upsert, an existing active member's fields are overwritten; an unsubscribed member is re-activated unless suppress_reactivation is set.
IP address the signup came from (required by Laposta; use the signup source's address, or your own server's if it was entered by staff).
The list id (from laposta_list_lists).
Overwrite the fields if the address is already an active member (default false: error).
URL the signup came from.
Custom field values keyed by the field's custom_name (the variable name shown by laposta_list_fields). Multi-choice fields take an array of option values.
With upsert: do not re-activate an unsubscribed member.
Do not send the list's signup notification email.
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.
WRITE: add one email address to a mailing list (subscribe). On a double opt-in list Laposta sends the confirmation email to that address. The address must have given consent. With upsert, an existing active member's fields are overwritten; an unsubscribed member is re-activated unless suppress_reactivation is set.
| Argument | Type | Description |
|---|---|---|
| ip* | string | IP address the signup came from (required by Laposta; use the signup source's address, or your own server's if it was entered by staff). |
| email* | string | |
| upsert | boolean | Overwrite the fields if the address is already an active member (default false: error). |
| list_id* | string | The list id (from laposta_list_lists). |
| source_url | string | URL the signup came from. |
| custom_fields | object | Custom field values keyed by the field's custom_name (the variable name shown by laposta_list_fields). Multi-choice fields take an array of option values. |
| suppress_reactivation | boolean | With upsert: do not re-activate an unsubscribed member. |
| suppress_email_notification | boolean | Do not send the list's signup notification email. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"email",
"ip"
],
"properties": {
"ip": {
"type": "string",
"pattern": "^[0-9a-fA-F:.]+$",
"maxLength": 45,
"minLength": 3,
"description": "IP address the signup came from (required by Laposta; use the signup source's address, or your own server's if it was entered by staff)."
},
"email": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+$",
"maxLength": 320,
"minLength": 3
},
"upsert": {
"type": "boolean",
"description": "Overwrite the fields if the address is already an active member (default false: error)."
},
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
},
"source_url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "URL the signup came from."
},
"custom_fields": {
"type": "object",
"description": "Custom field values keyed by the field's custom_name (the variable name shown by laposta_list_fields). Multi-choice fields take an array of option values.",
"propertyNames": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 100
}
]
}
},
"suppress_reactivation": {
"type": "boolean",
"description": "With upsert: do not re-activate an unsubscribed member."
},
"suppress_email_notification": {
"type": "boolean",
"description": "Do not send the list's signup notification email."
}
}
}WRITE: create a new regular campaign (a draft: it is NOT filled, scheduled or sent). Fill it with laposta_set_campaign_content, check it with laposta_send_test_email and send it in the Laposta app. The from_email must be an approved sender address of the account.
| Argument | Type | Description |
|---|---|---|
| name* | string | Internal campaign name. |
| subject* | string | Subject line. |
| list_ids* | array | Recipients: list ids and optionally segment ids. |
| reply_to | string | Reply-to address. |
| from_name* | string | Sender name. |
| from_email* | string | Sender email address (must be an approved sender in Laposta). |
| previewtext | string | Preview text (max 120 characters). |
| google_analytics | boolean | Link Google Analytics tracking. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"subject",
"from_name",
"from_email",
"list_ids"
],
"properties": {
"name": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Internal campaign name."
},
"subject": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Subject line."
},
"list_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Laposta id (a short alphanumeric string, e.g. BaImMu3JZA)."
},
"maxItems": 50,
"minItems": 1,
"description": "Recipients: list ids and optionally segment ids."
},
"reply_to": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+$",
"maxLength": 320,
"minLength": 3,
"description": "Reply-to address."
},
"from_name": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Sender name."
},
"from_email": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+$",
"maxLength": 320,
"minLength": 3,
"description": "Sender email address (must be an approved sender in Laposta)."
},
"previewtext": {
"type": "string",
"maxLength": 120,
"description": "Preview text (max 120 characters)."
},
"google_analytics": {
"type": "boolean",
"description": "Link Google Analytics tracking."
}
}
}Get one campaign: name, subject, preview text, sender, reply-to, recipients, delivery moments and web version URL.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | The campaign id (from laposta_list_campaigns). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The campaign id (from laposta_list_campaigns)."
}
}
}Get the plain-text content of a campaign (and its import_url if it was imported). Set include_html to also get the full HTML (large).
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | The campaign id (from laposta_list_campaigns). |
| include_html | boolean | Also return the HTML body (default false). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The campaign id (from laposta_list_campaigns)."
},
"include_html": {
"type": "boolean",
"description": "Also return the HTML body (default false)."
}
}
}Recipient events of one campaign (delivered, opened, clicked, bounced, unsubscribed ...), newest first by default, optionally within a date range. Paged by cursor. For totals use laposta_get_report.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor). |
| order | string | Sort by event date (default desc). |
| cursor | string | Cursor: pass the previous reply's next_cursor unchanged, with the same filters. |
| campaign_id* | string | The campaign id (from laposta_list_campaigns). |
| event_date_to | string | Events before this moment, exclusive. |
| event_date_from | string | Events from this moment, inclusive. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor)."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort by event date (default desc)."
},
"cursor": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Cursor: pass the previous reply's next_cursor unchanged, with the same filters."
},
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The campaign id (from laposta_list_campaigns)."
},
"event_date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "Events before this moment, exclusive."
},
"event_date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "Events from this moment, inclusive."
}
}
}Get one mailing list: name, state, notification addresses and member counts.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | The list id (from laposta_list_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
}
}
}Get one member of a list by member id or email address: state, signup/confirm dates and custom field values.
| Argument | Type | Description |
|---|---|---|
| member* | string | The member id OR the member's email address. |
| list_id* | string | The list id (from laposta_list_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"member"
],
"properties": {
"member": {
"type": "string",
"maxLength": 320,
"minLength": 1,
"description": "The member id OR the member's email address."
},
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
}
}
}The event history of one member (subscribed, confirmed, opened, clicked, bounced, unsubscribed, automations ...), newest first by default. Optionally limited to one campaign or a date range. Paged by cursor.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor). |
| order | string | Sort by event date (default desc). |
| cursor | string | Cursor: pass the previous reply's next_cursor unchanged, with the same filters. |
| member* | string | The member id OR the member's email address. |
| list_id* | string | The list id (from laposta_list_lists). |
| campaign_id | string | Only events of this campaign. |
| event_date_to | string | Events before this moment, exclusive. |
| event_date_from | string | Events from this moment, inclusive. |
Result figures of one campaign: sent, accepted, unique opens and clicks, bounces, complaints, unsubscribes and their ratios.
| Argument | Type | Description |
|---|---|---|
| campaign_id* | string | The campaign id (from laposta_list_campaigns). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The campaign id (from laposta_list_campaigns)."
}
}
}List the account's campaigns (name, subject, sender, recipient lists, delivery moments). Use limit/offset to page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items to return (default 100, max 500). |
| offset | integer | Items to skip (default 0). Pass the previous reply's next_offset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Items to return (default 100, max 500)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (default 0). Pass the previous reply's next_offset."
}
}
}List the custom fields of a mailing list (name, custom_name used as the key in custom_fields, datatype, required, options). Call this before adding or updating a member.
| Argument | Type | Description |
|---|---|---|
| list_id* | string | The list id (from laposta_list_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
}
}
}List all mailing lists of the Laposta account with member counts (active, unsubscribed, cleaned). Use the list_id in the other tools.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the members (subscribers) of a mailing list, one page at a time. Filter by state, free-text search (email and field values) or label. Contains personal data: only fetch what the task needs.
| Argument | Type | Description |
|---|---|---|
| label | string | Only members with this label (by name). |
| limit | integer | Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor). |
| order | string | Sort direction for order_by (default asc). |
| state | string | Only members in this state (default: all). |
| cursor | string | Cursor: pass the previous reply's next_cursor unchanged, with the same filters. |
| search | string | Only members containing this text in the email or any text/number/choice field. |
| list_id* | string | The list id (from laposta_list_lists). |
| order_by | string | email, signup_date, or a text field's custom_name (comma-separated for several). |
Result figures of all campaigns: sent, accepted, opened, clicked, bounced, unsubscribed, with ratios. Use limit/offset to page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Items to return (default 100, max 500). |
| offset | integer | Items to skip (default 0). Pass the previous reply's next_offset. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Items to return (default 100, max 500)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Items to skip (default 0). Pass the previous reply's next_offset."
}
}
}List the segments of a mailing list (a segment id can be a campaign recipient together with its list).
| Argument | Type | Description |
|---|---|---|
| list_id* | string | The list id (from laposta_list_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
}
}
}WRITE: send a test copy of a campaign (it must have content and not be sent yet) to ONE email address. Does not send the campaign to its recipients.
| Argument | Type | Description |
|---|---|---|
| email* | string | Where to send the test. |
| campaign_id* | string | The campaign id (from laposta_list_campaigns). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id",
"email"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+$",
"maxLength": 320,
"minLength": 3,
"description": "Where to send the test."
},
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The campaign id (from laposta_list_campaigns)."
}
}
}WRITE: replace a campaign's content with your HTML, or let Laposta import it from a URL (html wins if both are given). Does not send anything. The reply's report lists problems Laposta found (javascript, missing unsubscribe link, missing images).
| Argument | Type | Description |
|---|---|---|
| html | string | The complete HTML of the email. |
| import_url | string | A public URL Laposta fetches the HTML from. |
| inline_css | boolean | Inline the CSS. |
| campaign_id* | string | The campaign id (from laposta_list_campaigns). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"campaign_id"
],
"properties": {
"html": {
"type": "string",
"maxLength": 2000000,
"minLength": 1,
"description": "The complete HTML of the email."
},
"import_url": {
"type": "string",
"format": "uri",
"maxLength": 2000,
"description": "A public URL Laposta fetches the HTML from."
},
"inline_css": {
"type": "boolean",
"description": "Inline the CSS."
},
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The campaign id (from laposta_list_campaigns)."
}
}
}WRITE: change a member's custom field values and/or email address, or unsubscribe the member (state: unsubscribed). Only the fields you pass change. Re-subscribing a person is not offered here: do it in the Laposta app or with laposta_add_member upsert only when they asked for it.
| Argument | Type | Description |
|---|---|---|
| string | A new email address for this member. | |
| state | string | Set to unsubscribed to unsubscribe the member. |
| member* | string | The member id OR the member's email address. |
| list_id* | string | The list id (from laposta_list_lists). |
| custom_fields | object | Custom field values keyed by the field's custom_name (the variable name shown by laposta_list_fields). Multi-choice fields take an array of option values. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"member"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+$",
"maxLength": 320,
"minLength": 3,
"description": "A new email address for this member."
},
"state": {
"type": "string",
"const": "unsubscribed",
"description": "Set to unsubscribed to unsubscribe the member."
},
"member": {
"type": "string",
"maxLength": 320,
"minLength": 1,
"description": "The member id OR the member's email address."
},
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
},
"custom_fields": {
"type": "object",
"description": "Custom field values keyed by the field's custom_name (the variable name shown by laposta_list_fields). Multi-choice fields take an array of option values.",
"propertyNames": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 500
},
"maxItems": 100
}
]
}
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id",
"member"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor)."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort by event date (default desc)."
},
"cursor": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Cursor: pass the previous reply's next_cursor unchanged, with the same filters."
},
"member": {
"type": "string",
"maxLength": 320,
"minLength": 1,
"description": "The member id OR the member's email address."
},
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
},
"campaign_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Only events of this campaign."
},
"event_date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "Events before this moment, exclusive."
},
"event_date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "Events from this moment, inclusive."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"list_id"
],
"properties": {
"label": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Only members with this label (by name)."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor)."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction for order_by (default asc)."
},
"state": {
"enum": [
"active",
"unsubscribed",
"cleaned"
],
"type": "string",
"description": "Only members in this state (default: all)."
},
"cursor": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Cursor: pass the previous reply's next_cursor unchanged, with the same filters."
},
"search": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Only members containing this text in the email or any text/number/choice field."
},
"list_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The list id (from laposta_list_lists)."
},
"order_by": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "email, signup_date, or a text field's custom_name (comma-separated for several)."
}
}
}