Using the WFW MCP Server with Claude Code
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:
| Tool | What it does |
|---|---|
list-agents | List all agents for your account |
create-agent | Provision a new voice agent (wraps POST /v2/agents) |
get-agent | Get agent details and status |
update-agent | Update agent configuration |
delete-agent | Deactivate an agent |
initiate-call | Trigger an outbound call |
list-calls | List calls with filters (agent, date range, outcome) |
get-call | Get call details |
get-transcript | Get full transcript for a call |
list-transcripts | Batch transcript fetch (up to 50 calls) |
get-operation | Check async operation status |
list-operations | List pending operations |
list-webhooks | List webhook subscriptions |
create-webhook | Subscribe 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-agentfor each, reports status - Monitoring: "Are any of my agents showing degraded performance this week?" — Claude uses
list-callswith 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-agentcalls 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.
Ready to put AI voice agents to work in your business?
Get a Live Demo — It's FreeContinue Reading
Related Articles
The Hotel AI Called the Restaurant AI: A Story About What's Coming
When a hotel concierge AI needs to book a table at the hotel restaurant, it calls the restaurant's phone number — and the restaurant has a WFW agent. What happens? This is the A2A story.
Rate Limiting and Idempotency: What Your Bot Needs to Know
The two most important API patterns for AI consumers of the WFW API — with concrete examples and a production-ready TypeScript client.