Skip to main content
Glama

Run a saved report

run_report
Read-only

Run one saved report (list_reports names them) and answer every block's figures, worked out from the copy now: its columns, rows and, when it compares, the earlier period's figures beside them. Each block answers its layout: width, its share of the row, and note, when it has one. A screen that shows a report, such as a dashboard, calls this with the report's id rather than carrying its own query, so a fix to the saved report reaches every screen. period replaces the period of each block saved with one; a block saved for all time stays all time. A block reading a source or area you cannot read is left out and counted in hidden_blocks. A block whose source changed since its figures were worked out answers those figures at once, with their as_of and refreshing: true, while they are worked out again: call again shortly for the new ones. A block that cannot run says why in place of figures.

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": {
      "report_id": "<report_id>"
    },
    "name": "run_report"
  }
}

Input Schema

NameRequiredDescriptionDefault
periodNoRun each dated block over this period instead of its saved one. A named period moves with the calendar (the financial year starts in July); {from, to} days stay fixed. Omit for each block's saved period.
report_idYesThe saved report to run (list_reports).

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 readOnlyHint=true and destructiveHint=false, and the description stays consistent with that while adding behavior annotations cannot express: unreadable sources are silently dropped and counted in hidden_blocks, stale blocks return old figures with as_of and refreshing: true, and blocks that cannot run report the reason in place of figures. This is exactly the kind of consequence and latency disclosure that matters for a non-idempotent read, and it aligns with idempotentHint=false.

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?

The core action is front-loaded, but the body is a single dense paragraph of colon-chained clauses ('worked out from the copy now: its columns, rows and, when it compares, the earlier period's...') that takes effort to parse. Some content, notably the period explanation, duplicates the schema rather than earning its place. It is information-dense rather than padded, but structure and readability are mediocre.

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?

There is no output schema, so the description carries the full burden of describing returns, and it does: per-block columns and rows, prior-period comparison figures, layout width/share/note, hidden_blocks accounting, as_of plus refreshing flags for stale blocks, and per-block error text. For a two-parameter read tool that returns a complex nested payload, nothing an agent needs in order to call or interpret it is missing.

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 both report_id and period are already documented in detail, including the named-period enum and the {from, to} form. The description's line that 'period replaces the period of each block saved with one; a block saved for all time stays all time' largely restates the schema's 'Run each dated block over this period instead of its saved one.' It adds only the all-time-block carve-out, so the baseline 3 applies.

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?

The description opens with a concrete verb and resource, 'Run one saved report', and immediately says what comes back: each block's columns, rows, comparison figures and layout. It also names the sibling that supplies ids ('list_reports names them'), so the agent can chain the two. It stops short of differentiating against other report-related siblings such as preview_report or save_report, so it is clear on its own but not fully sibling-scoped.

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?

It gives a real usage condition: a screen that displays a report, like a dashboard, should call this with the report's id rather than storing its own query, so saved-report fixes propagate. It also tells the agent to call again shortly when a block returns refreshing: true, which is actionable timing guidance. It does not say when to prefer this over preview_report or run_sql, which keeps it from a 5.

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