sent-messaging
sentdm/sent-plugin
Send and track SMS, WhatsApp, and RCS messages through Sent with delivery status and activity history.
What is sent-messaging?
Sends SMS, WhatsApp, or RCS messages via Sent and retrieves individual message status and activity history. Use this skill when you need to send or preview a message, check delivery status, inspect lifecycle events, investigate send outcomes, or safely retry failed sends. For aggregate delivery analysis across many messages, use messaging-performance-analyzer instead.
- Send SMS, WhatsApp, or RCS messages through Sent with preview and confirmation workflow
- Retrieve current message status and identifiers using messages.get
- Inspect message lifecycle events and delivery evidence via messages.activities.list
- Check account balance and readiness before high-volume sends
- Safely retry ambiguous or timed-out sends with duplication prevention
How to install sent-messaging
npx skills add https://github.com/sentdm/sent-plugin --skill sent-messaging- Sent MCP client with OAuth 2.1/PKCE support
- Active Sent account with authorized organization and Sender Profile
- Sufficient account balance for the intended send volume
How to use sent-messaging
- 1.Authorize the skill via OAuth 2.1/PKCE in your MCP client (do not provide tokens manually)
- 2.Specify the message channel (SMS, WhatsApp, or RCS), recipient, content, and any variables or scheduling
- 3.Review the payload preview showing organization, Sender Profile, destination, and content
- 4.Provide explicit confirmation for the exact payload before sending
- 5.After send, use messages.get or messages.activities.list to check delivery status as needed
Use cases
- Send a single SMS or WhatsApp message to a recipient with delivery confirmation
- Check whether a specific message was delivered by inspecting its activity history
- Investigate a timed-out send request to determine if it succeeded before retrying
- Preview and confirm a templated message with variables before sending
- Verify account balance and sender profile before initiating a bulk message campaign
- Developers integrating Sent messaging into applications
- Support teams investigating individual message delivery issues
- Operations staff sending transactional or notification messages
- Anyone needing to audit or retry specific message sends
sent-messaging FAQ
'Accepted' or 'queued' means the send request was received and queued; it is not proof of delivery. 'Delivered' is reported only when the returned state or activity log confirms the message reached the recipient.
Yes, but first inspect the message using messages.get and messages.activities.list to check for evidence of delivery. Only retry after confirming the message did not succeed and after completing a new preview and confirmation.
No. Never provide credentials manually. Let the MCP client handle OAuth 2.1/PKCE authorization. The skill will never ask you to paste a token or API key.
Use messaging-performance-analyzer for aggregate trends, delivery funnels, or root-cause analysis across many messages. Use sent-messaging for individual message sends, status checks, and targeted retries.
The skill will check your balance before high-volume sends using sent-account-readiness. If balance is insufficient, the send will be stopped and you will be notified.
Full instructions (SKILL.md)
Source of truth, from sentdm/sent-plugin.
name: sent-messaging description: Sends SMS, WhatsApp, or RCS messages through Sent and retrieves individual message status and activity history with the Sent MCP tools. Use when a user asks to send or preview a message, check a message ID, confirm delivery status, inspect lifecycle events, investigate a timed-out or ambiguous send, or retry safely. Use messaging-performance-analyzer for aggregate delivery diagnosis.
Sent Messaging
Operate direct message workflows with messages.send, messages.get, and messages.activities.list.
Establish connection and scope
- Let the MCP client perform OAuth 2.1/PKCE authorization. Never request, accept, print, or store tokens, API keys, authorization headers, client IDs, or secrets.
- Surface the organization and Sender Profile selected by the active connection before a mutation. If the client context does not expose both, use
sent-account-readinessto inspect the authorized scope before continuing. - Reauthorize in the client when the requested organization or Sender Profile differs from the active grant. Do not simulate a scope switch with payload fields.
- Minimize sensitive output. Mask phone numbers where practical and do not repeat message bodies after the operator has reviewed them.
If MCP is unsupported or authorization fails, keep the skill usable for payload planning. Explain that execution requires a compatible client or reauthorization; never ask the user to paste a credential.
Inspect a message
- Use
messages.getfor the current record when a message identifier is known. - Use
messages.activities.listfor lifecycle events and delivery evidence. - State that an accepted or queued send is not proof of delivery. Report delivered only when the returned state or activity establishes delivery.
- Return identifiers, timestamps, and status evidence needed to answer the question, masking recipient data and omitting the message body unless it is necessary.
For aggregate trends, funnels, or root-cause analysis across many delivery records, hand off to messaging-performance-analyzer.
Prepare a send
- Resolve the intended channel, Sender Profile, recipient, template or content, variables, scheduling inputs, and any idempotency field the tool supports. Do not invent missing values.
- For a high-volume send, use
sent-account-readinessto checkbalance.getbefore preparing the mutation. Stop if the available balance or account readiness is insufficient or unclear. - Build the exact
messages.sendarguments without calling the tool. - Show a payload preview that includes the selected organization, Sender Profile, channel, exact destination, content or template identifier, variables, and scheduling/idempotency inputs. Show sensitive content once only; mask it where the operator can still verify the target.
- Ask for explicit confirmation for this exact payload. General approval given earlier in the conversation is not sufficient.
- Call
messages.sendimmediately after that confirmation. If any payload value, scope, or elapsed context changes, discard the confirmation and preview again.
Never call messages.send without the preview and explicit confirmation immediately before the call.
Handle results and retries
- Report the message identifier and the returned acceptance state. Say "accepted" or "queued" when that is all the response establishes; do not say "delivered."
- Use
messages.getormessages.activities.listwhen the user asks for subsequent delivery state. - Treat every retry as a new mutation: reconstruct the payload, show a fresh preview, and obtain new explicit confirmation immediately before the retry.
- Never blindly retry an ambiguous send. If the first call times out or its outcome is unknown, inspect
messages.getandmessages.activities.listwhen an identifier exists. Without conclusive evidence, report the unknown outcome and duplication risk. Only attempt another send after the operator chooses to do so and completes a new preview and confirmation.
Related skills
More from sentdm/sent-plugin and the wider catalog.

sent-profile-provisioning
Execute Sent Sender Profile lifecycle: create, complete, and manage profiles with inheritance, billing, WhatsApp, and user roles.

sent-routing-strategist
Understand Sent message routing: automatic vs. pinned channels, fallback behavior, and status interpretation.

sent-templates
Browse, find, inspect, and delete Sent templates via MCP tools.

sent-two-way-messaging
Design inbound and conversational Sent flows with consent, keywords, and channel-specific handling.

sent-webhook-engineer
Build and debug Sent v3 webhook receivers with signature verification, replay rejection, and delivery-log triage.

sms-10dlc-registration
Prepare and validate US A2P 10DLC brand and campaign registration for SMS compliance.