Zovo Client Report
Server Details
Weekly and monthly KPI reports
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
The two tools overlap heavily in inputs and computed-change output, but the descriptions explicitly route PDF/client-report requests to generate_client_report and quick change-table requests to summarize_metric_changes. The boundary is clear enough, though the shared mechanics still create some selection risk.
Both names use a consistent snake_case verb_noun pattern: generate_client_report and summarize_metric_changes. The action verbs are predictable and the object nouns clearly reflect the resource being produced.
Two tools is thin for a reporting server, especially since summarize_metric_changes is essentially a subset of generate_client_report without the PDF. Each tool is justified, but the surface is borderline minimal rather than well-scoped.
The intended domain is generating client-ready reports from supplied metrics, and the surface covers period comparisons, recomputed rates, highlights, PDF, Excel, and CSV output. There are minor gaps such as saved-report retrieval or template management, but core workflows are covered.
Available Tools
2 toolsgenerate_client_reportGenerate client reportARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Optional: 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. | |
| file | No | Optional: 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. | |
| notes | No | Optional: 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. | |
| paper | No | Optional: letter (default) or A4. | |
| period | No | Optional 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. | |
| metrics | No | The 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). | |
| currency | No | Optional: currency for money metrics without a symbol, e.g. USD, EUR, GBP. Default USD. | |
| date_order | No | Optional: MDY (US, default) or DMY for dates such as 03/10/2026. | |
| pair_order | No | Optional: 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_name | No | Optional: the client's name for the report title, e.g. "Northwind Dental". Default: Client. | |
| prepared_by | No | Optional: your name or agency name shown in the header, e.g. "Brightside Marketing". | |
| accent_color | No | Optional: brand colour for the header bar, hex like #1F3A5F or a name like navy, teal. Default navy. | |
| report_title | No | Optional: report title, e.g. "Monthly SEO report". Default: Weekly report, Monthly report or Performance report from the period. | |
| current_period | No | Optional: 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_better | No | Optional: 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_period | No | Optional: dates or label of the previous period, e.g. "Sep 2026". Default: the same length right before current_period. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| client | Yes | |
| counts | Yes | |
| period | Yes | |
| metrics | Yes | |
| headline | Yes | |
| warnings | Yes | |
| downloads | Yes | |
| highlights | Yes | |
| assumptions | Yes |
TDQS
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.
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.
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.
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.
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.
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.
summarize_metric_changesSummarize metric changesARead-onlyInspect
Use this when the user wants a quick period-over-period (week over week, month over month) change table for their metrics without a PDF: "what changed vs last month", "month over month change", "calculate % change for these KPIs". Takes the same inputs as generate_client_report (typed pairs, a pasted table or a CSV/Excel export with dates) and returns absolute and % changes, rates recomputed from totals, computed highlights, and Excel and CSV files. Use generate_client_report when the user wants a client-ready PDF report. Does not connect to analytics accounts and does not explain why numbers changed.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Optional: 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. | |
| file | No | Optional: 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. | |
| period | No | Optional 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. | |
| metrics | No | The 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). | |
| currency | No | Optional: currency for money metrics without a symbol, e.g. USD, EUR, GBP. Default USD. | |
| date_order | No | Optional: MDY (US, default) or DMY for dates such as 03/10/2026. | |
| pair_order | No | Optional: 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. | |
| current_period | No | Optional: 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_better | No | Optional: 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_period | No | Optional: dates or label of the previous period, e.g. "Sep 2026". Default: the same length right before current_period. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| client | Yes | |
| counts | Yes | |
| period | Yes | |
| metrics | Yes | |
| headline | Yes | |
| warnings | Yes | |
| downloads | Yes | |
| highlights | Yes | |
| assumptions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: it inherits the input contract of generate_client_report, states it returns absolute and % changes plus rates recomputed from totals and computed highlights, and discloses the two things it will not do (no analytics account access, no causal explanation). Minor overlap with the output schema on returned artifacts keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the usage trigger and example phrasings, then the input contract, then the output artifacts, then the alternative and exclusions — a sensible order. Dense but every sentence carries information; the only slight redundancy is restating returned file formats that the output schema also covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, nested-object tool with an output schema, the definition covers input modes, the sibling alternative, output artifacts, and explicit scope limits. Nothing needed to call it correctly appears to be missing, though it stays silent on how ambiguous or malformed pasted tables are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the missing cross-parameter model: the input arrives as typed pairs, a pasted table, or a CSV/Excel export with dates — clarifying that data/file/metrics are alternative entry paths rather than joint requirements (no parameters are required). It does not walk through period, date_order, or pair_order individually, leaving those to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — a period-over-period change table for metrics — and immediately disambiguates from the sibling by naming generate_client_report and the condition that selects it (PDF output). Example user phrasings ('what changed vs last month', 'calculate % change for these KPIs') make the resource concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use triggers with quoted user phrasings, an explicit alternative plus its condition (generate_client_report for a client-ready PDF), and explicit when-not boundaries ('Does not connect to analytics accounts and does not explain why numbers changed'). An agent can route between the two siblings without opening either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- First observed
generate_client_report - First observed
summarize_metric_changes
Related MCP Connectors
Weekly staff shift schedules
Weekly client reports: change, % change, targets, status, printable page and email text. Free.
Weekly client reports: accomplishments, hours, blockers. Free.
Marketing reporting across Google Ads, Meta Ads, GA4, Search Console and Merchant Center.
Related MCP Servers
- FlicenseAqualityDmaintenanceAutomatically collects daily report data from KPI systems using browser automation and Google OAuth login. Generates structured Markdown reports for specified date ranges with persistent session management.6-
- FlicenseAqualityCmaintenanceCompares weekly work reports against original data to identify incorrect values, missing items, and narrative inconsistencies, providing verification results to users.10-
- AlicenseNot gradedqualityDmaintenanceGenerates weekly review reports in Markdown format based on AI session data and optional user annotations.MIT

Re:portFlowofficial
AlicenseAqualityBmaintenanceReportFlow MCP Server - PDF report generation for Claude and AI agents1082 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.