SlickText MCP by usefulapi
Read SlickText contacts, lists, campaigns, analytics and inbox; create and update contacts.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- HIGH
- LOWslicktext_list_segment_contacts에서
- INFOslicktext_find_contact에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"slicktext": {
"url": "https://slicktext.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://slicktext.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (24)
🟢slicktext_get_brand
Get the SlickText brand this API key belongs to: brand_id, name, website, sending-number registration details, opt-in / double-opt-in messages, inbox settings and the message credit limit. Every other tool works within this brand. GET /brands.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_credit_usage
Message credits for the current billing period: total_credits (subscription + rollover + purchased), credits_used, credits_available and the credit limit. GET /brands/{brand_id}/usage.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_contacts(opt_in_status, first_name, last_name, custom_fields, limit, ...)
List the brand's contacts (subscribers) with name, mobile_number, email, opt_in_status, source, custom_fields and dates. Filters are exact, case-sensitive matches (SlickText has no partial search). Paged: returns count, has_more and next_offset. GET /brands/{brand_id}/contacts.
입력 스키마
{
"type": "object",
"properties": {
"opt_in_status": {
"description": "Only contacts with this opt-in status.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
},
"first_name": {
"description": "Exact first name (case-sensitive).",
"type": "string",
"maxLength": 255
},
"last_name": {
"description": "Exact last name (case-sensitive).",
"type": "string",
"maxLength": 255
},
"custom_fields": {
"description": "Exact-match filters on custom fields, keyed by internal_name (see slicktext_list_custom_fields), e.g. {\"favorite_color\": \"blue\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_find_contact(mobile_number, email, limit, offset)
Find contacts by mobile number or email address (exact match). A 10-digit US number is matched as +1XXXXXXXXXX, the way SlickText stores numbers. Use it before creating a contact to avoid duplicates. GET /brands/{brand_id}/contacts?mobile_number=… or ?email=….
입력 스키마
{
"type": "object",
"properties": {
"mobile_number": {
"description": "Mobile number, e.g. +16155553338 or (615) 555-3338.",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"email": {
"description": "Exact email address (case-sensitive, as stored).",
"type": "string",
"minLength": 3,
"maxLength": 254
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_contact(contact_id)
Get one contact by id: name, mobile_number, email, birthdate, address, opt_in_status, source, custom_fields, time zone and dates. GET /brands/{brand_id}/contacts/{id}.
입력 스키마
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (a positive integer)."
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_custom_fields(limit, offset)
List the brand's contact custom fields: name, internal_name (the key used in contact filters and writes), data_type and description. GET /brands/{brand_id}/custom-fields.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_lists(name, limit, offset)
List the brand's contact lists (contact_list_id, name, description, created). Optional exact name filter. GET /brands/{brand_id}/lists.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"description": "Exact list name (case-sensitive).",
"type": "string",
"maxLength": 255
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_list(list_id)
Get one contact list by id plus its contact count (all statuses: subscribed, not subscribed, unsubscribed, blocked). GET /brands/{brand_id}/lists/{id} and /lists/{id}/contacts/count.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact list id (a positive integer)."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_list_contacts(list_id, opt_in_status, limit, offset)
List the contacts in one contact list (paged). GET /brands/{brand_id}/lists/{id}/contacts.
입력 스키마
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact list id (a positive integer)."
},
"opt_in_status": {
"description": "Only contacts with this opt-in status.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_segments(limit, offset)
List the brand's segments (rule-based contact groups: segment_id, name, description). GET /brands/{brand_id}/segments.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_segment_contacts(segment_id, limit, offset)
List the contacts that currently match one segment (paged). GET /brands/{brand_id}/segments/{id}/contacts.
입력 스키마
{
"type": "object",
"properties": {
"segment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The segment id (a positive integer)."
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"segment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_campaigns(status, limit, offset)
List the brand's SMS/MMS campaigns: name, body, status (e.g. draft, scheduled, queued, sent), scheduled/started/finished times, completion_percentage and audience (lists/segments and size). GET /brands/{brand_id}/campaigns.
입력 스키마
{
"type": "object",
"properties": {
"status": {
"description": "Exact status, e.g. \"sent\", \"scheduled\", \"draft\".",
"type": "string",
"maxLength": 32
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_campaign(campaign_id)
Get one campaign by id: body, media_url, status, audience_size, schedule and completion. GET /brands/{brand_id}/campaigns/{id}.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The campaign id (a positive integer)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_campaign_stats(campaign_id, group)
Performance of one campaign: contacts reached, clicks, click_rate, unique clicks, unsubscribes, unsubscribe_rate, orders, revenue, average order value, revenue per message, plus the campaign, its audiences and links. GET /brands/{brand_id}/analytics/campaigns/{id}.
입력 스키마
{
"type": "object",
"properties": {
"campaign_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The campaign id (a positive integer)."
},
"group": {
"description": "Group the results by source.",
"type": "string",
"enum": [
"source"
]
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_analytics(metric, group, start, end, frequency, ...)
Brand-level analytics. metric: contacts (current totals), contact_growth, contact_add_delete_events, opt_in_status_events, campaigns, messages (messages sent), message_credits, inbox_users (assignments, closures, response times per user), inbox_tags. Optional group (allowed per metric — contacts: source|opt_in_status; contact_growth/campaigns: contact_source; contact_add_delete_events: contact_source|type; opt_in_status_events: contact_source|contact_unsubscribe_source|opt_in_status; messages: source|status|direction|weekday; message_credits: source|status), a start/end range, frequency (hour/day/month/year) and compare (YoY, QoQ, MoM, WoW, DoD, PoP). GET /brands/{brand_id}/analytics/….
입력 스키마
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"enum": [
"contacts",
"contact_growth",
"contact_add_delete_events",
"opt_in_status_events",
"campaigns",
"messages",
"message_credits",
"inbox_users",
"inbox_tags"
],
"description": "Which analytics report."
},
"group": {
"description": "Group results by this field (allowed values depend on metric; see description).",
"type": "string",
"maxLength": 64
},
"start": {
"description": "Range start, YYYY-MM-DD or YYYY-MM-DD HH:MM[:SS] (SlickText's format, no time zone (passed through as is)).",
"type": "string",
"maxLength": 32
},
"end": {
"description": "Range end, YYYY-MM-DD (= end of that day) or YYYY-MM-DD HH:MM[:SS] (SlickText's format, no time zone (passed through as is)).",
"type": "string",
"maxLength": 32
},
"frequency": {
"description": "Bucket size of the time series.",
"type": "string",
"enum": [
"hour",
"day",
"month",
"year"
]
},
"compare": {
"description": "Compare with the previous period.",
"type": "string",
"enum": [
"YoY",
"QoQ",
"MoM",
"WoW",
"DoD",
"PoP"
]
}
},
"required": [
"metric"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_keywords(active, limit, offset)
List the brand's text-to-join keywords (word, description, active, auto-response and opt-in messages, double opt-in). GET /brands/{brand_id}/keywords.
입력 스키마
{
"type": "object",
"properties": {
"active": {
"description": "true = only active keywords, false = only inactive.",
"type": "boolean"
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_keyword(keyword_id)
Get one keyword by id, including the contact_list_ids that people who text it are added to. GET /brands/{brand_id}/keywords/{id}.
입력 스키마
{
"type": "object",
"properties": {
"keyword_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The keyword id (a positive integer)."
}
},
"required": [
"keyword_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_messages(direction, status, source, source_id, to, ...)
List individual SMS/MMS messages sent and received by the brand: to, from, body, direction, source (Campaign, Keyword, InboxThread, API …), status (delivered, undelivered …), credits and the contact. Filters are exact matches; use to/from with a phone number to read one contact's history, or source=InboxThread with source_id = a conversation id. GET /brands/{brand_id}/messages.
입력 스키마
{
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"incoming",
"outgoing"
]
},
"status": {
"description": "Exact status, e.g. \"delivered\", \"undelivered\".",
"type": "string",
"maxLength": 32
},
"source": {
"description": "Exact source, e.g. \"Campaign\", \"Keyword\", \"InboxThread\", \"API\".",
"type": "string",
"maxLength": 32
},
"source_id": {
"description": "Id of the source (a campaign id, a conversation id …).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$"
},
"to": {
"description": "Recipient number (outgoing messages: the contact; incoming: your number).",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"from": {
"description": "Sender number (incoming messages: the contact; outgoing: your number).",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_conversations(status, assigned_to_user_id, limit, offset)
List two-way inbox conversations: status (open, pending, closed), the contact, the last message and its direction/time, assigned user, tags and unread state. GET /brands/{brand_id}/inbox-threads.
입력 스키마
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"open",
"pending",
"closed"
]
},
"assigned_to_user_id": {
"description": "Only conversations assigned to this user id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_conversation(conversation_id)
Get the content of one inbox conversation by its id (the _id from slicktext_list_conversations). For the message-by-message history also call slicktext_list_messages with source=InboxThread and source_id=<conversation id>. GET /brands/{brand_id}/inbox-threads/{id}/content.
입력 스키마
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{1,64}$",
"description": "The conversation _id, e.g. 6744a2ba587c8f2cf4028786."
}
},
"required": [
"conversation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_inbox_tags(limit, offset)
List the inbox tags used to label conversations (inbox_tag_id, name, color, description). GET /brands/{brand_id}/inbox-tags.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴slicktext_create_contact(mobile_number, first_name, last_name, email, birthdate, ...)
WRITE: add a contact to the brand. By default the contact is created as 'not subscribed' and gets no text. Set opt_in_status='subscribed' ONLY for people who gave explicit permission to receive texts (SlickText has a zero-tolerance policy for unsolicited texts). force_double_opt_in=true makes SlickText SEND A REAL SMS to the number asking the person to confirm. Check slicktext_find_contact first to avoid duplicates. WARNING: SlickText workflows can trigger on this event (Contact Created / Contact Field Changed / Contact Added to List) and may immediately SEND REAL TEXTS or take other actions configured in the brand's workflows. POST /brands/{brand_id}/contacts.
입력 스키마
{
"type": "object",
"properties": {
"mobile_number": {
"type": "string",
"minLength": 7,
"maxLength": 32,
"description": "Mobile number (required), e.g. +16155553338 or (615) 555-3338."
},
"first_name": {
"type": "string",
"maxLength": 255
},
"last_name": {
"type": "string",
"maxLength": 255
},
"email": {
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"birthdate": {
"description": "Birthday, YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"address": {
"type": "string",
"maxLength": 255
},
"city": {
"type": "string",
"maxLength": 255
},
"state": {
"type": "string",
"maxLength": 64
},
"zip": {
"type": "string",
"maxLength": 16
},
"country": {
"type": "string",
"maxLength": 64
},
"timezone": {
"description": "Contact time zone (SlickText accepts these four).",
"type": "string",
"enum": [
"America/New_York",
"America/Chicago",
"America/Denver",
"America/Los_Angeles"
]
},
"language": {
"description": "Primary language code, e.g. \"en\".",
"type": "string",
"maxLength": 16
},
"custom_fields": {
"description": "Custom field values keyed by the field's internal_name (see slicktext_list_custom_fields), e.g. {\"favorite_color\": \"blue\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"opt_in_status": {
"description": "Default 'not subscribed'. 'subscribed' only with the person's explicit consent.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
},
"force_double_opt_in": {
"description": "true = SlickText texts the number a double opt-in confirmation (a real SMS).",
"type": "boolean"
}
},
"required": [
"mobile_number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴slicktext_update_contact(contact_id, mobile_number, first_name, last_name, email, ...)
WRITE: change fields of an existing contact (only the fields you pass are sent). opt_in_status can mark a contact unsubscribed or blocked; set it to 'subscribed' ONLY when the person explicitly agreed to receive texts. WARNING: SlickText workflows can trigger on this event (Contact Created / Contact Field Changed / Contact Added to List) and may immediately SEND REAL TEXTS or take other actions configured in the brand's workflows. PUT /brands/{brand_id}/contacts/{id}.
입력 스키마
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (a positive integer)."
},
"mobile_number": {
"description": "New mobile number.",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"first_name": {
"type": "string",
"maxLength": 255
},
"last_name": {
"type": "string",
"maxLength": 255
},
"email": {
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"birthdate": {
"description": "Birthday, YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"address": {
"type": "string",
"maxLength": 255
},
"city": {
"type": "string",
"maxLength": 255
},
"state": {
"type": "string",
"maxLength": 64
},
"zip": {
"type": "string",
"maxLength": 16
},
"country": {
"type": "string",
"maxLength": 64
},
"timezone": {
"description": "Contact time zone (SlickText accepts these four).",
"type": "string",
"enum": [
"America/New_York",
"America/Chicago",
"America/Denver",
"America/Los_Angeles"
]
},
"language": {
"description": "Primary language code, e.g. \"en\".",
"type": "string",
"maxLength": 16
},
"custom_fields": {
"description": "Custom field values keyed by the field's internal_name (see slicktext_list_custom_fields), e.g. {\"favorite_color\": \"blue\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"opt_in_status": {
"description": "New opt-in status. 'subscribed' only with the person's explicit consent.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴slicktext_add_contact_to_lists(contact_id, list_ids)
WRITE: add one contact to one or more contact lists (it does not change the contact's opt-in status; lists are also campaign audiences). Returns SlickText's count of memberships added. WARNING: SlickText workflows can trigger on this event (Contact Created / Contact Field Changed / Contact Added to List) and may immediately SEND REAL TEXTS or take other actions configured in the brand's workflows. POST /brands/{brand_id}/lists/contacts.
입력 스키마
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (a positive integer)."
},
"list_ids": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "Contact list ids (from slicktext_list_lists)."
}
},
"required": [
"contact_id",
"list_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거