Sent provides programmable customer messaging across SMS, WhatsApp, and RCS. Send personalized or template-based messages to individual or bulk recipients, schedule deliveries, manage contacts and sender profiles, check phone number validity, monitor delivery statuses, and track messaging performance and compliance requirements.
Codex is OpenAI's coding agent for the terminal. It reads MCP servers from its config and signs in to remote ones with OAuth.
This guide connects Sent MCP to Codex through MewCP, so Codex can use Sent MCP's 27 tools, like account.get, balance.get and compliance.requirements, without your Sent MCP credentials ever reaching the app.
Sent MCP signs in through managed OAuth. MewCP stores the token encrypted, refreshes it before it expires and injects it only at call time. Your agent never holds it, so it can never leak it.
More apps
Manage repositories, pull requests, issues, branches and development workflows on GitHub. Automate software delivery and collaborate across engineering projects.
Manage Gmail end to end with tools for sending, reading, replying to and organizing emails. Work with threads, labels, drafts, attachments and inbox workflows while keeping communication and email automation in one place.
Microsoft Outlook MCP Server gives AI agents full control over Outlook email and calendar workflows, including reading and sending emails, managing attachments, organizing mail, scheduling and updating meetings, managing contacts, and creating tasks.
Connect to external APIs, webhooks and internet services through standard HTTP requests. Build integrations with virtually any platform that exposes a web-based interface.
Other clients
Sent MCP works the same way in every client below. Pick yours for its own guide.
Free to start.
Scope access to the exact Sent MCP tools and accounts you allow, work and personal side by side. Anything outside that scope is refused at call time, even when the model asks for it.
Each call is logged: what ran, on which account, and whether it worked. Failures come back structured, so the agent knows whether to retry instead of guessing.
Every app sits behind one secure MCP URL, and there is no server for you to deploy or keep running. Add an integration in the dashboard and it is live on the next call, with no config to change and no new credentials to wire up. Tools load only when a task needs them, so your agent stays fast and focused however many apps you connect.
Run this and approve access in the browser window.
Start a new chat and ask: "List the tools you can use from MewCP." You should see your connected apps.
Returns the account associated with the calling API key (organization, user, or profile). Includes id, name, email, type, parent organization id, and creation timestamp.
Returns the calling account's own balance row and its effective sending balance. For sender profiles, effective balance follows the billing configuration: profile-only, parent-organization-only, or the combined profile and organization balances. An account with no balance row of its own reports balance 0 with initialized false, which is the normal state for a sender profile that bills to its organization. This tool cannot credit or debit funds.
Returns what a market requires before a sender can be provisioned there: the fields to supply, which are mandatory, and the names of any documents that must be attached. With hasRegime true, an empty requirements list means the market demands nothing. With hasRegime false no requirements are published here, which is not proof that none apply; notes then names the obligation the list leaves out, such as toll-free verification for US toll-free numbers.
Returns the exact call that sets a market up, with every compliance key the market wants already present and blank. Use this after compliance.requirements when you want the call rather than the table. The call is sender_profiles.create, which creates a new profile in that market; adding a market to a profile that already exists is done in the Sent dashboard or through the REST API. When the market requires uploaded documents, or Sent cannot provision that number type through this server, canCompleteHere is false and blocker says where to finish rather than handing you a request that would be refused. call is null when this connection creates Sender Profiles in the Sent dashboard.
Creates or restores associations between the calling customer and up to 10 contacts. Each phone number is normalized and resolved through Sent's contact index, which may perform external capability lookups for a new number. Every submitted number is returned in exactly one list: created, alreadyExisting (already a contact for this customer, skipped rather than duplicated), or failed (could not be resolved, nothing was added). An empty created list means nothing was added — do not report a submitted number as created.
Soft-deletes only the calling customer's association with a contact. The shared contact and its channel-capability records remain in Sent. Returns false when the association is not found.
Looks up a single contact by id. Structured output returns found plus the contact item; found is false when no contact with that id belongs to the caller.
Lists the calling customer's contacts with pagination. Search matches the contact's national-format phone number; the optional channel filter matches the stored default channel.
Returns the per-contact message summary: total/by-channel counts, first/last seen, and per-channel success rates. Throws when the contact does not belong to the caller.
Returns total contact count for the calling customer.
Returns the calling customer's all-time outbound deliverability percentage, rounded to two decimals. The numerator is messages in SENT, DELIVERED, or READ status; the denominator is all outbound messages except policy-filtered or account-blocked messages.
Returns time-bucketed SMS and WhatsApp counts for the calling customer's outbound messages whose status is DELIVERED or READ. Presets cover 24 hours, 7 days, 30 days, or 3 months; a complete from/to pair overrides the preset, supports at most 365 days, and determines 15-minute, hourly, or daily buckets.
Sends feedback about Sent's tools to the Sent team: a missing capability, a wrong, confusing, or unexpected result, an unresolved error, or praise. Intended for feedback the user has asked to send and has approved as written. The message is stored and read by Sent staff; it does not open a support ticket and returns no reply. A useful message says what was attempted and what happened. Phone numbers and email addresses are redacted before the message is stored; message bodies and other personal data are not redacted and do not belong in it.
List the lifecycle activity timeline for a message (QUEUED, PROCESSED, SENT, DELIVERED, READ, FAILED, ...). Throws if the message does not belong to the caller.
Returns a customer-safe view of one message by id, including recipient and sender, template summary, requested and resolved channels, schedule, rendered content, segment count, status, direction, and timestamps. Structured output returns found plus the message item; found is false when the message is not visible to the caller.
Accepts messages for asynchronous delivery through Sent smart routing ("sent"), SMS, WhatsApp, or RCS. Sends are template-only: there is no free-form text argument, and template must reference a template that already exists on this account. Call templates.list first to get the ids, names, and variables this account can send. Multiple recipients fan out into separate messages, and multiple explicit channels broadcast on each channel. Recipients who have opted out are refused before anything is queued. Acceptance does not mean delivery; returns per-recipient message IDs to monitor with messages.activities.list.
Performs an external, paid, quota-consuming lookup for a phone number. Returns normalized validity plus the recipient network's carrier, line type, country, mobile network codes, VoIP, and porting details. Carrier means the recipient's network, not Sent's delivery provider, and is not a channel or pricing recommendation.
Returns the calling customer's most recent onboarding/conversion-flow status (e.g. SIGNED_UP, KYC_COMPLETED, ONBOARDED). Structured output returns found plus the status item; found is false when the account has no recorded conversion flow, which is the normal state for an account created outside the signup flow.
Creates a sender profile under the calling organization. Provisioning a dedicated sender claims a phone number and may incur registration fees, so idempotencyKey is required: a retry without one would create a second profile. Markets that require uploaded documents cannot be completed here — the call is refused before anything is written, naming the fields to attach through the dashboard.
Deletes a sender profile owned by the calling organization. This is destructive and affects live messaging: it can disconnect WhatsApp, release the profile's phone numbers, and disable its routes. Returns deleted=false when no such profile belongs to the caller. Refused, with nothing torn down, while the profile's WhatsApp Business Account still carries one of the numbers the delete would release — only the customer can remove it, by deregistering and deleting it in WhatsApp Manager — and refused the same way when that account cannot be read at all.
Looks up one sender profile owned by the calling organization. Structured output returns found plus the profile; found is false when no profile with that id belongs to the caller.
Lists the sender profiles owned by the calling organization, with channel readiness for each. Profile API keys own no profiles and receive an empty list.
Updates a sender profile's name, short name, or description. Omitted fields are left unchanged. Sending description as null clears it; name and short name cannot be cleared.
Deletes a template the calling account owns from Sent without deleting it from Meta. LOB templates and required OPT_IN, OPT_OUT, or HELP auto-reply templates cannot be deleted. Templates referenced by messages are soft-deleted; unreferenced templates are permanently deleted.
Returns one template owned by the calling account by id. Structured output returns found plus the template item; found is false when the account owns no template with that id.
Returns the newest template owned by the calling account with the given display name. Structured output returns found plus the template item; found is false when the account owns no template with that name.
Lists the templates the calling account owns, with pagination and optional name, status, and category filters. Accounts are isolated: an organization's list never includes its sender profiles' templates, and a profile's list never includes the organization's.