Skip to main content
Glama
ingalgi-krishna

Dunefox Voice MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DUNEFOX_ORG_IDYesYour Dunefox Voice workspace's org id, shown next to the API key in Settings → Developer.
DUNEFOX_API_KEYYesYour Dunefox Voice API key, created in Settings → Developer. The key is shown once; save it immediately.
DUNEFOX_API_BASE_URLNoOptional base URL for the Dunefox Voice API. Set only if your workspace runs somewhere else, such as a self-hosted deploy or staging environment.https://voice.dunefox.io

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

Confirms the API key and org id are valid, and returns the workspace's name. Call this first if a tool starts failing with 401s.

list_agentsA

This workspace's AI agents: id, name, active. Enough to choose one for place_call or send_announcement. For an agent's full setup (prompt, voice, one-way script), use get_agent — it needs the separate "agents" scope.

get_agentA

An agent's full configuration: prompt, voice/model params, knowledge base, handoff rules, integrations, and its one-way script if it has one. Needs the "agents" scope.

create_agentA

Create a conversational (two-way) or one-way (script-only, no listening) agent. Same rules as the dashboard builder, including the plan's agent limit and provider/language restrictions. For a one-way agent, set communication:"one_way" and pass announcement:{script, useCase}. Needs the "agents" scope.

update_agentB

Change any of an agent's fields. Send only what changes - fields left out are untouched. Needs the "agents" scope.

delete_agentB

Permanent. Does not touch calls it already placed - only the agent record. Needs the "agents" scope.

list_campaignsB

This workspace's outbound campaigns. Needs the "campaigns" scope.

get_campaignA

A campaign's full settings and live counters (callsPlaced, callsCompleted, callsConnected). For outcomes/sentiment/the numbers it collected, use get_campaign_report instead.

create_campaignA

Create an outbound campaign against a lead group or a filter. Starts as "draft" - call update_campaign with status:"running" to actually dial. Same trial block, concurrency cap and calling-hours narrowing as the dashboard. Needs the "campaigns" scope, and the workspace's campaigns entitlement.

update_campaignA

Change settings, or change status. status:"running" starts dialling (kicks the dialer right away - real calls start going out), "paused" holds it, "cancelled" stops it for good. Fires the campaign.status_changed webhook, if the workspace has one subscribed.

delete_campaignB

Permanent. Does not touch calls it already placed. Needs the "campaigns" scope.

get_campaign_reportB

Did it work, and what did it collect: per-lead outcome, sentiment, talk time, intent score, and the phone numbers/names the agent was told. Set csv:true for a spreadsheet-ready export instead of JSON.

place_callA

Starts a real conversational call from this workspace's own number. Behind the same gates as the dashboard: the do-not-call list, calling hours, wallet balance and concurrency. A refusal carries a code (suppressed, outside_hours, wallet_low, ...) to branch on. Needs the "dial" scope, which no key holds by default. For a fixed script with no listening (an order update, a reminder), use send_announcement instead - it is far cheaper.

list_callsA

This workspace's calls, newest first, with outcome/sentiment/summary once analysed. Needs the "calls" scope.

get_callA

A call's full record - outcome, sentiment, summary, extracted details - with its transcript and lead merged in.

get_transcriptC

The turn-by-turn transcript of one call.

send_announcementA

Plays a one-way agent's fixed script to one number - a delivery update, a payment reminder, a COD confirmation. Text-to-speech only, no conversation, billed at the one-way rate (far cheaper than place_call). Values are formatted for speech before the call (amounts in words, dates as dates); a script field with no value is refused by name rather than skipped mid-sentence. externalId makes retries safe: the same reference answers with the first send instead of ringing again.

get_announcementC

queued, ringing, delivered, no-answer, busy, or a refusal code - never the phone number or the message text.

list_leadsB

This workspace's leads, newest first. Needs the "leads" scope.

create_leadA

Creates a lead, or returns the existing one with that phone number (201 created, 200 found - check the tool's isError/status if that distinction matters to you).

get_lead_for_callC

The lead record linked to a given call.

list_webhooksA

This workspace's outbound webhook endpoints. Needs the "webhooks" scope.

create_webhookA

Subscribes a URL to one or more events (call.started, call.ended, call.analyzed, lead.created, campaign.status_changed, or "*" for all of them). Returns the signing secret ONCE - store it, it cannot be read back later.

delete_webhookD

Permanent.

get_webhook_samplesA

Recent real events of one type, in the exact shape a live delivery POSTs - useful for building a receiver before anything has fired for real.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 25 tools

Disambiguation4/5

Most tools have clearly distinct resource/action purposes, and descriptions actively disambiguate easily confused pairs like get_campaign vs. get_campaign_report, get_call vs. get_transcript, and place_call vs. send_announcement. Some boundaries remain slightly soft, particularly around call detail vs. transcript retrieval and agent listing vs. agent detail, but an agent can generally select correctly.

Naming Consistency5/5

The tool set uses a highly consistent snake_case verb_noun convention (list_calls, get_call, create_campaign, update_agent, delete_webhook, etc.). The few special cases such as whoami and get_lead_for_call are conventional and still readable, without mixing camelCase or conflicting verb styles.

Tool Count3/5

At 25 tools, the server is on the heavy side for the apparent scope, covering campaigns, calls, agents, leads, webhooks, and announcements. The domain is broad enough that many tools earn their place, but the surface is close to the rubric's borderline-heavy range and could benefit from consolidation.

Completeness3/5

Core lifecycles for campaigns and agents are well covered, including create, read, list, update, delete, and reporting. However, there are notable gaps such as lead update/delete, announcement listing or cancellation, and webhook update/detail operations, which may force workarounds for full lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessNo issues