Skip to main content
Glama

Get Report

get_report
Read-onlyIdempotent

Fetch one report: its summary, verdict and policy, optionally with its hotpath JSON payload. not_found means CI has not uploaded it yet. For what changed against the baseline, use get_diff.

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>",
      "benchmark": "<benchmark>"
    },
    "name": "get_report"
  }
}

Input Schema

NameRequiredDescriptionDefault
idNoA report id.
prNoPull request number: the PR's newest report. One of `pr`, `commit`, `id`.
repoYesThe repository as `owner/name`, as `list_repos` prints it.
eventNoNarrows `pr` / `commit` to one event; not with `id`.
commitNoFull 40-character commit sha: the newest report measuring it or headed at it (a PR branch's `git rev-parse HEAD` finds the PR's report).
selectNoKeep only these entities in the payload, per resource (`functions`, `sql`, `http`, `server`, `mutexes`, `rw_locks`, `channels`, `io`, `threads`) exact, case-sensitive `keys` (function name; sql and http `name | route | source` with `-` for a missing part; io the value's label, every op of it; server the route; locks and channels the label; threads the thread name, every thread of it). Up to 20 keys.
preciseNo`true`: measurements unrounded, durations in `ns`, sizes in `B` (payload values as uploaded). Default `false`: rounded for reading.
benchmarkYesThe benchmark name, as `list_benchmarks` prints it.
include_payloadNoInclude the uploaded hotpath JSON report. Default: false without `select`, true with it; `false` with `select` is refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / precise
      Added value: +{
      +  "description": "`true`: measurements unrounded, durations in `ns`, sizes in `B`\n(payload values as uploaded). Default `false`: rounded for reading.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
  2. Changed7 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."
    • removedInput schema / properties / include_payload / default
      Removed value: -false
    • changedInput schema / properties / include_payload / description
      Previous value: -"Include the uploaded hotpath JSON report. Default false: the summary only."New value: +"Include the uploaded hotpath JSON report. Default: false without\n`select`, true with it; `false` with `select` is refused."
    • changedInput schema / properties / include_payload / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • 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: +"Keep only these entities in the payload, 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."
  3. 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."
  4. Changed4 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"
      +}
    • 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."
      +}
  5. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the not_found semantics telling the agent the report simply hasn't been uploaded yet, and the fact that the payload is optional and off by default.

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?

Three short sentences, front-loaded with the core action, then the error semantic, then the sibling routing. No filler and nothing redundant.

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 9-parameter read tool with no output schema, the description covers what comes back (summary, verdict, policy, payload) and the failure mode, which is enough to call it correctly. The finer selection semantics are fully handled by the rich schema, so the only mild gap is that select/precise are not summarized in prose.

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 (pr/commit/id, event, select, precise, include_payload) is already documented in detail. The description only alludes to the optional payload, which the schema states more precisely via include_payload's default rules; baseline 3 applies.

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 and resource ("Fetch one report") and enumerates what it returns: summary, verdict, policy, and optional hotpath JSON payload. It also explicitly distinguishes itself from the sibling get_diff, so an agent can route without opening either schema.

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 explicit routing guidance to get_diff for baseline comparisons and explains the not_found condition (CI hasn't uploaded yet), which is a real when-to-use signal. It stops short of explaining when to pick this over list_reports or list_reports-style listing, but the 'one report' framing implies it.

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.