Skip to main content
Glama
README.md
# ictcontact-mcp

A [Model Context Protocol](https://modelcontextprotocol.io) server for
**[ICTContact](https://ictcontact.com)** and its hosted edition
**[ICTDialer.com](https://ictdialer.com)** — the same contact-center engine from
[ICT Innovations](https://ictinnovations.com).

It lets an AI assistant monitor outbound campaigns — list them, check status,
read summaries and per-call results — and, only when you turn writes on, start
and stop them.

## Install

```bash
npx -y ictcontact-mcp      # no install
npm install -g ictcontact-mcp
```

Requires Node.js 18 or newer.

## Configure

| Variable | Required | Default | |
|----------|----------|---------|--|
| `ICTCONTACT_BASE_URL` | yes | | Server base URL, without the `/rest` suffix, e.g. `https://your-ictcontact` |
| `ICTCONTACT_USERNAME` | yes | | API account username |
| `ICTCONTACT_PASSWORD` | yes | | Password for that account |
| `ICTCONTACT_MCP_ALLOW_WRITE` | no | `false` | Unlock start/stop campaign (see Safety) |
| `ICTCONTACT_TIMEOUT_MS` | no | `30000` | Per-request timeout |
| `ICTCONTACT_TLS_INSECURE` | no | `false` | Skip TLS verification — self-signed test servers only |

### Claude Desktop example

```json
{
  "mcpServers": {
    "ictcontact": {
      "command": "npx",
      "args": ["-y", "ictcontact-mcp"],
      "env": {
        "ICTCONTACT_BASE_URL": "https://your-ictcontact",
        "ICTCONTACT_USERNAME": "admin",
        "ICTCONTACT_PASSWORD": "your-password"
      }
    }
  }
}
```

## Tools

Read tools are always available:

| Tool | What it does |
|------|--------------|
| `ictcontact_list_campaigns` | List campaigns (id and name) |
| `ictcontact_campaign_status` | Live status of a campaign (running, stopped) |
| `ictcontact_campaign_summary` | Totals: answered, failed, human vs machine |
| `ictcontact_campaign_result` | Per-call results (contact, response, AMD, DNC) |

Write tools appear only when `ICTCONTACT_MCP_ALLOW_WRITE=true`:

| Tool | What it does |
|------|--------------|
| `ictcontact_start_campaign` | Launch a campaign — begins live outbound calling |
| `ictcontact_stop_campaign` | Stop a running campaign |

## Safety

The server is **read-only by default**. Starting a campaign begins live outbound
calling and can cost real money, so `ictcontact_start_campaign` and
`ictcontact_stop_campaign` are not registered at all unless you set
`ICTCONTACT_MCP_ALLOW_WRITE=true`.

## How it connects

ICTContact and ICTDialer expose a form-encoded RPC API at `{base}/rest/<Method>`.
Each call carries the account username and password; the server sends those for
you. There is no separate token to provision.

## About

Built by Tahir Almas at [ICT Innovations](https://ictinnovations.com) — the team
behind ICTContact, ICTDialer, ICTBroadcast, ICTFax and ICTPBX. Learn more at
[ictcontact.com](https://ictcontact.com) and [ictdialer.com](https://ictdialer.com).

MIT licensed. Issues and PRs welcome at
[github.com/ictinnovations/ictcontact-mcp](https://github.com/ictinnovations/ictcontact-mcp).

TDQS

B3.4/5.0

Scored across 4 tools

Disambiguation4/5

Each tool targets a distinct facet: list_campaigns (enumeration), campaign_status (live run state), campaign_summary (aggregate totals), campaign_result (per-call rows). campaign_summary and campaign_result overlap somewhat in reporting on outcomes, but the aggregate-vs-row distinction is clear enough from the descriptions.

Naming Consistency4/5

All tools share the ictcontact_ prefix and campaign-related names, with a predictable noun_component pattern for three of them. list_campaigns breaks the noun-first pattern by using a verb prefix, a minor deviation that remains readable.

Tool Count3/5

Four tools is on the thin side for a dialer/campaign integration; the surface covers only read/monitoring operations. It is not extreme, but the set feels like a narrow slice of the domain rather than a well-rounded toolkit.

Completeness2/5

The surface is entirely read-only: you can list, monitor status, and pull summaries/results, but there is no way to start, stop, create, or control a campaign — despite status tooling explicitly advising polling while a campaign runs. This dead end limits agents to observation only.

Maintenance

ActivityMaintained
ResponsivenessNo issues