Skip to main content
Glama

calls_list_history

Read-onlyIdempotent

Search historical voice calls in this workspace by participant name, contact_id, thread, channel, source, and/or date range. Returns one row per call (NOT per turn) with call_id, duration_seconds, outcome, direction, started_at, source, channel_label, and parent_thread_id (the originating chat thread for Telegram-group / Twilio-outbound / Meet calls). Pair with calls.get_transcript(call_id) for the full per-turn transcript. Use this instead of messages.read_history for cross-thread call queries — group calls and Meet sessions live on per-call sub-threads, not on the parent chat thread.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum calls to return (default 20, max 100).
sinceNoISO date or datetime lower bound (inclusive). Default: 90 days ago. Naive timestamps are interpreted as UTC.
untilNoISO date or datetime upper bound (inclusive). Default: now.
sourceNoFilter by voice_sessions.source: 'telegram' (1:1 + group), 'whatsapp' (native WhatsApp voice), 'twilio' (PSTN), 'meet' (Google Meet bot), 'livechat' (in-app voice), 'android' (Android device). OMIT to include all sources.
channelNoFilter by message-level channel of the call thread: 'telegram' (1:1 voice or group call sub-thread), 'twilio_voice', 'meet_voice', 'livechat_voice', 'whatsapp' (native WhatsApp calls — these coalesce into the contact's messaging thread). OMIT to include all voice channels.
thread_idNoRestrict to calls on this thread OR with this thread as their originating parent (Telegram group → call sub-thread back-link, Twilio outbound source_thread_id back-link).
contact_idNoFilter by exact entity_id (from contacts.find). Mutually exclusive with participant_name when both target the same person.
in_workspaceNoRun this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.
participant_nameNoFilter to calls whose parent thread has a participant matching this name (substring match against entity.title). Resolves group calls via the parent group's roster, not the per-call thread's speaker list.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / in_workspace
      Added value: +{
      +  "description": "Run this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.",
      +  "type": "integer"
      +}
  2. Added
  3. Removed
  4. Changed4 schema fields changed
    • changedInput schema / properties / channel / description
      Previous value: -"Filter by message-level channel of the call thread: 'telegram' (1:1 voice or group call sub-thread), 'twilio_voice', 'meet_voice', 'livechat_voice'. OMIT to include all voice channels."New value: +"Filter by message-level channel of the call thread: 'telegram' (1:1 voice or group call sub-thread), 'twilio_voice', 'meet_voice', 'livechat_voice', 'whatsapp' (native WhatsApp calls — these coalesce into the contact's messaging thread). OMIT to include all voice channels."
    • changedInput schema / properties / channel / enum
      Previous value: -[
      -  "telegram",
      -  "twilio_voice",
      -  "meet_voice",
      -  "livechat_voice"
      -]New value: +[
      +  "telegram",
      +  "twilio_voice",
      +  "meet_voice",
      +  "livechat_voice",
      +  "whatsapp"
      +]
    • changedInput schema / properties / source / description
      Previous value: -"Filter by voice_sessions.source: 'telegram' (1:1 + group), 'twilio' (PSTN), 'meet' (Google Meet bot), 'livechat' (in-app voice), 'android' (Android device). OMIT to include all sources."New value: +"Filter by voice_sessions.source: 'telegram' (1:1 + group), 'whatsapp' (native WhatsApp voice), 'twilio' (PSTN), 'meet' (Google Meet bot), 'livechat' (in-app voice), 'android' (Android device). OMIT to include all sources."
    • changedInput schema / properties / source / enum
      Previous value: -[
      -  "telegram",
      -  "twilio",
      -  "meet",
      -  "livechat",
      -  "android"
      -]New value: +[
      +  "telegram",
      +  "twilio",
      +  "meet",
      +  "livechat",
      +  "android",
      +  "whatsapp"
      +]
  5. Changed2 schema fields changed
    • changedInput schema / properties / source / description
      Previous value: -"Filter by voice_sessions.source: 'telegram' (1:1 + group), 'twilio' (PSTN), 'meet' (Google Meet bot), 'livechat' (in-app voice). OMIT to include all sources."New value: +"Filter by voice_sessions.source: 'telegram' (1:1 + group), 'twilio' (PSTN), 'meet' (Google Meet bot), 'livechat' (in-app voice), 'android' (Android device). OMIT to include all sources."
    • changedInput schema / properties / source / enum
      Previous value: -[
      -  "telegram",
      -  "twilio",
      -  "meet",
      -  "livechat"
      -]New value: +[
      +  "telegram",
      +  "twilio",
      +  "meet",
      +  "livechat",
      +  "android"
      +]
  6. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower; the description adds real value by disclosing the return granularity ('one row per call, NOT per turn') and the field list, which matters because no output schema exists. It does not cover pagination behavior beyond the limit param or auth requirements, keeping it short of a 5.

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

Conciseness4/5

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

Three tight sentences with the core action front-loaded and zero filler. The middle sentence enumerates return fields and is dense but each item earns its place given the absent output schema.

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

Completeness5/5

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

With no output schema, the description fully carries the return-value burden by naming the row granularity and fields, and it closes the routing question against messages.read_history. For a 9-param read tool this is complete enough to call correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter already carries its own semantics and enum meanings. The description restates the filterable dimensions (participant name, contact_id, thread, channel, source, date range) but adds no syntax or format detail beyond the schema; baseline 3 is correct.

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

Purpose5/5

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

States a specific verb (search) and resource (historical voice calls) plus the filter dimensions, and explicitly distinguishes itself from siblings calls.get_transcript and messages.read_history. An agent can tell it apart from list_active and transcript tools without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states when to prefer this over messages.read_history ('cross-thread call queries — group calls and Meet sessions live on per-call sub-threads') and names the complementary tool to pair with (calls.get_transcript). Both the alternative and the selecting condition are given.

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.