Skip to main content
Glama

List Reports

list_reports
Read-onlyIdempotent

List a repository's reports, newest first, as summaries with their run totals. Use it to browse report history; with select, to follow given entities across runs.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "repo": "<repo>"
    },
    "name": "list_reports"
  }
}

Input Schema

NameRequiredDescriptionDefault
prNoOnly this pull request's reports.
repoYesThe repository as `owner/name`, as `list_repos` prints it.
eventNoOnly reports of one event.
limitNoReports per page, 1 to 50, default 20; with `select` 1 to 20, default 10.
sinceNoUploaded at or after this time: RFC 3339, or `YYYY-MM-DD` (UTC midnight).
untilNoUploaded before this time, same format as `since`.
branchNoBare branch name (`main`): reports that measured that branch's ref, in practice its push reports; pair with `event: push` for the baseline series. For a PR's own reports use `pr`.
commitNoFull 40-character commit sha: reports measuring it or headed at it.
cursorNo`next_cursor` of the previous page, with the same filters.
selectNoReturn each report with its payload, filtered as get_report's `select`.
preciseNoAs get_report's `precise`.
verdictNo`passed`, `regressed` (failed reports included), `failed`, or `not_judged` (nothing was judged).
metadataNoOnly reports whose user_metadata has all of these keys with exactly these values (e.g. {"runner": "Linux-ARM64"}); up to 8 pairs. Reports without metadata never match.
benchmarkNoOnly this benchmark's reports, by name as `list_benchmarks` prints it. Default: every benchmark of the repository.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / precise
      Added value: +{
      +  "description": "As get_report's `precise`.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / select / description
      Previous value: -"Return each report with its payload, filtered to these entities as\nget_report filters it: per resource\n(`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`,\n`io`, `threads`) exact, case-sensitive `keys` (function name; sql and\nhttp `name | route | source` with `-` for a missing part; io the\nvalue's label, every op of it; server the route; locks and channels\nthe label; threads the thread name, every thread of it). Up to 20 keys."New value: +"Return each report with its payload, filtered as get_report's `select`."
  3. Changed4 schema fields changed
    • changedInput schema / $defs / ResourceSelect / properties / keys / description
      Previous value: -"Exact, case-sensitive entity keys, as the diff's rows name them."New value: +"Exact, case-sensitive entity keys. Their format depends on the\nresource and is given by its field of `Select`; mostly a diff row's\n`key`, but io takes the value's label and keeps every operation of it."
    • changedInput schema / $defs / Select / properties / io / description
      Previous value: -"I/O keys: `label | operation | -`."New value: +"I/O keys: the value's label (`sock`), never `label | operation | -`;\nit keeps the value's whole payload entry and every op row of it in a\ndiff."
    • changedInput schema / $defs / Select / properties / threads / description
      Previous value: -"Thread keys: the thread name (threads sharing one are summed)."New value: +"Thread keys: the thread name; keeps every thread of that name in a\npayload and the diff's row summing them."
    • changedInput schema / properties / select / description
      Previous value: -"Metrics of named entities, read from each report: per resource\n(`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`,\n`io`, `threads`) exact, case-sensitive `keys` (function name; sql and\nhttp `name | route | source` with `-` for a missing part; io\n`label | op | -`; server the route; locks and channels the label;\nthreads the thread name). Each selected entity comes with every\nsection and value the report has of it. Up to 20 keys."New value: +"Return each report with its payload, filtered to these entities as\nget_report filters it: per resource\n(`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`,\n`io`, `threads`) exact, case-sensitive `keys` (function name; sql and\nhttp `name | route | source` with `-` for a missing part; io the\nvalue's label, every op of it; server the route; locks and channels\nthe label; threads the thread name, every thread of it). Up to 20 keys."
  4. Changed6 schema fields changed
    • changedInput schema / $defs / ResourceSelect / description
      Previous value: -"One resource of a `Select`."New value: +"One resource of a `Select`: the entities to read, each with every\nsection and value the report has of it."
    • removedInput schema / $defs / ResourceSelect / properties / columns
      Removed value: -{
      -  "description": "Columns to read by the diff's names (`calls`, `avg`, `p95`, `total`,\n`percent_total`, ...). Default: every column of each section.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • removedInput schema / $defs / ResourceSelect / properties / kinds
      Removed value: -{
      -  "description": "Sections to read (`timing`, `alloc`, `icount` for functions; `timing`,\n`alloc` for server; `main` for the rest). Default: every section.",
      -  "items": {
      -    "$ref": "#/$defs/SelectKind"
      -  },
      -  "type": [
      -    "array",
      -    "null"
      -  ]
      -}
    • changedInput schema / $defs / Select / description
      Previous value: -"`select=` as sent: per resource, exact entity keys and optionally the\nsections and columns to read. Shared by the REST query and the MCP tools,\nwhose schema it is."New value: +"`select=` as sent: per resource, exact entity keys.\nShared by the REST query and the MCP tools, whose schema it is."
    • removedInput schema / $defs / SelectKind
      Removed value: -{
      -  "description": "A section kind as `select=` names it.",
      -  "enum": [
      -    "icount",
      -    "alloc",
      -    "timing",
      -    "main"
      -  ],
      -  "type": "string"
      -}
    • changedInput schema / properties / select / description
      Previous value: -"Metrics of named entities, read from each report: per resource\n(`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`,\n`io`, `threads`) exact, case-sensitive `keys` (function name; sql and\nhttp `name | route | source` with `-` for a missing part; io\n`label | op | -`; server the route; locks and channels the label;\nthreads the thread name), optional `kinds` (sections: `timing`,\n`alloc`, `icount`, `main`) and optional `columns` (the diff's names:\n`calls`, `avg`, `p95`, `total`, `percent_total`, ...). Up to 20 keys."New value: +"Metrics of named entities, read from each report: per resource\n(`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`,\n`io`, `threads`) exact, case-sensitive `keys` (function name; sql and\nhttp `name | route | source` with `-` for a missing part; io\n`label | op | -`; server the route; locks and channels the label;\nthreads the thread name). Each selected entity comes with every\nsection and value the report has of it. Up to 20 keys."
  5. Changed5 schema fields changed
    • addedInput schema / $defs / ResourceSelect
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One resource of a `Select`.",
      +  "properties": {
      +    "columns": {
      +      "description": "Columns to read by the diff's names (`calls`, `avg`, `p95`, `total`,\n`percent_total`, ...). Default: every column of each section.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "keys": {
      +      "description": "Exact, case-sensitive entity keys, as the diff's rows name them.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "kinds": {
      +      "description": "Sections to read (`timing`, `alloc`, `icount` for functions; `timing`,\n`alloc` for server; `main` for the rest). Default: every section.",
      +      "items": {
      +        "$ref": "#/$defs/SelectKind"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "keys"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / Select
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "`select=` as sent: per resource, exact entity keys and optionally the\nsections and columns to read. Shared by the REST query and the MCP tools,\nwhose schema it is.",
      +  "properties": {
      +    "channels": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Channel keys: the label."
      +    },
      +    "functions": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Function keys: the function name (`crate::module::fn`)."
      +    },
      +    "http": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "HTTP call keys: `name | route | source`, `-` for a part the entry lacks."
      +    },
      +    "io": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "I/O keys: `label | operation | -`."
      +    },
      +    "mutexes": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Mutex keys: the label."
      +    },
      +    "rw_locks": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "RwLock keys: the label."
      +    },
      +    "server": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Route keys: the route (`GET /users/{id}`)."
      +    },
      +    "sql": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "SQL keys: `query | route | source`, `-` for a part the entry lacks."
      +    },
      +    "threads": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/$defs/ResourceSelect"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Thread keys: the thread name (threads sharing one are summed)."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / $defs / SelectKind
      Added value: +{
      +  "description": "A section kind as `select=` names it.",
      +  "enum": [
      +    "icount",
      +    "alloc",
      +    "timing",
      +    "main"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Reports per page, 1 to 50. Default 20."New value: +"Reports per page, 1 to 50, default 20; with `select` 1 to 20,\ndefault 10."
    • addedInput schema / properties / select
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/$defs/Select"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Metrics of named entities, read from each report: per resource\n(`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`,\n`io`, `threads`) exact, case-sensitive `keys` (function name; sql and\nhttp `name | route | source` with `-` for a missing part; io\n`label | op | -`; server the route; locks and channels the label;\nthreads the thread name), optional `kinds` (sections: `timing`,\n`alloc`, `icount`, `main`) and optional `columns` (the diff's names:\n`calls`, `avg`, `p95`, `total`, `percent_total`, ...). Up to 20 keys."
      +}
  6. First observed

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so safety is covered. The description adds ordering (newest first) and the summary-plus-totals return shape, which is genuine value. It says nothing about pagination behavior, page limits, or how many reports a listing spans relative to the cursor parameter.

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

Conciseness5/5

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

Two sentences, zero filler, with the core behavior and the ordering front-loaded before the usage hint. Every clause carries information not repeated from the schema.

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?

For a 14-parameter listing tool with full schema coverage and rich annotations, the description covers what is returned and where it sits in the workflow. The gaps (page-size limits, relationship to get_report and list_benchmarks) are minor given the schema does the parameter-level work.

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 the schema already explains repo, pr, event, since/until, branch, commit, cursor, verdict, metadata, benchmark and the select/precise forwarding. The description only adds meaning for `select`, framing it as following entities across runs, which is modest extra value over a fully documented schema.

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 ("List a repository's reports") plus ordering ("newest first") and return shape ("summaries with their run totals"). It implies a distinction from the full-report sibling by calling these summaries, but never names get_report, so an agent must infer the boundary.

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?

"Use it to browse report history; with `select`, to follow given entities across runs" gives two concrete usage contexts and ties `select` to a purpose. It lacks explicit when-not guidance (e.g. use get_report when you need one report's full detail), so it is clear context without exclusions.

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.