mcpField
V
Voxplo

Voxplo

Remote
voxplo.aiCommunication1Updated 17w ago

About Voxplo

Voxplo is an MCP server for AI agents to place outbound phone calls, guide conversations toward an objective, and retrieve results. It supports appointment scheduling as well as call summaries, transcripts, and structured extracted fields.

Key features

  1. 01Place objective-driven outbound calls
  2. 02Arrange appointments by phone
  3. 03Retrieve call status and results
  4. 04Access summaries, transcripts, and extracted fields

Use cases

  1. 01Confirm details through an outbound call
  2. 02Schedule a meeting with a contact
  3. 03Review call transcripts and extracted data

MCP support

Exposes `place_call`, `set_appointment`, `get_call`, and `list_calls` tools to MCP clients. It is available as a hosted Streamable HTTP server or a local stdio server.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://mcp.voxplo.ai/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Packages
npmvoxplo-mcp0.1.1

Tools

4
ParameterTypeRequiredDescription
tostringYesDestination phone number in E.164, e.g. +14155550123.
fieldsarrayNoStructured fields to extract from the call.
contextstringNoBackground context for the assistant.
navModeenumNoHow to navigate the far-end IVR: auto (detect keypad menu vs conversational assistant live), keypad (stay muted and press keys), or speech (talk).auto | keypad | speech
callerIdstringNoOptional caller ID; must be a number on your account.
objectivestringYesWhat the call should accomplish.
webhookUrlstringNoOptional https URL to receive the signed result.
listenFirstbooleanNoIf true, stay silent until the callee/IVR speaks first, then respond. Recommended for any outbound call into a phone tree.
accountNumberstringNoAccount/phone digits the enter_account_number tool keys deterministically (keypad chars only).
toolAllowlistarrayNoTools this call may use, e.g. ["send_digits","reached_human","add_participant","enter_account_number"]. Omit for the default set.
callbackNumberstringNoOur callback DID digits the enter_callback_number tool keys (callback-to-AI mode).

Details

From the project README

voxplo-mcp

Give your AI agent a phone. This MCP server lets any MCP client (Claude, Cursor, ChatGPT developer mode, and others) place real outbound AI phone calls through Voxplo: the AI calls a person, conducts the conversation toward an objective, and returns a summary, transcript, and structured extracted fields.

  • Hosted (remote) server: https://mcp.voxplo.ai/mcp (Streamable HTTP + OAuth, no install)
  • Local (stdio) server: npx voxplo-mcp (this package)
  • Docs: https://voxplo.ai/docs/agent-api/mcp
  • Tools: place_call, set_appointment, get_call, list_calls

Option A: hosted server (recommended)

No install. Add https://mcp.voxplo.ai/mcp as a remote MCP server in your client:

{
  "mcpServers": {
    "voxplo": { "type": "streamable-http", "url": "https://mcp.voxplo.ai/mcp" }
  }
}

In Claude: Settings, then Connectors, then "Add custom connector", paste https://mcp.voxplo.ai/mcp. Your browser opens Voxplo's consent screen; approve by pasting an Agent API key from your Developers page. The client never sees the key itself, only an OAuth token.

Option B: local server (this package)

Prerequisites: Node 18+, a Voxplo Agent API key (starts with bys_ak_, from your Developers page).

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on your OS:

{
  "mcpServers": {
    "voxplo": {
      "command": "npx",
      "args": ["-y", "voxplo-mcp"],
      "env": { "VOXPLO_API_KEY": "bys_ak_your_key_here" }
    }
  }
}
Cursor

Add the same block to .cursor/mcp.json in your project (or the global ~/.cursor/mcp.json).

To point at a staging or self-hosted instance, add "VOXPLO_API_BASE": "https://staging.example.com" to the env block.

Tools

place_call

Places an outbound AI phone call toward an objective. Returns a callId immediately; the call runs asynchronously. Poll get_call with that callId until status is terminal.

Inputs:

FieldTypeRequiredDescription
tostringyesDestination number in E.164 (e.g. +14155550123)
objectivestringyesWhat the call should accomplish
contextstringnoBackground context for the assistant
fieldsarraynoStructured fields to extract (up to 20 items: { name, type?, description? })
webhookUrlstringnoHTTPS URL to receive the signed result when the call ends
callerIdstringnoCaller ID override; must be a number on your account

Returns: { callId, status } where status is queued on success.

set_appointment

Places an outbound AI phone call to set up a meeting. The assistant calls the person, agrees a time, and the result (poll get_call) carries an outcome (appointment_set | callback_requested | declined | no_answer | failed) and, when set, the appointment details (startISO, timezone, durationMinutes, attendee, subject). Returns a callId immediately.

Inputs:

FieldTypeRequiredDescription
tostringyesWho to call, in E.164
subjectstringyesWhat the meeting is about
durationMinutesnumbernoMeeting length in minutes (default 30)
timePreferencestringnoNatural-language window, e.g. "weekday mornings next week"
slotsarraynoSpecific start times to offer: [{ startISO }], ISO-8601 with offset
timezonestringnoIANA timezone for the appointment, e.g. Asia/Jerusalem
autoBookbooleannoAlso book the agreed time on your connected calendar
webhookUrlstringnoHTTPS URL to receive the signed result
callerIdstringnoCaller ID override; must be a number on your account
get_call

Fetches the current status and result of a call.

Inputs:

FieldTypeRequiredDescription
callIdstringyesThe callId from place_call or set_appointment

Returns: { id, status, summary, transcript, extracted, recordingUrl, to, objective, startedAt, endedAt, durationSec, error? }

list_calls

Lists recent calls placed by your account (most recent first).

Inputs:

FieldTypeRequiredDescription
limitnumbernoMax calls to return (default 20, max 100)

Returns: { calls: [ { id, to, objective, status, summary, createdAt, startedAt, endedAt, durationSec, error? } ] }

Call statuses

StatusTerminal?Meaning
queuednoCall accepted, not yet dialing
ringingnoDialing the destination
in_progressnoCall is live
completedyesCall finished normally
no_answeryesDestination did not pick up
voicemailyesReached voicemail
declinedyesCall was rejected
failedyesTechnical failure

Place your first call

  1. Configure your MCP client as above.
  2. Ask your assistant: "Place a call to +14155550123 with the objective: confirm the meeting time for tomorrow at 2pm."
  3. The assistant calls place_call and gets back a callId.
  4. Ask: "Check on call <callId> -- did it complete?"
  5. The assistant calls get_call and returns the status, summary, and any extracted fields.

Safety

Outbound destinations are screened server-side (premium-rate, satellite, and other high-risk routes are blocked), calls carry an AI disclosure when asked, and the call-placing tools are annotated openWorldHint: true so clients ask for confirmation before dialing. Details: https://voxplo.ai/security

Development

Run tests:

node --test

Smoke test (with dummy key, should print "ready on stdio" to stderr):

VOXPLO_API_KEY=bys_ak_test node src/server.js

Links

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.