Skip to main content
Glama

Remove an opt-out

remove_opt_out
DestructiveIdempotent

Deletes a phone number from an account's opt-out list so SMS, MMS, or RCS messages can be sent again—only after the person has explicitly opted back in, such as texting START.

Instructions

Allow messages to a number again by deleting it from this account's opt-out list on a channel (DELETE /api/v1/sms/opt-outs/{phone}); the reverse of add_opt_out. Only do this when the person has explicitly opted back in (for example by texting START): messaging someone who opted out breaks consent rules. Requires VOBIZ_ENABLE_MESSAGING=true on the server and confirm: true. Check the current state first with check_opt_out.

Input Schema

NameRequiredDescriptionDefault
channelNosms (default; also covers mms), mms or rcs.
confirmYesMust be true after the user confirmed this person opted back in.
phone_numberYesThe number to unblock, E.164 (leading + optional).

Output Schema

NameRequiredDescriptionDefault
okNoTrue on success; false when the result is an error (then error, message and retryable are set).
channelNoChannel the change applies to: sms, mms or rcs.
opted_outNoAlways false: the number can be messaged again.
phone_numberNoThe number, normalised to E.164.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.4.2
    • addedInput schema / properties / phone_number / description
      Added value: +"The number to unblock, E.164 (leading + optional)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "channel": {
      +      "description": "Channel the change applies to: sms, mms or rcs.",
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "True on success; false when the result is an error (then error, message and retryable are set).",
      +      "type": "boolean"
      +    },
      +    "opted_out": {
      +      "const": false,
      +      "description": "Always false: the number can be messaged again.",
      +      "type": "boolean"
      +    },
      +    "phone_number": {
      +      "description": "The number, normalised to E.164.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv1.1.1

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations that already mark this as destructive and non-read-only, the description adds critical behavioral context: the consent-rule rationale, the need for VOBIZ_ENABLE_MESSAGING=true, the confirm: true requirement, and the recommendation to check state first. It does not contradict the destructive, idempotent, or open-world hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but appropriate, front-loading the tool's effect before moving to consent conditions, prerequisites, and the alternative check. Every clause adds operational value and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not explain return values. It covers the mutation's effect, the consent precondition, the server flag, the confirm requirement, and the alternative check tool, leaving no major gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents phone_number, confirm, and channel fully. The description reinforces the general roles of phone number and channel and repeats the confirm requirement, but adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: deleting a number from the account's opt-out list on a channel, explicitly naming the reverse operation (add_opt_out) and the endpoint. It clearly distinguishes itself from siblings like add_opt_out and check_opt_out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit condition for use: only when the person has explicitly opted back in, e.g. by texting START, and warns that messaging an opted-out person breaks consent rules. It also names the prerequisite server flag and directs the agent to check current state first with check_opt_out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools