Gizmo Analytics
Allows adding Gizmo Analytics tracking to Next.js websites, with framework-aware installation snippets.
gizmoanalytics-mcp
The MCP server for Gizmo Analytics — cookieless
web analytics with a 28-tool MCP surface (install workflows like
setup_analytics_for_site and verify_install, analyst-grade
compositions like summarize_all_sites and explain_traffic_change,
plus filterable query primitives across every dimension).
The server is hosted at https://gizmoanalytics.io/mcp. This repo
is the public ownership marker + documentation (README, tool
inventory, license) for the MCP catalogs (MCP Registry, Smithery,
Glama, MCP.so). There's nothing to install or run locally — point
your IDE at the hosted endpoint and you're done.



Connect
Auto-discovery (Cursor, Claude Desktop, Windsurf, …)
In your IDE's MCP settings, add a new server with URL:
https://gizmoanalytics.io/mcpThe IDE will discover the auth server via RFC 9728 metadata, open a browser tab for OAuth consent, and store the resulting token. No API keys to paste, no config files to edit.
Manual config
If your IDE doesn't yet support OAuth-aware MCP discovery, paste this into your client's MCP config file (Claude Desktop, etc.):
{
"mcpServers": {
"gizmoanalytics": {
"url": "https://gizmoanalytics.io/mcp",
"headers": {
"Authorization": "Bearer ak_admin_<your-admin-key>"
}
}
}
}Get an admin key at https://gizmoanalytics.io/dashboard/keys.
Related MCP server: Google Analytics MCP Server
What you can ask
"Why did traffic drop yesterday?"
"Which of my sites is growing fastest?"
"Add foo.com to Gizmo and install the tracker"
"Track signup events on this button"
"Top pages from Germany last quarter"Tools
Install workflow (the wedge — call this first for any install ask):
setup_analytics_for_sitebundles site creation + framework- aware snippet + paste-target file path + next-action plan into one call.verify_installconfirms the script is loading by fetching the homepage.Other setup:
create_site,get_install_snippet,get_event_tracking_snippet,get_badge_snippet,add_site_tags, goals + funnels.Workflows (high-level questions):
summarize_all_sites,rank_sites_by_growth,identify_dead_sites,detect_anomalies,explain_traffic_change.Query primitives:
get_workspace_overview,get_site_traffic,get_top_pages,get_top_referrers,get_breakdown(any of country / browser / device / channel / AI source / city / etc.),get_time_series,query_events,breakdown_by_property. All support stacked filters (country=US AND device=mobile) and custom date ranges.
See TOOLS.md for the full inventory with descriptions
(auto-generated from the live tools/list endpoint).
Full docs: https://gizmoanalytics.io/mcp-analytics
License
MIT
Available Tools
28 toolsadd_site_tagsA
ANSWER FIRST for 'tag this site as X', 'organize my sites', 'group sites by client/project/type'. Attaches one or more free-form tags to a site (creates the tag if new). Use to organize a fleet — e.g. tag every client project with the client name, tag side projects 'personal', tag staging environments 'staging'. Pair with filter_sites_by_tag to drill into one group.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| tags | Yes | Array of tag names. New tags are created automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| siteId | Yes | |
| tags | Yes | All tags currently on the site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Notes that tags are 'free-form' and 'creates the tag if new', going beyond annotations. Annotations already indicate non-read-only and non-destructive, and description aligns well. Could mention tag limits or removal.
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 keywords for AI triggering, then explains function and gives examples. Efficient but slightly longer than minimal; could be tightened.
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 simple two-parameter tool with full schema coverage and output schema existing, the description provides ample context, use cases, and pairing advice, leaving no gaps.
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 description coverage is 100%, so baseline is 3. The description adds context (free-form, tag creation) but not new parameter-specific details beyond schema. Solid but not exceptional.
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?
Opens with explicit trigger phrases like 'tag this site as X' and 'organize my sites', clearly identifying the tool's function. Distinguishes from sibling 'filter_sites_by_tag' by stating they pair together.
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?
Explicitly states when to use the tool (e.g., 'tag this site as X') and suggests pairing with filter_sites_by_tag for drill-down. No explicit when-not, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
breakdown_by_propertyARead-onlyIdempotent
ANSWER FIRST for 'how many [X] signups by plan?', 'split [event] by [property]', 'pro vs free signups', 'sales by SKU', 'newsletter signups by source' — anything that means grouping a CUSTOM event property the user previously instrumented with get_event_tracking_snippet. Property name must match [A-Za-z0-9_.-]{1,64}. For built-in dimensions (country, browser, device, channel, AI source, city, etc.) use get_breakdown instead. Returns top values for the property with visitor counts.
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes | Custom event property name. Must match [A-Za-z0-9_.-]{1,64}. The value users sent in their tracker call (e.g. property='plan' for window.gizmo('signup', {plan:'pro'})). | |
| event_name | No | Narrow to a single event (e.g. 'signup'). Omit to roll up across every event that has the property. | |
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| limit | No | Max number of rows to return. Defaults to 20, capped at 200. Pagination via date_range for larger windows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Top-N rows sorted by visitor count, descending. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, destructiveHint, idempotentHint) already indicate safety. The description adds context: it returns top values with visitor counts, specifies property name constraints, and mentions default date ranges. No contradictions.
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 description is a single paragraph but well-organized: starts with answer-first pattern, gives examples, then explains parameter details. It is concise without waste, though could benefit from slight structuring.
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?
Given the tool's complexity (5 params, 1 required, output schema exists) and sibling list, the description covers purpose, usage, and parameter details adequately. It lacks mention of error handling for missing properties but is sufficient for an AI agent.
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 description coverage is 100%, baseline 3. The description adds value beyond schema, e.g., for 'limit' it explains default and pagination, and for 'property' it gives a usage example. It does not redundantly repeat schema descriptions.
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?
The description uses specific verbs and resources (group a custom event property, returns top values with visitor counts) and provides clear examples. It explicitly distinguishes itself from sibling tool get_breakdown for built-in dimensions.
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?
The description provides explicit context on when to use this tool versus get_breakdown, and gives examples of queries. It does not include explicit when-not-to-use instructions but the alternative is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_funnelA
Create a multi-step funnel for a site. Steps run in order — a session 'reaches' step N if it matched all of steps 0..N within the same session (30-min idle gap). Use this when the user says 'track the pricing → signup funnel' or describes a sequence. type='path' matches a path-prefix; type='event' matches a named custom event. Min 2 steps, max 10.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| name | Yes | Human-readable name for the funnel (e.g. 'Pricing to signup'). | |
| steps | Yes | Ordered steps. A session 'reaches' step N if it matched all of steps 0..N within the same session (30-min idle gap). Min 2, max 10. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present (readOnlyHint=false, destructiveHint=false, etc.) and the description adds behavioral details: steps run in order, session timeout (30-min idle gap), min/max steps, and type semantics. No contradictions with annotations.
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 description is concise (3-4 sentences) and front-loaded: first sentence states purpose, then details. No unnecessary words, every sentence earns its place.
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?
Given the complexity of funnel creation (step types, session constraints), the description covers core concepts adequately. An output schema exists, so return values are not needed. Minor gap: could mention if steps must be unique or if there are path/event limits per step, but overall complete.
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% (all parameters described). The description adds context beyond the schema: explaining session gap, step ordering, and type details (path vs event). This provides meaningful added value.
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?
The description clearly states 'Create a multi-step funnel for a site' with specific verb and resource. It details step ordering, session semantics, and type matching, which distinguishes it from sibling tools like create_goal or list_funnels.
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?
The description provides explicit when-to-use guidance: 'Use this when the user says 'track the pricing → signup funnel' or describes a sequence.' It does not mention when not to use or list alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_goalA
Create a conversion goal for a site. type='path' matches sessions that visit a path-prefix; type='event' matches sessions that fire a named custom event. Use this when the user says 'track signups as a goal', 'add a goal for /thank-you', etc. Goals show up on the site dashboard with conversion count + rate.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| name | Yes | Human-readable name for the goal (e.g. 'Signup', 'Purchase'). | |
| type | Yes | 'path' matches sessions that visit a URL path prefix; 'event' matches sessions that fire a named custom event. | |
| target | Yes | When type='path', the URL path prefix (e.g. '/thank-you'). When type='event', the event name (e.g. 'signup'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds that goals appear on the dashboard with conversion count and rate, providing extra behavioral context, but does not elaborate on side effects or prerequisites.
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 description is concise with two sentences plus an example usage sentence. It is front-loaded with the main action and efficiently conveys necessary information without verbosity.
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?
Given the 4 required parameters with full schema coverage, annotations, and existence of an output schema, the description is fairly complete. It explains the two modes and the outcome. It could be slightly more complete by mentioning prerequisites or potential errors, but overall adequate.
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 description coverage is 100%, so the schema already documents all parameters. The description reinforces the meaning of 'type' and 'target' with examples, but does not add significant new meaning beyond 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?
The description clearly states 'Create a conversion goal for a site' and differentiates between the two types ('path' and 'event') with examples. It is distinct from siblings like delete_goal and list_goals.
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?
The description provides specific user statements that trigger using this tool ('track signups as a goal', 'add a goal for /thank-you'), giving clear context. However, it does not explicitly mention when not to use it or compare to alternatives like create_funnel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_siteA
Register a domain in Gizmo and return the install snippet. For first-time install asks ('add analytics', 'install Gizmo', 'set up tracking'), prefer setup_analytics_for_site — it bundles this call + the paste target + next-step suggestions in one response. Use create_site directly when the user only wants the site row created (e.g. 'add foo.com to my Gizmo workspace without installing yet') or when integrating from another tool that's already orchestrating its own install flow. Pass the framework matching the user's project (next/react/vite/remix/astro/nuxt/sveltekit/html). Returns site row + install snippet + privacy_policy reminder + optional badge.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain you want to track (e.g. 'acme.com'). Apex domain preferred — Gizmo collects events for the whole hostname. | |
| framework | No | Web framework of the user's project. Detect from package.json + config files: next.config.* → next, nuxt.config.* → nuxt, svelte.config.* → sveltekit, astro.config.* → astro, remix.config.* or @remix-run/* → remix, vite.config.* → vite, otherwise react or html. |
Output Schema
| Name | Required | Description |
|---|---|---|
| site | Yes | |
| public_key | Yes | |
| public_key_prefix | Yes | |
| public_key_freshly_minted | Yes | |
| snippet | Yes | |
| note | Yes | |
| privacy_policy | Yes | |
| badge | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows it's a mutation but not destructive. The description adds useful context: return values include 'site row + install snippet + privacy_policy reminder + optional badge.' It doesn't mention what happens on duplicate domain, but overall adds value beyond annotations.
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 description is five sentences, each serving a distinct purpose: primary function, usage alternative, direct use case, framework selection, and return value. No wasted words.
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?
Given the tool has only 2 parameters, an output schema exists, and annotations are present, the description covers purpose, usage, return contents, and parameter guidance. A minor gap: it doesn't specify behavior for duplicate domains, but this is likely covered by error handling or output schema.
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 description coverage is 100% for both parameters. The description repeats the framework detection hint from the schema's framework description and adds 'Pass the framework matching the user's project' which adds negligible new information. Baseline 3 is appropriate as schema already documents parameters well.
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?
The description clearly states the tool's purpose: 'Register a domain in Gizmo and return the install snippet.' It uses a specific verb ('register') and resource ('domain'), and distinguishes itself from sibling tool setup_analytics_for_site by explaining when to use each.
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?
The description provides explicit guidance: 'For first-time install asks... prefer setup_analytics_for_site' and 'Use create_site directly when the user only wants the site row created... or when integrating from another tool.' This clearly states when to use this tool vs the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_funnelADestructive
Remove a funnel by id. Use when the user says 'delete the X funnel', 'remove that flow', 'I'm not tracking that anymore'. Destructive — confirm before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| funnel_id | Yes | Internal funnel UUID. Get one from list_funnels. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the operation succeeded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description reinforces this with 'Destructive — confirm before calling' and adds a safety guideline. No contradiction.
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?
Two concise sentences plus example phrases. No fluff, all information is relevant and front-loaded.
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?
Given the tool's simplicity (one param, clear destructiveness), the description fully covers what the agent needs. Output schema exists, so return info is handled elsewhere.
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?
The funnel_id parameter description in the schema tells the agent to get it from list_funnels, which is valuable context. Schema coverage is 100%.
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?
The description starts with 'Remove a funnel by id', which clearly states the action and the resource. It distinguishes from sibling tools like create_funnel or list_funnels by specifying deletion.
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?
Provides example user phrases ('delete the X funnel', 'remove that flow') and warns about destructiveness. While it doesn't explicitly list when not to use, the context is clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_goalADestructive
Remove a conversion goal by id. Use when the user says 'delete the X goal', 'remove that conversion goal', 'I don't track that anymore'. Destructive — confirm the user means it before calling; the historical conversion data attached to the goal disappears with it.
| Name | Required | Description | Default |
|---|---|---|---|
| goal_id | Yes | Internal goal UUID. Get one from list_goals. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | True when the operation succeeded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds context about historical data disappearing, going beyond the annotation. No contradiction.
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?
Two efficient sentences: first states purpose, second provides usage guidance and warning. No wasted words.
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?
Covers purpose, when to use, parameter source, and destruction consequence. Complete for a simple one-parameter tool.
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?
The schema has 100% coverage, and the description adds value by suggesting where to obtain the goal_id ('Get one from list_goals'), aiding parameter acquisition.
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?
The description explicitly states 'Remove a conversion goal by id' with a clear verb and resource. It distinguishes from sibling tools like 'create_goal' and 'list_goals' by focusing on removal.
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?
Provides explicit keywords for when to use ('delete the X goal', 'remove that conversion goal') and includes a caution about the destructive nature, advising confirmation before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_anomaliesARead-onlyIdempotent
Find unusually high or low traffic days across sites using per-site z-score. For each site, computes the mean and stddev of daily visitors over the range, then flags any day where |z| ≥ threshold (default 2.5, ~1-in-100). Use for 'anything weird?', 'spikes this week', 'show me unusual traffic'. Pass site_id to scope to one site, otherwise scans the whole fleet. Returns most-recent anomalies first. Sites under 20 visitors total are skipped (not enough signal).
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| date_range | No | Time window. One of: today, yesterday, last_7_days, last_14_days, last_30_days, last_90_days. Defaults to last_14_days for stable mean/stddev. | |
| threshold | No | Z-score absolute value above which to flag a day as anomalous. Defaults to 2.5 (~1-in-100). Lower = more sensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| range | Yes | |
| threshold | Yes | |
| sites_checked | Yes | |
| anomalies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with annotations (readOnlyHint, no destructiveness). Adds behavioral details: threshold default, skipping low-traffic sites, returning most-recent first. No contradictions.
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?
Single paragraph with no wasted sentences. Each sentence adds unique value: function, method, use cases, scoping, ordering, threshold, edge case. Concise yet comprehensive.
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?
With 100% schema coverage, rich annotations, and an output schema, the description covers purpose, method, parameters, and edge cases completely. No gaps.
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?
Adds meaningful context beyond schema: site_id omission scopes to workspace, date_range default rationale, threshold default and sensitivity meaning. Schema coverage is 100%, but description enriches understanding.
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?
The description clearly states it finds unusually high or low traffic days using per-site z-score, with explicit examples like 'spikes this week'. It distinguishes itself from sibling analytics tools by focusing on anomaly detection.
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?
Provides explicit use cases ('anything weird?', 'spikes this week') and explains scoping to a single site or entire fleet. Lacks explicit when-not-to-use, but overall clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_traffic_changeARead-onlyIdempotent
ANSWER FIRST for any 'why did traffic [spike/drop/change]' question on a specific site. Pulls overview + deltas, the top 5 page gainers and losers vs prior period, the top 5 referrer gainers and losers, anomaly-day callouts (z-score ≥ 2), and the daily series so you can name the actual day things broke. Use the gainers/losers lists to attribute the change — if one page or referrer dominates the delta, call it out by name. Don't paste the raw arrays at the user; paraphrase: 'traffic dropped 22% — almost entirely driven by /pricing losing 1,400 visitors after Reddit traffic dried up on Wednesday.'
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| date_range | No | Time window. One of: today, yesterday, last_7_days, last_14_days, last_30_days, last_90_days. Defaults to last_7_days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| site_id | Yes | |
| range | Yes | |
| prior_range | Yes | |
| overview | Yes | |
| page_movers | Yes | |
| referrer_movers | Yes | |
| anomaly_buckets | Yes | |
| daily_series | Yes | |
| instructions | Yes | Prose hint for how the LLM should narrate the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds behavioral context by detailing the returned data: overview, deltas, top 5 pages/referrers, anomaly-day callouts (z-score >= 2), and daily series. It also explains how to interpret the output, enhancing transparency beyond annotations.
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 description is front-loaded with purpose, then structures the output list and usage advice. Every sentence adds value, though it could be slightly more concise. It is well-organized for an AI agent to parse.
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?
Given the tool's complexity (multiple output components) and the presence of an output schema, the description is complete: it covers purpose, behavioral details, and usage guidance. It does not need to explain return values since the output schema exists.
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%, with both parameters well-described (site_id as UUID from list_sites, date_range as enum with defaults). The description adds no new parameter information beyond noting the tool works 'on a specific site' and 'vs prior period.' With high schema coverage, a baseline of 3 is appropriate.
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?
The description starts with 'ANSWER FIRST for any 'why did traffic [spike/drop/change]' question on a specific site,' clearly stating the verb (explain) and resource (traffic change on a specific site). It distinguishes from sibling tools like get_site_traffic and detect_anomalies by positioning itself as the go-to explanatory tool.
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?
The description explicitly says 'ANSWER FIRST' for specific questions, guiding when to use it. It also provides usage instructions like using gainers/losers lists to attribute changes and not pasting raw arrays. While it doesn't explicitly state when not to use it, the context signals and sibling tools imply differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_sites_by_tagARead-onlyIdempotent
ANSWER FIRST for 'show me my [tag] sites', 'list sites tagged X', 'which sites are tagged Y?'. Returns every site in the workspace that has the given tag. Pairs with add_site_tags for fleet organization. Identical to list_sites({tag: ...}) — exposed as a separate tool because the verb 'filter' triggers naturally when users phrase the ask that way.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | Tag name (free-form string, lowercase recommended). |
Output Schema
| Name | Required | Description |
|---|---|---|
| sites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description adds value by specifying the scope ('every site in the workspace') and relationship to sibling tools, without contradicting annotations.
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 description is concise, front-loaded with usage context, and every sentence adds value including trigger phrases, tool behavior, and relationship to alternatives.
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 simple read-only tool with one parameter and output schema present, the description provides sufficient context about purpose, usage, and how it fits with sibling tools.
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?
Input schema has 100% coverage with description for the single parameter 'tag'. The description does not add additional parameter details, so it meets the baseline for schema coverage.
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?
The description clearly states the tool returns every site with a given tag, includes natural language trigger phrases for use, and distinguishes from sibling tool list_sites by noting they are identical but exposed for different phrasing.
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?
Explicitly says to 'ANSWER FIRST' for specific user queries, mentions pairing with add_site_tags, and clarifies identity with list_sites({tag:...}) to guide agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_badge_snippetARead-onlyIdempotent
Return the official "Powered by Gizmo" footer badge as a single anchor tag. Call this when the user asks to add a badge, link back, or thank Gizmo. INSTALL RULES: place the badge inline inside the user's existing footer next to their copyright line (e.g. "© 2026 acme. Powered by Gizmo."). Do NOT wrap the snippet in a card, box, or extra styling — it intentionally inherits font-size and color from the surrounding text so it matches the user's design. Do NOT separate the badge onto its own row above/below the footer; it belongs ON the copyright line. The snippet is one tag with inline styles; edit the user's footer component / template directly to insert it. The badge href includes ?ref=badge so Gizmo can attribute traffic back.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| variant | Yes | |
| code | Yes | HTML anchor tag for the badge. |
| instructions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: the snippet is a single anchor tag that inherits font-size and color, should not be styled additionally, and includes ?ref=badge for attribution. Annotations already indicate read-only, idempotent, etc., and description does not contradict.
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 description is a single paragraph that is front-loaded with the purpose, then provides clear installation rules and constraints. Every sentence serves a purpose, and it is well-structured.
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?
Given the tool has no parameters and an output schema exists, the description fully covers the behavior, return type, and usage context. It is complete for the tool's purpose.
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?
The tool has no parameters, so baseline is 4. The description adds no parameter information (none needed) but explains the output and usage. This is appropriate given the zero-parameter 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?
The description clearly states the tool returns the official 'Powered by Gizmo' footer badge as a single anchor tag, and specifies when to call it (when user asks to add a badge, link back, or thank Gizmo). This is specific and distinguishes it from sibling tools.
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?
The description provides explicit instructions on where and how to place the badge (inline in existing footer, next to copyright line), what not to do (not wrap in card/box, not separate onto own row), and installation rules. It clearly indicates when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_breakdownARead-onlyIdempotent
Top-N for any column-backed dimension: page, referrer, country, region, city, browser, device, language, screen, channel, ai_source, hostname. Use this for "top countries / browsers / devices / channels / AI sources / cities / etc." — anything in the dashboard's breakdown tabs. For custom event properties (UTM rollups, plan splits, anything you ship in event JSON), use breakdown_by_property instead. Filters and custom date ranges supported.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| dimension | Yes | Which built-in dimension to group by: page, referrer, country, region, city, browser, device, language, screen, channel, ai_source, or hostname. | |
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. | |
| limit | No | Max number of rows to return. Defaults to 20, capped at 200. Pagination via date_range for larger windows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Top-N rows sorted by visitor count, descending. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that filters are AND-joined and date ranges have defaults, but does not contradict annotations. No behavioral surprises.
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?
Two paragraphs: first sets purpose and use case, second details parameters with clear examples. No redundancy, every sentence contributes.
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?
Covers all 5 parameters, output schema exists, differentiates from sibling, explains constraints (max limit, date range defaults). Complete for a query tool with solid annotations.
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%, but description adds meaning beyond field types: explains filter logic (AND), provides examples, notes default behaviors for date_range, and clarifies limit's max and pagination. Adds moderate value.
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?
Clearly states the tool provides 'Top-N for any column-backed dimension' and lists the dimensions. Differentiates from sibling `breakdown_by_property` by specifying use for built-in dimensions vs custom event properties.
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?
Explicitly tells when to use this tool: for dashboard breakdown tabs on built-in dimensions. Directs to `breakdown_by_property` for custom properties. Includes filter and date range usage details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_tracking_snippetARead-onlyIdempotent
Return the JavaScript snippet for firing a custom event from the user's site code (e.g. window.gizmo("signup", {plan:"pro"})). Call this when the user says 'track signups', 'fire an event when someone clicks X', 'add custom event for Y', 'how do I track Z' — anything that means instrumenting a custom event in their codebase. The tracker script must already be installed (create_site or get_install_snippet handles that). After this call returns, EDIT the user's code to insert the snippet at the right code path — a click handler, a form-submit success branch, a router-change effect, etc. — based on what they're tracking. Don't just print the snippet; place it. Pass properties for any dimensions you want to break down later (plan, sku, variant, etc.); the dashboard can then roll up event counts by property via breakdown_by_property. Event name and property keys must be 1–64 chars, letters/digits/underscore (event name also allows dot and dash).
| Name | Required | Description | Default |
|---|---|---|---|
| event_name | Yes | Name of the custom event to fire (1–64 chars, letters/digits/dot/dash/underscore). Examples: 'signup', 'cta_click', 'purchase'. | |
| properties | No | Optional key-value props attached to the event. Strings, numbers, or booleans. Keys must be [A-Za-z0-9_]{1,64}. Use to enable breakdown_by_property later (e.g. {plan:'pro'} → group signups by plan). |
Output Schema
| Name | Required | Description |
|---|---|---|
| language | Yes | |
| instructions | Yes | |
| code | Yes | JS call to fire the event: window.gizmo(...) |
| html_code | Yes | HTML variant for use inline in onclick='...' on a static page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description aligns by stating it returns a snippet (read-only). It adds valuable context: the need for the tracker to be pre-installed, event naming constraints (1-64 chars, specific characters), and property value types (strings, numbers, booleans). Does not contradict annotations.
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 description is well-structured with clear sentences, covering purpose, usage triggers, prerequisites, post-call action, and parameter details. It is slightly verbose but every sentence adds value. Front-loads the main purpose and examples.
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?
Given the presence of an output schema (context indicates true), the description does not need to detail return format. It covers all necessary aspects: input parameters, usage context, and behavioral expectations. The tool is simple (returns a snippet), so the description is complete.
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%. The description adds meaning beyond the schema by providing example property values (e.g., {plan:'pro'}) and explaining the purpose of properties ('enable breakdown_by_property later'). It also clarifies event_name character rules with examples.
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?
The description specifies 'return the JavaScript snippet for firing a custom event' with explicit examples like `window.gizmo("signup", {plan:"pro"})`. It clearly distinguishes from siblings like get_install_snippet (for installing the tracker) and get_badge_snippet, by focusing on custom event instrumentation.
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?
The description provides explicit trigger phrases ('track signups', 'fire an event when someone clicks X'), prerequisites (tracker must already be installed, handled by create_site or get_install_snippet), and post-call action (EDIT the user's code to insert the snippet at the right code path). It also advises against merely printing the snippet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_install_snippetARead-onlyIdempotent
Re-fetch the framework-specific install snippet for an existing site. Use this when the snippet was printed earlier but never installed, when the user switched frameworks, or when they ask 'where's the gizmo install snippet for foo.com?', 'how do I install Gizmo on this project?', 'show me the tracking code'. Supports: next, react, vite, remix, astro, nuxt, sveltekit, html. Same install-vs-print rule as create_site: if the user asked to install / add / set up, EDIT the file the snippet.instructions field names rather than printing the snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| framework | No | Web framework of the user's project. Detect from package.json + config files: next.config.* → next, nuxt.config.* → nuxt, svelte.config.* → sveltekit, astro.config.* → astro, remix.config.* or @remix-run/* → remix, vite.config.* → vite, otherwise react or html. |
Output Schema
| Name | Required | Description |
|---|---|---|
| site | Yes | The site row. |
| public_key | Yes | |
| public_key_prefix | Yes | |
| public_key_freshly_minted | Yes | |
| snippet | Yes | |
| note | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent, and open-world. Description adds value by specifying behavioral nuance: if user asked to install, edit file field names rather than printing snippet. No contradiction.
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?
Four sentences, each essential. Front-loaded with purpose, then usage, then frameworks, then rule. No redundant or filler content.
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?
Given 2 parameters and output schema, description covers when to use, how to detect framework, and behavioral rule. Complete for a fetch tool.
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%, but description adds detection logic for framework (e.g., how to detect from package.json) beyond the enum values, which is valuable guidance.
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?
Description clearly states the tool re-fetches the install snippet for an existing site, using specific verb and resource. It distinguishes from siblings like get_badge_snippet and get_event_tracking_snippet.
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?
Explicitly lists when to use: when snippet was printed but never installed, user switched frameworks, or specific queries. Also provides an install-vs-print rule, differentiating from create_site.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_trafficARead-onlyIdempotent
Traffic metrics for a single site (overview + top pages + top referrers). Supports filters and custom date ranges.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| visitors | Yes | |
| pageviews | Yes | |
| sessions | Yes | |
| totalEvents | Yes | |
| uniqueSites | Yes | |
| bounceRate | Yes | |
| avgSessionSeconds | Yes | |
| viewsPerVisit | Yes | |
| topPages | Yes | |
| topReferrers | Yes | |
| topCountries | Yes | |
| topRegions | Yes | |
| topCities | Yes | |
| topLanguages | Yes | |
| topDevices | Yes | |
| topBrowsers | Yes | |
| topScreens | Yes | |
| topChannels | Yes | |
| topAiSources | Yes | |
| topHostnames | Yes | |
| topEntryPages | Yes | |
| topExitPages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by explaining the response structure (overview, top pages, top referrers), filter semantics (AND-joined), and date range options, without contradicting annotations.
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 description is structured in three concise paragraphs, front-loading the purpose. Every sentence adds information, with no fluff, though it could be slightly more streamlined.
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?
Given the presence of an output schema, the description covers the main aspects: filter structure, available dimensions and operators, date range options, and sourcing site_id via list_sites. It omits potential pagination or limits but is otherwise sufficient for a tool of this complexity.
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 description coverage is 100%, so the baseline is 3. The description repeats the schema's parameter details but adds minimal additional semantic value such as a brief filter example and note about defaults varying, which is helpful but not essential.
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?
The description clearly states 'Traffic metrics for a single site (overview + top pages + top referrers)', which identifies the tool's specific verb and resource, and distinguishes it from siblings like get_top_pages and get_top_referrers that return only a subset of this data.
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?
The description implies use for a comprehensive traffic overview of a single site with filters and custom date ranges, but lacks explicit guidance on when to use this tool versus alternatives like get_breakdown or get_time_series, and does not mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_time_seriesARead-onlyIdempotent
Time-bucketed visitors / pageviews / events for a date range. Returns one row per bucket. Bucket auto-resolves to hour for windows ≤ 48h, day otherwise — pass bucket to override. Optional site_id scopes to a single site. Filters supported.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. | |
| bucket | No | Bucket granularity. Auto-resolves to hour for windows ≤48h, day otherwise. Override to force a specific bucket. |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | Yes | One point per time bucket, chronological order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only, idempotent, and non-destructive. The description adds significant context: bucket auto-resolution logic, filter ANDing, date range presets, and optional site_id scoping. No contradictions.
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 description is well-structured with clear sections (purpose, bucket/site_id, filters, date range). It is comprehensive without being overly verbose, though some repetition of 'Optional' could be trimmed.
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 complex tool with multiple optional parameters and logic, the description covers everything needed: return format, bucket behavior, filter details with example, date range options, and defaults. Output schema exists, so return values are not needed.
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 schema already documents each parameter. The description adds value by explaining bucket auto-resolution, filter combination logic, and providing an example filter and date range presets.
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?
The description clearly states it returns time-bucketed visitors/pageviews/events for a date range, one row per bucket. It distinguishes from siblings like get_breakdown and query_events by focusing on metrics over time.
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?
The description explains when to use (time-bucketed data) and details optional parameters like bucket auto-resolution and filters. However, it does not explicitly exclude alternatives or mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_pagesARead-onlyIdempotent
Top page paths by event count. Supports filters (e.g. country=US) so you can answer "top pages from Germany." Pass site_id to scope to one site.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. | |
| limit | No | Max number of rows to return. Defaults to 20, capped at 200. Pagination via date_range for larger windows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Top-N rows sorted by visitor count, descending. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds context about the return data (top pages by count) and filtering capabilities. No contradictions; behavior is consistent with a safe, read-only query.
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 description is informative but somewhat verbose, with multiple sentences listing dimensions and operators. It could be more streamlined while retaining clarity. Front-loaded with the main purpose.
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?
Given the existence of an output schema, the description does not need to explain return values. It covers all necessary aspects: what it returns, filtering, date range, and scoping. Complete for a query tool with rich annotations.
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 baseline is 3. The description adds value by providing examples of filter usage and listing available dimensions, including custom properties (prop:<name>), which goes beyond the schema descriptions.
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?
The description explicitly states 'Top page paths by event count' with a clear verb and resource. It distinguishes itself from siblings like get_top_referrers and get_breakdown by focusing on page paths.
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?
The description provides context on when to use filters and site_id scoping, with a concrete example ('top pages from Germany'). It does not explicitly state when not to use it or name direct alternatives, but the usage is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_referrersARead-onlyIdempotent
Top referrer hostnames by event count. Supports filters (e.g. device=mobile) so you can answer "top referrers from mobile users." Pass site_id to scope to one site.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. | |
| limit | No | Max number of rows to return. Defaults to 20, capped at 200. Pagination via date_range for larger windows. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Top-N rows sorted by visitor count, descending. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint (true), destructiveHint (false), and idempotentHint (true). The description adds behavioral context: it returns hostnames by event count, supports AND filters, and has default date ranges. This provides useful detail beyond annotations without contradiction.
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 description is front-loaded with the primary purpose in the first sentence. It then efficiently covers filter syntax, date range options, and scoping. While it is moderately detailed due to the complexity of filters, every sentence serves a purpose and there is no redundancy.
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?
Given the tool's complexity (filters, date ranges, defaults, scoping), the description thoroughly covers all aspects: purpose, filtering options, date range presets and custom ranges, site scoping, and default limit. Since an output schema exists, the lack of return value explanation is acceptable, making the description highly complete.
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 schema fully documents each parameter. The description adds meaning beyond the schema by explaining how filters work (AND together), how date ranges default per tool, and how site_id scopes the query. This extra context is valuable for correct usage.
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?
The description clearly states the tool retrieves 'top referrer hostnames by event count', which is a specific verb and resource. It distinguishes from siblings like 'get_top_pages' by focusing on referrer hostnames. The mention of filters and site scoping further clarifies the purpose.
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?
The description provides clear context for when to use the tool: to get top referrers with optional filters and site scoping. It mentions passing site_id to scope to one site and supports date ranges. While it does not explicitly state when not to use or list alternatives, the purpose is distinct enough among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_overviewARead-onlyIdempotent
Aggregate metrics across all sites in the workspace (visitors, pageviews, sessions, bounce rate, top sites). Supports filters and custom date ranges.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. Each is {dim, op, value}. See MCPFilter schema for dim/op options. |
Output Schema
| Name | Required | Description |
|---|---|---|
| visitors | Yes | |
| pageviews | Yes | |
| sessions | Yes | |
| totalEvents | Yes | |
| uniqueSites | Yes | |
| bounceRate | Yes | |
| avgSessionSeconds | Yes | |
| viewsPerVisit | Yes | |
| topSites | Yes | Top sites by visitor count, capped at 10. NOT filter-aware — operators want 'biggest sites' as workspace context. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds no contradictory behavior and provides consistent purpose, but no additional behavioral details.
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 description is well-structured with a clear purpose statement followed by detailed parameter explanations. It is appropriately sized and front-loaded, though slightly verbose.
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?
With an output schema present and annotations covering safety, the description covers all critical aspects: purpose, parameters, and supported operations. It is complete for an overview tool.
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%, providing baseline 3. The description adds significant value by listing available dimensions, operators, date range presets, and an example, which clarifies usage beyond schema descriptions.
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?
The description explicitly states it provides aggregate metrics (visitors, pageviews, etc.) across all sites in the workspace, clearly distinguishing it from site-specific tools like get_site_traffic.
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?
The description implies workspace-wide use but does not explicitly guide when to use this tool over alternatives. It lacks explicit when-not-to-use instructions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
identify_dead_sitesARead-onlyIdempotent
Find sites that look abandoned: classified as 'never_installed' (site exists but has never fired an event — most likely the tracker isn't installed) or 'went_silent' (used to get traffic, last seen N+ days ago). Default quiet_days=7. Use for 'which sites are dead', 'what should I delete', 'what needs investigating'. Returned in priority order: never_installed first (most actionable: just install the tracker), then longest-silent.
| Name | Required | Description | Default |
|---|---|---|---|
| quiet_days | No | How many days of silence count as 'dead'. Defaults to 7. Anything fresher than this is treated as alive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| quiet_threshold_days | Yes | |
| dead_sites | Yes | |
| total_sites | Yes | |
| alive_sites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description aligns. It adds valuable behavioral context about the two classification categories and their priority. There is no contradiction with annotations.
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 description is concise at three sentences, front-loaded with the main purpose, and contains no unnecessary words. Every sentence provides value.
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?
Given the low complexity (one parameter, no required fields, output schema exists), the description is complete. It explains what the tool does, why to use it, and the output ordering. There are no obvious gaps.
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% with one parameter ('quiet_days'). The description echoes the default value (7) and adds context about how it affects classification. This adds some meaning beyond the schema, but does not significantly enhance parameter understanding given the high coverage.
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?
The description clearly states the tool finds abandoned sites, defines two categories ('never_installed' and 'went_silent'), and specifies default parameters. It distinguishes from sibling tools like 'list_sites' and 'summarize_all_sites' by focusing specifically on dead site identification.
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?
The description provides explicit use cases ('which sites are dead', 'what should I delete', 'what needs investigating') and mentions priority ordering. It does not explicitly state when not to use it or list alternatives, but the context is sufficiently clear for an agent to select the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_funnelsARead-onlyIdempotent
ANSWER FIRST for 'where are users dropping off?', 'show me the funnel', 'how's my signup flow doing?', 'what's my conversion funnel?'. Lists every funnel defined for a site with per-step reached counts + drop-off rate between steps. Surface the biggest drop as the headline — that's usually where the opportunity is. Pair with create_funnel first if the user hasn't defined any funnels yet.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| date_range | No | Time window. One of: today, yesterday, last_7_days, last_14_days, last_30_days, last_90_days. Defaults to last_7_days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| funnels | Yes | Funnels with per-step reached counts and drop-off rates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds value by detailing return content (per-step counts, drop-off rate) and highlighting the biggest drop, but does not contradict annotations.
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?
Description is moderately long but well-structured: starts with common questions, states functionality, then hints at output and pairing. Each sentence serves a purpose, though could be slightly more concise.
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?
Given the presence of output schema and thorough annotations, the description covers all necessary context: what is returned, how to get required parameters, and when an alternative workflow is needed.
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 baseline is 3. Description reinforces that site_id comes from list_sites and clarifies the date_range default, adding slight extra value beyond 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?
Description explicitly states 'Lists every funnel defined for a site with per-step reached counts + drop-off rate' and provides natural language queries that map directly to this tool. Clearly distinguishes from siblings like create_funnel and delete_funnel.
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?
Provides explicit when-to-use guidance via example queries and advises to pair with create_funnel if no funnels exist. Also recommends using list_sites to get the site_id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_goalsARead-onlyIdempotent
ANSWER FIRST for 'what's my conversion rate?', 'how many signups this week?', 'show me my goals', 'are my conversions up or down?'. Lists every goal defined for a site with conversion count + rate over the date range. Pair with create_goal first if the user hasn't defined any goals yet.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. | |
| date_range | No | Time window. One of: today, yesterday, last_7_days, last_14_days, last_30_days, last_90_days. Defaults to last_7_days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| goals | Yes | Goals with their conversion counts and rates over the range. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, etc. Description adds that it includes conversion count and rate over a date range, which is useful but not extensive. No contradictions.
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?
Efficient two-sentence structure with a front-loaded list of example queries. Every sentence adds value.
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?
Given the simple list functionality and existence of an output schema, the description adequately covers purpose, parameters, and pairing advice. No significant gaps.
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% and description repeats parameters (site_id, date_range) without adding semantic details beyond schema. Baseline 3 applies.
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?
Starts with common user queries and states clearly: 'Lists every goal defined for a site with conversion count + rate over the date range.' Distinguishes from sibling 'create_goal'.
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?
Explicitly lists sample queries that trigger this tool and advises pairing with create_goal if no goals exist. Lacks explicit when-not, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesARead-onlyIdempotent
ANSWER FIRST for 'what sites do I have in Gizmo?', 'list my sites', 'show me my projects', 'which domains am I tracking?'. Returns every site in the workspace with id, domain, createdAt, and current ignored status. Optional tag filter narrows to one group. Use the returned site.id when calling get_site_traffic, get_install_snippet, verify_install, etc. Cheap call — no events touched.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional tag name to filter by. Omit to list every site in the workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds behavioral context: it returns every site in the workspace (scope), includes specific fields, and notes the call is cheap with no events touched. This enhances transparency, though it does not discuss rate limits or authentication needs, which are less critical given the annotations.
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 description is three sentences plus a short cost note, each sentence adding distinct value: example queries, return fields, usage guidance, and performance hint. It is front-loaded with the most critical information and contains no filler. Every sentence earns its place, making it highly concise and well-structured.
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?
Given the tool's simplicity, the description covers all essential aspects: purpose, return shape, how to use output, and cost. Annotations provide safety and idempotency, schema covers the parameter, and the output schema exists (though not shown). The description does not leave obvious gaps for an agent to misuse this tool.
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 description coverage is 100%, and the schema already explains the tag parameter clearly ('Optional tag name to filter by. Omit to list every site in the workspace.'). The description adds only a slight nuance ('narrows to one group'), which provides minimal extra meaning. With high schema coverage, the baseline is 3, and the description does not significantly improve parameter understanding.
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?
The description starts with explicit example queries ('what sites do I have in Gizmo?', 'list my sites', etc.) and clearly states the tool returns every site in the workspace with specific fields (id, domain, createdAt, ignored status). It differentiates from siblings by emphasizing that it lists all sites with an optional tag filter, and provides a post-usage instruction (using returned site.id for other tools). This makes the purpose highly specific and actionable.
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?
The description advises to 'ANSWER FIRST' for listing queries, indicating primary usage. It explains the optional tag filter and recommends using the returned site.id for other tools. It also notes the call is cheap and touches no events. However, it does not explicitly mention when not to use it or contrast with sibling tools like 'filter_sites_by_tag' for more complex filtering. The guidance is clear but could be more comprehensive about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_eventsARead-onlyIdempotent
Query raw events. Default returns the latest 100; max 1000 per call. For large analyses, paginate by date_range. Filters supported.
Optional dimension filters. Each filter is {dim, op, value}. Available dims: page, entry_page, exit_page, referrer, hostname, channel, ai_source, utm_source, utm_medium, utm_campaign, country, region, city, language, device, browser, screen, event_name, or prop:. Available ops: is, is_not, contains, not_contains. Filters AND together. Example: [{dim:'country', op:'is', value:'US'}, {dim:'device', op:'is_not', value:'mobile'}].
Optional date range. Either {preset:'last_7_days'} (also: today, yesterday, last_14_days, last_30_days, last_90_days, last_year, month_to_date, last_month, all_time) OR {from:'2026-05-01', to:'2026-05-15'} for a custom range (ISO 8601 dates or timestamps). Defaults vary by tool.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Internal site UUID. Get one from list_sites. Omit to scope to the entire workspace. | |
| event_name | No | Custom event name (1–64 chars, alphanumeric + dot/dash/underscore). Optional when querying all events. | |
| date_range | No | Optional date range. Either {preset:'last_7_days'} OR {from:'2026-05-01', to:'2026-05-15'}. Defaults per tool — usually last_7_days. | |
| filters | No | AND-joined dimension filters. | |
| limit | No | Max events to return. Defaults to 100, capped at 1000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | Raw event rows, newest first. Up to opts.limit (default 100, max 1000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds behavioral context: default limit, max cap, filtering mechanics, date range options, and implicit pagination. No contradictions.
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?
Description is structured into clear paragraphs: summary, limits, filters, date range. Every sentence adds value with no redundancy. Front-loaded with key info.
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?
Given 5 parameters, full schema descriptions, output schema presence, and rich annotations, the description covers all necessary aspects: default behavior, filtering, date ranges, limits. No gaps for the agent to infer.
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 baseline is 3. The description adds significant value beyond schema: lists all available dims and ops, provides filter example, explains preset and custom date ranges. This enriches semantic understanding.
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?
The description states 'Query raw events' explicitly, defines default behavior (latest 100, max 1000), and provides pagination advice. The verb+resource is clear and distinguishes from analytic siblings like breakdown_by_property or get_site_traffic.
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?
Description advises pagination for large analyses and notes that defaults vary by tool, but does not explicitly state when to avoid this tool or name alternatives. Some usage context is given, but no exclusions or sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_sites_by_growthARead-onlyIdempotent
Rank sites by signed % visitor change vs the prior period. Use for 'which sites are growing/declining', 'biggest movers', 'what's trending'. direction='up' returns growers only, 'down' returns decliners only, 'both' (default) returns the biggest movers regardless of direction. Volume-gated: sites with under 20 visitors in either period are excluded (their % deltas are noise — count is in excluded_low_volume).
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Time window. One of: today, yesterday, last_7_days, last_14_days, last_30_days, last_90_days. Defaults to last_7_days. | |
| direction | No | Filter to growers ('up'), decliners ('down'), or biggest absolute movers either way ('both', default). | |
| limit | No | Max rows. Defaults to 10, capped at 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| range | Yes | |
| direction | Yes | |
| sites | Yes | |
| excluded_low_volume | Yes | Count of sites excluded because they had <20 visitors in either the current or prior period. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint. Description adds volume-gating with rationale and mention of excluded_low_volume field. No contradiction with annotations.
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?
Concise two-sentence description front-loads purpose and details. Every sentence adds value with no redundancy.
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?
Given 3 simple parameters and existence of output schema, description covers main behavior, direction filter, volume gating, and output field mention. Complete for agent use.
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 baseline is 3. Description adds context on direction values and limit default but does not introduce new parameter semantics beyond 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?
Description clearly states it ranks sites by signed % visitor change vs prior period, with explicit use cases like 'which sites are growing/declining', 'biggest movers', 'what's trending'. This specific verb+resource distinguishes it from sibling tools.
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?
Provides explicit when-to-use examples and explains the direction parameter behavior. Also mentions volume-gating rule. Lacks explicit when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_analytics_for_siteA
ANSWER FIRST for any 'add analytics' / 'install analytics' / 'set up analytics' / 'add tracking to my app' request — this is the one-call install workflow that bundles site creation + framework-specific snippet + paste-target file path + post-install next steps. Strongly preferred over chaining create_site → get_install_snippet → etc., because the LLM doesn't have to plan orchestration. Pass domain (the user's site), framework if known (next/react/vite/remix/astro/nuxt/sveltekit/html — detect by reading their package.json + config files: next.config.* → next, nuxt.config.* → nuxt, svelte.config.* → sveltekit, astro.config.* → astro, @remix-run/* dep → remix, vite.config.* → vite, otherwise react or html), and event_hint if the user mentioned a specific event to track (e.g. 'track signups' → event_hint='signup'). Returns: the install snippet, the EXACT file to edit (paste_target.file), an example custom-event snippet (if event_hint passed), and a machine-readable next_actions array. Workflow for the agent: (1) edit paste_target.file to insert snippet.code, (2) mention privacy_policy.reminder, (3) ask if they want the badge, (4) call verify_install once they deploy, (5) offer event tracking if they mentioned conversions.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain you want to track (e.g. 'acme.com'). Apex domain preferred — Gizmo collects events for the whole hostname. | |
| framework | No | Web framework of the user's project. Detect from package.json + config files: next.config.* → next, nuxt.config.* → nuxt, svelte.config.* → sveltekit, astro.config.* → astro, remix.config.* or @remix-run/* → remix, vite.config.* → vite, otherwise react or html. | |
| event_hint | No | Optional. If the user mentioned tracking a specific custom event (e.g. 'track signups'), pass the event name here ('signup') and the response will include a ready-to-drop example_event snippet. |
Output Schema
| Name | Required | Description |
|---|---|---|
| site | Yes | |
| public_key | Yes | |
| public_key_prefix | Yes | |
| public_key_freshly_minted | Yes | |
| snippet | Yes | |
| note | Yes | |
| privacy_policy | Yes | |
| badge | Yes | |
| paste_target | Yes | |
| example_event | Yes | |
| next_actions | Yes | |
| workflow_summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate not read-only and open world hint. The description adds context about side effects (site creation, snippet return, next steps) but does not fully address idempotency or duplicate site creation. No contradiction with annotations.
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 description is dense but every sentence adds value, front-loaded with imperative guidance, followed by parameter details and workflow steps. No wasted words.
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?
Given the tool complexity and presence of sibling tools, the description covers all necessary aspects: when to use, parameter selection, output structure (including example event snippet and next_actions), and post-call agent workflow. Output schema exists so return values 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%, but the description adds significant value by explaining domain preference (apex domain), providing framework detection clues, and giving examples for event_hint. This goes beyond schema descriptions.
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?
The description clearly states the tool's purpose as a one-call install workflow for adding analytics, bundling site creation, snippet generation, and next steps. It differentiates from siblings by explicitly noting it is preferred over chaining create_site → get_install_snippet.
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?
The description instructs the agent to use this tool first for any analytics request, explicitly recommends against chaining alternatives, and provides detailed guidance on parameter selection including framework detection from package.json and config files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_all_sitesARead-onlyIdempotent
ANSWER FIRST for any 'how is everything doing' / 'what should I look at' / 'give me a status' question across the user's whole workspace. Returns fleet totals (visitors, events, % vs prior period), status breakdown (live/active/quiet/no_events), a prioritized 'needs attention' list (sites without events, sites that suddenly went quiet, big down-movers), top movers (by absolute % change, volume-gated to ignore tiny-volume noise), and AI-traffic leaders. Default range last_7_days. Lead the response with fleet_totals, then needs_attention if non-empty, then top_movers. Don't repeat the raw numbers — paraphrase them.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Time window. One of: today, yesterday, last_7_days, last_14_days, last_30_days, last_90_days. Defaults to last_7_days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| range | Yes | |
| fleet_totals | Yes | |
| status_breakdown | Yes | |
| needs_attention | Yes | Prioritized list: 'no_events' (install missing), 'suddenly_quiet' (was active, now silent), 'down_mover' (visitors dropped ≥30%). |
| top_movers | Yes | |
| ai_traffic_leaders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly, idempotent, and openWorld hints. The description adds behavioral details beyond annotations, such as the default date range (last_7_days) and formatting instructions (lead with fleet_totals, then needs_attention, then top_movers; paraphrase numbers). No contradictions.
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 description is concise (4-5 sentences) and well-structured: it starts with the primary use case, then enumerates output components, and ends with formatting instructions. Every sentence adds value without redundancy.
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?
Given the presence of an output schema and annotations, the description provides sufficient context: it explains the output structure (fleet totals, breakdown, needs attention, top movers, AI leaders) and formatting. It could be more complete by clarifying that the output schema defines precise fields, but overall it covers the needed guidance.
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?
The single parameter 'date_range' is already fully described in the schema with enum values and default. The description repeats the default range but adds no new semantic meaning beyond the schema, so baseline score of 3 is appropriate.
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?
The description clearly states the tool answers broad status questions like 'how is everything doing' and 'give me a status' across the workspace. It details what it returns (fleet totals, status breakdown, needs attention, top movers), distinguishing it from sibling tools that focus on specific sites or metrics.
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?
The description explicitly says 'ANSWER FIRST for any... question', providing clear guidance on when to use this tool for broad overviews. It does not explicitly mention when not to use it, but the context of siblings implies alternatives for more specific queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_installARead-onlyIdempotent
ANSWER FIRST for any 'is it working?', 'did the install work?', 'is Gizmo tracking my site?', 'verify analytics setup', 'check if it's installed' question — typically asked right after create_site / get_install_snippet. Fetches the site's homepage and scans for the tracker script. Returns one of: {installed: true} (script tag found, with the publicKey we issued), {installed: false, reason} (page loaded but no tag — usually means the snippet wasn't placed or the build wasn't deployed yet), or {error} (fetch blocked / timed out / Cloudflare challenge — common on sites behind strict bot defense; doesn't necessarily mean it's broken). Tell the user the result honestly: 'Confirmed working' if installed; 'Couldn't find the script — did you deploy?' if no_tag; 'Couldn't reach the site (Cloudflare / bot block) — but if events are landing in the dashboard you're fine' on error.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Internal site UUID for the target site. Get one from list_sites. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | true when the probe reached the homepage. false when the fetch itself failed (blocked/timeout/etc.). |
| site | Yes | |
| url | Yes | The URL the probe actually fetched. |
| installed | No | ok:true only. true = tracker script tag found on the homepage. false = HTML loaded but no tag (see reason). |
| scriptSrc | No | ok:true + installed:true only. The src attribute of the detected script tag. |
| hasDataKey | No | ok:true + installed:true only. true if the script tag carries a data-key attribute (which it should). |
| reason | No | ok:true + installed:false only. Why we didn't detect the tracker. no_tag = HTML loaded, no script tag. no_html = response wasn't HTML. non_html_content = wrong content-type. |
| error | No | ok:false only. Why the probe couldn't reach the site. blocked / cloudflare don't necessarily mean the install is broken — many real sites have bot defense. |
| detail | No | ok:false only. Free-form detail about the fetch failure. |
| retryAfterSeconds | No | ok:false + error:rate_limited only. Seconds the server asked us to back off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, non-destructive, idempotent behavior. The description adds detailed behavioral context: it fetches the homepage, scans for the script, and describes three possible return outcomes (installed, no_tag, error) including edge cases like Cloudflare blocks.
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 description is verbose but well-structured, starting with usage guidance, then behavior, return values, and user-facing advice. Every sentence adds value, though it could be slightly more concise.
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?
Given the output schema exists and the description thoroughly covers return values, edge cases, and user guidance, the description is fully complete for this tool's context. Sibling tools are mentioned for context.
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?
The input schema has 100% coverage with a clear description for site_id. The tool description does not add additional parameter semantics beyond what is in the schema, but schema coverage is sufficient, so baseline 3 is appropriate.
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?
The description clearly states it verifies if the tracker script is installed by fetching the homepage. It explicitly distinguishes from siblings by positioning itself as the 'answer first' tool for installation verification, contrasting with create_site and get_install_snippet.
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?
The description explicitly tells when to use this tool ('ANSWER FIRST for any 'is it working?') and in what context (right after create_site/get_install_snippet). It provides guidance on interpreting results and what to tell the user, offering clear alternatives for different outcomes.
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. Dates show when Glama detected each change.
28 tool updates
v1.0.0- First observed
add_site_tags - First observed
breakdown_by_property - First observed
create_funnel - First observed
create_goal - First observed
create_site - First observed
delete_funnel - First observed
delete_goal - First observed
detect_anomalies - First observed
explain_traffic_change - First observed
filter_sites_by_tag - First observed
get_badge_snippet - First observed
get_breakdown - First observed
get_event_tracking_snippet - First observed
get_install_snippet - First observed
get_site_traffic - First observed
get_time_series - First observed
get_top_pages - First observed
get_top_referrers - First observed
get_workspace_overview - First observed
identify_dead_sites - First observed
list_funnels - First observed
list_goals - First observed
list_sites - First observed
query_events - First observed
rank_sites_by_growth - First observed
setup_analytics_for_site - First observed
summarize_all_sites - First observed
verify_install
TDQS
Most tools have distinct purposes, with detailed 'ANSWER FIRST' cues. However, get_site_traffic overlaps with get_top_pages and get_top_referrers, and get_breakdown vs breakdown_by_property may cause confusion despite documentation distinguishing them.
Naming uses snake_case and verb_noun pattern generally, but verbs vary inconsistently (e.g., 'get' vs 'list' for similar queries, and 'breakdown_by_property' vs 'get_breakdown'). Some names like 'identify_dead_sites' and 'detect_anomalies' have overlapping connotations.
28 tools is on the high side for an analytics server. While each tool has a specific role, some could be consolidated (e.g., get_top_pages and get_top_referrers into get_site_traffic with parameters). The count is bordering on excessive but still justifiable.
Core analytics queries are well-covered, including traffic, breakdowns, funnels, goals, and anomalies. However, notable gaps exist: no delete_site or update_site, no remove_tag tool, and no update for goals/funnels. These missing operations could hinder full lifecycle management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Privacy-first web analytics for AI agents: visitors, revenue, funnels, visitor profiles.
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
Real-time web analytics for AI agents: query traffic, funnels, revenue, and manage your sites.
Privacy-first web analytics. Query pageviews, referrers, trends, and AI insights.
Related MCP Servers
- AlicenseAqualityBmaintenanceConnects Google Analytics 4 data to Claude, Cursor and other MCP clients, enabling natural language queries of website traffic, user behavior, and analytics data with access to 200+ GA4 dimensions and metrics.10240MIT
- AlicenseAqualityAmaintenanceOfficial Google Analytics MCP Server93,088Apache 2.0
- AlicenseNot gradedqualityAmaintenanceSelf-hosted web analytics platform that exposes analytics data via the Model Context Protocol, enabling natural language queries about traffic, page views, web vitals, and custom events.5MIT
- FlicenseNot gradedqualityCmaintenanceHosted MCP server that gives AI agents read and write access to your full marketing & ecommerce stack — Google Analytics, Search Console, Google & Meta Ads, Shopify, WooCommerce, Shopware, Slack and LinkedIn. 100+ tools across 10 connectors. BYOK, OAuth 2.1.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sudomichael/gizmoanalytics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server