Aircall MCP Server
# Aircall MCP Server
[](https://opensource.org/licenses/MIT)
[](https://modelcontextprotocol.io)
[](https://www.typescriptlang.org/)
> **MCP server for the Aircall Public API** — 83 tools for calls, transcriptions, AI insights, contacts, SMS, users, teams, and more. Works with Claude Desktop, Claude Code, Cursor, and any MCP-compatible AI assistant. Maintained by [Cassia Research](https://github.com/CassiaResearch).
Every tool is verified against the [official Aircall API reference](https://developer.aircall.io/api-references/). Tools carry MCP annotations (`readOnlyHint`, `destructiveHint`, titles), so clients like Claude Desktop can group read-only tools and gate destructive ones.
**Not an official Aircall product.** This is a community server built and maintained by Cassia Research.
## Installation
### Claude Desktop — one-click extension (recommended)
This is our default integration path. No Node.js or config-file editing required for end users — Claude Desktop runs the server on its own bundled runtime.
**Build the extension:**
```bash
npm install
npm run bundle # builds TypeScript and packs aircall-mcp.mcpb
```
**Install it:**
1. Share `aircall-mcp.mcpb` with your team (Slack, Drive, or this repo's Releases).
2. Double-click it (or Claude Desktop → Settings → Extensions → Advanced settings → Install extension…).
3. Enter your **Aircall API ID** and **API Token** — created in the Aircall Dashboard under **Integrations & API → API Keys**. The token is stored in your OS keychain.
4. Optionally enable **Read-only mode** to expose only the 36 read tools.
To ship an update: bump the version (see [CLAUDE.md](CLAUDE.md)), run `npm run bundle` again, and have users double-click the new file — it updates in place, keeping their saved credentials.
### Claude Desktop / Cursor — manual config
```json
{
"mcpServers": {
"aircall": {
"command": "npx",
"args": ["-y", "@cassiaresearch/aircall-mcp-server"],
"env": {
"AIRCALL_API_ID": "your_api_id",
"AIRCALL_API_TOKEN": "your_api_token"
}
}
}
}
```
### CLI
```bash
npx @cassiaresearch/aircall-mcp-server --api-id=xxx --api-token=yyy
# Read-only mode
npx @cassiaresearch/aircall-mcp-server --api-id=xxx --api-token=yyy --read-only
# Only specific categories
npx @cassiaresearch/aircall-mcp-server --api-id=xxx --api-token=yyy --tools=calls,contacts
```
## Tools (83)
| Category | Tools | Highlights |
|----------|-------|------------|
| Calls | 24 | list/search calls, transcription, AI summary, sentiments, topics, action items, predicted CSAT, custom summary, playbook results, evaluations, comments, tags, archive/unarchive, transfer, recording controls, insight cards, AI Voice Agent outbound calls |
| Contacts | 12 | CRUD plus phone number and email management |
| Users | 10 | CRUD, availability, start call, dial, user numbers (API v2) |
| Teams | 6 | CRUD and membership |
| Numbers | 5 | list/get/update, music & messages, A2P registration status |
| Tags | 5 | CRUD |
| Webhooks | 5 | CRUD |
| Messages | 5 | send SMS/MMS, agent-conversation send, number messaging configuration |
| Dialer | 6 | per-user power dialer campaigns |
| Company | 5 | ping (connectivity test), company info, integration enable/disable |
Full per-tool documentation with parameters: [docs/tools/README.md](docs/tools/README.md) (generated from the server itself via `npm run docs`).
## Configuration
| Option | Env var | Description |
|--------|---------|-------------|
| `--api-id` | `AIRCALL_API_ID` | Aircall API ID (required) |
| `--api-token` | `AIRCALL_API_TOKEN` | Aircall API token (required) |
| `--read-only` | `AIRCALL_READ_ONLY=true` | Expose only read tools (36) |
| `--tools=...` | `AIRCALL_TOOLS` | Comma-separated tools or categories; `all` (default) or `read` |
Notes:
- Authentication is HTTP Basic with the org-level `api_id:api_token` pair.
- Requests are rate-limited client-side to respect Aircall's 60 req/min limit.
- Conversation Intelligence tools (transcription, summary, sentiments, topics, action items, CSAT, playbooks, evaluations) require the corresponding Aircall AI add-ons on your account — without them the API returns 403/404.
## Development
```bash
npm install
npm run build # compile TypeScript to dist/
npm run lint # eslint
npm run docs # regenerate docs/tools/README.md from the built server
npm run bundle # build + pack aircall-mcp.mcpb (Claude Desktop extension)
```
## License
MIT — see [LICENSE](LICENSE).
TDQS
Scored across 83 tools
Most tools have clearly distinct purposes, but a few pairs like aircall_send_message vs aircall_send_agent_message and aircall_start_call vs aircall_dial could be confused. Descriptions are specific enough to guide selection, making errors unlikely.
All tools share the aircall_ prefix and mostly follow a verb_noun snake_case pattern. Minor inconsistencies like aircall_remove_campaign_number (singular) vs aircall_add_campaign_numbers (plural) and standalone verbs like aircall_dial and aircall_ping keep it from being perfect.
With 83 tools, this far exceeds the 50+ threshold for extreme count. Even for a comprehensive API wrapper, this is an overwhelming number that reduces coherence and increases cognitive load for agents.
The tool set covers the major Aircall domains comprehensively: calls, contacts, users, teams, numbers, tags, campaigns, messaging, webhooks, and integration. Minor gaps exist, such as no way to remove tags from a call or list agent message conversations, but core workflows are fully supported.