Skip to main content
Glama

Evaluate report

evaluate_report
Read-only

Resolve a report template OR an insight view against a period. Templates: every field measured off the ledger or derived by its formula, each with a drilldown — name a statutory template by source (e.g. locale:za/vat201) or a stored template by templateid. Views (view: payables, receivables, profit-and-loss, balance-sheet, cash-flow, trial-balance, salestax-summary, salestax-activity, … — see the view param for the full list; e.g. payables returns every outstanding bill with supplier, amount, due date and currency, receivables the same for invoices): the data-driven insight feeds stub-web's screens render. With snapshotid the period evaluates FROZEN from the snapshot's filed listing — the filed numbers, immutable; without, LIVE from the current books.

Input Schema

NameRequiredDescriptionDefault
asAtNoFor as-at views (account-totals-as-at, balance-sheet, clearing-residual): the position date (YYYY-MM-DD), inclusive. Synonym for periodEnd.
modeNotrial-balance: "cumulative" (default — closing balances as at periodEnd, opening/retained included, ties to the balance sheet) or "period"/"range" (period-movement only within [periodStart..periodEnd], for error-checking a window).
viewNoAn insight view instead of a template: account-totals, account-totals-as-at, trial-balance, profit-and-loss, balance-sheet, cash-flow, receivables, payables, customer-totals, supplier-totals, product-totals, salestax-summary, salestax-activity, income-tax-summary, inventory, clearing-residual. Provide this OR a template, not both.
basisNoincome-tax-summary: "profit" (default) or "turnover".
sourceNoA statutory template source, e.g. "locale:za/vat201". Provide this or templateid.
compareNoprofit-and-loss: true = two columns, the equal-length prior period and the current one.
filtersNoRow filters: [{"property": "tags"|"customer"|"supplier"|"product"|"account", "value": ...}]; tags value "none" means untagged.
journalNoaccount-totals and entity totals: restrict to one journal (1 income, 2 expenses, 3 assets, 4 liabilities, 5 equity).
monthlyNoViews with columns (profit-and-loss, cash-flow): true = one column per calendar month in the period.
versionNoTemplate version. Omit for the version in effect at the period end.
payrunidNoA per-pay-run return's pay run id (e.g. locale:gb/fps): only the entries that run posts are read. Refused for a template not filed per pay run.
constantsNoConstants a template's formulas name ($salesTaxRate → {"salesTaxRate": 0.15}). Undeclared here, coercion would strip them and the formula would silently evaluate with 0.
dimensionNocash-flow: "category" (default — counterpart categories) or "baseaccount" (per bank/cash account).
periodEndNo
comparisonNoprofit-and-loss: "lastYear" = two columns, the same period a year earlier and the selected one (no Total column); "yearly" = one column per financial year, clamped to the period, at most 12. Takes precedence over monthly and compare; absent = those flags decide. cash-flow: "yearly" only, because each column's opening balance chains from the column before it.
employeeidNoA per-employee certificate's employee id (e.g. locale:za/irp5): only the entries their payslips post are read. Required for such a template, refused for any other.
snapshotidNoEvaluate FROZEN against this snapshot's filed listing (the period must sit inside its window) instead of the live books.
templateidNoA stored user template id. Provide this or source.
periodStartNo
presentationNotrial-balance: "net" (default; one figure per account, Dr or Cr by sign; P&L netting to zero hidden; :profitLoss memo) or "gross" (summed Dr and Cr movements). Unknown values are refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / comparison
      Added value: +{
      +  "description": "profit-and-loss: \"lastYear\" = two columns, the same period a year earlier and the selected one (no Total column); \"yearly\" = one column per financial year, clamped to the period, at most 12. Takes precedence over monthly and compare; absent = those flags decide. cash-flow: \"yearly\" only, because each column's opening balance chains from the column before it.",
      +  "enum": [
      +    "lastYear",
      +    "yearly"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / presentation
      Added value: +{
      +  "description": "trial-balance: \"net\" (default; one figure per account, Dr or Cr by sign; P&L netting to zero hidden; :profitLoss memo) or \"gross\" (summed Dr and Cr movements). Unknown values are refused.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / payrunid
      Added value: +{
      +  "description": "A per-pay-run return's pay run id (e.g. locale:gb/fps): only the entries that run posts are read. Refused for a template not filed per pay run.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / employeeid
      Added value: +{
      +  "description": "A per-employee certificate's employee id (e.g. locale:za/irp5): only the entries their payslips post are read. Required for such a template, refused for any other.",
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / asAt / description
      Previous value: -"For as-at views (account-totals-as-at, balance-sheet): the position date (YYYY-MM-DD), inclusive. Synonym for periodEnd."New value: +"For as-at views (account-totals-as-at, balance-sheet, clearing-residual): the position date (YYYY-MM-DD), inclusive. Synonym for periodEnd."
    • changedInput schema / properties / view / description
      Previous value: -"An insight view instead of a template: account-totals, account-totals-as-at, trial-balance, profit-and-loss, balance-sheet, cash-flow, receivables, payables, customer-totals, supplier-totals, product-totals, salestax-summary, salestax-activity, income-tax-summary, inventory. Provide this OR a template, not both."New value: +"An insight view instead of a template: account-totals, account-totals-as-at, trial-balance, profit-and-loss, balance-sheet, cash-flow, receivables, payables, customer-totals, supplier-totals, product-totals, salestax-summary, salestax-activity, income-tax-summary, inventory, clearing-residual. Provide this OR a template, not both."
  6. Changed1 schema field changed
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "trial-balance: \"cumulative\" (default — closing balances as at periodEnd, opening/retained included, ties to the balance sheet) or \"period\"/\"range\" (period-movement only within [periodStart..periodEnd], for error-checking a window).",
      +  "type": "string"
      +}
  7. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, and the description adds genuinely useful behavior beyond that: with snapshotid the period evaluates FROZEN from the filed listing and the numbers are immutable, without it the evaluation is LIVE against current books. That frozen/live distinction is exactly the kind of consequence an agent needs before calling. It stops short of describing the response envelope or any size/performance characteristics of a large evaluation.

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?

The core contract — resolve a template or a view against a period — is front-loaded in the first clause, and the frozen-vs-live distinction is placed last where it reads as the key caveat. The view enumeration with an ellipsis plus the parenthetical examples is somewhat redundant given it also points the reader to the `view` param for the full list. Dense but nearly every clause carries information.

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 20-parameter tool with no output schema, the description covers the decisions that matter most: which mode, which naming scheme, and whether the result is live or frozen. Given 90% schema coverage, the remaining gaps are mostly about return shape — only payables/receivables get a hint of output, and nothing tells the agent what a template evaluation returns. Adequate and well beyond minimum viable, but not fully self-sufficient.

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 90%, so the schema already documents the 20 parameters thoroughly, and most of the description's parameter talk (source format, templateid, snapshotid) echoes what the schema says. The one thing the description adds is a concrete illustration of what a view such as payables returns (supplier, amount, due date, currency), which is output context rather than parameter meaning. Baseline 3 is appropriate when the schema does the heavy lifting.

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 specific verb and resource — "Resolve a report template OR an insight view against a period" — and immediately explains the two modes (templates measured off the ledger, views data-driven). This is far clearer than the title's bare restatement. It does not, however, distinguish itself from sibling tools like evaluate_report_batch, evaluate_report_session or open_report_session, so an agent still has to infer when this single-report tool is the right entry point.

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?

Strong internal routing guidance: templates are named via `source` or `templateid`, views via `view`, and the reader is told what each mode produces. The snapshotid paragraph clearly frames the frozen-vs-live decision, which is the main usage fork. What's missing is any exclusion relative to the sibling evaluation tools, so the agent gets no help choosing this tool over the batch/session variants.

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