Statable Analytics
Statable MCP server
Ask your AI assistant about your website traffic. This package connects Claude, Cursor, ChatGPT, Claude Desktop and any other MCP client to Statable, a privacy-first, cookieless web analytics service hosted in the EU.
It is a thin stdio bridge to the hosted Statable MCP endpoint (https://mcp.statable.com/mcp). Every tool call is forwarded there with your API key. Nothing is stored locally.
Which way to connect
Your client | Use |
Claude Code, Cursor, ChatGPT, Codex and other clients with OAuth support | Connect directly to |
Claude Desktop, hosts that only run local stdio servers, CI scripts, sandboxes | This package with an API key. |
Related MCP server: Goatcounter MCP Server
Quick start
In the Statable dashboard open Settings → API keys → Create API key. Keys start with
stbl_. Pick the sites and permissions the assistant may use.Add the server to your client. Claude Desktop (
claude_desktop_config.json):
{
"mcpServers": {
"statable": {
"command": "npx",
"args": ["-y", "@statable/mcp"],
"env": { "STATABLE_API_KEY": "stbl_your_key" }
}
}
}Cursor (~/.cursor/mcp.json) and most other hosts accept the same shape.
Claude Code:
claude mcp add statable --scope user -e STATABLE_API_KEY=stbl_your_key -- npx -y @statable/mcpAsk: "How many visitors did example.com have last week, and where did they come from?"
Tools (25)
Read: list_sites, query_stats, top_pages, top_sources, top_countries, top_custom_events, top_goals, list_goals, list_prop_keys, list_funnels, funnel_report, current_visitors, visitors_over_time, get_tracking_snippet, get_site_filters, get_subscription
Set up: create_site, update_site, create_goal, update_goal, create_funnel, update_funnel, get_tracking_settings, update_tracking_settings, update_site_filters
query_stats is the general one: aggregates, time series or a top-N breakdown over any metric (visitors, pageviews, bounce rate, engagement, goals, exit rate…), any dimension (source, page, country, device, UTM, custom event property…) and filters, with period-over-period comparison. All numbers come back in the site's own timezone. Full reference: statable.com/docs/integrations/mcp.
Write tools only touch configuration (sites, goals, funnels, tracking features, filters). Nothing deletes data.
Configuration
Setting | Env | Flag | Default |
API key |
|
| none |
Remote endpoint |
|
|
|
Without a key the server still starts and advertises its tools (so registries and hosts can inspect it), but every call returns a short message explaining how to add one.
Run from source
git clone https://github.com/key-arg/statable-mcp.git
cd statable-mcp
npm install
STATABLE_API_KEY=stbl_your_key npm testDocker:
docker build -t statable-mcp .
docker run -i --rm -e STATABLE_API_KEY=stbl_your_key statable-mcpAbout Statable
Statable is cookieless web analytics built for the EU: no consent banner needed for the core tracker, data hosted in the Netherlands, a tracker between 0.5 and 2 KB, goals, funnels, custom events, a public Stats API and this MCP server. Free tier for personal, educational and open-source sites.
Support: support@statable.com · Registry: com.statable/analytics in the official MCP registry
MIT © Key Arg B.V.
Available Tools
25 toolscreate_funnelAInspect
Add a funnel: an ordered list of 2+ steps. Each step is one of {"type":"page","value":"/pricing"}, {"type":"event","value":"Signup"}, {"type":"entry_page"|"exit_page","value":"/"}. An exit_page step must be last. scope "visitor" (default) or "session". A duplicate name is refused (funnel_exists). Read the result with funnel_report.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| site | Yes | site_id from list_sites. | |
| scope | No | ||
| steps | Yes | ||
| strict_order | No | Steps must occur in exactly this order with nothing between. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It covers key behaviors: exit_page must be last, scope defaults to 'visitor', duplicates are refused, and the result is read via funnel_report. This goes well beyond a bare 'create' statement, though it does not discuss permissions or undo behavior.
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?
Three concise sentences carry a lot of useful information without filler. The purpose is front-loaded, followed by concrete examples and constraints, making the description efficient and scannable.
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 5-parameter create operation with no output schema and no annotations, the description is fairly complete: step shape, constraints, duplicate behavior, and follow-up reporting are all covered. The only notable omission is prose guidance on strict_order, but the schema already documents that parameter adequately.
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 only 40%, and the description compensates by explaining the steps parameter in detail with valid examples, the exit_page ordering rule, and the scope values/default. It adds real meaning beyond the schema, though name and site are left to the schema or are self-evident.
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 opens with 'Add a funnel' and immediately defines the resource as an ordered list of 2+ steps. It provides concrete step examples, which makes the tool's purpose unmistakable and distinguishes it from related tools like update_funnel and funnel_report.
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?
It clearly orients the agent toward creating a new funnel and says to read results with funnel_report, which is useful routing guidance. It also warns that duplicate names are refused, implying the agent should avoid re-creating existing funnels. However, it does not explicitly call out update_funnel as the alternative for modifying an existing funnel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_goalAInspect
Add a goal to a site. A goal is EITHER a custom event (event_name), OR a page (path with operator), OR a scroll depth — give one of the three, not several. operator: "e" exact, "b" begins with, "c" contains. A duplicate name is refused (goal_exists).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Shown in reports, e.g. "Signup". | |
| path | No | Page path, e.g. "/thanks". Pair with operator. | |
| site | Yes | site_id from list_sites. | |
| operator | No | How path is matched: e exact, b begins with, c contains. | |
| event_name | No | Custom event to count, e.g. "Signup". Use list_prop_keys or top_custom_events to see what the site already sends. | |
| scroll_depth | No | Percent scrolled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the exclusive-or validation and the goal_exists failure for duplicate names, but it doesn't mention required permissions, side effects beyond creation, or what the success response looks like.
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 sentences front-load the purpose and then efficiently pack the cardinality rule, operator definitions, and duplicate-name behavior. Every clause earns its place with no redundancy or filler.
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 six parameters, no output schema, and no annotations, the description plus the rich schema documentation cover how to construct any valid goal and what to expect on a duplicate. It doesn't mention the success return value, but that's a minor gap for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds cross-parameter semantics by grouping event_name, path+operator, and scroll_depth as exclusive alternatives, and by clarifying what the operator values mean. This goes beyond the individual property 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 opens with a specific verb+resource ('Add a goal to a site') and immediately defines the goal resource as one of three concrete types (custom event, page path, scroll depth). This clearly differentiates it from sibling tools like update_goal, list_goals, and create_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?
It provides explicit construction rules: choose exactly one of the three goal types, not several, and gives the operator mapping. It also warns about duplicate names. It doesn't explicitly say 'use update_goal for modifying an existing goal,' but the create/update distinction is implied by the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_siteAInspect
Add a site to this account and get back its id and tracking code. Response: {"site_id":123,"name":"https://example.com","timezone":"Europe/Amsterdam",...}. The url must include the scheme. A url this account already has is REFUSED (site_exists) rather than returned — two sites collecting the same traffic is worse than an error. Retrying with the same arguments replays the first result instead of creating a second site. Follow with get_tracking_snippet to obtain the script tag to install.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full origin including scheme, e.g. "https://example.com". | |
| hobby | No | Optional. Request the free hobby tier; only certain domains qualify. | |
| timezone | No | Optional IANA name, e.g. "Europe/Amsterdam". Defaults to the account's. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so impressively. It discloses that duplicate URLs are refused with site_exists, that retries replay the original result, and that the response includes id and tracking code. This goes well beyond the schema.
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 core action and result, then packs critical behavioral details into a few tight sentences. Every clause earns its place, including the rationale for refusing duplicate URLs.
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?
Even without an output schema or annotations, the description is complete for a 3-parameter creation tool. It gives a response shape, explains duplicate and retry behavior, and points to the necessary next step, so an agent can invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces the URL scheme requirement and includes timezone in the response example, but it does not add substantive new meaning to the hobby or timezone parameters beyond what the schema already states.
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 a specific verb and resource: 'Add a site to this account' and specifies the exact outcome ('get back its id and tracking code'). It is clearly distinct from sibling tools like list_sites and update_site, even without naming them.
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 creation use case is obvious, and the description adds concrete guidance about URL requirements, duplicate rejection, and idempotent retries. It also recommends following with get_tracking_snippet, though it doesn't explicitly contrast with update_site or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
current_visitorsAInspect
Realtime count of unique visitors active in the last 5 minutes for a site. Returns {"site_id":123,"visitors":N}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does a good job: it defines the rolling window, uniqueness semantics, and exact return payload. It does not explicitly mention read-only status, auth needs, or failure modes, but those gaps are modest for such a simple metric tool.
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?
One tight sentence with an embedded JSON example. The key behavioral facts are front-loaded, and every word 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?
For a one-optional-parameter read tool with no output schema, the description plus the detailed schema are nearly sufficient. The inline JSON example compensates for the missing output schema, though the description itself leaves multi-site key handling to the 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 coverage is 100%, so the schema already fully documents the optional site parameter. The description adds no extra parameter-level meaning, making the baseline 3 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 states a specific verb ('count'), a precise resource ('unique visitors active in the last 5 minutes for a site'), and provides a concrete return example. This clearly distinguishes it from time-series or top-N 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 implies the use case—current/live activity versus historical trends—through 'realtime' and the 5-minute window. However, it never explicitly says when to prefer this tool over siblings like visitors_over_time, nor gives exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
funnel_reportAInspect
Run a saved conversion funnel and return its per-step result (NON-tabular). Returns {"funnel":{"id","name","scope"},"entering":N,"all_visitors":N,"steps":[{"index":0,"name":"Visited /pricing","kind":"page","visitors":N,"conversion_rate":percent0to100,"dropoff":N}, ...]}. steps are ORDERED; conversion_rate is cumulative vs the first step (entering), NOT step-to-step; dropoff is visitors lost vs the previous step. Get funnel_id from list_funnels first.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. Or a custom ["YYYY-MM-DD","YYYY-MM-DD"] pair. | |
| filters | No | Optional SEGMENT filters (session-level only: country/browser/os/device/source/channel/utm_*/entry_page/exit_page/hostname). Event-level fields are rejected. | |
| funnel_id | Yes | Funnel id from list_funnels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses the exact JSON return shape, that steps are ordered, conversion_rate is cumulative against the first step rather than step-to-step, and dropoff is measured against the previous step. These are non-obvious behavioral details that materially affect interpretation.
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 core purpose, then provides a compact inline return schema followed by the crucial semantic clarifications. Every sentence earns its place, and the inline JSON example is justified because there is no output schema.
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?
The description is nearly complete for a tool with no output schema: it documents the return shape, semantics, and prerequisite. Minor gaps remain: 'entering' and 'all_visitors' are not explicitly defined, and there is no mention of behavior for unknown funnel_id, but these do not block correct invocation.
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 adds only the sequencing hint 'Get funnel_id from list_funnels first,' which is useful but largely redundant with the funnel_id schema description. It does not add meaningful new parameter-level meaning.
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 opens with a specific verb and resource: 'Run a saved conversion funnel and return its per-step result.' It also distinguishes itself from siblings by emphasizing 'NON-tabular' output and by referencing list_funnels as the source for funnel_id, making its role clear relative to list/create/update funnel 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?
It clearly establishes the usage context: run a saved funnel, obtain funnel_id from list_funnels first. It does not explicitly state when not to use this tool or name tabular alternatives like query_stats, but the purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_filtersAInspect
Who gets counted on a site, and who may look at the stats. Response: {"site_id":123,"hostnames":{"allowed":[],"blocked":[]},"blocked_ips":["1.2.3.4"],"countries":{"allowed":[{"code":"UA","created_at":"RFC3339"}],"blocked":[]},"public_dashboard":false}. An empty allowed list means "no restriction", not "nothing allowed". public_dashboard true means the stats are readable by anyone with the link.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | site_id from list_sites. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full disclosure burden, and it delivers: the exact response shape is shown, and the non-obvious semantics of empty allowed lists and public_dashboard are explicitly clarified. This prevents misinterpretation of an empty list as 'nothing allowed' and clearly defines public access.
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 front-loads the core purpose, then gives a compact but complete response example and two critical semantic caveats. Every sentence earns its place; there is no filler or repetition.
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 one-parameter read tool with no output schema, the description is fully self-sufficient: it explains what is returned, how to interpret the values, and what the access implications are. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully covered by the schema ('site_id from list_sites'), so the description does not need to add parameter details. The description adds no new parameter semantics beyond the schema, matching the baseline for high 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 opening line 'Who gets counted on a site, and who may look at the stats' precisely identifies the tool's resource (site filters) and separates it from the stats-querying siblings. It is a specific verb+resource description, not a tautology, and the response sample further confirms it returns filter configuration.
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 gives clear context that this tool is for reading a site's inclusion/exclusion and access rules, so an agent knows to use it when it needs those settings. It does not explicitly name alternatives such as update_site_filters or state when not to use it, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriptionAInspect
The account's plan state — not a site's. Response: {"status":"trialing"|"active"|"past_due"|"expired"|"trial_expired"|"none","is_trial":true,"ends_at":"RFC3339","only_hobby":false}. ends_at is when the CURRENT state stops being true (trial end while trialing, period end otherwise) and is omitted when unknown. status "none" with only_hobby true means a free account, not a missing one. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden and does so thoroughly. It explains the exact response shape, the meaning of ends_at, the edge case for free accounts, and explicitly states that the tool takes no arguments.
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 compact and front-loaded with the core purpose. Every sentence adds meaningful information: scope differentiation, response schema, field semantics, and an edge-case clarification. No redundant or filler content is present.
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 (zero parameters, no output schema, no annotations), the description is remarkably complete. It provides the full response structure, explains the tricky field semantics, and clarifies ambiguous status values, so an agent can invoke it and interpret results correctly.
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?
There are zero parameters and the schema is empty, so the description only needs to confirm that no arguments are required, which it does. The baseline for zero-parameter tools is 4, and the description fully covers the only relevant semantic point.
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 identifies the tool as returning the account's plan state, explicitly distinguishing it from a site's state. This differentiates it from the sibling tools, which are site- or stats-oriented. The response format and status meanings make the purpose unambiguous.
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 makes it clear that this tool is for retrieving account-level subscription/plan information, not site-specific data. It does not explicitly name alternatives or exclusion conditions, but for a parameterless getter with no sibling providing subscription data, the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tracking_settingsAInspect
What the installed script actually does: which tracking features are on, which exist, and what each costs in bytes. Response: {"site_id":123,"version":N,"bundle":"...","enabled":["hash","outbound"],"features":[{"id":"outbound","label":"...","enabled":true,"locked":false,"default":false,"requires":[...],"size_br":123}]}. Locked features cannot be changed; requires lists features that must be on for this one to work. Needs the same access as changing them (see update_tracking_settings).
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | site_id from list_sites. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and delivers: an inline JSON response example showing the exact return shape, semantic disclosure of locked (cannot be changed) and requires (must be on for the feature to work), and an explicit access requirement. This is far above the typical read-tool description.
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 purpose is front-loaded and every sentence earns its place: response shape, field semantics, and the access note. The inline JSON example is verbose but justified because there is no output schema to carry the return-format burden.
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 one-parameter read tool with no output schema and no annotations, the description is nearly complete: it documents the return format inline, explains non-obvious field semantics, and states access requirements. The only real gap is error behavior on an invalid site_id.
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% — the site parameter is already documented as 'site_id from list_sites.' The description adds no parameter-level detail beyond the schema, so the 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?
The description states exactly what the tool retrieves: which tracking features are on, which exist, and what each costs in bytes. It also differentiates itself from the sibling update_tracking_settings by framing the content as what the installed script actually does, so an agent can distinguish read from write without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description routes the agent to update_tracking_settings for the change operation, implying this tool is for reading, and notes the access prerequisite ('needs the same access as changing them'). It does not explicitly enumerate when-not-to-use cases or alternative siblings like get_tracking_snippet, but the read/write contrast gives clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tracking_snippetAInspect
The script tag to install on a site, and the url it loads. Response: {"site_id":123,"type":"default","script_url":"https://...","snippet":"<script ...>"}. Install snippet verbatim; do not rebuild a tag from script_url. A hobby site's snippet also carries data-id, which is the only place the counter in its bundle reads the site id. Read-only: it reports the code, it does not install or verify anything.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | site_id from list_sites. | |
| type | No | Optional bundle variant; omit for the default script. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it states the operation is read-only, does not install or verify anything, warns against rebuilding the tag, and documents the hobby-site data-id behavior. This is well beyond a minimal description.
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, front-loaded with the core purpose, then a compact response example, then the two important caveats. No filler; every sentence adds operational 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?
The tool is simple, and the description covers the response shape, the read-only safety profile, and the critical installation edge case. With no output schema and no annotations, the description gives an agent enough to call the tool correctly without further inference.
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 both the site and type parameters. The description adds a response example and usage cautions but does not add parameter-level meaning beyond the schema, matching the baseline for 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 opens with a concrete resource: the script tag and URL to install on a site. It clearly identifies the retrieval intent and distinguishes this tool from configuration-oriented siblings by framing the output as installation code and noting it is read-only.
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 context is clear: use this when you need the installation snippet for a site. It adds explicit guidance to install the snippet verbatim and not rebuild it from script_url. It does not name an alternative tool or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_funnelsAInspect
List the conversion funnels configured for a site (discovery — get a funnel_id for funnel_report). Returns {"funnels":[{"id":45,"name":"Signup flow","scope":"visitor","steps_count":3}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It provides an exact sample return shape with field names, which is valuable behavioral transparency. It does not mention auth, errors, or explicit read-only safety, but the verb 'List' and the return sample make the behavior clear.
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 focused sentence plus a compact JSON sample. It front-loads the core action and purpose, and every element 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?
For a simple listing tool with one optional parameter, this is complete: it states scope, purpose, relationship to funnel_report, and the return structure in the absence of an output schema. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the 'site' parameter. The description adds only general site context and does not need to repeat parameter details; 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?
The description states a specific verb ('List'), a specific resource ('conversion funnels configured for a site'), and a clear discovery purpose ('get a funnel_id for funnel_report'). This differentiates it from related tools like list_goals and funnel_report.
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 gives explicit usage context: use it to discover funnel IDs before calling funnel_report. It does not enumerate exclusions or compare against alternatives, but for a dedicated list tool this is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_goalsAInspect
The goals CONFIGURED on a site — what it measures, not how those goals performed. Use top_goals for conversion numbers. Response: {"goals":[{"id":7,"name":"Signup","event_name":"Signup"|null,"path":"/thanks"|null,"operator":"e|b|c","scroll_depth":N|null}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | site_id from list_sites. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It provides the full response shape, including nullable fields and allowed operator values, and clarifies that this is a configuration-focused listing rather than a performance query. It does not discuss pagination, authentication, or error behavior, but for a simple single-parameter list tool the provided detail is strong.
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 tool's purpose, immediately distinguishes it from top_goals, and includes a compact response example. Every sentence contributes either to disambiguation or to understanding the return format, with no filler.
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 one parameter, full schema documentation, and an explicit response shape in the description, the agent has everything needed to invoke the tool correctly and interpret its output. The tool is simple enough that missing authentication or rate-limit details are not critical 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?
The schema documents the only parameter ('site') and even tells the agent to source it from list_sites, so schema coverage is 100%. The description adds context by saying 'goals CONFIGURED on a site,' but does not add meaningful parameter-level detail 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 the tool lists configured goals on a site, explicitly contrasting with performance data by saying 'what it measures, not how those goals performed.' It also names top_goals as the alternative for conversion numbers, making the distinction from a sibling tool immediate.
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?
It explicitly says to use top_goals when conversion numbers are needed, providing a clear when-not-to-use rule and naming the alternative tool. The description also frames this tool as the correct choice for configuration/measurement definitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_prop_keysAInspect
List the custom-property keys a site has recorded (with the event each belongs to) — discovery for the event:props: breakdown in query_stats. Returns {"props":[{"key":"plan","event":"Signup","count":N,"first_seen":"RFC3339"}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. Or a custom ["YYYY-MM-DD","YYYY-MM-DD"] pair. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by stating what is returned and including a concrete response shape. 'List' also implies a read operation. It does not cover edge cases like empty results or auth requirements, but the core behavior is clear.
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?
A single, dense sentence states the purpose, connects it to a related tool, and includes a sample return payload. Every element earns its place and there is no redundant wording.
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?
The tool is simple with two optional, well-documented parameters. Since no output schema exists, the description compensates by providing a concrete response example. The description, together with the input schema, gives an agent everything needed to call and interpret the result.
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 provides 100% parameter documentation, including site resolution behavior and period formats/defaults. The description adds no parameter-level detail beyond the schema, so the 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 uses a specific verb ('List') with a precise resource ('custom-property keys a site has recorded') and clarifies its role as discovery for the event:props:<key> breakdown in query_stats. This clearly distinguishes it from sibling list tools like list_sites or 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 identifies the intended use case: discovering recorded custom-property keys before using the event:props breakdown in query_stats. It gives clear context but does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesAInspect
List the sites this API key can read. Response: {"sites":[{"site_id":123,"name":"<as entered by the owner — often a full URL like https://example.com/>","hash":"07k1eD84d2","timezone":"Europe/Amsterdam","hobby":false,"stats_start_date":"YYYY-MM-DD"|null,"created_at":"RFC3339"}]}. hobby=true is a free-plan site: it counts only through the bundled /t/ script get_tracking_snippet returns, so install that snippet verbatim. Use site_id with the other tools. With date_range each site also carries metrics NESTED under stats.metrics (never flat on the site object). Units: visit_duration = average seconds per visit; bounce_rate = percent 0-100; views_per_visit = pageviews/visits ratio; visitors/pageviews/visits = counts. Stats period boundaries are server-time approximations; use query_stats for timezone-exact numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | Optional. "7d"/"30d"/"month"/"realtime" or "Nd" for the last N days (1-90), e.g. "7d". Each site then gets {"stats":{"date_range":"7d","metrics":{"visitors":N,"pageviews":N,"visits":N,"visit_duration":seconds,"bounce_rate":percent0to100,"views_per_visit":ratio}}}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so thoroughly. It discloses response structure, nested stats behavior when date_range is supplied, units for each metric, timezone approximation caveats, and free-plan implications. This goes well beyond a minimal listing tool description.
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 long but every sentence earns its place. It front-loads the core purpose and response format, then adds the hobby-plan caveat, metric units, and timezone precision caveat in a logical order. There is no filler or repeated schema information.
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?
There is no output schema, so the description must fully document the return shape and behavior, and it does. It covers the site object, nested stats, metric semantics, units, plan implications, and the recommendation to use query_stats for precision. An agent has enough context to call the tool and interpret results correctly.
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 already provides 100% coverage for date_range, so the baseline is 3. The description adds meaningful semantics: nested stats are never flat, units are defined, and timezone accuracy is called out as approximate. This clarifies interpretation beyond the schema's raw parameter text.
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 opens with a specific verb and resource: 'List the sites this API key can read.' This clearly defines the operation, the scope (API-key-readable sites), and distinguishes it from other site-related tools by emphasizing the listing and scoping behavior.
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 gives practical routing guidance: it explains that site_id should be used with other tools, that hobby sites require the get_tracking_snippet script, and that query_stats should be used for timezone-exact numbers. It stops short of explicitly enumerating when not to use list_sites versus each sibling, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_statsAInspect
Run a read-only analytics query for one site: aggregate totals, a time series, or a top-N breakdown. Returns {"results":[{"dimensions":{...omitted for aggregates},"metrics":{...}}]}. All dates and time buckets are in the site's own timezone (see list_sites .timezone). The event:name breakdown lists custom events (data-statable-event); its events metric is the raw event count. The event:goal breakdown lists the site's configured goals with visitors (converters), events (conversions) and conversion_rate (percent). events/conversion_rate are breakdown-only (rejected on aggregate/time-series or a dimension that doesn't compute them). Units: visit_duration = average seconds per visit; bounce_rate = percent 0-100; views_per_visit = pageviews/visits ratio; visitors/pageviews/visits = counts.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| limit | No | Breakdown only. Default 100, max 1000. | |
| compare | No | "previous_period" (equal-length window before date_range) or a custom ["YYYY-MM-DD","YYYY-MM-DD"] pair. Adds a compare {value, change%} block: per-metric (aggregate), per-row (breakdown; not event:status_code/event:goal), or per-bucket (time-series). Time-series needs an equal-length range (else compare_length_mismatch). | |
| filters | No | ||
| metrics | Yes | ||
| date_range | Yes | Preset "7d" or "30d" (last N full days), "month" (current calendar month to date; the first bucket may land on the prior month's last day), "realtime" (last ~30 min — pair with the time:minute dimension), "Nd" for the last N days (1..90, e.g. "14d"), or a custom inclusive ["YYYY-MM-DD","YYYY-MM-DD"] pair (over 90 days use a custom pair). | |
| dimensions | No | Zero = aggregate; one time dimension (time, time:hour, time:day, time:week, time:month) = time series; one breakdown dimension = top-N. Besides the enum you may also pass a dynamic 'event:props:<key>' dimension to break a custom event down by one of its property values (metrics visitors + events) — it REQUIRES an 'event' filter to name the event, e.g. dimensions:['event:props:plan'] + filters:[{field:'event',operator:'is',values:['Signup']}]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden and does so thoroughly. It discloses read-only semantics, site-local timezone behavior, the meaning of event:name and event:goal breakdowns, breakdown-only metrics that get rejected in other modes, metric units, comparison behaviors, and dynamic event:props requirements.
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 long, but the tool is complex with seven parameters and rich behavior. It is well structured: core purpose first, then return shape, timezone, breakdown semantics, metric restrictions, units, and dynamic dimensions. Each clause adds necessary information rather than repeating schema 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?
For a complex query tool with no output schema, the description is remarkably complete. It covers return shape via an example, timezone handling, metric meanings and units, breakdown-only restrictions, compare range requirements, ambiguous-site failure behavior, and the dynamic dimension pattern. An agent has enough context to invoke the tool correctly.
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?
Though the schema already has roughly 71% coverage, the description adds substantial meaning beyond the enums: exact unit definitions for visit_duration, bounce_rate, views_per_visit, and counts; explanation of event:goal metrics; restrictions on when events/conversion_rate are valid; and the dynamic event:props dimension pattern. This meaningfully clarifies how parameter values behave.
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 opens with a specific verb and resource: 'Run a read-only analytics query for one site' and names the three supported shapes (aggregate totals, time series, top-N breakdown). It is clear, but it does not explicitly differentiate itself from sibling tools like top_pages or top_sources, which are specialized versions of the same kind of query.
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 usage context is clear: use this for one-site analytics queries needing aggregate, time-series, or top-N results. However, no alternatives are named and there is no explicit guidance about when to prefer query_stats over the sibling top_* or visitors_over_time tools; usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_countriesAInspect
Top countries by visitors for a site. Returns {"results":[{"dimensions":{"visit:country":"US"},"labels":{"visit:country":"United States"},"metrics":{"visitors":N}}]} — the dimension value is the ISO alpha-2 code (drops straight into a country filter); the display name is in labels.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| limit | No | Default 100, max 1000. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does a good job: it exposes the exact response shape and clarifies that the dimension value is an ISO alpha-2 code while the display name lives in labels. It does not discuss sorting or error behavior, but 'top' implies the ordering and this is not a destructive or complex operation.
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 one information-dense sentence that leads with the core purpose, then provides the return format and key field semantics. Every clause adds value, though the embedded JSON example makes it slightly longer than strictly necessary.
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?
There is no output schema, so the description's return-shape disclosure is essential and is handled well. Parameter defaults and site-matching nuances are covered by the input schema. Minor gaps like explicit sort order and timeout/error behavior exist, but the tool is simple enough that these are not critical.
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 input schema already documents all three parameters (site, limit, period) with meaningful details. The description adds no parameter-specific semantics, so the 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 states a specific verb and resource: 'Top countries by visitors for a site.' This clearly distinguishes it from sibling tools like top_sources and top_pages, and the country filter reference confirms it is a country-level report.
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 gives the scope ('for a site') and hints at a downstream use ('drops straight into a country filter'), so an agent can infer when to call it. However, it never explicitly contrasts it with sibling tools or states when-not-to-use it, leaving some selection burden on the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_custom_eventsAInspect
Top custom events (data-statable-event) by count for a site — pageview/engagement excluded. Returns {"results":[{"dimensions":{"event:name":"Signup"},"metrics":{"events":N,"visitors":N}}]}, where events is the raw occurrence count and visitors is unique users who triggered it.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| limit | No | Default 100, max 1000. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does so well: it gives the exact JSON shape and defines both metrics ('events' as raw occurrence count, 'visitors' as unique users). It also discloses that pageview/engagement are excluded. It could add sort direction or side-effect note, but for a read-style reporting tool it is transparent enough.
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 compact, opening with the core purpose and using the embedded JSON to convey the return format efficiently. The parenthetical 'data-statable-event' is slightly jargon-heavy, but every clause contributes 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?
With no output schema, the description compensates by specifying the response structure and metric meanings, and the schema covers all parameter constraints. Missing an explicit statement of sort order and edge-case behavior (e.g., empty results), but overall an agent has enough to call it correctly.
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 parameters are already fully documented and the description does not need to repeat them. The description's metric definitions relate to the output rather than parameter semantics, so it adds no extra parameter-level meaning beyond the baseline.
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 names a specific resource (custom events, 'data-statable-event'), a specific aggregation (top by count for a site), and explicitly excludes pageview/engagement, which separates it from sibling top_pages. The verb 'Returns' plus the example makes the purpose unambiguous.
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 'pageview/engagement excluded' detail implies when this is appropriate, but there is no explicit statement of when to use top_custom_events versus alternatives such as top_pages or top_goals. The tool name and phrase 'for a site' provide context, but the agent must infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_goalsAInspect
The site's configured goals ranked by conversions. Returns {"results":[{"dimensions":{"event:goal":"Signup"},"metrics":{"visitors":N,"events":N,"conversion_rate":percent0to100}}]}, where visitors is unique converters, events is total conversions, and conversion_rate is visitors as a percent of all visitors in the period.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| limit | No | Default 100, max 1000. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the exact response shape and explains that visitors means unique converters, events means total conversions, and conversion_rate is unique converters as a percentage of all visitors in the period. This goes well beyond the schema.
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 core purpose and includes a concrete response example that earns its place because there is no output schema. It is slightly dense due to the inline JSON, but remains well-structured and free of fluff.
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 that no output schema exists, the description usefully provides the return shape and semantic definitions. It is slightly incomplete in that it does not state sort direction explicitly or describe edge cases like no matching goals, but it is still strong enough for an agent to invoke correctly.
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 fully documents the site, limit, and period parameters. The description does not add much parameter-level meaning beyond referring to the period in the metric definition, so the 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 clearly states the tool ranks the site's configured goals by conversions, which is a specific verb plus resource. It does not explicitly contrast itself with sibling tools like list_goals or top_sources, but the ranking-by-conversions phrasing makes the core purpose clear.
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 intended usage is implied: this is for seeing configured goals ordered by conversion performance. However, it does not explicitly say when to prefer this over list_goals, query_stats, or top_custom_events, nor does it mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_pagesBInspect
Top pages by visitors for a site. Returns {"results":[{"dimensions":{"event:page":"/path"},"metrics":{"pageviews":N,"visitors":N}}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| limit | No | Default 100, max 1000. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the return shape with an example, which is helpful, but it does not explicitly state sort order, read-only behavior, or failure modes such as ambiguous site matching. The example adds some transparency but not comprehensive behavioral context.
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 brief, front-loaded with the tool's purpose, and includes a compact JSON example that clarifies the return contract. Every part earns its place and there is no filler.
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 query tool with three optional parameters fully documented in the schema, the description plus schema is sufficient for invocation. Since there is no output schema, the inline JSON example compensates well. It loses the final point because it omits explicit sorting semantics and any guidance about choosing among sibling top_* 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?
Schema description coverage is 100%, so the schema already documents site, limit, and period. The description adds no extra meaning for these parameters; it only shows the output shape. This matches the baseline of 3 for fully documented schemas.
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 top pages by visitors for a site, naming the specific resource ('pages') and metric ('visitors'). It is clear on its own, but it does not explicitly differentiate itself from sibling top_* tools such as top_sources or top_countries, so it stops short of a 5.
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?
No guidance is given on when to use this tool instead of sibling tools like top_sources or top_custom_events. It does not mention any exclusions, alternatives, or conditions that would route an agent here versus elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_sourcesBInspect
Top traffic sources by visitors for a site. Returns {"results":[{"dimensions":{"visit:source":"Google"},"metrics":{"visitors":N,"bounce_rate":percent0to100}}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| limit | No | Default 100, max 1000. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It does reveal the exact result JSON, including the dimension key 'visit:source' and metrics 'visitors' and 'bounce_rate', but it does not state read-only behavior, sort direction beyond the word 'top', or possible failure modes.
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 exceptionally compact: a one-line purpose statement followed by a concise JSON example that shows the exact response structure. There is no verbosity or redundant information; every word 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?
Despite lacking an output schema and annotations, the description compensates with a concrete result example, and the fully-covered parameter schema handles invocation details. Some ambiguity remains around what 'visitors' counts and no usage context is provided, but the essential calling information is present.
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 site, limit, and period parameters are already thoroughly documented. The tool description adds no parameter-level meaning beyond the example output shape, so the 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 identifies the resource ('traffic sources for a site') and the ordering metric ('by visitors'), and the example return shape reinforces what is retrieved. However, it uses a noun phrase rather than a verb and does not differentiate from sibling tools like top_pages or top_countries.
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?
No guidance is given about when to choose top_sources over siblings like top_pages, top_countries, or query_stats. The description only states the general purpose; there are no alternatives named or conditions for exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_funnelAInspect
Replace a funnel's definition. Send the whole funnel including every step — omitted steps are removed, not kept.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| site | Yes | site_id from list_sites. | |
| scope | No | ||
| steps | Yes | ||
| funnel_id | Yes | id from list_funnels. | |
| strict_order | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals a critical behavior: omitted steps are removed, which prevents an agent from assuming partial updates are safe. It does not discuss effects of omitting optional fields like scope or strict_order, but the core replace behavior is clearly disclosed.
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 one compact sentence that states the action, the object, and the most important behavioral caveat. It is front-loaded with the verb and resource, and every word contributes 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?
For a 6-parameter mutation tool with no output schema and no annotations, this description is adequate but not complete. It clearly communicates replacement semantics and step removal, but it leaves ambiguity about whether omitting optional fields resets them, and it does not provide guidance on expected response or prerequisites.
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 only 33%, so the description needs to compensate. It adds meaningful semantics for the steps parameter by explaining whole-funnel replacement and step removal. However, it does not clarify the meaning or update behavior of optional parameters like scope and strict_order.
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 operation ('Replace a funnel's definition') and the resource, immediately distinguishing it from create-style tools. It also clarifies the replace semantics by noting that omitted steps are removed, not kept.
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 this is for updating an existing funnel and gives a clear instruction to send the whole funnel. However, it does not explicitly mention when to prefer this over create_funnel or provide any exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_goalBInspect
Replace a goal's definition. Send the whole goal, not just the changed fields — omitted fields are cleared, not kept.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| path | No | ||
| site | Yes | site_id from list_sites. | |
| goal_id | Yes | id from list_goals. | |
| operator | No | ||
| event_name | No | ||
| scroll_depth | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It clearly reveals the critical destructive-overwrite behavior: omitted fields are cleared, not kept. This is non-obvious and valuable. It does not cover other side effects, but for the main behavior this is sufficient.
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 tightly written sentences with no filler. The purpose is front-loaded and the critical behavioral warning follows immediately. Every word 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?
For a 7-parameter mutation tool with no annotations and no output schema, the description is incomplete. It provides the key overwrite warning but omits parameter semantics for most fields, usage context, and any mention of constraints or enum meanings. An agent would need to guess at several parameter purposes.
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 only 29%, with just site and goal_id documented. The description does not explain the meaning of name, path, operator, event_name, or scroll_depth, nor the operator enum values. 'Send the whole goal' is not parameter-level guidance and fails to compensate for the schema gap.
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 a specific verb 'Replace' and resource 'a goal's definition,' clearly indicating this modifies an existing goal rather than creating or listing one. It is distinguishable from siblings like create_goal and list_goals, though it does not explicitly name an alternative.
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?
No guidance is provided on when to use this tool versus create_goal, update_funnel, or other sibling tools. The instruction to 'Send the whole goal' is about invocation mechanics, not about selecting the tool in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_siteAInspect
Change a site's url, timezone or week start. Omitted fields are left alone. Returns the updated site. Changing the url to one this account already has is refused (site_exists).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Optional. Full origin including scheme. | |
| site | Yes | site_id from list_sites. | |
| timezone | No | Optional IANA name. | |
| week_start | No | Optional. 0 = Sunday ... 6 = Saturday. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses key behavioral traits: omitted fields are left alone, the updated site is returned, and duplicate URLs are refused with the site_exists code. This is strong transparency for a mutation tool, though it doesn't mention permissions or the failure mode for a nonexistent site.
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?
Three sentences with no filler. The core action is front-loaded, and each sentence contributes unique information: what changes, how omissions behave, and a key rejection case.
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 low-complexity update tool, the description covers the essentials: target fields, partial update behavior, return value, and an error condition. It does not cover the nonexistent-site case or permission prerequisites, but the schema's site_id reference to list_sites provides some context. Overall it is nearly 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 description coverage is 100%, so the schema already documents each parameter. The description adds value beyond this by explaining partial-update semantics and a specific error condition tied to the url parameter. That goes above the baseline 3.
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 opens with a specific verb and resource: 'Change a site's url, timezone or week start.' It clearly enumerates the mutable fields, making the tool's purpose unmistakable. It also separates it from sibling update tools like update_goal and update_funnel by focusing on site settings.
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 usage: it is for updating an existing site's settings. The partial-update note ('Omitted fields are left alone') is a useful usage guideline. However, it never explicitly states when not to use this tool or points to alternatives like create_site for creating a new site, so the guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_site_filtersAInspect
Change who gets counted, and who may look. Send only the sections you want to change — an omitted section is left untouched. A section you DO send replaces that setting entirely: {"countries":{"blocked":["RU"]}} also clears the country allow list, and {"blocked_ips":[]} empties the blocklist. Read the current state with get_site_filters and send it back with your edit applied. Filtering takes effect on new traffic; it does not remove data already collected. Answers with the resulting state plus "updated":["hostnames",...] naming what changed.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | site_id from list_sites. | |
| countries | No | Replaces the country lists. ISO 3166-1 alpha-2 codes, e.g. "UA". | |
| hostnames | No | Replaces the hostname lists. Allowed non-empty = count only these. | |
| blocked_ips | No | Replaces the IP blocklist. | |
| public_dashboard | No | true makes the stats readable by anyone with the link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and meets it well. It discloses partial-update behavior, full replacement semantics with concrete examples, that filtering only affects new traffic, and that the response returns the resulting state plus an 'updated' list.
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 compact, front-loaded, and every sentence earns its place. The key behavioral rule is stated immediately, followed by examples and response details, with no filler or repetition.
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?
Despite having no output schema, the description tells the agent exactly what to expect: the resulting state plus an 'updated' key naming changed fields. It also covers the tricky replace-vs-omit semantics, the read-first workflow, and the delayed effect on data collection, making the tool fully understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantics: omitted sections stay untouched, sent sections replace entire settings, empty arrays clear lists, and 'allowed non-empty = count only these.' This goes beyond the schema's per-field 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?
States a specific action and scope: 'Change who gets counted, and who may look,' which clearly identifies this as a site filters update tool. It also distinguishes itself from the read-only sibling get_site_filters by implying that reading the current state is a separate step.
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 a clear read-modify-write workflow: read the current state with get_site_filters, apply the edit, and send it back. It also explains which payload sections to include. It does not explicitly state when not to use this tool, but the guidance is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tracking_settingsAInspect
Set which tracking features the site's script includes. REPLACES the whole selection: send every feature you want enabled, not just the new one — anything omitted is turned off. Call get_tracking_settings first for the valid ids. Rebuilds and republishes the script, so the change reaches visitors after the CDN cache clears.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | site_id from list_sites. | |
| features | Yes | Feature ids to enable, from get_tracking_settings. The complete list, not a delta; [] disables every optional feature. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility and does an excellent job: it warns that the selection is fully replaced, any omitted feature is disabled, and the script is rebuilt and republished with a CDN propagation delay. These are critical behavioral traits beyond the basic schema.
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 compact and well-structured: purpose first, then the critical replacement warning, then the prerequisite, then the side-effect timing. Every sentence contributes actionable information 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?
For a two-parameter mutation tool with no output schema and no annotations, the description covers all necessary aspects: what changes, how the parameter should be provided, how to get valid values, and when the change takes effect. Nothing critical is missing for correct invocation.
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 already covers both parameters at 100%, so the baseline is 3. The description adds significant value by clarifying that 'features' is the complete list, not a delta, and that an empty array disables all optional features. It also instructs calling get_tracking_settings first for valid IDs.
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 a specific verb and resource: 'Set which tracking features the site's script includes.' This clearly distinguishes it from get_tracking_settings (reading) and update_site (general site updates), and the replacement behavior is stated up front.
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?
Clear context is provided: the tool is for setting tracking features and should be preceded by get_tracking_settings to obtain valid IDs. It does not explicitly state when not to use it or name alternatives beyond get_tracking_settings, but the purpose is specific enough that an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visitors_over_timeAInspect
Daily visitors and pageviews time series for a site, in the site's own timezone. Returns {"results":[{"dimensions":{"time:day":"YYYY-MM-DD"},"metrics":{"visitors":N,"pageviews":N}}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Numeric site_id (preferred, from list_sites) or a domain, e.g. example.com — scheme, www. and path are ignored when matching. If several sites share the domain the call fails and lists their site_ids. Omit for a single-site key. | |
| period | No | "7d"/"30d", or any "Nd" = last N full days (N = 1..90); "month" = current calendar month to date. Default 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does well by revealing that results are in the site's own timezone and by providing a concrete JSON example showing the dimensions and metrics keys. It does not mention error cases, rate limits, or pagination, but for a simple read-only reporting tool the returned structure and timezone behavior are the most important behavioral details and they are present.
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 two sentences with zero filler. It front-loads the core purpose, then provides the exact return shape in a compact JSON snippet. Every part earns its place, and the inline example is far more useful than prose describing the output.
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?
The tool is simple (two optional parameters, no output schema), and the description adequately compensates for the missing output schema by showing exactly what the response looks like. The parameter meanings are fully covered by the schema. It is missing only an explicit relationship to sibling tools, which is handled more under usage guidance, so this dimension is otherwise 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?
The input schema already documents both parameters thoroughly (100% coverage), including the site_id/domain matching behavior and the period pattern/defaults. The description adds no additional parameter-level meaning beyond what the schema provides, so the 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 clearly states that the tool returns a daily visitors and pageviews time series for a site, and even specifies the site's timezone and the exact output shape. It does not explicitly use a verb like 'retrieves' or 'returns' at the start, and it does not name a sibling tool to distinguish itself from, so it falls just short of a 5.
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?
There is no guidance about when to use this tool versus alternatives such as query_stats, current_visitors, or top_pages. The description implies this is the time-series reporting tool, but it never states when it should be preferred or when another sibling should be chosen instead.
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.
25 tool updates
v0.1.0- First observed
create_funnel - First observed
create_goal - First observed
create_site - First observed
current_visitors - First observed
funnel_report - First observed
get_site_filters - First observed
get_subscription - First observed
get_tracking_settings - First observed
get_tracking_snippet - First observed
list_funnels - First observed
list_goals - First observed
list_prop_keys - First observed
list_sites - First observed
query_stats - First observed
top_countries - First observed
top_custom_events - First observed
top_goals - First observed
top_pages - First observed
top_sources - First observed
update_funnel - First observed
update_goal - First observed
update_site - First observed
update_site_filters - First observed
update_tracking_settings - First observed
visitors_over_time
TDQS
Most tools target a distinct resource and action, with clear naming like top_pages vs top_countries and list_goals vs top_goals. The main overlap is query_stats, which can reproduce the top_* and visitors_over_time results, but the convenience tools are sufficiently specific that an agent can choose correctly.
Tool names follow a consistent snake_case verb_noun pattern: list_*, get_*, create_*, update_*, top_*, plus a few descriptive exceptions like funnel_report and visitors_over_time. The conventions are predictable and readable throughout.
25 tools is at the heavy end of the 16-25 range, and several tools could be consolidated, especially the top_* wrappers around query_stats. The count is defensible for a full analytics API, but it feels bloated rather than tightly scoped.
The set covers site creation, updates, stats queries, goals, funnels, and tracking settings, but there are no delete operations for sites, goals, or funnels, leaving obvious lifecycle gaps. Management workflows that require removing a site, goal, or funnel cannot be completed.
Maintenance
Related MCP Connectors
Privacy-first, cookie-free web analytics: create sites, install and verify tracking, read stats.
Privacy-first web analytics. Query pageviews, referrers, trends, and AI insights.
Create projects and read their web analytics: views, referrers, countries, custom events.
Privacy-first web analytics for AI agents: visitors, revenue, funnels, visitor profiles.
Related MCP Servers
- FlicenseBqualityDmaintenanceAllows AI models to query and retrieve analytics data from Plausible Analytics through the Plausible API, enabling natural language interactions with website statistics.18-
- AlicenseNot gradedqualityDmaintenanceEnables language models to query Goatcounter web analytics data, including pageviews, visitor statistics, referrers, browsers, and operating systems through a standardized tool interface with automatic rate limit handling.MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to query website statistics from Plausible Analytics, providing access to metrics like real-time visitors, traffic trends, and page performance. It supports both Plausible Cloud and self-hosted instances through the Stats API v2.6331MIT
- AlicenseAqualityCmaintenancePrivacy friendly, cookieless web analytics built MCP-first. "Add analytics to my Next.js app" → an AI agent runs the setup_analytics_for_site tool, picks the right install snippet, edits your layout file, and verifies the script is loading. OAuth onboarding, no API keys to paste.28411MIT
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/key-arg/statable-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server