NetBird
sms_send
Send one SMS to a single recipient. Supply either `text` (with `category` and `from`) or a stored `template` (by ID or slug, with its `parameters`). The response is the accepted message with its ID; delivery is asynchronous, so use `sms_get` to check status. Browse templates with `sms_templates_list`.
Remote bird/mcp
Remote (network-hosted)
Other tools also called sms_send?
See providers with this name
Input Schema
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "Recipient phone number in E.164 format (for example +14155550100). One recipient per message. The number is stored and returned in canonical E.164; a recipient that cannot be routed returns a 422 SMSInvalidRecipient."
},
"from": {
"type": "string",
"description": "Sender to send from. Use an E.164 number such as +15557654321, or a short code of 5-6 digits. You can also use an alphanumeric sender ID of 1-11 letters, digits, spaces, dashes, or underscores. It must contain at least one letter, for example MyBrand. A numeric sender must be a number your workspace owns; an alphanumeric sender is accepted where the destination country permits one. Required on a free-text send: omitting it returns a 422 SMSNoEligibleSender. Not accepted alongside template, which selects its sender automatically."
},
"tags": {
"type": "object",
"description": "Structured {name, value} labels for filtering and analytics. Tags become first-class query dimensions: filter the list endpoint by tag name, slice analytics by tag, and surface in webhook payloads. Maximum 20 tags per send. Use tags for low-cardinality dimensions (category, experiment_variant). For arbitrary structured context you do not need as a filter dimension, use metadata instead.",
"additionalProperties": {
"type": "string"
}
},
"text": {
"type": "string",
"description": "Free-text message body. Required unless template is supplied (the two are mutually exclusive). At least 1 character, up to a 12-segment cap (roughly 1836 GSM-7 or 804 UCS-2 characters). Bird does not truncate; a body exceeding 12 segments is rejected with a 422. The cap applies to segments because GSM-7 and UCS-2 encodings differ in characters per segment."
},
"options": {
"type": [
"null",
"object"
],
"properties": {
"track_clicks": {
"type": [
"null",
"boolean"
]
},
"smart_encoding": {
"type": [
"null",
"boolean"
]
},
"max_price_per_segment": {
"type": [
"null",
"number"
]
}
},
"description": "What Bird does to this message on its way out, such as smart_encoding. The message being relayed stays at the top level: its recipient, sender, content, and the delivery instructions the carrier acts on.",
"additionalProperties": false
},
"category": {
"type": "string",
"examples": [
"transactional",
"marketing",
"authentication",
"service"
],
"description": "Content classification. Tells Bird and carriers why you're sending; per-country compliance rules (opt-out policy, quiet hours) key on it as they roll out. Required on a free-text send; omit it on a template send, where the category is derived from the template."
},
"metadata": {
"type": "object",
"description": "Arbitrary JSON object stored on the message, returned on API reads, and echoed in webhook payloads. Maximum 2 KB serialized. Use metadata for per-send context like internal IDs and foreign keys. For low-cardinality filterable labels, use tags instead.",
"additionalProperties": true
},
"template": {
"type": [
"null",
"object"
],
"properties": {
"id": {
"type": [
"null",
"string"
]
},
"name": {
"type": [
"null",
"string"
]
},
"slug": {
"type": [
"null",
"string"
]
},
"language": {
"type": [
"null",
"string"
]
},
"parameters": {
"type": [
"null",
"object"
],
"additionalProperties": true
}
},
"description": "Send using a stored template instead of free text. Mutually exclusive with text; the message category is derived from the template, so from, category, and media_urls are not accepted alongside it.",
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"description": "Client-supplied deduplication key; a retry with the same key replays the original result instead of acting twice."
}
}
}