Laposta MCP by usefulapi
Read Laposta lists, members, campaigns and reports; add members and build campaigns.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"laposta": {
"url": "https://laposta.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://laposta.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (18)
🟢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.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_list(list_id)
Get one mailing list: name, state, notification addresses and member counts.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_list_fields(list_id)
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.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_list_segments(list_id)
List the segments of a mailing list (a segment id can be a campaign recipient together with its list).
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_list_members(list_id, state, search, label, order_by, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
},
"state": {
"description": "Only members in this state (default: all).",
"type": "string",
"enum": [
"active",
"unsubscribed",
"cleaned"
]
},
"search": {
"description": "Only members containing this text in the email or any text/number/choice field.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"label": {
"description": "Only members with this label (by name).",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"order_by": {
"description": "email, signup_date, or a text field's custom_name (comma-separated for several).",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"order": {
"description": "Sort direction for order_by (default asc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"limit": {
"description": "Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor: pass the previous reply's next_cursor unchanged, with the same filters.",
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_member(list_id, member)
Get one member of a list by member id or email address: state, signup/confirm dates and custom field values.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
},
"member": {
"type": "string",
"minLength": 1,
"maxLength": 320,
"description": "The member id OR the member's email address."
}
},
"required": [
"list_id",
"member"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_member_history(list_id, member, campaign_id, event_date_from, event_date_to, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
},
"member": {
"type": "string",
"minLength": 1,
"maxLength": 320,
"description": "The member id OR the member's email address."
},
"campaign_id": {
"description": "Only events of this campaign.",
"type": "string",
"minLength": 1,
"maxLength": 64
},
"event_date_from": {
"description": "Events from this moment, inclusive.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"event_date_to": {
"description": "Events before this moment, exclusive.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"order": {
"description": "Sort by event date (default desc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"limit": {
"description": "Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor: pass the previous reply's next_cursor unchanged, with the same filters.",
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"list_id",
"member"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_list_campaigns(limit, offset)
List the account's campaigns (name, subject, sender, recipient lists, delivery moments). Use limit/offset to page.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Items to return (default 100, max 500).",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"offset": {
"description": "Items to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_campaign(campaign_id)
Get one campaign: name, subject, preview text, sender, reply-to, recipients, delivery moments and web version URL.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The campaign id (from laposta_list_campaigns)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_campaign_content(campaign_id, include_html)
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).
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The campaign id (from laposta_list_campaigns)."
},
"include_html": {
"description": "Also return the HTML body (default false).",
"type": "boolean"
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_campaign_history(campaign_id, event_date_from, event_date_to, order, limit, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The campaign id (from laposta_list_campaigns)."
},
"event_date_from": {
"description": "Events from this moment, inclusive.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"event_date_to": {
"description": "Events before this moment, exclusive.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}([ T]\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"order": {
"description": "Sort by event date (default desc).",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"limit": {
"description": "Items per page (default 25, max 100; a large page can be cut at 50,000 characters and lose its next_cursor).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Cursor: pass the previous reply's next_cursor unchanged, with the same filters.",
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_list_reports(limit, offset)
Result figures of all campaigns: sent, accepted, opened, clicked, bounced, unsubscribed, with ratios. Use limit/offset to page.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Items to return (default 100, max 500).",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"offset": {
"description": "Items to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢laposta_get_report(campaign_id)
Result figures of one campaign: sent, accepted, unique opens and clicks, bounces, complaints, unsubscribes and their ratios.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The campaign id (from laposta_list_campaigns)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴laposta_add_member(list_id, email, ip, source_url, custom_fields, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@]+@[^\\s@]+$"
},
"ip": {
"type": "string",
"minLength": 3,
"maxLength": 45,
"pattern": "^[0-9a-fA-F:.]+$",
"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)."
},
"source_url": {
"description": "URL the signup came from.",
"type": "string",
"maxLength": 2000,
"format": "uri"
},
"custom_fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
}
}
]
},
"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."
},
"upsert": {
"description": "Overwrite the fields if the address is already an active member (default false: error).",
"type": "boolean"
},
"suppress_reactivation": {
"description": "With upsert: do not re-activate an unsubscribed member.",
"type": "boolean"
},
"suppress_email_notification": {
"description": "Do not send the list's signup notification email.",
"type": "boolean"
}
},
"required": [
"list_id",
"email",
"ip"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴laposta_update_member(list_id, member, email, state, custom_fields)
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.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The list id (from laposta_list_lists)."
},
"member": {
"type": "string",
"minLength": 1,
"maxLength": 320,
"description": "The member id OR the member's email address."
},
"email": {
"description": "A new email address for this member.",
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@]+@[^\\s@]+$"
},
"state": {
"description": "Set to unsubscribed to unsubscribe the member.",
"type": "string",
"const": "unsubscribed"
},
"custom_fields": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 5000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 500
}
}
]
},
"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."
}
},
"required": [
"list_id",
"member"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡laposta_create_campaign(name, subject, from_name, from_email, list_ids, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Internal campaign name."
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Subject line."
},
"from_name": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Sender name."
},
"from_email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@]+@[^\\s@]+$",
"description": "Sender email address (must be an approved sender in Laposta)."
},
"list_ids": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Laposta id (a short alphanumeric string, e.g. BaImMu3JZA)."
},
"description": "Recipients: list ids and optionally segment ids."
},
"reply_to": {
"description": "Reply-to address.",
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@]+@[^\\s@]+$"
},
"previewtext": {
"description": "Preview text (max 120 characters).",
"type": "string",
"maxLength": 120
},
"google_analytics": {
"description": "Link Google Analytics tracking.",
"type": "boolean"
}
},
"required": [
"name",
"subject",
"from_name",
"from_email",
"list_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴laposta_set_campaign_content(campaign_id, html, import_url, inline_css)
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).
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The campaign id (from laposta_list_campaigns)."
},
"html": {
"description": "The complete HTML of the email.",
"type": "string",
"minLength": 1,
"maxLength": 2000000
},
"import_url": {
"description": "A public URL Laposta fetches the HTML from.",
"type": "string",
"maxLength": 2000,
"format": "uri"
},
"inline_css": {
"description": "Inline the CSS.",
"type": "boolean"
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡laposta_send_test_email(campaign_id, email)
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.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The campaign id (from laposta_list_campaigns)."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@]+@[^\\s@]+$",
"description": "Where to send the test."
}
},
"required": [
"campaign_id",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거