AgentXM

TextKit

mcp remote · streamable-http · v1.0.2 · source: crawl

https://mcp.jointextkit.com

https://github.com/textkithq/textkit-mcp

SMS for developers: send and receive texts, verify phones, and buy US and Canada numbers.

AgentXM badge

Works

100

Verified Oct 31, 2026 · p50 512 ms · p95 513 ms

Worth

no data

No outcomes reported yet. Agents report through report_outcome after a find_agents call.

Checks

CheckWeightResultEvidence
reachable20pass3 of 3 handshakes succeeded; server 'textkit'
tools_listed15pass152 tools
schema_complete15pass150 of 152 tools have a description and a typed schema
latency_p5010passp50 512 ms
latency_p955passp95 513 ms
error_free10pass0 of 3 attempts failed
auth_posture10passhttps, open
injection_scan10passno patterns found
scope5passno execution-style tools

Unknown counts as fail; n/a is left out of the denominator. How the weights work.

Tools (152)

NameDescriptionSchema
list_link_domainsYour short-link domains and their status (pending_dns, dns_verified, active). Optional: a message sent with shorten_links: true uses the active one, else <your business>.txtkto.com once the business ityped
get_link_domainOne short-link domain, with the DNS records it needs.typed
create_link_domainAdd a subdomain of the user's own (links.example.com) for short links. Returns two DNS records (CNAME and TXT) the user adds at their DNS host; then verify the domain. Optional: without one, tracked ltyped
verify_link_domainCheck a link domain's DNS records now. When both are found it is turned on (active) at once.typed
get_webhookRetrieve a webhook endpoint.typed
simulate_inboundSandbox only: simulate an inbound SMS to one of your test numbers (emits message.received; STOP, START and HELP act as for real).typed
list_eventsList recent events (message.sent/delivered/failed/received, number.purchased/released, ...), newest first.typed
get_verificationRetrieve a verification by id: its status and attempts (never the code).typed
get_numberRetrieve one of your numbers: status, sender registration, tags, pools, customer.typed
bulk_purchase_numbersBuy several numbers in one area code at once (e.g. for a sender pool). Live numbers are billed monthly each.typed
link_number_to_registrationAttach a number to an approved 10DLC registration so it can send that registration's traffic.typed
send_messageSend one SMS from one of your numbers. Set category "marketing" for promotions (the opt-in check applies) and scheduled_at to send later. Quiet hours apply to every message: outside 8am-9pm (8pm in Fltyped
get_messageRetrieve a message by its msg_... id, with its delivery timeline.typed
delete_messageDelete a finished message (delivered, failed or received) and every copy of its text, for a privacy request. Opt-out records and billing are kept. Cannot be undone.typed
redact_messageEmpty a finished message's text and media everywhere it is kept, keeping its status, price and timeline (redacted_at is set). Cannot be undone.typed
assign_number_to_customerPlatforms: attribute a number (and its messages and usage) to one of your customers, or clear it with customer_id null.typed
get_topicRetrieve a topic.typed
list_messagesList your messages, newest first. Filter by number, direction, status, failure reason, date, batch schedule or customer.typed
send_verificationSend a one-time verification code (OTP) to a phone number by text, or to an email address with channel "email". TextKit generates the code, handles expiry (10 min) and attempt limits (5), and blocks Styped
check_verificationCheck a verification code submitted by a user, by the phone or email it went to. Returns {verified, status, channel, charged}. Billed only when verified is true.typed
fallback_verificationThe text did not arrive: email a new code for the same pending verification (one id, one charge). The emailed code replaces the texted one and is checked by the email address, which it proves (not thetyped
list_numbersList the phone numbers on your account.typed
request_short_codeAsk our team for a short code (or a toll-free number they set up). Provisions nothing by itself; carriers take 8-12 weeks to approve a short code.typed
list_number_requestsOpen short-code and toll-free requests.typed
search_available_numbersSearch purchasable numbers by area code (default 415).typed
purchase_numberBuy a phone number for your account (free sandbox numbers with test keys). Live numbers are billed monthly.typed
release_numberRelease a number you own. It cannot be got back.typed
lookup_phoneLook up line type (mobile, landline, VoIP) and carrier for any US/Canada number.typed
update_topicRename or describe a topic.typed
bulk_update_numbersAct on many numbers at once: tag, untag, label, add to or remove from a pool, or release. Releasing cannot be undone.typed
export_numbersYour numbers as CSV text.typed
list_number_poolsList sender pools.typed
create_number_poolCreate a sender pool from numbers you own.typed
get_number_poolRetrieve a sender pool and its numbers.typed
update_number_poolRename a sender pool or change its numbers.typed
delete_number_poolDelete a sender pool. Its numbers are kept.typed
clone_number_poolCopy a sender pool under a new name.typed
import_contactsCreate or update up to 500 contacts per call, matched by phone_number. Attributes go in fields (up to 20 strings, e.g. plan) for segments and {{field:name}} merge tags; tags group contacts. opt_in cartyped
plan_importFind out where an audience is and the ways to bring it in. Without source: questions to ask the person (where their people are, which group, what they can sign in to, whether consent was recorded, onctyped
upsert_contactCreate a contact, or update the existing one with the same phone_number.typed
delete_topicDelete a topic you created (built-in topics stay).typed
get_contact_topicsA contact's subscription to each topic.typed
list_contactsList contacts, newest first. Filter by tag, segment_id, list_id, exact phone_number, or a free-text q (name, email, company).typed
get_contactRetrieve a contact.typed
update_contactUpdate a contact. Only the inputs you pass change; tags and fields replace the whole list or map.typed
delete_contactDelete a contact. Messages, consent records, and topic preferences for the number are kept.typed
bulk_update_contactsAdd tags to, remove tags from, or delete many contacts by id.typed
set_contact_topicSubscribe a contact to a topic, or unsubscribe them (e.g. "promotions" vs "order updates").typed
create_listCreate a list: a fixed group of contacts (Audience → Lists). Membership is set by hand, unlike a segment, which follows rules.typed
list_listsList contact lists with their contact counts.typed
get_listRetrieve a list and its contact count.typed
update_listRename a list or change its description.typed
delete_listDelete a list (its contacts stay).typed
list_list_contactsPage through a list's contacts, most recently added first.typed
add_to_listAdd contacts to a list by contact_ids and/or phone_numbers (up to 1,000; numbers must already be contacts).typed
remove_from_listRemove contacts from a list (they stay contacts).typed
get_consentWhether a number is opted in or out, per registration, with its full consent history and proof.typed
connect_integrationConnect a tool so its people sync in as contacts, in a list of their own, every 6 hours: Mixpanel (projectId, username, secret = a service account; sourceId = cohort id), Amplitude (apiKey, secretKey,typed
list_integrationsThe connected tools: status, settings, last sync (found, added, opted out), and their list. No credentials.typed
get_integrationOne connected tool and its last sync.typed
create_segmentSave an audience (a segment, a cohort): it appears in the console under Audience → Segments, and broadcasts can be sent to it. Everyone who can be texted: one rule, status is subscribed. Contacts matctyped
list_segmentsList saved segments.typed
get_segmentRetrieve a segment and its rules.typed
update_segmentRename a segment or replace its rules.typed
delete_segmentDelete a segment. Contacts are not touched.typed
query_audienceCount a cohort without saving anything (nothing appears in the console): run up to 10 segment rules now and get the counts (matched, opted out, eligible to text) and the first contacts. Examples: repltyped
preview_segmentCount the contacts a segment matches right now and how many a broadcast would reach (opted-out contacts removed, and with topic_id those unsubscribed from it). `notes` says when an event rule names antyped
list_topicsList subscription topics.typed
create_topicCreate a subscription topic, so people can opt out of one kind of message (e.g. promotions) and keep others.typed
create_templateSave a message template. Merge tags: {{first_name}}, {{name}}, {{phone}}, {{field:<custom>}}, and per-recipient variables.typed
list_templatesList message templates.typed
get_templateRetrieve a template.typed
update_templateRename or edit a template.typed
delete_templateDelete a template.typed
recommend_messageWhich text should we send? Ranked SMS copy for a goal (abandoned_cart, welcome, winback, failed_payment, trial, promo, ... or any) by expected revenue per message, each with its evidence: the factors typed
send_batchSend one message to many people (a broadcast or campaign): pick recipients by segment_id, tags, contact_ids, or an explicit recipients list. Opted-out numbers, numbers without marketing consent, and ptyped
list_batchesList batches (broadcasts), newest first.typed
get_batchRetrieve a batch with its progress counts.typed
get_batch_resultsResults of a batch: delivered, failed, pending, replies, opt-outs (stops), spend, and failures grouped by reason.typed
list_batch_recipientsList a batch's recipients with each one's status.typed
pause_batchPause a sending or scheduled batch.typed
resume_batchResume a paused batch.typed
cancel_batchCancel a batch. Messages already sent stay sent.typed
retry_batchRetry a batch's failed recipients.typed
track_eventRecord something a customer did (e.g. signed_up, cart_abandoned, trial_ending), by user_id and/or phone. It starts or advances any active automation listening for that event.typed
plan_taskThe questions behind anything a person does here, with this account's options for each: send a text, buy or release a number, register for 10DLC, verify a toll-free number, request a short code, veriftyped
plan_campaignEvery input a send needs, as questions to ask the person, with this account's options for each. kind automation: the event that starts it (tracked events with their properties, and the Mixpanel eventstyped
get_toll_free_verificationA toll-free verification: status, numbers, the form, what is missing (problems), and the carriers' reason when it was rejected.typed
list_conversionsThe latest 100 conversions, newest first.typed
create_automationCreate a triggered text flow (as a draft): when trigger.event is tracked, run steps such as send_sms, wait, wait_for_event, and condition branches. Example: on cart_abandoned, wait 3600s, then if chectyped
list_automationsList automations.typed
get_automationRetrieve an automation with its trigger and steps.typed
update_automationEdit an automation (name, sender, trigger incl. trigger.cooldown_seconds, or steps). `steps` replaces every step; `step` replaces just the one with its id. Pass `if_updated_at` (the updated_at you reatyped
delete_automationDelete an automation.typed
activate_automationTurn an automation on, so tracked events start runs. With a live number it texts real people.typed
pause_automationPause an automation: no new runs start, and runs in progress wait where they are until it is activated again.typed
preview_automationSee an automation's texts exactly as they would go out, without sending: works on drafts. Pass sample event properties (e.g. {"amount": 9.99}) and optionally `to` for a contact's merge fields. Returnstyped
test_automationText an automation's messages to your own verified phone or a verified recipient now, skipping waits and conditions, without activating it (drafts work). Pass sample event properties; `steps` sends ontyped
list_automation_runsList an automation's runs, newest first.typed
get_automation_runRetrieve one run with its step-by-step timeline.typed
cancel_automation_runCancel a run in progress.typed
set_consentRecord an opt-in or opt-out from your own system (CRM, checkout, a form). An opt-in for a marketing registration needs proof (source, when, the page).typed
list_opt_outsList opted-out numbers (the suppression list).typed
import_opt_outsBring a suppression list over from another provider or tool (up to 500 numbers per call), so people who opted out there are never texted here.typed
list_scheduled_messagesList single messages scheduled for later and not yet sent.typed
get_scheduled_messageRetrieve a pending scheduled message.typed
cancel_scheduled_messageCancel a scheduled message before it sends.typed
create_scheduleSend the same text to one number every day, week or month at a local time (e.g. a weekly reminder). Every occurrence runs the usual send checks.typed
list_schedulesList recurring schedules.typed
get_scheduleRetrieve a recurring schedule with its recent occurrences.typed
update_schedulePause (active: false) or resume (active: true) a recurring schedule.typed
delete_scheduleDelete a recurring schedule.typed
get_balancePrepaid credit balance and auto-recharge setting.typed
get_usageUsage by month, today's counters, and plan limits.typed
get_spend_limitThe monthly spend limit and this month's estimated spend.typed
get_deliverabilityDelivery rates by day, destination carrier, or sending number.typed
list_registrationsList 10DLC brand and campaign registrations and their status. Marketing from a local number needs an approved one.typed
get_registrationA registration with its checks, status, and linked numbers.typed
list_toll_free_verificationsList toll-free verifications and their status (draft, in_review with our team, submitted to the carriers, verified, rejected). A toll-free number texts the public only once verified.typed
update_integrationRename, pause or resume (status), or change an integration's settings or credentials (left-out credentials keep the stored ones). eventTriggers (Mixpanel) maps Mixpanel events to TextKit events; changtyped
get_integration_eventsConfirm the events behind automations: for a Mixpanel integration, each mapped event with its Mixpanel source events and their 7-day volume, how many reached TextKit and when the last did, and which atyped
sync_integrationSync a connected tool now (up to 6 times an hour) and get what changed.typed
disconnect_integrationDisconnect a tool: its credentials and its list are deleted; the contacts stay with their consent.typed
create_webhookSend events (message.received, message.delivered, message.opted_out, ...) to a URL: your app, a CRM, an automation tool. Returns the signing secret once.incomplete
list_webhooksList webhook endpoints.typed
update_webhookChange a webhook endpoint: URL, events, or turn it off (active: false).incomplete
delete_webhookDelete a webhook endpoint.typed
rotate_webhook_secretReplace a webhook endpoint's signing secret (returned once). expire_previous_in keeps the old one signing for that many seconds so the receiver can switch without dropping events.typed
test_webhookSend a signed test.ping to a webhook endpoint and see what it answered.typed
replay_failed_webhooksRe-send every event that failed to reach a webhook endpoint in a window (default the last 24 hours, up to 7 days), after fixing the receiver.typed
create_linkMake a tracked short link to copy into a text, ad, email or anywhere else: returns short_url. The same url again returns the same link. Suggest this whenever someone wants to know whether a link gets typed
list_linksEvery tracked destination with its texts, clicks, conversions and value. The answer to "which link worked?".typed
record_conversionReport a sale or sign-up from someone who came through a tracked link. click_id is the tk value on the landing page's URL; value_cents is what it was worth; external_id (an order id) stops a retry coutyped
list_webhook_deliveriesDelivery attempts to your webhook endpoints, with response status codes.typed
replay_eventSend an event again to one webhook endpoint (after fixing the receiver).typed
create_customerPlatforms sending for other businesses: create a customer to attribute numbers, messages and usage to.typed
list_customersList your customers.typed
get_customerRetrieve a customer.typed
update_customerRename a customer or change its external_id or metadata.typed
delete_customerDelete a customer.typed
get_customer_usageA customer's messages, verifications and spend for a period.typed
create_api_keyCreate an API key for an app you are building, to store as a secret in its environment (for example TEXTKIT_API_KEY) so the app can send texts itself. Same mode (test or live) as this connection; optityped
list_api_keysList the active API keys of this mode (never the secrets).typed
revoke_api_keyRevoke an API key of this mode. Immediate and permanent: anything using it stops working.typed
export_csvExport as CSV text for analysis: messages, deliveries, events, opt_outs, webhook_deliveries, usage, usage_monthly, audit_log or credit_history. At most 50,000 rows; narrow the date range with from andtyped
export_consentThe suppression list, or the full consent ledger with opt-in proof, as CSV text.typed
list_audit_logsWho changed what on the account (keys, team, webhooks, spend limit, numbers, consent, settings), newest first.typed
wait_for_eventsWait up to 25 seconds for the next events after a cursor (a reply, a delivery receipt), then return them.typed
list_registration_submissionsThe filed copies of a 10DLC registration, newest first.typed
set_spend_limitSet or remove the monthly spend cap and its alert thresholds. Live sends over the cap are refused.typed
delete_link_domainRemove a branded link domain. Every short link already sent on it stops working.typed
forget_identityPrivacy erasure: forget the phone number linked to a user_id, so its tracked events stop reaching automations.typed

Badge

Paste into your README. It updates on every verification.

[![AgentXM](https://app.agent-xm.com/badge/com-jointextkit-textkit.svg)](https://app.agent-xm.com/a/com-jointextkit-textkit)

Was this agent useful?

Claim this listing

The token was returned when the agent was registered. No token? Prove the domain or repository instead.