Skip to main content
Glama

Zovo Client Report

Generate client report

generate_client_report
Read-only

Use this when the user wants a weekly or monthly client report, a monthly marketing report, a KPI report or a client report template filled with their numbers: metrics for this period and the previous period, typed ("Sessions 12,400 vs 10,900"), pasted as a table, or an uploaded CSV/Excel export with a date column (Google Analytics, Search Console, Meta Ads, Shopify). Returns the changes (absolute and %), rates recomputed from totals (CTR = clicks / impressions), highlights stated from the computed changes only, and a client-ready PDF (title, client, period, KPI tiles with arrows, change chart, optional notes from the user) plus Excel and CSV. Does not connect to analytics or ad accounts, does not invent numbers or reasons, and is not for forecasts.

Input Schema

NameRequiredDescriptionDefault
dataNoOptional: a pasted CSV/TSV table instead of metrics. Either a daily or weekly export with a Date column and metric columns (e.g. "Date,Sessions,Clicks,Impressions\n2026-10-01,410,22,1900"), or a Metric | This month | Last month table.
fileNoOptional: an uploaded CSV or Excel (.xlsx) export, e.g. ga4-sessions.csv, search-console-dates.csv, meta-ads.xlsx or shopify-sales.csv. A Date column plus metric columns, or a Metric | This period | Previous period table.
notesNoOptional: your own commentary for the client, printed word for word under Notes, e.g. "We launched the new landing page on Oct 14." Never invented by the tool.
paperNoOptional: letter (default) or A4.
periodNoOptional for exports with dates: week, month, quarter or auto (default). auto compares calendar months when the data covers whole months, otherwise the latest half of the dates against the half before. Example: month.
metricsNoThe metrics, this period and the previous period. Any of: a list like [{"name":"Sessions","current":12400,"previous":10900},{"name":"Revenue","current":"$8,450","previous":"$7,900"}]; an object like {"Sessions":[12400,10900]}; or text like "Sessions: 12,400 vs 10,900; Clicks 1,180 vs 1,010". Values may be strings with $, %, k or commas. Optional fields per metric: format (number, money, percent, ratio, duration), higher_is_better (false for cost per click, bounce rate).
currencyNoOptional: currency for money metrics without a symbol, e.g. USD, EUR, GBP. Default USD.
date_orderNoOptional: MDY (US, default) or DMY for dates such as 03/10/2026.
pair_orderNoOptional: current_first (default: "Sessions 1200 1000" means 1,200 now, 1,000 before) or previous_first. Words such as vs, from ... to, or column headers like This month / Last month always win.
client_nameNoOptional: the client's name for the report title, e.g. "Northwind Dental". Default: Client.
prepared_byNoOptional: your name or agency name shown in the header, e.g. "Brightside Marketing".
accent_colorNoOptional: brand colour for the header bar, hex like #1F3A5F or a name like navy, teal. Default navy.
report_titleNoOptional: report title, e.g. "Monthly SEO report". Default: Weekly report, Monthly report or Performance report from the period.
current_periodNoOptional: dates of this period, e.g. "2026-10-01 to 2026-10-31" or "Oct 2026". Used to split a dated export and as the label in the report.
lower_is_betterNoOptional: metric names where a decrease is good, beyond the built-in ones (cost per click, CPA, CPM, bounce rate, position, churn), e.g. ["Refund requests"].
previous_periodNoOptional: dates or label of the previous period, e.g. "Sep 2026". Default: the same length right before current_period.

Output Schema

NameRequiredDescriptionDefault
titleYes
clientYes
countsYes
periodYes
metricsYes
headlineYes
warningsYes
downloadsYes
highlightsYes
assumptionsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it declares the tool is deterministic ('does not invent numbers or reasons'), that highlights are derived only from computed changes, that rates are recomputed from totals (CTR = clicks / impressions), and that inputs must be supplied rather than fetched. That is substantive behavioral disclosure that readOnlyHint/openWorldHint alone cannot convey.

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 first sentence is front-loaded with triggers and inputs, and the negative-constraint sentence is short and high-value. However the opening sentence is a long run-on enumerating many cases, and the dense prose could be more clearly segmented into discrete sentences.

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?

For a 16-parameter tool with nested objects and all-optional inputs, the description covers when to use it, what inputs are acceptable, what it computes, and what it returns. With an output schema present and 100% parameter coverage, nothing an agent needs in order to call it correctly is missing.

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 already 100%, so 3 is the floor; the description still adds routing value by explaining what forms 'metrics' can take and by naming the concrete export sources that map onto the data/file parameters. It adds context rather than restating the schema, though per-parameter mechanics (date_order, pair_order, paper) 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?

Names a specific verb+resource ('generate a client report') and immediately scopes the accepted inputs (typed metric pairs, pasted table, uploaded CSV/Excel from GA, Search Console, Meta Ads, Shopify) and the artifacts produced (PDF, Excel, CSV). An agent can tell this is a report-builder, not a metrics-analysis utility, without opening the 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?

Strong when-to-use framing ('Use this when the user wants a weekly or monthly client report...') and explicit exclusions ('Does not connect to analytics or ad accounts... is not for forecasts'), which pre-empts a common misroute. It does not name the sibling summarize_metric_changes or state the boundary between the two, so the alternative is left implicit.

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