Sarbacane MCP by usefulapi
Read Sarbacane campaigns, stats, lists and blacklists; manage contacts and draft email campaigns.
사용해야 할까요
품질 및 안전성
발견 사항 (4)
- LOWsarbacane_list_blacklist_entries에서
- LOWsarbacane_list_campaign_recipients에서
- LOWsarbacane_create_email_campaign에서
- LOWsarbacane_import_campaign_template에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"sarbacane": {
"url": "https://sarbacane.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://sarbacane.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (19)
🟢sarbacane_get_credits
The account's remaining credits per type (email campaigns, SMS, eye tracking, Sendkit emails) with expiry date and subscription type. GET /v1/credits.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_users(search, offset, limit)
Users and pending invitations of the Sarbacane account (name, email, role, team). GET /v1/users.
입력 스키마
{
"type": "object",
"properties": {
"search": {
"description": "Filter users by name or email.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_lists(offset, limit)
All contact lists of the account, with their ids. Use the ids for contacts, fields and campaigns. GET /v1/lists.
입력 스키마
{
"type": "object",
"properties": {
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_list_fields(list_id)
The custom fields (columns) of a contact list: id, caption and type (STRING, BOOL, INT, DATE). Field ids are the keys used when writing contacts. GET /v1/lists/{listId}/fields.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Contact list id (sarbacane_list_lists)."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_contacts(list_id, email, phone, search, modified_after, ...)
Contacts of one list (personal data: email, phone, custom fields). Filter by email, phone, a text search across fields, or the modification date. GET /v1/lists/{listId}/contacts.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Contact list id."
},
"email": {
"description": "Only the contact with this email.",
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"phone": {
"description": "Only the contact with this phone number.",
"type": "string",
"minLength": 5,
"maxLength": 30,
"pattern": "^\\+?[0-9 ().-]{5,30}$"
},
"search": {
"description": "Text to look for in the contact's fields.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"modified_after": {
"description": "Only contacts modified at or after this time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"modified_before": {
"description": "Only contacts modified at or before this time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡sarbacane_create_contact(list_id, email, phone, fields)
WRITE: add a contact to a contact list. Give an email, a phone number or both, and optional custom field values. Adds a new record; use sarbacane_upsert_contact to update an existing contact. POST /v1/lists/{listId}/contacts.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Contact list id."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"phone": {
"type": "string",
"minLength": 5,
"maxLength": 30,
"pattern": "^\\+?[0-9 ().-]{5,30}$"
},
"fields": {
"description": "Custom field values as { <custom field id>: value }. Get the ids from sarbacane_list_list_fields.",
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sarbacane_upsert_contact(list_id, email, phone, fields)
WRITE: add a contact to a list, or update it when the same email/phone pair already exists (custom field values are overwritten). POST /v1/lists/{listId}/contacts/upsert.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Contact list id."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"phone": {
"type": "string",
"minLength": 5,
"maxLength": 30,
"pattern": "^\\+?[0-9 ().-]{5,30}$"
},
"fields": {
"description": "Custom field values as { <custom field id>: value }. Get the ids from sarbacane_list_list_fields.",
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_blacklists(offset, limit)
All blacklists (suppression lists) of the account, with their ids. GET /v1/blacklists.
입력 스키마
{
"type": "object",
"properties": {
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_blacklist_entries(blacklist_id, kind, email, phone, modified_after, ...)
Entries of a blacklist by kind: bounces (invalid addresses), unsubscribers or complaints (personal data: email, phone). Filter by email, phone or modification date. GET /v1/blacklists/{blacklistId}/{bounces|unsubscribers|complaints}.
입력 스키마
{
"type": "object",
"properties": {
"blacklist_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Blacklist id (sarbacane_list_blacklists)."
},
"kind": {
"type": "string",
"enum": [
"bounces",
"unsubscribers",
"complaints"
],
"description": "Which entries: bounces, unsubscribers or complaints."
},
"email": {
"description": "Only this email.",
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"phone": {
"description": "Only this phone number.",
"type": "string",
"minLength": 5,
"maxLength": 30,
"pattern": "^\\+?[0-9 ().-]{5,30}$"
},
"modified_after": {
"description": "Only entries modified at or after this time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"modified_before": {
"description": "Only entries modified at or before this time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"required": [
"blacklist_id",
"kind"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡sarbacane_add_unsubscriber(blacklist_id, email, phone)
WRITE: record an email and/or phone as unsubscribed in a blacklist, so campaigns using that blacklist skip it. Cannot be undone with these tools. POST /v1/blacklists/{blacklistId}/unsubscribers.
입력 스키마
{
"type": "object",
"properties": {
"blacklist_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Blacklist id."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$"
},
"phone": {
"type": "string",
"minLength": 5,
"maxLength": 30,
"pattern": "^\\+?[0-9 ().-]{5,30}$"
}
},
"required": [
"blacklist_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_campaigns(state, search, offset, limit)
Campaigns of the account (id, name, kind, created/edited, recipient count). Filter by state or a text in the name or subject. GET /v1/campaigns.
입력 스키마
{
"type": "object",
"properties": {
"state": {
"description": "Only campaigns in this state.",
"type": "string",
"enum": [
"DRAFT",
"FINISH",
"ROUTING",
"MODERATION"
]
},
"search": {
"description": "Text in the campaign name or subject.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_get_campaign(campaign_id)
One campaign: state, kind, blacklists, send ids, sent date. The send id is needed to see content. GET /v1/campaigns/{campaignId}.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Campaign id."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_get_campaign_report(campaign_id)
Statistics of a campaign per send: delivered count, opens, openers, clicks, clickers, unsubscribers, devices and operating systems. GET /v1/reports/{campaignId}.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Campaign id."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_campaign_recipients(campaign_id, offset, limit)
Recipients attached to a campaign (personal data: email, phone). GET /v1/campaigns/{campaignId}/recipients.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Campaign id."
},
"offset": {
"description": "Starting position, from 0 (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"limit": {
"description": "Maximum items returned, 1-1000 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sarbacane_list_webhooks
Webhook subscriptions of the account: url, display name and subscribed event kinds. GET /v1/webhooks.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡sarbacane_create_email_campaign(name, email_from, alias_from, email_reply_to, alias_reply_to, ...)
WRITE: create a new email campaign as a DRAFT. It is never sent by these tools: add content (sarbacane_set_campaign_content or sarbacane_import_campaign_template) and a contact list (sarbacane_set_campaign_list), then send it from Sarbacane. POST /v1/campaigns/email.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Campaign name (internal)."
},
"email_from": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"description": "Sender email address (must be a sender allowed on the account)."
},
"alias_from": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Sender name."
},
"email_reply_to": {
"type": "string",
"minLength": 3,
"maxLength": 320,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"description": "Reply-to email address."
},
"alias_reply_to": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Reply-to name."
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Email subject."
},
"preheader": {
"description": "Preheader text.",
"type": "string",
"maxLength": 500
}
},
"required": [
"name",
"email_from",
"alias_from",
"email_reply_to",
"alias_reply_to",
"subject"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sarbacane_set_campaign_content(campaign_id, send_id, html, text)
WRITE: set the HTML (and optional plain-text) content of an email campaign's send, replacing what was there. Without send_id the campaign's only send is used (an A/B test campaign has several: pass one). POST /v1/campaigns/{campaignId}/send/{sendId}/content.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Campaign id."
},
"send_id": {
"description": "Send id from sarbacane_get_campaign (campaign.sends). Optional when the campaign has one send.",
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$"
},
"html": {
"type": "string",
"minLength": 1,
"maxLength": 1000000,
"description": "The HTML body of the email."
},
"text": {
"description": "Plain-text alternative.",
"type": "string",
"maxLength": 200000
}
},
"required": [
"campaign_id",
"html"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sarbacane_import_campaign_template(campaign_id, template_id)
WRITE: load a saved template's content into an email campaign, replacing its content. POST /v1/campaigns/{campaignId}/content.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Campaign id."
},
"template_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Template id (from Sarbacane)."
}
},
"required": [
"campaign_id",
"template_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sarbacane_set_campaign_list(campaign_id, list_id)
WRITE: import a contact list's contacts as the recipients of a campaign. It does not send the campaign. POST /v1/campaigns/{campaignId}/list.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Campaign id."
},
"list_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Contact list id (sarbacane_list_lists)."
}
},
"required": [
"campaign_id",
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거