AI Voice Agents

Using the WFW MCP Server with Claude Code

Workforce Wave

April 17, 20265 min read
#claude-code#developers#integration#mcp

The WFW MCP server turns Claude Code into a natural language interface for your voice agent infrastructure. Instead of writing API calls to provision an agent, check call logs, or analyze transcripts, you tell Claude what you want and it uses the MCP tools to make it happen.

This post covers setup and two practical demos: provisioning an agent and querying call data.

What the MCP Server Exposes

The WFW MCP server provides 14 tools:

ToolWhat it does
list-agentsList all agents for your account
create-agentProvision a new voice agent (wraps POST /v2/agents)
get-agentGet agent details and status
update-agentUpdate agent configuration
delete-agentDeactivate an agent
initiate-callTrigger an outbound call
list-callsList calls with filters (agent, date range, outcome)
get-callGet call details
get-transcriptGet full transcript for a call
list-transcriptsBatch transcript fetch (up to 50 calls)
get-operationCheck async operation status
list-operationsList pending operations
list-webhooksList webhook subscriptions
create-webhookSubscribe to events

The MCP server handles authentication automatically. You configure it once with your service account credentials; every tool call uses them.

Configuration

Add the WFW MCP server to your Claude Code configuration. In your project's CLAUDE.md or in ~/.claude/CLAUDE.md:

## MCP Servers

The WFW MCP server is configured for voice agent management.
Tools available: list-agents, create-agent, get-agent, initiate-call,
list-calls, get-transcript, get-operation, and more.
Use these tools when managing WFW voice agents or analyzing call data.

For claude_desktop_config.json (if using Claude Desktop alongside Claude Code):

{
  "mcpServers": {
    "workforce-wave": {
      "command": "npx",
      "args": ["-y", "@workforcewave/mcp-server"],
      "env": {
        "WFW_CLIENT_ID": "sa_your_service_account_id",
        "WFW_CLIENT_SECRET": "sk_live_your_secret",
        "WFW_BASE_URL": "https://api.workforcewave.com"
      }
    }
  }
}

The MCP server manages token refresh automatically. Your credentials stay in the environment; Claude never sees the raw secret.

Demo 1: Provision an Agent

Say to Claude Code:

"Create a voice agent for my dental practice at ridgelinedental.com"

Claude will use the create-agent tool:

Claude: I'll create a voice agent for Ridgeline Dental now.

[Using create-agent]
→ name: "Ridgeline Dental AI"
→ business_url: "https://ridgelinedental.com"
→ template_id: "dental_receptionist"
→ Idempotency-Key: "provision-ridgeline-2026-07-17"

Result: operation_id: op_abc123, status: pending, estimated_seconds: 90

Now polling for completion...

[Using get-operation: op_abc123] → status: pending (34s elapsed)
[Using get-operation: op_abc123] → status: pending (67s elapsed)
[Using get-operation: op_abc123] → status: active

Your agent is live:
  Agent ID: agt_xyz789
  Phone number: +1 (843) 555-2847
  Scout confidence: high (23 pages crawled, 4 KB documents)

Callers can reach Ridgeline Dental's AI receptionist at that number now.
Want me to set up webhook notifications for this agent?

Claude handles the async polling loop, surfaces the result in plain English, and offers the logical next step. You didn't write a single line of code or open a terminal.

Demo 2: Analyze Call Data

After the agent has been running for a week:

"What were the most common call topics this week, and did we miss any appointment bookings?"

Claude will use list-calls to get the week's calls, then list-transcripts to fetch up to 50 transcripts in batch, then synthesize:

Claude: Let me pull this week's call data.

[Using list-calls]
→ agent_id: agt_xyz789
→ date_range: { start: "2026-07-10", end: "2026-07-17" }
→ Result: 47 calls

[Using list-transcripts]
→ call_ids: [47 IDs]
→ Result: 47 transcripts with extractions

Analysis of 47 calls (July 10–17):

Top intents:
  appointment_schedule    22 calls (47%)
  insurance_question      11 calls (23%)
  hours_inquiry            7 calls (15%)
  other                    7 calls (15%)

Outcomes:
  Appointment booked:     18/22 scheduling calls (82%)
  Transferred to staff:    3/22 (13%)
  Caller hung up:          1/22 (5%)

Potential missed bookings:
  3 calls classified as appointment_schedule ended with
  disposition: "transferred" after the agent said it couldn't
  access availability. These may represent booking attempts
  that didn't complete. Call IDs: call_001, call_019, call_034.

Want me to pull the full transcripts for those three calls?

This analysis — 47 calls, structured extractions, pattern recognition, specific call IDs for follow-up — took one sentence of input and about 15 seconds.

Why This Matters: WFW as Controllable Infrastructure

The MCP integration makes WFW a natural language-controllable infrastructure layer. The practical applications:

  • Onboarding scripts: "Provision agents for all practices in this CSV" — Claude reads the CSV, calls create-agent for each, reports status
  • Monitoring: "Are any of my agents showing degraded performance this week?" — Claude uses list-calls with outcome filters
  • Debugging: "Get the transcript for the last call that triggered an escalation" — Claude queries by escalation flag
  • Bulk updates: "Update the business hours in all my agents' KB" — Claude can batch update-agent calls with the new configuration

Security: Scope Your MCP Credentials

The MCP server uses whatever service account credentials you give it. For exploratory queries, use a read-only service account:

// Read-only service account for analysis sessions
{
  "WFW_CLIENT_ID": "sa_readonly_id",
  "WFW_CLIENT_SECRET": "sk_live_readonly_secret"
  // Scopes: agents:read, calls:read — no write access
}

A read-only MCP configuration means Claude can analyze and report but cannot create, modify, or delete agents. Use this for shared development environments or when you want to give a team member Claude Code access to call data without provisioning permissions.

Keep your write-scoped service account credentials separate, in a configuration you use intentionally for provisioning sessions.


Next in this series: White-Labeling a Voice AI Platform in 3 Days — the fastest path from zero to a branded voice AI product.

Share this article

Ready to put AI voice agents to work in your business?

Get a Live Demo — It's Free