com.dialfetch/dialfetch
Give your AI agent a phone: place calls, navigate IVRs, wait on hold, get structured answers.
Links
README
From the repo.
Dialfetch MCP — give your AI agent a phone ☎️
Connect Dialfetch to Claude, Cursor, VS Code, Windsurf, Cline, the Claude Agent SDK — or any Model Context Protocol client — and your agent can place real phone calls. It navigates IVR phone trees, waits on hold, talks to humans (including after a transfer), and hands back structured answers, a transcript, and a recording.
Give it a phone number and a plain-language goal. Goal in, result out.
"Call the pharmacy at +1 305-555-0148 and tell me what time it closes today." →
{ answers: { closing_time: { value: "9:00 PM", quote: "We close at nine tonight." } } }
- 🔌 Endpoint:
https://app.dialfetch.com/api/mcp(Streamable HTTP + SSE) - 🔑 Auth: API key (
Authorization: Bearer df_…) or one-click OAuth for custom connectors - 📚 Full docs: https://app.dialfetch.com/docs/mcp
- 🌐 Industry-agnostic: retail & pharmacy hours, flight/travel status, order & claim status, license & insurance verification, government & utility lines
Quick connect
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit config):
{
"mcpServers": {
"dialfetch": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://app.dialfetch.com/api/mcp",
"--header", "Authorization: Bearer df_YOUR_KEY"]
}
}
}
Claude.ai (web) — custom connector
Settings → Connectors → Add custom connector → paste https://app.dialfetch.com/api/mcp and
finish the one-click OAuth sign-in. No API key to paste.
Cursor
~/.cursor/mcp.json:
{
"mcpServers": {
"dialfetch": {
"url": "https://app.dialfetch.com/api/mcp",
"headers": { "Authorization": "Bearer df_YOUR_KEY" }
}
}
}
VS Code (Copilot agent mode)
.vscode/mcp.json:
{
"servers": {
"dialfetch": {
"type": "http",
"url": "https://app.dialfetch.com/api/mcp",
"headers": { "Authorization": "Bearer df_YOUR_KEY" }
}
}
}
More configs (Windsurf, Cline, Agent SDK) are in configs/.
Tools
| Tool | Inputs | Does |
|---|---|---|
place_call | phone, goal, extract?, context?, disclose_ai?, from_number_id?, max_duration_minutes?, webhook_url? | Start a goal-call; returns { call_id, status } (async) |
get_call | call_id | Status, outcome, answers, notes, transcript, recording URL |
wait_for_call | call_id, timeout_seconds? | Block (with progress) until the call is terminal |
cancel_call | call_id | Cancel a queued / in-progress call |
list_calls | status?, limit?, cursor? | Recent calls, newest first |
get_call_recording | call_id | Short-lived presigned audio URL |
list_phone_numbers | — | Caller-ID numbers you own |
get_pricing | — | Per-call / per-number pricing |
get_credit_balance | — | Prepaid credit balance |
Resource: dialfetch://calls/{id} · Prompts: check_store_hours, verify_license, get_order_status
How calls work
Calls are asynchronous (typically 2–10 minutes; longer with holds or transfers):
place_call({ phone, goal, extract })→{ call_id, status: "queued" }- Poll
get_call({ call_id })(or usewait_for_call) untilstatusiscompleted/failed/canceled - Read
answers,transcript,recording_url
Recipes
Safety
Calls disclose they are an AI by default. The agent will not read out or collect sensitive personal data (SSNs, passwords, full card numbers). Goal-screening, credit holds, and rate limits apply to every call and can't be bypassed by a client.
Links
- Product & sign-up: https://app.dialfetch.com
- MCP docs: https://app.dialfetch.com/docs/mcp
- REST API docs: https://app.dialfetch.com/docs
License
MIT — see LICENSE.
Config for your environment
Use the endpoint URL below in your config. No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "https://app.dialfetch.com/api/mcp"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.