Skip to main content
Glama

List an agent's tool runs

list_tool_runs
Read-onlyIdempotent

List an agent's tool runs

Every time the agent's AI used a tool, across every tool, newest first: a custom API tool, a Google Sheets or Calendar operation, a Shopify lookup, the built-in lead capture. Each run names the tool as it was then (tool.provider, tool.operation), how it went (status, error, duration_ms), the conversation it ran in and the ad that conversation came from (ad_id, the same ad as the conversation's latest_ad_id at that moment). Filter by tool_id, provider, operation, status, conversation_id, ad_id, or a window on ran_at with since and before. A list filtered by provider, operation, status or conversation_id covers the last 90 days of runs before before or now; send since for an older window (tool_id and ad_id have no such limit). The list leaves out what was sent and received; getToolRun has both. A run of a tool that has since been deleted keeps its provider and operation but has no tool.name.

Input Schema

NameRequiredDescriptionDefault
ad_idNoOnly runs in conversations whose latest touch was on this ad when the run happened.
limitNoPage size, 1 to 100 (values outside are clamped). Default 20.
sinceNoOnly runs at or after this instant.
beforeNoOnly runs before this instant.
cursorNoOpaque cursor from the previous page's `next_cursor`. Omit for the first page. A cursor the API didn't return is `422 invalid_request`.
statusNoOnly runs in this state: `pending`, `success` or `failed`.
tool_idNoOnly runs of this tool (a custom API tool's id, or any tool's id as the dashboard shows it).
agent_idYesThe agent the resource belongs to. Another company's agent, or the nil UUID, is `404 agent_not_found`; an agent outside the key's agent list is `403 agent_not_authorized`.
providerNoOnly this provider: `google_sheets`, `google_calendar`, `shopify`, `custom_api` (a custom API tool), `custom` (an older API call or webhook) or `mojeeb` (the built-in lead capture).
operationNoOnly this operation, such as `add_row`, `create_event` or `lead_capture`.
conversation_idNoOnly runs in this conversation.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/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 adds real behavioral context: newest-first ordering, the 90-day implicit window on certain filters (with tool_id/ad_id exempt), the fact that payloads are excluded, and the edge case that runs of deleted tools retain provider/operation but lose tool.name. That is substantial disclosure beyond the structured annotations.

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?

Front-loads the core definition and then layers filtering behavior and the getToolRun contrast; nearly every clause carries information. It is dense (one long paragraph) rather than scannable, but there is little filler apart from the opening restatement of the title.

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 11 parameters, no output schema, and no enum constraints, the description does the necessary work: it names the fields each run returns (tool.provider, tool.operation, status, error, duration_ms, conversation, ad_id), explains ordering and the deleted-tool edge case, and points to getToolRun for payloads. An agent has enough to call this and interpret the results.

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 100%, so the baseline is 3, but the description adds semantics the schema does not: which filters are bounded by the 90-day window and which (tool_id, ad_id) are not, plus the meaning of ad_id as the conversation's latest touch at run time. Cursor and limit semantics are left to the schema.

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+resource ('List an agent's tool runs') and immediately clarifies the scope: every tool invocation across every provider, newest first, including custom API, Google Sheets/Calendar, Shopify and built-in lead capture. It also distinguishes itself from get_tool_run by noting the list omits request/response payloads that getToolRun returns.

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 clear conditions for use: filter by tool_id, provider, operation, status, conversation_id, ad_id, or a ran_at window, and route to getToolRun when request/response bodies are needed. It also warns that provider/operation/status/conversation_id filters only cover the last 90 days unless `since` is supplied, which is actionable guidance. It stops short of naming list_custom_api_tool_runs as the narrower alternative.

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