Textmagic
Send SMS and manage contacts.
- Category
- Marketing
- Primary Subcategory
- Email & SMS Lifecycle Marketing Automation
Integration details
Description
Textmagic brings business SMS into your AI assistant. Send and schedule text messages, preview cost and recipients before sending, track delivery, and read incoming replies without leaving the chat. Manage your address book too: search contacts, create and update them, organize lists and tags. Every send is previewed and confirmed before it goes out, and messaging always respects your account balance and permissions. Ideal for appointment reminders, alerts, follow-ups and quick customer replies.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Email & SMS Lifecycle Marketing Automation
- Secondary Subcategories
- None listed
- Brand
- Textmagic
- Access
- Account required
- First tracked
- 2026-08-03
- Tool count
- 28
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Textmagic
Get updates when Textmagic’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Email & SMS Lifecycle Marketing Automation
View Category28 tools agents can invoke
Add one or more existing contacts (by their IDs) to a contact list. Use search_contacts to find contact IDs and search_lists to find the list ID before calling this tool. Contact IDs that do not belong to the current user or are already in the list are silently ignored — the call succeeds as long as at least one contact ID is valid and not already in the list. Returns the list ID and name as confirmation.
add_contacts_to_list
Add one or more tags (by their IDs) to one or more contacts (by their IDs). Use search_tags to find tag IDs and search_contacts to find contact IDs before calling this tool. Tag IDs or contact IDs that do not belong to the current user are silently ignored. Returns the count of tag-contact pairs that were successfully added.
add_tags_to_contacts
Creates a new contact in the Textmagic address book. Use when the user wants to save a new person's details. Provide at least one of: firstName, lastName, phone (E.164), or email — the rest are optional. Only pass fields the user actually gave you. Omit every field you do not have — never invent, guess, or fill placeholder values (e.g. "New", "Contact", "[email protected]", or an empty string) just to populate a field. This is a write operation: it rejects the request if a contact with the same phone or email already exists. Do NOT use to send a message (use send_sms), to change an existing contact (use update_contact), or to add someone to a list/group (use add_contacts_to_list). Returns the created contact's id and core fields.
create_contact
Create a new contact list (group) in the user's Textmagic account. If a list with the same name already exists, a numeric suffix is appended to make the name unique. Returns the created list's id and name. Use add_contacts_to_list to add contacts to the list after creation.
create_list
Build a delivery schedule for a delayed or recurring SMS from a structured recurrence description, and return a reusable scheduleToken plus the computed iCal RRULE. Use this BEFORE preview_sms/send_sms whenever the user wants the message sent later than "now": a single delayed send ("tomorrow at 9am" => frequency "once") or a repeating one ("every Monday", "the last weekday of each month", "yearly on Jan 1"). For an immediate send, do NOT use this tool. All dates/times are interpreted in the user's timezone (the same timezone get_account_info returns). Call get_account_info first if you need to resolve relative phrases like "tomorrow" into a concrete startsOn date and time. Returns: - scheduleToken: pass this to preview_sms and send_sms to attach the schedule to a message. - rrule: the generated iCal RRULE string. - description: a human-readable summary of the recurrence, including the end condition (e.g. "until 20 Sep 2026"). - timezone: the account timezone used. - sendAt: the first send datetime (ISO 8601, account timezone). - previewDates: up to 5 upcoming send datetimes so you can confirm the pattern with the user. - endType: the applied end condition ("never", "afterCount", or "onDate"). Absent for frequency "once". - endDate: the applied last-run date (YYYY-MM-DD), present only when endType = onDate. - endCount: the applied total number of occurrences, present only when endType = afterCount. Always confirm endType/endDate/endCount back to the user — the preview dates alone do NOT reveal whether a requested end date was captured. This tool only computes and caches the schedule; it does NOT send anything. The token expires after 30 minutes. Field dependencies (only the fields relevant to the chosen frequency are used): - once: startsOn, time only. - hourly/daily: optional interval (default 1). - weekly: optional interval + weekdays (at least one). - monthly: optional interval + monthlyMode = dayOfMonth (monthlyDay) | ordinalTarget (monthlyOrdinal + monthlyTarget). - yearly: yearlyMonth + yearlyMode = monthDay (yearlyDay) | ordinalTarget (yearlyOrdinal + yearlyTarget). interval is ignored. - endType = never | afterCount (endCount) | onDate (endDate >= startsOn).
create_recurring_schedule
Create a new tag in the user's Textmagic account. Tag names are trimmed and truncated to 50 characters; duplicates are rejected. Returns the created tag's id and name. Use add_tags_to_contacts to assign the tag to contacts after creation.
create_tag
Returns the current user's account information: timezone, current local time, remaining balance, and currency. Use this tool before scheduling a message (to resolve "now", "tomorrow", or other relative times in the user's timezone), or whenever the user asks about their account timezone, local time, or remaining balance. No input parameters required — always returns the authenticated user's own data.
get_account_info
Returns a deep link into the Textmagic web app for a given action, so the user can continue in the browser. Use this whenever the user asks to do something that has NO dedicated MCP tool, or must be finished in the UI, for example: deleting or merging contacts, lists, tags or segments; rescheduling, resuming or deleting a scheduled SMS; managing unsubscribed or blocked contacts; configuring sender settings, BYOC, 10DLC or toll-free; or managing SMS templates. Also use it to hand the user a link to a specific record they were just working with (a contact, list, segment, scheduled SMS, outbound SMS message, outbound SMS session, or inbound message). Pick the most specific "action". Exactly two call shapes exist, and nothing in between: - a "view_" action — send it together with "entityId", an integer id of that action's own record type; - any other action — send "action" alone and omit "entityId" entirely, it opens a list or settings page. Read the "entityId" field description for which id belongs to which "view_" action; passing an id of the wrong record type opens the wrong page. Returns { action, url, description }. This is navigation only — it never mutates data.
get_app_link
Retrieves a single contact from the Textmagic address book by id, phone, or email. Provide exactly one identifier — id takes priority, then phone, then email. Returns id, firstName, lastName, phone, email, lists (id + name), and tags (id + name). Use search_contacts for free-text search across multiple contacts.
get_contact
Retrieve paginated inbound (received) SMS messages across all contacts and phone numbers for the current user. Returns up to 10 messages per page, ordered by most recent first. Use searchQuery to filter by message text or sender phone number. Use onlyWithoutOutbound to show only messages that have no outbound reply from the user. Use get_sms_chat_messages for full chat context (both outbound and inbound messages for specific chat with contact) Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of matching inbound messages across all pages.
get_inbound_sms_messages
Retrieve paginated outbound (sent) SMS sessions for the current user, most recent first. A session is a single send operation that may target one or many recipients. Each session returns: the session ID (sessionId), when it was sent (sentAt), how many recipients it targeted (recipientsCount), how many messages were delivered (deliveredCount), the total amount for the session (totalCost, in the account `currency`), the sender ID or phone number it was sent from (fromNumber), the message type (messageType: text, tts, vbc or mms), and the text — the session text for multi-recipient sessions, or the actual SMS text when there is a single recipient. When a session has exactly one recipient, it also returns the individual message ID (messageId), its delivery status (messageStatus), a human-readable rejection reason if the message was rejected (rejectReason, null otherwise), the recipient phone number (phone), and the linked contact's name (contactName, null if the number is not linked to a contact). Use searchQuery to filter by message text or recipient phone number. Use get_inbound_sms_messages for received messages instead, or get_sms_chat_messages for a single conversation's full history. Page only when pagination.hasNextPage is true, passing pagination.lastId as the next lastId.
get_outbound_sms_sessions
Retrieve paginated SMS messages (both inbound and outbound) from a specific SMS chat. Returns up to 10 messages per page by default, ordered by most recent first. Only works with SMS chats — use search_sms_chats first to find the chatId. Does not mark messages as read. Excludes voice calls, notes, and non-SMS message types. Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of messages in the chat across all pages.
get_sms_chat_messages
Retrieve the individual outbound SMS messages that belong to a single sending session, identified by its session ID. A session may have sent to one or many recipients; this returns one entry per recipient. Each message returns: the message ID (messageId), the recipient phone number (phone), the linked contact's name (contactName, null if the number is not linked to a contact), the message text (text), the delivery status (status), a human-readable rejection reason if it was rejected (rejectReason, null otherwise), the amount (cost, in the account `currency`), and the number of SMS parts (parts). Use get_outbound_sms_sessions first to find the session ID. Use searchQuery to filter the recipients by message text or phone number. Returns up to 10 messages per page, ordered by recipient. Page only when pagination.hasNextPage is true, passing the next page number. pagination.totalCount is the total number of recipient messages in the session across all pages.
get_session_sms_messages
Retrieve the full details of a single scheduled (upcoming) SMS session by its ID. Returns everything list_sms_schedules returns (message text, amount — `cost`, in the account `currency` — parts count, recipients count, next send time, status and a human-readable recurrence description) plus three fields that the listing omits: the complete recipients breakdown (contactIds, groupIds, phoneNumbers, segmentIds), the structured recurrence rule (recurrentRule, null for one-time delayed sends), and previewDates — the next upcoming send times computed from the recurrence rule. Use list_sms_schedules first to find the schedule ID. Use this tool when you need the exact recipients, the structured recurrence rule, or the upcoming occurrences of a specific schedule — for example before editing or cancelling it. Only returns schedules with status "scheduled" that belong to the current account. Returns an error if no such schedule exists.
get_sms_schedule
List the contact segments (saved contact filter views) in the user's Textmagic account. Returns up to 10 segments per page, each with id, name, contactsCount, and a human-readable description of which filters the segment applies (entity references such as tags, lists, or countries are summarised by count, not expanded into individual IDs). Use this to discover a segment's ID before passing segmentId to search_contacts, preview_sms, or send_sms. A segment is a reusable filter over contacts (e.g. "VIP customers in the US"); it is NOT a static contact list — for lists/groups use search_lists instead. Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of segments across all pages. Returns an empty list when the account has no contact segments.
list_contact_segments
Returns all dynamic fields that can be embedded in an SMS message body to personalize the text per recipient. These are NOT contact tags/labels used for filtering — they are merge variables written as {Field name} inside the message text and replaced with each contact's data at send time. Two kinds are returned: - Standard fields: always available — {First name}, {Last name}, {Company name}, {Phone}, {Email}. - Custom field placeholders: account-specific fields the user has created for their contacts. Use this tool when the user asks what dynamic fields, merge variables, or personalization tokens are available for an SMS. Call preview_sms or send_sms with the field syntax in the `text` parameter to use them.
list_sms_dynamic_fields
List active (scheduled) SMS sessions for the current account — both one-time delayed sends and recurring messages. Returns only schedules with status "scheduled" (upcoming, not paused, not completed). Results are paginated, up to 10 per page, ordered by next send time (descending). Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of scheduled sessions across all pages. Each schedule includes its id, the message text, amount (cost, in the account `currency`), parts count, recipients count, next send time, status, and a human-readable recurrence description. To keep listings compact, the recipients breakdown is only included when the schedule targets a single recipient, and the structured recurrence rule and preview dates are omitted. Use this tool to review what recurring or delayed messages are set up and check their next send time. Call get_sms_schedule with a schedule id to retrieve the full recipients breakdown, the structured recurrence rule and the upcoming preview dates before editing or cancelling a schedule.
list_sms_schedules
Pause one or more scheduled (upcoming) SMS sessions by their IDs so they stop firing until resumed. Pausing does not delete the schedule and is reversible — a paused schedule keeps its recipients, message and recurrence rule and can be resumed later. Only schedules belonging to the current account are affected. Use list_sms_schedules to discover schedule IDs first. Returns an error if none of the given schedules could be paused — for example when they are already paused or do not exist in this account.
pause_sms_schedules
Preview an SMS before sending it. Returns character set, parts count, and a sample of up to 10 recipient messages so the user can review the content and recipients before sending. Amounts (`cost`, `price`) are in the account currency — see the `currency` field. HOW TO CALL — check every call against these rules: - Recipients (required): provide AT LEAST ONE of `contactIds`, `listId`, `segmentId`, or `phones`. You may combine them. - Message body (required): provide EXACTLY ONE of `text` OR `templateId`. Never send both; never send neither. * `text` — a raw message body you compose yourself. * `templateId` — the ID of an existing SMS template. - `scheduleToken` (optional): include ONLY for a delayed/recurring send; omit it for an immediate send. - Omit every field you are not using. Do NOT fill unused fields with placeholder values such as 0, 1, or "". If the message text contains dynamic contact fields such as {First name} or {Last name}, the preview returns per-recipient resolved texts; otherwise it returns a single representative parts count. US and Canadian recipients require a registered sender (a verified 10DLC campaign for the US, a verified toll-free number for either). When the account has none and every recipient is in the US/Canada, the preview fails and returns a link to the sender settings; when only some recipients are there, the preview succeeds and carries a `warning` field with the same link — relay it to the user verbatim. The returned `previewId` must be passed to the `send_sms` tool to perform the actual send. A preview expires after 30 minutes. To schedule a delayed or recurring send, first call create_recurring_schedule and pass the returned `scheduleToken` here. The preview then includes the schedule (rrule, description, and up to 5 upcoming send datetimes, recomputed live); the amount shown reflects a single run. Omit `scheduleToken` for an immediate send. Use list_sms_dynamic_fields to see all available dynamic fields (e.g. {First name}) before composing text. Use search_sms_templates to find available template IDs. Use search_contacts or get_contact to find contact IDs. Use search_lists to find list IDs. Use list_contact_segments to find segment IDs.
preview_sms
Remove one or more contacts (by their IDs) from a contact list. Use search_contacts to find contact IDs and search_lists to find the list ID before calling this tool. Contact IDs that do not belong to the current user or are not in the list are silently ignored — the call succeeds regardless. Returns the list ID, name, and updated contacts count as confirmation.
remove_contacts_from_list
Remove one or more tags (by their IDs) from one or more contacts (by their IDs). Use search_tags to find tag IDs and search_contacts to find contact IDs before calling this tool. Tag IDs or contact IDs that do not belong to the current user, or tag-contact pairs that are not currently applied, are silently ignored. Returns a success message when the operation completes.
remove_tags_from_contacts
Find existing contacts in the user's Textmagic account by name, phone, email, listId, tagIds, countries, or segmentId. Returns 10 per page. Use to resolve a contact reference or get an ID before send_sms / add_contacts_to_list. Not for creating (create_contact) or full export. Requires at least one of: query, listId, tagIds, countries, segmentId. segmentId filters by a saved contact segment (use list_contact_segments to find IDs); it CANNOT be combined with listId, tagIds, or countries, but can be combined with query. Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of matching contacts across all pages.
search_contacts
Find contact lists (groups) in the user's Textmagic account. Returns up to 10 lists per page with id, name and contacts count. Without a query, returns all lists ordered by name. With a query, filters by name using a partial, case-insensitive match. Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of matching lists across all pages.
search_lists
Find SMS chats in the user's Textmagic account. Returns 10 per page. Optionally filter by a search query (matched against contact name or phone number) and/or unread status. Use to look up chat IDs before replying or to surface unread conversations. Returns only SMS chats — not WhatsApp, Facebook Messenger, Instagram, or live chats. Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of matching chats across all pages.
search_sms_chats
Find SMS message templates in the user's Textmagic account. Returns up to 10 templates per page with id, name, and content. Without a query, returns all templates ordered by name. With a query, performs a case-insensitive partial match across both template name and content. Returns an empty list when no templates match — not an error. Page only when pagination.hasNextPage is true. pagination.totalCount is the total number of matching templates across all pages.
search_sms_templates
Find tags in the user's Textmagic account. Returns all matching tags with id and name. Without a query, returns all tags (max 100 results). With a query, filters by name using a partial, case-insensitive match. pagination.totalCount is the total number of matching tags; if it exceeds the returned count, refine the query to narrow results. Use to resolve tag references or get IDs before add_tags_to_contacts.
search_tags
Send an SMS message to one or more recipients using a previously created preview. IMPORTANT — this is a DESTRUCTIVE, IRREVERSIBLE operation: - It delivers real SMS messages to live recipients. - It uses up the account balance. - There is no undo. Always call preview_sms first and show the user the recipient count and message text. Only call this tool after the user has explicitly confirmed they want to proceed with the send. The `cost` is in the account currency — see the `currency` field. If the preview was created with a scheduleToken (a delayed or recurring send), this tool confirms the schedule instead of sending immediately: the response reports `scheduled: true` with the rrule and upcoming send datetimes. A confirmed schedule is ongoing — every future occurrence sends automatically until the schedule ends or is cancelled. The `previewId` returned by preview_sms is valid for 30 minutes. If the underlying conditions (recipients, message) have changed since the preview was created, the send is rejected automatically to protect against sending with stale data. US and Canadian recipients require a registered sender (a verified 10DLC campaign for the US, a verified toll-free number for either). When the account has none, a send whose recipients are all in the US/Canada is rejected with a link to the sender settings, and a send that only partly targets them succeeds but returns a `warning` field — relay that warning to the user verbatim. Rate limits: - Maximum 1 send per minute per account. - Maximum 10 000 recipients per day per account.
send_sms
Updates an existing contact in the Textmagic address book. Use when the user wants to change a contact's phone, email, first name, last name, or company name. Requires the contact id (integer). Only the fields you pass are changed — omitted fields are left as-is. Do NOT use to create a new contact (use create_contact) or to add the contact to a list (use add_contacts_to_list). Returns the updated contact's id and core fields.
update_contact
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Textmagic alternatives on ChatGPT?
As of 2026-09-17, Textmagic competes with ActiveCampaign, Aivie, AWeber, Bizgo, Brevo, Conversion, Customer.io, Flodesk, Intuit Mailchimp, Kanal, Klaviyo, Knock, L Message(エルメ), Life Analytics Mail, Loops, magnews, MailerLite, Mailrith, MailSenpai, Nitrosend - AI Native Email, Notifly, Omnisend, OneSignal, Resend, SAMWAD, Sent, Spoki, Systeme.io, VerticalResponse in ChatGPT Email & SMS Lifecycle Marketing Automation, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.