Dialpad MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dialpad MCP server Show me today's call history for our sales line"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dialpad MCP server
An MCP server for the Dialpad API v2. It lets Claude look up Dialpad users, offices, departments, call centers, call history, transcripts, contacts, phone numbers and analytics exports. It can also make the few changes Cititec's automations already make: contact sync, notification messages, and pausing a call event subscription.
It uses the same framework as Cititec's other MCP servers: TypeScript, @modelcontextprotocol/sdk, a stdio transport and a fail-closed HTTP transport, vitest tests, tsup and a Docker image.
Tools
Reads send GET to a fixed path. IDs are checked and URL-encoded, and no tool accepts a free-form path. List tools return one page with a next_cursor. Each item is trimmed to its main fields (full: true returns every field), and every response is capped at 60,000 characters.
Sensitive tools return personal information (call logs, transcripts, contacts, exports) or internal URLs. Make them available to administrators only.
Tool | Dialpad API | Sensitive |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| yes |
|
| yes |
|
| yes |
|
| yes |
|
| |
|
| yes |
|
| yes |
|
| |
|
| yes |
Write tools
Only the changes Cititec's N8N workflows already make are included. Each one is a single request, so on the MCP host the proposal an administrator approves is exactly what is sent.
Tool | Dialpad API | Used by (N8N) |
|
| Autotask contact sync |
|
| Autotask contact sync |
|
| Autotask webhook handler |
|
| workflow alerts to a Dialpad channel; texts from the call-to-ticket workflow |
|
| call-to-ticket workflow |
Not included: calls, call control, users, offices, number assignment, routing and the rest of Dialpad's admin API.
Where the endpoint details come from
Paths, methods, parameters, call states and response fields were checked against Dialpad's OpenAPI spec, dialpad_api_spec.json in dialpad/dialpad-python-sdk (MIT). A few filters appear only on the newer reference at developers.dialpad.com, not in that spec: first_name/last_name for users, name_search for offices, name for contacts and area_code for numbers. Dialpad publishes no official MCP server or TypeScript SDK.
Related MCP server: RBPaaS MCP Server
Authentication
Dialpad uses an API key sent as Authorization: Bearer <key>. Create it in Dialpad under Admin Settings > My Company > Authentication > API keys. The number tools need a company admin key. Dialpad has no read-only keys, so read-only access depends on which tools are exposed, not on the key.
Transport | Where the key comes from |
stdio (default) |
|
HTTP, |
|
HTTP, |
|
The HTTP transport refuses to start without a real CONDUIT_S2S_SECRET and checks the X-Gateway-S2S header on every /mcp request. MCP_ALLOW_INSECURE_DEV=1 is for local development only: it skips the check and listens on 127.0.0.1. See .env.example.
Rate limits
Dialpad allows 20 requests per second per company, and 1200 per minute on most endpoints. Some limits are lower: call details 10 a minute, contact create 100 a minute, SMS 100 a minute (800 on Tier 1), stats exports about 200 an hour. A 429 is reported as a rate-limit error, not as a bad key.
Running on the Cititec MCP host
The host starts the image over stdio with the service's env file. The host adds the cititec_change_status tool itself and turns write_tools into proposals; this image does neither. Suggested control.json lists:
read_tools: every tool in the first table. Admin-gate the sensitive ones by giving them only to users who need call and contact data.write_tools: the five write tools, with a key in the-rw.envfile. Leave them out if Claude should only read.
Development
npm ci
npm run lint # type check
npm run build
npm testLocal run over stdio: DIALPAD_API_KEY=... node dist/index.js.
On Cititec workstations ThreatLocker must allow esbuild.exe (used by tsup and vitest) before build and test run.
License
Apache-2.0. The HTTP transport, gateway check, logger and build setup come from WYRE Technology's unifi-mcp. See NOTICE.
Available Tools
27 toolsdialpad_create_contactB
Create a company-shared Dialpad contact (or a local contact for one user with owner_id). Same fields the N8N Autotask contact sync sends. Proposal: an administrator must approve it before it runs.
Inputs: last_name (required), first_name (required), urls, emails, +5 more.
dialpad_create_stats_exportARead-only
Start a Dialpad analytics export (calls, texts, voicemails, recordings, on-duty, CSAT, dispositions) as raw records or summary stats, then poll dialpad_get_stats_export with the returned request_id for the download link. Starts a report job only; changes no Dialpad data. Dialpad allows about 200 per hour. Contains personal information - admin-gated.
Inputs: stat_type (required), export_type (required), group_by, is_today, +6 more.
dialpad_delete_contactADestructiveIdempotent
Delete a Dialpad contact (the N8N sync does this when the Autotask contact is deactivated). Cannot be undone. Proposal: an administrator must approve it before it runs.
Inputs: id (required).
dialpad_get_callARead-onlyIdempotent
Get one call in detail: timings, routing, recording details, CSAT score and AI transcription text if any. Dialpad allows 10 of these per minute. Contains personal information - admin-gated.
Inputs: id (required).
dialpad_get_callcenterARead-onlyIdempotent
Get one call center by ID, including its routing, hours and alert settings.
Inputs: id (required).
dialpad_get_callcenter_statusARead-onlyIdempotent
Get live status for one call center: availability, operators on duty, calls waiting and longest wait time.
Inputs: id (required).
dialpad_get_call_subscriptionBRead-onlyIdempotent
Get one call event subscription by ID.
Inputs: id (required).
dialpad_get_call_transcriptARead-onlyIdempotent
Get the Dialpad AI transcript of a call: each line with time, speaker name, type (transcript or moment) and text. Returns up to max_lines lines (default 400). Contains personal information - admin-gated.
Inputs: call_id (required), max_lines.
dialpad_get_companyARead-onlyIdempotent
Get the Dialpad company: name, domain, country, account type, office count and AI settings.
Inputs: no named parameters.
dialpad_get_contactARead-onlyIdempotent
Get one shared or local contact by ID. Contains personal information - admin-gated.
Inputs: id (required).
dialpad_get_departmentARead-onlyIdempotent
Get one department by ID, including its routing and hours settings.
Inputs: id (required).
dialpad_get_numberARead-onlyIdempotent
Get one phone number: type, status and assignment. Needs a company admin API key.
Inputs: number (required).
dialpad_get_officeARead-onlyIdempotent
Get one Dialpad office by ID, including its settings and numbers.
Inputs: id (required).
dialpad_get_stats_exportARead-onlyIdempotent
Check a stats export started with dialpad_create_stats_export: status (processing, complete, failed) and, when complete, a download URL for the CSV. Contains personal information - admin-gated.
Inputs: id (required).
dialpad_get_userARead-onlyIdempotent
Get one Dialpad user by ID ('me' for the API key's own user, with a user-level key).
Inputs: id (required).
dialpad_list_callcentersARead-onlyIdempotent
List call centers (queues) across the company, optionally for one office.
Inputs: full, cursor, office_id, name_search.
dialpad_list_callsARead-onlyIdempotent
List finished calls, newest first: times, direction, duration, internal and external number, contact and target. Filter by start time range and by target (user, office, department, call center...). Returns one page; use next_cursor for more. Contains personal information - admin-gated.
Inputs: full, cursor, target_id, target_type, +2 more.
dialpad_list_call_subscriptionsARead-onlyIdempotent
List call event subscriptions (which call states are sent to which webhook, and whether each is enabled). Used by the N8N call-to-ticket workflow.
Inputs: cursor, target_id, target_type.
dialpad_list_contactsARead-onlyIdempotent
List company-shared Dialpad contacts (and local contacts with include_local), with name, company, phones and emails. Filter by name. Returns one page; use next_cursor for more. Contains personal information - admin-gated.
Inputs: full, name, cursor, owner_id, +1 more.
dialpad_list_departmentsARead-onlyIdempotent
List departments (ring groups) across the company, optionally for one office.
Inputs: full, cursor, office_id, name_search.
dialpad_list_numbersARead-onlyIdempotent
List phone numbers in the company with type, status, and what each is assigned to (user, office, department, call center). Needs a company admin API key.
Inputs: full, cursor, status, area_code.
dialpad_list_officesARead-onlyIdempotent
List Dialpad offices (sites) with ID, name, state and main numbers.
Inputs: full, cursor, active_only, name_search.
dialpad_list_usersARead-onlyIdempotent
List Dialpad users (staff) with name, email, phone numbers, extension, office and state. Filter by email, by phone number, or by first/last name prefix. Defaults to active users.
Inputs: full, email, state, cursor, +4 more.
dialpad_list_webhooksARead-onlyIdempotent
List webhook endpoints registered with Dialpad (ID and URL). The signing secret is never returned. Endpoint URLs are internal - admin-gated.
Inputs: cursor.
dialpad_send_smsA
Send a text message, either to a Dialpad channel (channel_hashtag, as the N8N alerts do) or to up to 10 phone numbers. The sender is from_number, user_id or a sender group. Proposal: an administrator must approve it before it is sent.
Inputs: text (required), user_id, to_numbers, from_number, +4 more.
dialpad_update_call_subscriptionA
Turn a call event subscription on or off, or change which call states it sends (the N8N call-to-ticket workflow pauses and resumes its subscription this way). Does not change where events are sent. Proposal: an administrator must approve it before it runs.
Inputs: id (required), enabled, call_states.
dialpad_update_contactB
Update a Dialpad contact. Only the fields given are changed; phones, emails and urls replace the whole list. Proposal: an administrator must approve it before it runs.
Inputs: id (required), urls, emails, phones, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 27 tools
Most tools map cleanly to one resource+action (get_call vs get_call_transcript vs list_calls, create_stats_export vs get_stats_export pairs are obvious). The only soft overlaps are call_subscriptions versus webhooks and get_callcenter vs get_callcenter_status, but the descriptions draw clear lines between them. An agent should rarely misselect here.
Every tool uses the dialpad_ prefix plus a consistent verb_noun snake_case pattern (get_/list_/create_/update_/delete_/send_). Singular vs plural on get vs list matches the resource cardinality and stays predictable throughout.
27 tools is heavy, though the domain (users, offices, departments, call centers, calls, contacts, analytics exports, subscriptions, webhooks, SMS) is genuinely broad so nearly every tool maps to a distinct resource. Still, the surface is large enough that it exceeds a comfortable working set and could be consolidated (e.g. subscriptions/webhooks, callcenter status).
Read coverage across the platform is thorough and contacts get full CRUD plus SMS send and subscription toggling, so core workflows are supported. Gaps remain: no message/text history listing despite SMS sending, no webhook create/delete, no number assignment/management, and no write operations for users/offices/departments/call centers.
Maintenance
Related MCP Connectors
Free cold-calling CRM and power dialer. Build lists, log calls and plan follow-ups from Claude.
Claude makes real phone calls for you — in many languages, with transcript and outcome back in chat.
Read calls, contacts, users, teams and numbers; tag calls and create or update contacts.
Access your Callin.io AI phone agents, call history and transcripts from any AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to manage GoHighLevel CRM contacts, pipelines, and workflows through natural language commands.115 npmMIT
- FlicenseAqualityCmaintenanceEnables Claude Desktop to access and query RBPaaS Operation Hub data, including business KPIs, project details, resource utilization, and agent schedules.16-
- AlicenseBqualityCmaintenanceEnables Claude to manage WhatsApp templates, flows, and send messages through the WhatsApp Cloud API.3119 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server exposing Dialpad call details, transcripts, and call initiation as tools for use in Claude Desktop and Claude Code.-