Skip to main content
Glama

measuremysite-mcp

Cookieless web analytics your AI agent can read. A small analytics server for one website, with an MCP server built in, so Claude Code, Cursor or Codex can look at your traffic and help you decide what to do next.

You deploy it to your own Cloudflare account (Workers + D1, the free tier is enough for most small sites). Your data stays in your account.

This repo used to be called agentlytics-mcp. The worker, database, tracker (agentlytics.track) and MCP server keep that name so existing installs keep working.

Example questions an agent answers with measuremysite-mcp: audience, funnels, best channel and tracked launches

Example questions and answers; the numbers are illustrative.

Hosted MCP server: https://a.measuremy.site/mcp

Don't want to run it yourself? measuremy.site is the hosted version (site.measuremy/analytics in the MCP registry): the same MCP tools, plus a dashboard, AI explanations of traffic spikes, tracking of posts that mention you (Hacker News, Bluesky, YouTube...), alerts and weekly summaries. Streamable HTTP with OAuth: you sign in through the browser the first time, and no API key is pasted anywhere. 30-day free trial, no card; plans from $9 a month.

VS Code (Copilot): in .vscode/mcp.json, or MCP: Add Server → HTTP. VS Code asks you to sign in when the server starts.

{
  "servers": {
    "measuremysite": { "type": "http", "url": "https://a.measuremy.site/mcp" }
  }
}

Claude Code

claude mcp add --scope user --transport http measuremysite https://a.measuremy.site/mcp

Cursor (~/.cursor/mcp.json)

{ "mcpServers": { "measuremysite": { "url": "https://a.measuremy.site/mcp" } } }

On sign-in you create an account (or log in) and enter your site's domain. Then ask your agent to "add measuremy.site analytics to this project": the server hands it the script tag for your site. Docs: measuremy.site/docs/mcp.

The rest of this README covers the self-hosted version.

Related MCP server: KrystalView MCP Server

What your agent can do

Ask in plain words, for example:

  • "Why did traffic jump yesterday?" It finds the spike and the source, page or event behind it.

  • "Where do people drop off between the homepage and signup?" It builds a funnel and shows the biggest drop.

  • "What's working, and what should I post next?" It ranks channels by conversions and turns that into steps.

  • "Make a tracked link for my Reddit post, and check how it did next week."

Tools exposed over MCP:

Area

Tools

Traffic

get_overview, get_timeseries, top_sources, top_pages, top_countries, top_browsers, top_systems, list_events

Questions about visits

query_visits (filter and group by country, browser, OS, source, page, event, day), recent_visits

Spikes

find_traffic_spikes, explain_spike (ranked causes, plus your annotations)

Funnels

create_funnel, get_funnel, delete_funnel

Growth

get_whats_working, get_growth_actions

Campaigns

create_tracked_link, get_campaign_results, add_annotation

Plus a plan_marketing prompt that walks the agent through a data-backed plan.

Privacy

  • No cookies and nothing stored in the visitor's browser.

  • No IP address or user agent is stored. A visitor id is a hash that changes every day, so nobody can be followed from one day to the next.

  • Only browser and OS names (like "Firefox", "macOS") and the country Cloudflare reports are kept.

  • Raw events are deleted after 400 days; hourly totals are kept.

Check what applies where you and your visitors are; this is not legal advice.

Deploy

One click

Deploy to Cloudflare

The button copies this repo to your GitHub account, creates the D1 database, runs the migrations and deploys the worker. It asks for three settings:

  • SITE_DOMAIN: your website's domain, like example.com (no https:// or www)

  • HASH_SECRET: any long random string, used to make the daily visitor id

  • MCP_READ_KEY: another long random string, the key your AI agent uses

Generate the two random values with openssl rand -hex 32, and keep MCP_READ_KEY for connecting your agent below.

By hand

You need a Cloudflare account and Node.js 20+.

git clone https://github.com/developeron29/measuremysite-mcp.git
cd measuremysite-mcp
npm install
npx wrangler login
  1. Create the database and paste the printed database_id into wrangler.jsonc:

    npx wrangler d1 create agentlytics-mcp
  2. Set the three settings. Use long random values for the two keys, for example from openssl rand -hex 32:

    npx wrangler secret put SITE_DOMAIN     # e.g. example.com
    npx wrangler secret put HASH_SECRET     # makes the daily visitor id; never share it
    npx wrangler secret put MCP_READ_KEY    # the key your agent uses; keep it out of your repo

    Wrangler may offer to create the worker on the first secret put; say yes.

  3. Deploy (this also creates the tables):

    npm run deploy

Either way you get a worker URL like https://agentlytics-mcp.<you>.workers.dev. Opening it shows a status page with your domain. You can attach a custom domain such as stats.yourdomain.com in the Cloudflare dashboard.

Optional rate limit: to cap how often one IP can send hits, add this to wrangler.jsonc and deploy again:

"ratelimits": [{ "name": "COLLECT_LIMITER", "namespace_id": "1001", "simple": { "limit": 120, "period": 60 } }]

Add the tracker to your site

Put this in the <head> of every page:

<script defer src="https://YOUR-WORKER-URL/t.js"></script>

It counts pageviews, including client-side navigation in single-page apps. To count something that matters, like a signup:

agentlytics.track("signup", { plan: "pro" });

or without JavaScript, on any element:

<button data-agentlytics-event="cta_click">Start free</button>

Only pages on SITE_DOMAIN (and its subdomains) are counted.

Connect your agent

Claude Code

claude mcp add --scope user --transport http agentlytics https://YOUR-WORKER-URL/mcp --header "Authorization: Bearer YOUR_MCP_READ_KEY"

Cursor (.cursor/mcp.json or ~/.cursor/mcp.json)

{
  "mcpServers": {
    "agentlytics": {
      "url": "https://YOUR-WORKER-URL/mcp",
      "headers": { "Authorization": "Bearer YOUR_MCP_READ_KEY" }
    }
  }
}

Codex (~/.codex/config.toml)

[mcp_servers.agentlytics]
url = "https://YOUR-WORKER-URL/mcp"
bearer_token_env_var = "AGENTLYTICS_READ_KEY"

and export AGENTLYTICS_READ_KEY=YOUR_MCP_READ_KEY in the shell that starts Codex.

Then ask: "Use agentlytics to tell me how my site did this week." Spikes need a few days of traffic to compare against.

Let your agent do the setup

Point your coding agent at AGENTS.md: "Deploy measuremysite-mcp for my site by following AGENTS.md". It walks through every step and asks you before anything that needs your Cloudflare login.

Self-hosted or hosted?

measuremysite-mcp (this repo)

measuremy.site

MCP tools for your agent

Yes

Yes

Cookieless tracking, funnels, spikes, campaigns

Yes

Yes

Sites

One per deploy

Several, one account

Dashboard

No (ask your agent)

Yes, with filters and a public share link

AI explanations of spikes

No

Yes

Posts that mention you (HN, Lobsters, Bluesky, YouTube, Reddit)

No

Yes, on your traffic chart

Alerts, weekly email summary

No

Yes

Who runs it

You, on your Cloudflare account

Us

Price

Free (your Cloudflare usage)

30-day free trial, then from $9 a month

Develop

cp .dev.vars.example .dev.vars   # then edit the values
npm run db:migrate:local
npx wrangler dev
npm test
npm run typecheck

scripts/stdio.sh runs the server locally and serves MCP over stdio, for clients that start a server as a command (Glama uses it). It needs SITE_DOMAIN, HASH_SECRET and MCP_READ_KEY in the environment.

License

MIT. See LICENSE.

Available Tools

20 tools
add_annotationAInspect

Record something that may move traffic (deploy, launch, post, email, ad). Future spikes within 24h after it list it as a possible cause. Log what you ship or run.

ParametersJSON Schema
NameRequiredDescriptionDefault
tsNoISO timestamp; defaults to now.
kindNo
labelYes

TDQS

A3.6/5.0
Behavior3/5

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 a meaningful downstream trait: future spikes within 24h will list the annotation as a possible cause. It omits other behavior the agent would want — whether annotations can be edited or deleted, idempotency, and any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core purpose front-loaded, and the parenthetical examples ride along compactly. 'Log what you ship or run' is slightly redundant with the opening sentence, but the overall density is high.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param, 1-required write tool with no annotations and no output schema, the description covers purpose, examples, and the key downstream effect, so it is close to adequate. It still leaves the required 'label' semantics and edit/delete lifecycle unaddressed, which matters for correctly invoking a write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only 'ts' is documented), so the description must compensate. It partially does: the parenthetical maps to the 'kind' enum values and 'Log what you ship or run' hints at 'label' content. But the required 'label' param's format and 200-char limit are left entirely to the schema, and 'kind' defaults are unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Record'/'Log') and the resource's role: an annotation that ties events like deploys and launches to traffic. The 24h spike-causation framing makes the tool's purpose unambiguous against read-only siblings like find_traffic_spikes and explain_spike. It stops short of naming a sibling explicitly, so it earns a solid 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples '(deploy, launch, post, email, ad)' and the closing 'Log what you ship or run' tell the agent clearly what situations warrant a call. However there is no exclusion guidance (e.g., not for organic changes) and no mention of alternatives, so it is clear context without boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_funnelAInspect

Save a funnel: an ordered list of 2-8 steps visitors move through, e.g. ["/", "/login", "signup"]. A step starting with / is a page (exact path, or a prefix ending in , like /docs/); anything else is a custom event name (from agentlytics.track or an element with data-agentlytics-event). Returns the funnel with its first results. Visitors are matched within a single UTC day.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYese.g. "Homepage to signup".
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".
stepsYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add real behavioral context: it returns the funnel with its first results, and visitors are matched within a single UTC day (a meaningful analysis constraint). It does not disclose permissions/auth requirements, whether re-creating a funnel with an existing name overwrites or errors, or any idempotency semantics for this write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action ('Save a funnel'), followed by the domain definition, the step grammar, the return behavior, and the matching constraint. Dense but each clause earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description fills that gap by stating it returns the funnel with first results. For a 3-param write tool the calling-critical knowledge (step format, count limits, matching window) is present; only mutation semantics such as permissions and name-uniqueness behavior are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, but the critical gap is the `steps` array, whose items have no schema description at all. The description compensates well, defining the '/'-prefix page rule, the trailing-'*' prefix-match rule, and the fallback custom-event interpretation, plus the 2-8 count matching the schema's min/max. The `range` and `name` semantics remain schema-driven.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Save a funnel') and goes further by defining what a funnel actually is (an ordered list of 2-8 steps visitors move through), which is unusually informative. It does not explicitly distinguish itself from siblings like get_funnel or delete_funnel, but 'Save' vs 'get'/'delete' is reasonably self-evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer this is the write path for funnels from 'Save a funnel,' and the valid step grammar is spelled out. There is no explicit when-to-use/when-not guidance and no reference to the get_funnel/delete_funnel alternatives that share the resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_funnelCInspect

Delete a saved funnel by name or id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
nameNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about irreversibility, required permissions, or what happens to associated data. For a destructive mutation tool this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. Brevity here is appropriate, though the space it saves is spent on necessary behavioral detail that never arrives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations, no output schema, and undocumented optional parameters, the description is too thin. An agent cannot determine safe invocation conditions or the result of the call from what is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and both parameters are optional, so the description's 'by name or id' is the only signal for the two fields. It does not explain precedence if both are supplied, or what happens if neither is given, which is a real ambiguity given required=0.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Delete a saved funnel', with the identifying selectors 'by name or id'. This clearly separates it from siblings like create_funnel and get_funnel, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to invoke this versus alternatives, nor any caution about the destructiveness of the operation. The agent is left to infer that a delete should only follow confirmed intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_spikeAInspect

Ranked causes for one spike: which referrers/UTM sources, landing pages and custom events rose above baseline (with lift, % and share of the spike), plus annotations (deploys, posts, emails) in the preceding 24h.

ParametersJSON Schema
NameRequiredDescriptionDefault
spike_idYes

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the analytic output shape (ranked causes with lift, % and share) and the time window examined (annotations in the preceding 24h). It doesn't state read-only status or failure modes for an invalid spike_id, but the read-analysis nature is evident.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the core purpose ('Ranked causes for one spike') followed by the evidence categories and time window. No filler, though the enumeration is long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema and no annotations, the description is fairly complete: it explains what the output contains and the 24h window. The main missing piece is how spike_id is sourced and the absence of a link to find_traffic_spikes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single spike_id parameter has 0% schema description coverage, so the description must compensate. It implies spike_id identifies 'one spike' but never explains the ID format or where to obtain it, leaving a clear gap for the only required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (one spike) and what it returns (ranked causes: referrers/UTM, landing pages, custom events, plus annotations). It's clear an agent can tell this apart from a discovery tool like find_traffic_spikes, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool operates on a single spike_id, which suggests it's called after a spike is identified, but no when-to-use, when-not, or alternative tool is named. An agent must infer that spike_id comes from find_traffic_spikes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_traffic_spikesAInspect

Detected traffic jumps (hourly pageviews far above the same hour in prior weeks), biggest first, each with its likely causes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the detection heuristic, the ordering, and that each result carries likely causes. It says nothing about read-only semantics, rate limits, pagination beyond 'limit', or what happens when no spike exists in the window.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the definition of a spike, then ordering, then payload. No filler, no restatement of the tool name, and it packs three useful facts without becoming a run-on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey what comes back - and it does, telling the agent results are ranked and annotated with likely causes. Combined with 100% schema coverage on both params, that is nearly enough; only edge-case behavior (empty results, window limits) is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% - both 'limit' (max 50, default 10) and 'range' (max 90d, default 7d) are fully documented in the schema. The description adds no new parameter detail, not even tying the hourly detection granularity to the 'range' window. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (detect traffic spikes) and even operationalizes it: 'hourly pageviews far above the same hour in prior weeks'. The sorting ('biggest first') and payload ('likely causes') are spelled out. It stops short of naming the sibling explain_spike, so an agent must infer how the two divide labor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: this is the discovery tool and explain_spike is presumably the drill-down, but the description never says when to use one over the other, nor any prerequisites or exclusions. An agent can guess the workflow but is not told it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_campaign_resultsAInspect

Traffic and same-day conversions per tracked campaign (from create_tracked_link), newest first. Omit campaign for all.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose real behavioral traits: results are ordered 'newest first' and conversions are constrained to a 'same-day' attribution window. It stops short of stating the read-only nature explicitly or covering result limits/pagination, but the ordering and metric-window disclosures are meaningful beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the metric definition front-loaded and the parameter behavior trailing. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no annotations and no output schema, the description covers the key unknowns: what is returned, ordering, the attribution window, and the source of campaign identifiers. Only secondary details such as time-range scoping or result limits are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: the single 'campaign' parameter is explained as optional with the semantics of omission ('Omit campaign for all') and its valid values tied to create_tracked_link output. It adds no format/syntax detail for the string value, keeping it just short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get campaign results) plus the exact metrics returned (traffic and same-day conversions) and the data source, tying it to the sibling create_tracked_link. An agent can distinguish it from list_events, get_overview, or top_sources without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent how to retrieve everything ('Omit campaign for all') and anchors the tool to campaigns created via create_tracked_link. It does not, however, contrast this with metric-adjacent siblings like get_overview or top_sources, so the when-not case is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_funnelAInspect

Where visitors drop off. Shows, for each step, how many visitors reached it, the share of the first step and of the previous step, how many were lost, and the biggest drop. Pass name or id for a saved funnel, steps to try an unsaved one, or nothing to get every saved funnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
nameNo
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".
stepsNoUnsaved funnel: pages start with /, anything else is an event name.

TDQS

A4.1/5.0
Behavior4/5

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 by enumerating the returned metrics (reached, share of first step, share of previous step, lost, biggest drop). It implies a safe read via 'get' but does not state permissions or the exact output shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the parameter modes packed into the second. No filler, every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description usefully explains the return metrics, and it covers all three invocation modes. It is nearly complete for a read tool, missing only the max-90d/default-range behavior that the schema already documents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% (id and name are undocumented in the schema), and the description compensates by explaining that name or id select a saved funnel while steps defines an unsaved one. This adds meaning beyond the structured fields for the two bare parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource ('get_funnel' -> 'Where visitors drop off') and details exactly what the tool surfaces per step (reached, share of first/previous, lost, biggest drop). The purpose is unambiguous, though it doesn't explicitly contrast itself with siblings like create_funnel or delete_funnel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It spells out the three invocation modes clearly: 'Pass name or id for a saved funnel, steps to try an unsaved one, or nothing to get every saved funnel.' That is strong when-to-use guidance, though it stops short of naming alternative tools for adjacent tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_growth_actionsAInspect

Ranked, concrete growth actions derived from this site's data (channels to double down on, pages to promote, what caused past spikes, best time to publish), each with evidence, steps, a suggested tracked link and how to measure it. Use this to build and then execute a marketing plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the shape of each action (evidence, steps, suggested tracked link, measurement), which tells the agent this is a derived/analytical read rather than raw data. It says nothing about cost, latency, data-volume prerequisites, or how many actions come back — gaps that matter for a computed-insight tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns before the usage instruction. The parenthetical enumeration is dense but each item earns its place by clarifying the output; minor verbosity keeps it off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description is right to spell out the return contents in detail, and it does so well. Missing only operational context (volume of actions, minimum data needed, whether it can be called repeatedly), which is minor for a single-parameter derived-insight tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema fully documents the range format, default, and 90d cap. The description adds no additional meaning about the lookback window, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (ranked, concrete growth actions) and enumerates the actual output categories — channels to double down on, pages to promote, spike causes, best publish time — which effectively separates it from raw-data siblings like top_sources and get_timeseries. It never names an alternative sibling explicitly, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this to build and then execute a marketing plan" gives a clear situational trigger and even hints at downstream execution (e.g. the suggested tracked link, tying to create_tracked_link). No when-not-to-use condition or explicit alternative is offered, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_overviewAInspect

Visitors and pageviews for the range, change vs the previous equal-length period, plus top sources, pages and events. Start here.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

A3.6/5.0
Behavior3/5

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 content of the response, which is the most relevant behavioral trait for a read-only analytics summary, and 'Start here' signals entry-point semantics. It does not state permissions, freshness/aggregation behavior, or any limits, which is a gap but modest for a clearly read-only metrics tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero filler; the metric content is front-loaded and the orienting cue ('Start here') is placed last where it lands naturally. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, optional-arg read tool with no output schema, the description adequately conveys what comes back (summary metrics plus top sources/pages/events). It does not explain response shape or granularity, but the enumerated contents largely cover the return-value gap. Complete enough for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the range parameter's schema already documents accepted formats and the default. The description only alludes to 'the range' and the 'previous equal-length period', adding no syntax or format detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names specific outputs (visitors, pageviews, period-over-period change, top sources/pages/events), which clearly identifies it as a summary/dashboard tool. It stops short of explicitly differentiating itself from siblings like get_timeseries, top_sources, or top_pages, which also surface related metrics. 'Start here' hints at orientation but isn't a hard disambiguation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Start here' is genuine implied guidance that this is the entry point, useful for an agent orienting in a large analytics toolset. However, no alternative is named and no condition for when to use a more targeted sibling (e.g. top_sources) instead is given. Usage is implied rather than specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_timeseriesCInspect

Pageviews and unique visitors over time, bucketed by hour or day.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".
granularityNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden, yet it discloses almost nothing behavioral: no default range, no 90-day cap, no indication of whether results are paginated, cached, or returned as an ordered array. The only behavioral hint ('bucketed by hour or day') merely restates the enum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the metric and the bucketing dimension come first. It is efficient, though the terseness borders on under-specification rather than true economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only place an agent could learn the response shape, ordering, or default behavior, and it supplies none of that. For a 2-parameter analytics tool that returns a series, this leaves important gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: 'range' is documented in-schema with format, default, and max, while 'granularity' is left to its enum values alone. The description's 'bucketed by hour or day' adds meaning to that enum, so it partially compensates, but it adds nothing about the range format or default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete resource and metric set (pageviews and unique visitors over time) plus the bucketing dimension, which is enough to distinguish it from sibling list/summary tools like get_overview or top_pages. It stops short of explicitly contrasting itself with any sibling, so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of when to prefer this over get_overview, find_traffic_spikes, or query_visits, and no stated prerequisites. The agent must infer the use case purely from the metric names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whats_workingAInspect

Evidence for marketing planning: channels ranked by conversions with growth and conversion rate, growing pages, and spike causes that recur. Use this before proposing marketing ideas.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it partly meets it by disclosing the shape of the result set (ranked channels, growth, conversion rate, recurring spike causes). It does not state that this is a read-only aggregation, whether results are cached or rate-limited, or how "recurring" spikes are determined — meaningful gaps on an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the high-value content (what the tool returns) is front-loaded before the invocation advice. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description usefully enumerates the returned evidence categories, which is the main thing an agent needs to trust the result. It is nearly complete for a single-optional-parameter tool; only the read-only/mutation status and any result limits go unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single `range` parameter is fully documented in the schema with format examples and a default. The description adds nothing about the lookback window, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete composite resource — channels ranked by conversions with growth and conversion rate, growing pages, and recurring spike causes — so an agent knows exactly what comes back. It stops short of distinguishing itself from overlapping siblings (top_sources, top_pages, find_traffic_spikes, explain_spike), leaving the agent to guess whether this is a superset or a different cut of the same data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this before proposing marketing ideas" gives one clear situation for invoking the tool, which is real guidance. It offers no when-not condition and never names the sibling tools (top_sources, top_pages) that partially overlap, so the agent must infer whether to call this instead of, or in addition to, them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_eventsBInspect

Custom events (from agentlytics.track) ranked by count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

B3.1/5.0
Behavior2/5

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 that results are ranked by count, but does not state whether the operation is read-only, what permissions are required, or any rate limits or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that precisely conveys the resource and ranking without any wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, the description is adequate about what is returned. However, it lacks usage guidance and behavioral context, which leaves gaps even for a low-complexity operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'limit' and 'range' fully documented including defaults and bounds. The description adds no parameter details beyond what the schema already 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific resource ('custom events from agentlytics.track') and how they are ordered ('ranked by count'). It implies a list operation but does not use an explicit verb, and sibling differentiation is only implicit against the other ranked analytics tools (top_sources, top_pages, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to choose this tool over siblings like get_overview, top_sources, or query_visits. The phrase 'from agentlytics.track' hints at custom events, but there are no explicit usage conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_visitsAInspect

Answer questions about this site's visits: count pageviews (or custom events) and unique visitors that match filters, optionally grouped. Examples: iOS visitors from the US last week (os=iOS, country=US); where Firefox users come from (browser=Firefox, group_by=source); signups per country (event=signup, group_by=country); /pricing views per day (page=/pricing, group_by=day). Only counts are returned; the site stores no IP addresses or user agents.

ParametersJSON Schema
NameRequiredDescriptionDefault
osNoe.g. Windows, macOS, iOS, Android, Linux.
pageNoExact path like /pricing, or a prefix ending in * like /blog/*.
typeNoDefault pageview, or event when you filter or group by event.
eventNoCustom event name, e.g. signup.
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".
sourceNoUTM source, else referrer host, else "(direct)".
browserNoe.g. Chrome, Firefox, Safari, Edge.
countryNoISO code (US) or name (United States).
group_byNoBreak the matches down by one dimension. Default none.
referrerNoReferring host, e.g. news.ycombinator.com.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden and delivers useful behavioral context: 'Only counts are returned' sets return expectations (no raw rows), and 'the site stores no IP addresses or user agents' prevents futile queries for that data. It omits auth/permission and rate-limit behavior, but for a clearly read-only analytics query this is solid disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose statement followed by four compact, parallel examples and a closing caveat. Every sentence earns its place; the examples are somewhat dense but directly actionable and not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with no output schema or annotations, the description adequately covers intent, parameter combinations, and return scope ('only counts'). No output schema exists so return-value detail need not be elaborated, though auth/error behavior is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the examples add genuine value by demonstrating how parameters combine (os=iOS + country=US; browser=Firefox + group_by=source; event=signup + group_by=country; page=/pricing + group_by=day). This shows interaction patterns the schema alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific behavior: counting pageviews/custom events and unique visitors matching filters, optionally grouped. It is clear and concrete, but it does not distinguish itself from overlapping siblings like get_timeseries, get_overview, or top_pages/top_sources/top_countries, which this tool can effectively emulate via group_by.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is conveyed only through worked examples (iOS US visitors, Firefox source breakdown, signups per country, page views per day). There is no explicit statement of when to choose this tool over the sibling top_* / get_timeseries tools, and no exclusions or prerequisites, so the agent must infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recent_visitsAInspect

The most recent individual visits (newest first) matching the same filters as query_visits: time, page, source, country, browser, OS and event properties. visitor is a short code that changes daily, so it only shows which rows on one day came from the same browser. No IP addresses or user agents are stored.

ParametersJSON Schema
NameRequiredDescriptionDefault
osNo
pageNo
typeNoDefault any.
eventNo
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".
sourceNo
browserNo
countryNo
referrerNo

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and does add real behavioral value: newest-first ordering, the daily-rotating `visitor` code and its limitation, and that no IPs or user agents are stored. It omits auth/permission requirements and any rate-limit or result-format notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the core behavior front-loaded ahead of the caveats. The second sentence is slightly sprawling with two separate concerns (visitor code, IP storage), but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter read tool with no output schema, the privacy notes on visitor/IP meaningfully aid interpretation of results. However, with 30% parameter coverage and no description of the return structure beyond the visitor nuance, gaps remain that an agent must resolve from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 30% (type, limit, range documented), so the description must compensate. It enumerates the filterable dimensions (time, page, source, country, browser, OS, event properties), which maps several params to concepts, but adds no format or syntax detail such as what 'time' accepts or how referrer/event interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and ordering: 'most recent individual visits (newest first)'. Referencing that it matches 'the same filters as query_visits' implies a row-level listing counterpart to a presumably aggregated sibling, but the distinction between the two tools is left implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Naming query_visits as a filter-reference implies a companion relationship, but there is no explicit when-to-use-this-vs-that guidance or exclusion criteria. An agent must infer that this returns raw rows while siblings like top_pages/get_overview return aggregates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_browsersBInspect

Browsers ranked by pageviews: Chrome, Firefox, Safari, Edge, Opera, Samsung Internet, Other. Visits recorded before browser tracking began are Unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one genuinely useful data caveat: pre-tracking visits surface as 'Unknown'. However it says nothing about sort direction, return shape, or whether results are a fixed enumeration or dynamic — only the category list and the Unknown handling are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core ranking purpose front-loaded, followed by the data caveat. The enumerated category list is the only slightly expendable content, but it is informative enough to earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only ranking tool with two optional, well-documented parameters, the description is minimally adequate. It lacks any return-format or ordering detail, and with no output schema and no annotations the description could reasonably carry more, but nothing essential to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (limit, range) are already fully documented with defaults, bounds, and format examples. The description adds no parameter-level meaning 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: browsers ranked by pageviews. The enumerated categories (Chrome, Firefox, Safari, etc.) clarify the exact dimension being ranked. It doesn't explicitly distinguish itself from the other 'top_*' siblings (top_systems, top_pages, top_countries), but the resource name is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this vs top_systems, top_pages, top_countries, or get_overview. There is no context about the intended use case (e.g. audience analysis) and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_countriesBInspect

Visitor countries ranked by pageviews, with the country name ("XX" is unknown).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden alone, and it does disclose one genuinely useful behavioral detail: the 'XX' sentinel value returned for unknown countries. However, it says nothing about read-only semantics, result ordering beyond 'ranked', or how the lookback window bounds results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the resource, the ranking metric, and the one output quirk, with zero filler. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only ranking tool with fully-described parameters and no output schema, the definition covers the essentials plus the 'XX' caveat. It falls short only on ordering/tie-breaking behavior and explicit sibling routing, which are minor gaps here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the limit cap (50, default 10) and the range window (max 90d, default 7d) are fully documented in the schema. The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (ranked by pageviews) and resource (visitor countries), making the dimensional slice immediately clear. It is implicitly distinguishable from siblings like top_pages or top_browsers by the 'countries' dimension, but it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternative tools. An agent must infer from the name alone that this is the country-dimension counterpart to top_pages/top_browsers/top_sources.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_pagesCInspect

Pages ranked by pageviews.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure, and it supplies almost nothing: no statement that this is a read-only listing, no mention of sort direction, pagination, or what a returned page record contains. Only the ranking metric ('by pageviews') is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single five-word fragment with zero padding, and the ranking metric is front-loaded. It is efficient, though the fragment form is terse to the point of being an incomplete sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no annotations and no output schema, the description should at least say what is returned (page identifier plus views) and confirm it is a safe read. Against roughly twenty analytics siblings, this definition is too thin to let an agent call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear descriptions and bounds for both limit (1-50, default 10) and range (max 90d, default 7d), so the schema does the heavy lifting. The description adds no additional syntax or format guidance beyond the schema, which matches the baseline for fully documented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The fragment 'Pages ranked by pageviews' names the resource (pages) and the ranking metric (pageviews), so the agent can infer a top-N listing. However, it is not a verb+resource statement and gives no scope qualifiers, leaving it just above vague. It does implicitly distinguish itself from siblings like top_sources and top_countries by naming pages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over the many other top_* and analytics siblings, nor any stated prerequisites such as a required site/workspace context. The agent must infer usage entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_sourcesBInspect

Traffic sources (UTM source, else referrer host, else direct) ranked by pageviews.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior in the attribution fallback chain (UTM source, else referrer host, else direct) and the ranking metric, which is real added value. However, it says nothing about read-only nature, response shape, or limits beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler, front-loading the resource and appending the grouping rule and ranking metric. Nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a default-parameterized, read-only analytics aggregate with no output schema and no annotations, the sentence covers what the tool returns (ranked sources) and how sources are derived. Only minor gaps remain, such as how ties or direct traffic volume behave.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — both 'limit' (max 50, default 10) and 'range' (max 90d, default 7d) are fully documented in the schema. The description adds no syntax or semantics beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (traffic sources), the ranking metric (pageviews), and the grouping rule (UTM source, else referrer host, else direct). That resource is inherently distinct from siblings like top_pages, top_countries and top_browsers, though the description never names them to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no routing to or away from alternatives such as top_pages or get_overview. The one-line description leaves the agent to infer the use case entirely from the title.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_systemsBInspect

Operating systems ranked by pageviews: Windows, macOS, iOS, Android, Linux, ChromeOS, Other. Visits recorded before this tracking began are Unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows. Default 10.
rangeNoLookback window such as "24h", "7d" or "30d" (max 90d). Default "7d".

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does add one genuinely useful data caveat — pre-tracking visits surface as 'Unknown' — which tells the agent how to interpret an unexpected category. However it says nothing about ordering guarantees beyond 'ranked', result size limits, or how the two params interact with the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the enumeration of categories is front-loaded and immediately useful for matching against a user's question, and the 'Unknown' caveat is a separate, non-redundant sentence. Nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only aggregation with a fully documented schema and only two optional params, the description covers what the tool returns (ranked OS pageview breakdown) and a key interpretation caveat. It is missing explicit ordering/units detail, but a reader could invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: 'limit' (max 50, default 10) and 'range' (e.g. "24h", "7d", max 90d, default "7d") are fully documented in the schema already. The description adds no additional parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (operating systems) and the metric (ranked by pageviews), plus enumerates the exact categories returned. It's clearly distinguishable from top_pages/top_countries/top_browsers by dimension, though it never names those siblings or says 'the OS breakdown' explicitly as a routing cue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all — no indication of when an agent should pick top_systems over top_browsers, get_overview, or query_visits, and no mention of prerequisites or the default lookback behavior being appropriate for which questions.

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.

  1. 20 tool updatesv0.1.0
    • First observedadd_annotation
    • First observedcreate_funnel
    • First observedcreate_tracked_link
    • First observeddelete_funnel
    • First observedexplain_spike
    • First observedfind_traffic_spikes
    • First observedget_campaign_results
    • First observedget_funnel
    • First observedget_growth_actions
    • First observedget_overview
    • First observedget_timeseries
    • First observedget_whats_working
    • First observedlist_events
    • First observedquery_visits
    • First observedrecent_visits
    • First observedtop_browsers
    • First observedtop_countries
    • First observedtop_pages
    • First observedtop_sources
    • First observedtop_systems

TDQS

B3.4/5.0

Scored across 20 tools

Disambiguation4/5

Most tools have clearly distinct purposes: the top_* family splits cleanly by dimension, and query_visits (aggregates) vs recent_visits (individual rows) are well separated. The only mildly fuzzy boundary is between get_whats_working and get_growth_actions, which both deal with marketing evidence/planning, though one analyzes and the other prescribes actions.

Naming Consistency4/5

Names use consistent snake_case and mostly follow verb_noun or prefix_noun patterns (get_overview, create_funnel, top_pages, delete_funnel). Minor deviations like recent_visits, find_traffic_spikes, and explain_spike break the strict pattern but remain readable and predictable.

Tool Count4/5

20 tools is on the heavy side but each covers a distinct analytics surface (traffic, sources, geo, tech, funnels, campaigns, spikes, annotations), so the set feels justified rather than padded. It sits at the upper edge of the ideal 3-15 range but is reasonable for a full-featured web analytics platform.

Completeness4/5

Coverage is broad: overview, timeseries, dimensional breakdowns, custom queries, raw recent visits, funnel create/get/delete, spike detection and explanation, annotations, tracked links, and campaign results. Minor gaps exist (no funnel update, limited event management), but core analytics and lifecycle workflows are covered with no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Privacy 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.
    28
    20 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to answer growth questions in plain English by connecting to marketing and product data via 49 MCP tools.
    25
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    First-party web analytics MCP server for AI agents, providing 42 tools to query traffic, events, funnels, conversions, sources, and performance data.
    40
    23 npm
    MIT