protogrid

Search / com.blooio/mcp

Blooio

R2· OAuth, once

Send and receive iMessage, SMS, RCS, and WhatsApp, and manage contacts, chats, and numbers.

v4.1.0 · active · repository · website · descriptor JSON · versions

An agent can connect after a one-time OAuth consent by a human.Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.
Quality71needs work
Trust100of 100
Uptime, 30 days100%
Latency p50156 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "blooio": {
      "type": "http",
      "url": "https://mcp.blooio.com/v4"
    }
  }
}
claude mcp add --transport http blooio https://mcp.blooio.com/v4
[mcp_servers.blooio]
url = "https://mcp.blooio.com/v4"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "blooio": {
      "type": "remote",
      "url": "https://mcp.blooio.com/v4",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "blooio": {
      "type": "http",
      "url": "https://mcp.blooio.com/v4"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=blooio&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmJsb29pby5jb20vdjQifQ%3D%3D"
}
{
  "servers": {
    "blooio": {
      "type": "http",
      "url": "https://mcp.blooio.com/v4"
    }
  }
}
{
  "mcpServers": {
    "blooio": {
      "httpUrl": "https://mcp.blooio.com/v4"
    }
  }
}
extensions:
  "blooio":
    enabled: true
    name: "blooio"
    type: streamable_http
    uri: "https://mcp.blooio.com/v4"
    timeout: 300

Quality 71 / 100needs work

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorization83 · weight 15
  • pass
    auth.prmProtected Resource Metadata (RFC 9728) published
  • pass
    auth.as_metadataauthorization server metadata reachable
  • warn
    auth.cimdonly Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene50 · weight 30
  • warn
    tools.descriptions18 of 120 tools have a description under 20 characters
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations120 of 120 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: me (idempotentHint); get_my_default_priority (idempotentHint); list_numbers (idempotentHint); …
  • fail
    tools.token_costabout 33,755 tokens to load every tool, a large share of an agent's context
  • warn
    tools.api_dump120 tools, 73% named like REST operations: looks like an API mapped one endpoint per tool
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

120 tools, about 33,755 tokens to load them all · tool set 789ef1283c05 · checked 2026-11-07 11:21 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 100 / 100

provenance100
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% +updated-7d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.blooio.com/v4 streamable-httpoauth2 AS: https://mcp.blooio.comyes100%156 ms–2026-11-07

Tools (120)

add_contact_identityAttach an identity Attaches a phone/email identity (on a channel type) to a contact.
add_contact_tagsAdd contact tags
add_reactionReact to a message Adds or removes a tapback reaction on any message in the chat — inbound (received) or outbound — addressed by the message `id` from the List messages endpoint. Use a `+` prefix to add and `-` to remove (e.g. `+love`, `-love`). Returns 404 if the message isn't in the chat and 409 if it hasn't been dispatched to the device yet. Blooio channels only.
add_ticket_commentReply to a ticket Adds a reply. A ticket waiting on you moves back to `in_progress`. Closed tickets and tickets whose `can_comment` is false return `403`. OAuth apps need `tickets:write`.
answer_callAnswer a call Answer an inbound call that's ringing, or take a call a Blooio agent handed off, with `handler`. The first answer wins; any later one gets `409 call_not_ringing`. OAuth apps need `calls:write`.
appeal_ten_dlc_campaignAppeal a campaign Ask for a rejected campaign (`review_failed` or `mno_rejected`) to be reviewed again, saying what you fixed. OAuth apps need `numbers:manage`.
batch_lookup_phone_numbersBatch phone number lookup Looks up up to 100 phone numbers. Requires an enterprise plan.
buy_numbersBuy numbers Buy 1 to 10 US local numbers found with `GET /numbers/available`, with `products` turned on. The purchase finishes asynchronously: the response is a `provisioning` purchase, and `number.purchase.completed` or `number.purchase.failed` fires when it settles (or poll `GET /numbers/purchases/{purchaseId}`). Retrying with the same `Idempotency-Key` and body returns the same purchase. An SMS number sends texts once it's assigned to a provisioned 10DLC campaign, which Blooio does automatically when the organization has one. OAuth apps need `numbers:manage`.
contact_capabilitiesCheck if a phone number or email is reachable via iMessage / SMS / RCS. Resolves (or creates) the contact for that identifier, then returns its capabilities. Creating the contact is a side effect.
create_chatFind or create a chat Finds or creates a 1:1 chat with a recipient on a channel. Returns the chat (with `created` indicating whether it was newly created).
create_contactCreate a contact Creates a contact, optionally with one identity (phone/email on a channel type).
create_groupCreate a group Creates a group chat on a group-capable channel (blooio/whatsapp) with one or more members. No iMessage conversation exists yet: the first message sent to the group opens it, and `chat_linked` becomes `true` once it does. There is no separate linking step.
create_priorityCreate a priority Creates a channel priority. Channels sharing a `priority` (and type) form a pool; ascending priority is the send-time waterfall. The first priority created for a key becomes its default unless `is_default: false` is set.
create_ten_dlc_campaignCreate a campaign Register a campaign under the organization's registered brand. The registry and carriers review it asynchronously; `registration.campaign.updated` fires as its `status` changes. Once a campaign reaches `mno_provisioned`, Blooio assigns the organization's unassigned SMS numbers to its oldest provisioned campaign. OAuth apps need `numbers:manage`.
create_ticketOpen a ticket Opens a support ticket for the Blooio team. Every ticket opens at `medium` priority; only Blooio support changes it, so sending `priority` returns `422 priority_not_allowed`. To request call forwarding, prefer `POST /me/numbers/{number}/call-forwarding`, which takes the destination as a field. OAuth apps need `tickets:write`.
create_webhookCreate a webhook Subscribes an HTTPS endpoint to events. Returns the signing secret once, on creation.
decide_bloobability_v2Decide policies against a conversation Decides every policy you send against one conversation with Bloobability v2. Each result carries two calibrated numbers in [0, 1]: `probability` (the policy holds) and `answerable` (the conversation contains enough to judge it). There is no verdict and no threshold: choose your own. A low `answerable` never changes `probability`.
delete_contactdestructiveDelete a contact Soft-deletes a contact and its identities.
delete_groupdestructiveDelete a group
delete_prioritydestructiveDelete a priority
delete_webhookdestructiveDelete a webhook
get_blooio_purchaseread-onlyGet purchase status Poll the status of an asynchronous number purchase by its `purchase_id`. Returns `pending`/`provisioning`, `completed` (with the provisioned allocations), or `failed`. Requires the `numbers:read` scope for OAuth apps.
get_callread-onlyGet a call One of the organization's calls. OAuth apps need `calls:read`.
get_call_transcriptread-onlyGet a call transcript What was said on a call while a Blooio agent had it, in order. Empty for calls no agent took. Lines are added while the call is up. OAuth apps need `calls:read`.
get_channelread-onlyGet a channel
get_channel_capabilitiesread-onlyGet channel capabilities Returns supported protocols, content types, actions, and interactive features for a channel.
get_channel_healthread-onlyGet line health Messaging health for one dedicated or inbound Blooio line: its live safety state plus reply, delivery, and risk metrics over the trailing `days`. Built for polling.
get_channel_settingsread-onlyGet channel settings Per-channel settings for channel types that support them. `settings` and `available` are per channel type: Blooio (P2P numbers) exposes `auto_mark_read`, `auto_share_contact`, and `imessage_only`; Apple Messages for Business and WhatsApp Business expose `opener`; Blooio Voice exposes `inbound`, who answers the number's calls and how long they ring. `available[key]` says whether THIS channel may turn `key` on (type-gated). A channel whose type has no settings yet returns `403 settings_unsupported_for_channel_type`.
get_chatread-onlyGet a chat The chat of a group that was merged into another group on its first send returns the surviving group's chat on the same number.
get_chat_backgroundread-onlyGet chat background Reads the chat's background image (Blooio channels). Reads live from the device.
get_chat_focusread-onlyRead Focus status Reads whether the other person in the chat has notifications silenced by a Focus, as their device shares it over iMessage. `silenced` means new messages arrive quietly; to break through for a message you sent, use Notify Anyway. `unknown` means the device has no status for this person (for example, a handle Messages has not seen yet, or someone who does not share Focus status). Apple does not expose a way to turn another person's Focus on or off. Returns 409 for group chats and non-Blooio channels.
get_contactread-onlyGet a contact
get_contact_capabilitiesread-onlyGet contact capabilities Returns per-identity reachability/capabilities (iMessage/SMS/RCS, etc.) for a contact. For iMessage (blooio) identities this is a LIVE per-number lookup performed by an active iMessage channel — the request is rejected with 409 if the API key has no active iMessage (blooio) channel provisioned.
get_contact_cardread-onlyGet a number's contact card
get_contact_timelineread-onlyGet contact timeline A single, chronological cross-channel activity feed for a contact, unifying every conversation the contact takes part in — both 1:1 chats keyed on the contact's identities and group chats where the contact is a current member — across all channel types. After a merge, the survivor's timeline includes the absorbed contact's history automatically. Each entry is a polymorphic envelope tagged by `type`; ordered newest-first by `occurred_at`. By default only `message` entries are returned; pass `include_events=true` to interleave lifecycle and chat events.
get_eventread-onlyGet an event
get_groupread-onlyGet a group A group id that was merged into another group on its first send (see Create a group) returns the surviving group. Compare the returned `id` with the one you asked for to pick up the canonical id.
get_location_contactread-onlyGet one Find My contact
get_messageread-onlyGet a message
get_message_statusread-onlyGet message status Lightweight delivery status of a message.
get_my_default_priorityread-onlyGet the key's default priority Returns the calling API key's default channel priority, or `{ "data": null }` when none is configured (in which case the agnostic send falls back to the implicit Blooio pool of the key's own numbers).
get_numberread-onlyGet a number One of the organization's numbers, with its products and channels. OAuth apps need `numbers:read`.
get_number_purchaseread-onlyGet a number purchase A purchase made with `POST /numbers`. Its numbers appear in `GET /numbers` once it's `completed`. OAuth apps need `numbers:read`.
get_poll_resultsread-onlyGet poll results
get_priorityread-onlyGet a priority
get_ten_dlc_brandread-onlyGet the brand The organization's 10DLC brand. OAuth apps need `numbers:read`.
get_ten_dlc_campaignread-onlyGet a campaign One of the organization's 10DLC campaigns. OAuth apps need `numbers:read`.
get_ten_dlc_optionsread-onlyList registration options The entity types, verticals, and campaign use cases a brand and campaign can name. OAuth apps need `numbers:read`.
get_ten_dlc_usecase_qualificationread-onlyCheck a use case Whether the organization's brand qualifies for a campaign use case, and how many sub use cases it takes. OAuth apps need `numbers:read`.
get_ticketread-onlyGet a ticket Returns one ticket. Poll this to check a call-forwarding request: its `forwarding.state` reads `pending`, `in_progress`, `completed`, or `failed`, and a closed ticket always reads `completed`. OAuth apps need `tickets:read`.
get_webhookread-onlyGet a webhook
hangup_callHang up a call End a call. It ends once the carrier confirms, and `call.ended` fires. OAuth apps need `calls:write`.
list_available_blooio_numbersread-onlyList available Blooio numbers Browse Blooio number inventory available to purchase. `type=shared` returns available shared lines; `type=dedicated` returns unassigned dedicated inventory. When one or more `area_code` values are supplied with `type=dedicated` or `type=inbound`, the response is an area-code quote: each requested code is reported as either in stock (provisioned free) or requiring a custom order (a custom area-code fee applies and a provisioning ticket is opened at purchase). Requires the number purchase API feature to be enabled for the organization, and the `numbers:read` scope for OAuth apps.
list_callsread-onlyList calls The organization's calls, newest first. OAuth apps need `calls:read`.
list_channelsread-onlyList channels Lists messaging channels for the organization. Ordinary sends do not require a channel id; use this endpoint to inspect capabilities or obtain an exact channel id for advanced integrations.
list_chat_messagesread-onlyList chat messages Lists messages in a chat, newest first by default. Use `order=asc` for oldest first.
list_chatsread-onlyList chats Lists conversations, most recent first. Filter by channel type, state, channel, or contact.
list_contact_identitiesread-onlyList contact identities
list_contactsread-onlyList contacts Lists contacts. Cursor pagination is the default. Supplying `offset`, `q`, `tag`, `sort`, or `filter` switches to offset pagination and includes `pagination.total`.
list_contact_tagsread-onlyList contact tags
list_eventsread-onlyList events Unified activity feed (message lifecycle, polls, groups, reactions, typing, payments, `safety.state_changed`, `safety.number_banned`). Filter by type, chat, or message.
list_group_membersread-onlyList group members For a merged group id, lists the members of the surviving group.
list_groupsread-onlyList groups
list_location_contactsread-onlyList Find My contacts Lists Find My friends sharing their location with the linked Apple account.
list_message_eventsread-onlyList message events Lifecycle events for a message (sent, delivered, read, reactions, ...).
list_numbersread-onlyList sender numbers Lists the phone numbers / sender addresses available to this API key. Banned and suspended numbers stay in the list. `status` is `banned`, `suspended`, or `active`; a ban takes precedence when both apply. `is_active` is false when the line is banned, suspended, or the underlying account is blocked.
list_org_numbersread-onlyList numbers Every number the organization rents from Blooio, newest first: iMessage lines and Blooio SMS and Blooio Voice numbers alike, one entry per number. `products` says what each does and `channels` lists the channel behind each product. OAuth apps need `numbers:read`.
list_prioritiesread-onlyList priorities Lists channel priorities owned by the calling API key.
list_ten_dlc_campaignsread-onlyList campaigns The organization's 10DLC campaigns, newest first. OAuth apps need `numbers:read`.
list_ticket_commentsread-onlyList ticket comments Lists a ticket's public comments, oldest first: the request itself, replies from Blooio support, and your replies. OAuth apps need `tickets:read`.
list_ticketsread-onlyList tickets Lists the organization's support tickets, newest first. Includes call-forwarding requests opened with `POST /me/numbers/{number}/call-forwarding`. OAuth apps need `tickets:read`.
list_webhook_deliveriesread-onlyList webhook deliveries Recent delivery attempts for a webhook. Also available at `/webhooks/{webhookId}/logs`.
list_webhooksread-onlyList webhooks
list_webhook_versionsread-onlyList webhook payload versions Every payload version a subscription can be set to, newest first, with what each one changed. New subscriptions default to the version marked `latest`. Set a subscription's version with `api_version` on create or update.
lookup_phone_numberread-onlyLook up a phone number Returns parsed info / geocoding for a phone number. Requires an enterprise plan.
mark_chat_readMark chat as read Sends a read receipt. Blooio channels only.
meread-onlyGet the authenticated account Returns the authenticated organization, linked devices/numbers, usage, and API key validity.
merge_contactMerge a contact Collapses two auto-created contacts for the same person into one. The survivor is the `{contactId}` in the path; the `source_contact_id` in the body is absorbed into it. Every identity on the source is re-parented onto the survivor, tags are unioned, the survivor keeps its own name (falling back to the source's), and the source becomes a deprecated tombstone stamped with `merged_into`. Because chats and messages reference identities (not contacts), all conversations and timeline entries follow the moved identities automatically — nothing is rewritten or lost, and reads such as the survivor's timeline immediately reflect the merge. Idempotent: re-merging the same source into the same survivor returns 200; a source already merged into a different contact returns 409. Emits a `contact.merged` webhook event.
notify_messageNotify Anyway Breaks through the recipient's Focus for a message you sent, the same as tapping Notify Anyway in Messages. Use it when Read Focus status reports `silenced`. Calling it again for a message that was already notified succeeds. It cannot be undone. Returns 404 if the message isn't in the chat. Returns 409 for an inbound message, an SMS or RCS message, a message that hasn't been dispatched to the device yet, a group chat, or a non-Blooio channel.
place_callPlace a call Call `to` from one of the organization's Blooio Voice numbers. The call starts `ringing`; when the callee answers, `handler` takes its audio and `call.answered` fires. With an `agent` handler, the Blooio agent that owns `from` talks to the callee. OAuth apps need `calls:write`.
purchase_blooio_numbersPurchase Blooio numbers Purchase one or more Blooio lines. Purchases are asynchronous and billable: the call charges the organization's default payment method and returns a `purchase_id`; the lines are provisioned when Stripe confirms the invoice, at which point a `number.purchase.completed` webhook fires (or `number.purchase.failed`). A card requiring 3DS/SCA returns `status: action_required` with an `action_url`, and also emits `number.purchase.action_required`.
put_ten_dlc_brandRegister the brand Register the organization's brand, or resubmit it with corrected details. The registry reviews it asynchronously; `registration.brand.updated` fires as its `status` changes. A `SOLE_PROPRIETOR` brand must then verify its mobile number (`requires_otp`). OAuth apps need `numbers:manage`.
refresh_location_contactsRefresh Find My locations Forces a refresh of Find My location data from the device.
release_numberdestructiveRelease a number Give a number up. A Blooio SMS or Blooio Voice number is released to the carrier at once and its channels retired; `number.removed` fires for each channel. An iMessage line is removed the same way as `DELETE /channels/{channel}`. OAuth apps need `numbers:manage`.
remove_blooio_numberdestructiveRemove (unsubscribe) a Blooio number Removes/unsubscribes an owned Blooio line, cancelling its subscription — the same flow as the dashboard unsubscribe button. Accepts either the E.164 number or the `ch_` channel id as `{channel}`. A `reasons` array (why the customer is unsubscribing) is required; the same reason handling updates the CRM, posts to Slack, and emits a `number.removed` webhook. Requires the `numbers:manage` scope for OAuth apps.
remove_chat_backgrounddestructiveRemove chat background
remove_contact_identitydestructiveDetach an identity
remove_contact_tagdestructiveRemove a contact tag
remove_group_icondestructiveRemove group icon
replay_webhook_deliveryReplay a webhook delivery Re-sends a past delivery. Also available at `/webhooks/{webhookId}/logs/{deliveryId}/replay`.
request_call_forwardingRequest call forwarding Opens a support ticket to forward calls from an owned dedicated or inbound Blooio number. The destination must be a US E.164 number. Shared or foreign source numbers are rejected. Forwarding isn't instant: check its progress with `GET /tickets/{ticket_id}` using the returned `ticket_id`, whose `forwarding.state` reaches `completed` when calls forward. OAuth apps need `numbers:manage` to open the request and `tickets:read` to check it.
rotate_webhook_secretRotate webhook signing secret Rotates and returns a new signing secret (once).
search_available_numbersread-onlySearch available numbers US local numbers you can buy that support every product in `products`. Results are live inventory: a number can be taken between the search and the purchase. OAuth apps need `numbers:read`.
send_call_dtmfSend DTMF Play keypad tones into a connected call, to navigate a phone menu for example. OAuth apps need `calls:write`.
send_chat_messageSend a message to a chat Sends a message into an existing chat. Both the sender channel and recipient are inferred from the chat, so `from` and `to` must not be supplied. Returns the message object at the top level (not wrapped in `data`).
send_messageSend a message The primary endpoint for starting a message. The common send is entirely scalar: `{ "from": "+15551230001", "to": "+15551234567", "text": "Hello" }`.
send_message_to_channelSend a message on a specific channel Channel-scoped equivalent of `POST /messages` with an explicit `from`: `:channel` accepts the same phone number (URL-encode `+` as `%2B`), alias, or `ch_...` value `from` accepts, and the body omits `from`. Multiple recipients on a group-capable channel (blooio/whatsapp) form a single group thread; on other channels they fan out to individual sends (max 100).
send_pollSend a poll Sends a native iMessage poll to a chat. Requires a title and 2+ options. Blooio channels only.
send_ten_dlc_brand_otpSend the brand verification PIN Text a verification PIN to a `SOLE_PROPRIETOR` brand's `mobile_phone`. OAuth apps need `numbers:manage`.
set_chat_backgroundSet chat background Uploads a chat background image. Max 10MB; image/jpeg|png|gif|webp|heic|heif. Blooio channels only.
set_group_iconSet group icon Uploads a group icon. Max 10MB; image/jpeg|png|gif|webp|heic|heif. Requires the group chat to be linked on a device.
set_typingStart/stop typing indicator Shows or clears a business-to-customer typing indicator. Supported on Blooio channels and Apple Messages for Business.
share_contact_cardShare contact card Shares the sender's contact card into a chat. Blooio channels only.
stop_typingdestructiveStop typing indicator Clears the business-to-customer typing indicator. Supported on Blooio channels and Apple Messages for Business.
transfer_callTransfer a call Move a connected call to another handler, or to the phone number `to`, which takes it off Blooio once that number answers. A call a Blooio agent handed off can be transferred too. A transfer that fails partway, or a number that doesn't answer, leaves the call waiting for a teammate, as a handed-off call does. OAuth apps need `calls:write`.
update_channel_profileUpdate channel profile Partial update of the channel profile (`display_name`, `about`, `email`, `avatar`). Stored under `metadata.profile` and returned on `GET /channels/{channel}`. Null or empty string clears a field. Unknown keys are rejected. This writes Blooio metadata only; it does not push a display name to the device.
update_channel_settingsUpdate channel settings Partial update of a channel's settings (send only the keys you want to change). Keys are per channel type. Blooio (P2P numbers): `auto_mark_read` is available on dedicated and inbound lines; `auto_share_contact` is dedicated-only AND the line must have a contact card (name or photo) set up; `imessage_only` is available on every line. Apple Messages for Business and WhatsApp Business: `opener`, a partial update of the channel's opener (send only the fields you want to change). Blooio Voice: `inbound`, with `handler` (`softphone`, `agent`, or `api`) and `ring_timeout_seconds` (5 to 120); `agent` needs a live Blooio agent that owns the number. Turning a setting OFF is always allowed. Errors return a machine-readable `code`: `settings_unsupported_for_channel_type` (403, a channel type without settings), `auto_mark_read_not_allowed` / `auto_share_contact_not_allowed` (403, line type can't enable it), `contact_card_not_set_up` (403, enable auto_share_contact with no contact card), `agent_unavailable` (409, the `agent` handler on a number no live Blooio agent owns), `no_settings_provided` (422, empty update), `invalid_settings` (422, unknown key or field, a value of the wrong type, or an…
update_chatUpdate a chat Sets chat state (`open`/`closed`) on an Apple Messages for Business chat. Chats on every other channel return 422 `state_not_writable`: `closed` reflects the customer ending an Apple Messages for Business conversation, and no other protocol has an equivalent.
update_contactUpdate a contact
update_contact_cardUpdate a number's contact card Updates the contact card (name, avatar, sharing settings) shared from this number. At least one field is required.
update_contact_identityUpdate an identity Renames a contact identity in place. An optional name updates the parent contact in the same request.
update_groupUpdate a group
update_numberUpdate a number Turn a Blooio SMS or Blooio Voice number's products on and off, or assign its SMS channel to a 10DLC campaign. Turning `sms` off takes the number off its campaign. iMessage lines can't be changed here. OAuth apps need `numbers:manage`.
update_priorityUpdate a priority Updates a priority's name, default flag, and/or channel set. When `channels` is supplied it replaces the priority's channels wholesale.
update_ten_dlc_campaignUpdate campaign samples Replace a campaign's sample messages, the field carriers most often ask to change. OAuth apps need `numbers:manage`.
update_ticketUpdate a ticket's status Changes a ticket's status, for example to close a request you no longer need. Only `status` can change: `priority` is set by Blooio support and returns `422 priority_not_allowed`. Purchase, system, and billing tickets are managed by Blooio and return `403`. OAuth apps need `tickets:write`.
update_webhookUpdate a webhook Updates url, status (`active`/`disabled`), or the payload `api_version`. A version change applies to the next event delivered; deliveries already made, and replays of them, keep the version they were sent with.
upload_contact_card_avatarUpload a contact card avatar Uploads an avatar image for the number's contact card. Max 10MB.
verify_ten_dlc_brand_otpVerify the brand PIN Submit the PIN texted by `POST /10dlc/brand/otp`. OAuth apps need `numbers:manage`.
vote_pollVote on a poll Casts or toggles a vote by `option_index` (0-based) or `option` text. Blooio channels only.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.blooio/mcp",
  "icons": [
    {
      "src": "https://blooio.com/icon.svg",
      "sizes": [
        "any"
      ],
      "mimeType": "image/svg+xml"
    },
    {
      "src": "https://blooio.com/apple-touch-icon.png",
      "sizes": [
        "180x180"
      ],
      "mimeType": "image/png"
    }
  ],
  "title": "Blooio",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.blooio.com/v4",
      "type": "streamable-http"
    }
  ],
  "version": "4.1.0",
  "repository": {
    "id": "1440303671",
    "url": "https://github.com/Blooio/blooio-mcp",
    "source": "github"
  },
  "websiteUrl": "https://blooio.com/integrations/mcp",
  "description": "Send and receive iMessage, SMS, RCS, and WhatsApp, and manage contacts, chats, and numbers."
}