First-party app
Plivo

Plivo

Send SMS/MMS, place and manage voice calls, search and manage phone numbers, and read account details via Plivo.

stable Communication

About

Plivo ships in the w6w first-party pack. It declares 21 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.plivo
Version
0.1.0
Author
w6w
Licence
MIT
Categories
Communication

Overview

Plivo is a CPaaS (communications platform as a service) for SMS, MMS and voice. This app lets a workflow send text and picture messages, look up what happened to them afterwards, place outbound phone calls and hang them up, and manage the phone numbers and applications on a Plivo account.

Messaging covers sending (SMS or MMS, from a number you own or a Powerpack), fetching one message record, listing message records with filters, and listing the media attached to an MMS. Voice covers placing a call, fetching and listing call detail records, listing live calls, hanging up one call, cancelling a queued call request, and reading recording metadata. Numbers covers searching Plivo’s inventory, renting a number, and listing, reading and updating the numbers already on the account. Applications (the Answer/Hangup/Message URL bundles that a number is pointed at) can be listed, read and created, and the account’s own details and credit balance can be read.

A fit for appointment reminders, one-time codes, alerting by text or call, delivery-status reconciliation, and provisioning a number for a new customer as part of an onboarding workflow.

Build with Plivo

Three routes to the same 21 actions. The Workflow tab is generated from Plivo's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Buy Phone Number

buy-phone-number

Rent a phone number from Plivo's inventory (billed).

Cancel Call Request

cancel-call-request

Cancel a pending outbound call using the request UUID that Make Call returned.

Create Application

create-application

Create an application that numbers can be pointed at.

Get Account Details

get-account

Retrieve the account's details, including its credit balance.

Get Application

get-application

Retrieve one application's URLs and settings.

Get Call

get-call

Retrieve the call detail record (duration, billing, hangup cause) of one call.

Get Message

get-message

Retrieve the detail record (state, error code, units, charges) of one message.

Get Account Phone Number

get-number

Retrieve the details of one phone number on the account.

Get Recording

get-recording

Retrieve the metadata of one call recording.

Hang Up Call

hangup-call

Hang up one ongoing call, or cancel a queued outbound call.

List Applications

list-applications

List the applications (Answer/Hangup/Message URL bundles) on the account.

List Calls

list-calls

List call detail records with optional filters.

List Live Calls

list-live-calls

List the UUIDs of all ongoing calls on the account.

List MMS Media

list-message-media

List the media files attached to an MMS message.

List Messages

list-messages

List message detail records, newest first, with optional filters.

List Account Phone Numbers

list-numbers

List the phone numbers rented on (or added to) the account.

List Recordings

list-recordings

List call recording metadata (id, duration, format, URL) with optional filters.

Make Call

make-call

Place an outbound call; Plivo fetches Plivo XML from your answer URL on pickup.

Search Available Phone Numbers

search-phone-numbers

Search Plivo's inventory for numbers that can be rented.

Send Message

send-message

Send an SMS or MMS message (or several, one per recipient).

Update Account Phone Number

update-number

Point a number at an application, or change its alias, subaccount or CNAM.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying Plivo's real ids.

{
  "manifestVersion": "2",
  "name": "plivo-example",
  "steps": [
    {
      "id": "buy-phone-number",
      "uses": {
        "app": "io.w6w.plivo",
        "action": "buy-phone-number",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "number": "<number>"
      }
    }
  ]
}

Here are some of the things you can do

  • Buy Phone Number

    perform
    buy-phone-number
  • Create Application

    perform
    create-application
  • Get Account Details

    read
    get-account
  • Get Application

    read
    get-application
  • Get Call

    read
    get-call

+16 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for Plivo, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to Plivo. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "buy-phone-number",
  payload: {
    number: "<value>",
    // appId: "<value>",
    // cnamLookup: "<value>",
    // complianceApplicationId: "<value>",
    // subaccount: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action buy-phone-number --payload '{"number":"<value>"}'

Give an AI agent Plivo — without giving it Plivo's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.plivo#buy-phone-number",
    "input": {
      "number": "<number>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's Plivo connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

Plivo's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. Plivo itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

Plivo declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

Plivo platform status

Atlassian Statuspage rollup for status.plivo.com, with per-component detail. Unauthenticated and unsigned.

quota

API quota headroom