---
title: "Calls"
description: "Call history, transcripts, metrics, problem review and outbound calls."
---

> **For AI agents:** the complete documentation index is at [llms.txt](https://docs.trillet.ai/llms.txt). Append `.md` to any page URL for its markdown version.

{/* Generated by packages/mcp/scripts/gen-tool-reference.mjs from @trillet-ai/mcp v0.10.0. Do not edit by hand. */}

Call history, transcripts, metrics, problem review and outbound calls. 5 tools.

## `trillet_list_calls`

**List call history**

List recent calls in the workspace (newest first) with time, duration, status, and full billing fields per call: cost (customer charge in USD, includes any warm-transfer charge), chargedDuration, telephonyCost, warmTransferCharge + warmTransferMinutes (flat-rate human-to-human leg after a warm/whisper transfer, stored as its own line item). Filterable by agent, flow, direction, status, call type, date window, and free text. Use trillet_get_call for one call's transcript and analysis, trillet_get_call_metrics for aggregates.

Flags: `read-only` `structured output`

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `agent_id` | string | no |  |
| `flow_id` | string | no | Filter to one call flow (pathway) id |
| `direction` | "inbound" \| "outbound" \| "web" | no |  |
| `status` | string | no |  |
| `call_type` | "sip" \| "web" | no | sip = real phone calls, web = browser calls |
| `search` | string | no | Free-text search (numbers, names, call ids) |
| `from_date` | string | no | ISO date, inclusive start of the window |
| `to_date` | string | no | ISO date, inclusive end of the window |
| `page` | number | no | Default: `1`. |
| `limit` | number | no | Default: `15`. |
| `workspace_id` | string | no | Run this call in another workspace: its id or its name (see trillet_list_workspaces). Omit to use the default (TRILLET_WORKSPACE_ID, the workspace picked when the connector was approved, or the one set with trillet_switch_workspace). |

### Structured output

Returned as `structuredContent` (fields are optional; the same data is in the text result):

| Field | Type | Description |
| --- | --- | --- |
| `totalCount` | number |  |
| `calls` | object[] |  |

## `trillet_get_call_metrics`

**Get call metrics (aggregates)**

Aggregate call-history metrics for a filter window without paging individual calls: totalCalls, avgDuration (m:ss string), completionRate. For exact minutes per month use trillet_get_usage include_minutes_breakdown=true (last 3 months) or sum durations from trillet_list_calls; for what was actually charged use trillet_list_transactions.

Flags: `read-only` `structured output`

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `agent_id` | string | no |  |
| `flow_id` | string | no | Filter to one call flow (pathway) id |
| `direction` | "inbound" \| "outbound" \| "web" | no |  |
| `status` | string | no |  |
| `call_type` | "sip" \| "web" | no | sip = real phone calls, web = browser calls |
| `search` | string | no | Free-text search (numbers, names, call ids) |
| `from_date` | string | no | ISO date, inclusive start of the window |
| `to_date` | string | no | ISO date, inclusive end of the window |
| `workspace_id` | string | no | Run this call in another workspace: its id or its name (see trillet_list_workspaces). Omit to use the default (TRILLET_WORKSPACE_ID, the workspace picked when the connector was approved, or the one set with trillet_switch_workspace). |

### Structured output

Returned as `structuredContent` (fields are optional; the same data is in the text result):

| Field | Type | Description |
| --- | --- | --- |
| `totalCalls` | number |  |
| `avgDuration` | any |  |
| `completionRate` | any |  |

## `trillet_get_call`

**Get call transcript and analysis**

Fetch one call: transcript, post-call analyzedData, summary, recording URL, and the billing breakdown (cost = customer charge incl. warm-transfer component; warmTransferCharge/Minutes split out; agentSegments for multi-agent calls; transferTiming). include_function_calls=true adds the in-call tool/function invocations (including IVR navigator decisions and DTMF sends, invokedBy 'ivr_navigator'). The primary debugging tool.

Flags: `read-only` `structured output`

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `call_id` | string | yes |  |
| `include_function_calls` | boolean | no | Include functionCalls: every in-call tool invocation with args and results (can be long) Default: `false`. |
| `workspace_id` | string | no | Run this call in another workspace: its id or its name (see trillet_list_workspaces). Omit to use the default (TRILLET_WORKSPACE_ID, the workspace picked when the connector was approved, or the one set with trillet_switch_workspace). |

### Structured output

Returned as `structuredContent` (fields are optional; the same data is in the text result):

| Field | Type | Description |
| --- | --- | --- |
| `id` | string |  |
| `time` | string |  |
| `direction` | string |  |
| `duration` | number |  |
| `status` | string |  |
| `agent` | any |  |
| `callFlow` | string |  |
| `from` | string |  |
| `to` | string |  |
| `batchId` | string |  |
| `cost` | any |  |
| `chargedDuration` | any |  |
| `telephonyCost` | any |  |
| `warmTransferCharge` | any |  |
| `warmTransferMinutes` | any |  |
| `transferTiming` | any |  |
| `agentSegments` | any |  |
| `summary` | string |  |
| `analyzedData` | any |  |
| `recordingUrl` | string |  |
| `transcript` | any |  |
| `functionCalls` | any |  |

## `trillet_review_calls`

**Review recent calls for problems**

Read the recent calls of one flow (flow_id), one agent (agent_id) or the whole workspace and return a compact problem digest: per call the outcome, who ended it and why, transfers and how they went (destination + tool reply; an empty reply on a cold transfer means the call was handed off), and the flagged moments (the caller asked for a person but no transfer happened, transfer_failed, transfer_name_mismatch = the agent asked for a destination that is not an exact transfer friendly_name, silent_after_failed_transfer, the agent kept saying it did not understand, the call was very short or ended in silence, voicemail, errors) with the transcript lines around each. Use it for "what went wrong", "how are calls going", "improve the agent from real calls"; then group the findings, cite call ids, and propose or apply fixes. Use trillet_get_call for a full transcript when a flag needs more context.

Flags: `read-only` `structured output`

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `flow_id` | string | no | Review one call flow (pathway) id |
| `agent_id` | string | no |  |
| `hours` | number | no | Look-back window in hours (default 24, max 30 days) Default: `24`. |
| `limit` | number | no | How many of the most recent calls to read in detail Default: `20`. |
| `include_ok` | boolean | no | Also list the calls that raised no flag Default: `false`. |
| `workspace_id` | string | no | Run this call in another workspace: its id or its name (see trillet_list_workspaces). Omit to use the default (TRILLET_WORKSPACE_ID, the workspace picked when the connector was approved, or the one set with trillet_switch_workspace). |

### Structured output

Returned as `structuredContent` (fields are optional; the same data is in the text result):

| Field | Type | Description |
| --- | --- | --- |
| `window` | object |  |
| `totals` | object |  |
| `flagged` | object[] |  |
| `ok` | any | include_ok=true: the unflagged calls; otherwise \{ count \} |
| `note` | string |  |

## `trillet_start_outbound_call`

**Start outbound call (REAL CALL)**

Place a REAL outbound phone call from an agent to a phone number. This dials a real person and consumes call minutes. Always confirm with the user before calling; requires confirm=true.

Flags: `writes` `destructive` `open-world` `billed` `asks for confirmation`

Clients that support MCP elicitation show a confirmation form before this tool runs; declining cancels it with no changes. Other clients rely on their own approval prompt and the `confirm` argument.

### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `to` | string | yes | Destination number in E.164 format, e.g. +61412345678 |
| `agent_id` | string | yes |  |
| `dynamic_variables` | object (map) | no | Per-call variables substituted into the prompt as \{\{key\}\} |
| `from_phone_number_id` | string | no |  |
| `confirm` | boolean | yes | Must be true. Only set after the user has explicitly approved this call. |
| `workspace_id` | string | no | Run this call in another workspace: its id or its name (see trillet_list_workspaces). Omit to use the default (TRILLET_WORKSPACE_ID, the workspace picked when the connector was approved, or the one set with trillet_switch_workspace). |
