Skip to main content
Glama

List call history

list_call_history
Read-onlyIdempotent

The account's calls, newest first, from the phone system and from AI agents and WhatsApp calling, one row shape: when, direction, numbers (last four digits), extension and its user, contact, AI agent or person, campaign, outcome, duration, closing sentiment, test flag. Filter by handled_by, outcome, direction, extension (digits) and campaign_id (ids as list_voice_campaigns returns them, or "none" for no campaign), and by an AI objective's result (evaluation_id with evaluation_result, always both; phone-system rows are left out then). Covers the last 30 days unless since is given; page with meta.next_cursor. meta.warming, meta.phone_unavailable or meta.incomplete true means the list is incomplete. Campaign (campaign_id), sentiment and AI agent (handled_by, ai_agent) data apply only when the account has that feature (contact center, AI decisions, AI phone agents); without it rows omit those fields and those filters are ignored, so an absent field does not mean no campaign or a person.

Input Schema

NameRequiredDescriptionDefault
sinceNoISO 8601 date or time; calls from then on.
untilNoISO 8601 date or time; calls up to then.
cursorNometa.next_cursor of the previous answer.
fieldsNoOptional: return only these fields of each record.
outcomeNo
per_pageNoDefaults to 25.
directionNo
extensionNo
handled_byNoIgnored without the AI phone agents feature.
campaign_idNoIds from list_voice_campaigns; "none": no campaign. Ignored without contact center.
evaluation_idNoAn objective (criterion in get_ai_call_report quality.evaluations).
evaluation_resultNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, but the description goes well beyond them: it explains that meta.warming/phone_unavailable/incomplete signal a truncated list, that campaign/sentiment/AI-agent fields are present only with the relevant feature, and that an absent field must not be read as 'no campaign' or 'a person'. That last caveat is exactly the kind of trap an agent would otherwise fall into.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries information, but the row-shape enumeration and the filter list are run-on comma chains that are hard to scan, and the feature-gating caveats land in a single trailing sentence. Front-loading is good; structure is not.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 12 parameters, the description carries the return-shape burden and does so by naming the fields and the meta flags. It also explains feature gating for the conditional fields. It stops short of describing record ordering ties or cursor expiry, but is otherwise sufficient to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description fills several gaps: it explains that campaign_id takes ids 'as list_voice_campaigns returns them, or none', that extension is digits, that evaluation_id and evaluation_result must always be supplied together (and then exclude phone-system rows), and what the row shape/fields contain. Only per_page and until are left to the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('The account's calls, newest first') and enumerates the sources: phone system, AI agents, WhatsApp calling. It is clear what the tool returns, but it never names the obvious sibling alternatives (list_calls, get_call) so the agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operating context: last 30 days by default unless 'since' is supplied, paging via meta.next_cursor, and which filters are ignored when a feature is absent. Missing is an explicit statement of when to use this versus list_calls or get_call for a single record.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources