Skip to main content
Glama

Get Visitors by Browser

get_browsers
Read-only

Get visitors grouped by browser name (Chrome, Safari, Firefox, Edge, and others), ranked by visitors descending, for a date range. Names only: use get_breakdown with dimension browser_version for versions, get_operating_systems for the OS split, and get_devices for desktop versus mobile. Pass filter_browser to other tools to scope them to one browser. Rows carry value, visitors, revenue, and percentage with pagination.total; limit defaults to 100 (max 1000). Dates default to the last 30 days; all filter_* arguments apply. Requires websiteId or domain with a workspace token.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
endAtNoISO 8601 end of the reporting window (e.g. "2026-01-31"). Defaults to now.
limitNoMax rows to return (1-1000, default 100).
domainNoWebsite domain from list_websites (e.g. "example.com"). Alternative to websiteId with a workspace token.
offsetNoRows to skip for pagination (default 0). Compare offset + limit against pagination.total in the response.
startAtNoISO 8601 start of the reporting window, date or datetime (e.g. "2026-01-01" or "2026-01-01T00:00:00Z"). Defaults to 30 days ago.
timezoneNoIANA timezone used to bound and bucket the window (e.g. "America/New_York"). Defaults to the website timezone from get_metadata.
filter_osNoFilter by operating system name as returned by get_operating_systems (e.g. "iOS")
websiteIdNoWebsite ID from list_websites. Required with a workspace token unless domain is given; ignored with a website key.
filter_refNoFilter by ref URL parameter
filter_viaNoFilter by via URL parameter
filter_cityNoFilter by city name as returned by get_cities
filter_goalNoFilter to visitors who completed this goal name (as returned by get_goals)
filter_pageNoFilter by page path as returned by get_pages (e.g. "/pricing")
workspaceIdNoWorkspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another
filter_deviceNoFilter by device type as returned by get_devices: "Desktop", "Mobile" or "Tablet". Matching is case-sensitive.
filter_regionNoFilter by region name as returned by get_regions (e.g. "California")
filter_sourceNoFilter by source URL parameter
filter_browserNoFilter by browser name as returned by get_browsers (e.g. "Chrome")
filter_channelNoFilter by marketing channel as returned by get_channels (e.g. "Organic Search")
filter_countryNoFilter by country name as returned by get_countries (e.g. "United States"). Every filter_* value accepts the same operators: "v" is, "!v" is not, "~v" contains, "!~v" does not contain, "a|b" any of. Filters combine with AND.
filter_hostnameNoFilter by hostname as returned by get_hostnames (e.g. "app.example.com")
filter_referrerNoFilter by referrer as returned by get_referrers: a source name such as "Google" for recognized sites, otherwise the domain
filter_utm_termNoFilter by UTM term
filter_entry_pageNoFilter by entry/landing page
filter_utm_mediumNoFilter by UTM medium
filter_utm_sourceNoFilter by UTM source
filter_utm_contentNoFilter by UTM content
filter_utm_campaignNoFilter by UTM campaign

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultNoObject with status, data (browser rows with value, visitors, revenue, percentage, ordered by visitors descending), and pagination {limit, offset, total}.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  2. Changed3 schema fields changed
    • changedInput schema / properties / filter_device / description
      Previous value: -"Filter by device type: desktop, mobile, tablet"New value: +"Filter by device type as returned by get_devices: \"Desktop\", \"Mobile\" or \"Tablet\". Matching is case-sensitive."
    • changedInput schema / properties / filter_referrer / description
      Previous value: -"Filter by referrer domain as returned by get_referrers (e.g. \"google.com\")"New value: +"Filter by referrer as returned by get_referrers: a source name such as \"Google\" for recognized sites, otherwise the domain"
    • changedInput schema / properties / filter_region / description
      Previous value: -"Filter by region code as returned by get_regions (e.g. US-CA)"New value: +"Filter by region name as returned by get_regions (e.g. \"California\")"
  3. Changed1 schema field changed
    • addedInput schema / properties / workspaceId
      Added value: +{
      +  "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another",
      +  "type": "string"
      +}
  4. Changed18 schema fields changed
    • changedInput schema / properties / domain / description
      Previous value: -"Website domain to query. Required when using a workspace token unless websiteId is provided."New value: +"Website domain from list_websites (e.g. \"example.com\"). Alternative to websiteId with a workspace token."
    • changedInput schema / properties / endAt / description
      Previous value: -"ISO 8601 end date (e.g. \"2026-01-31\")"New value: +"ISO 8601 end of the reporting window (e.g. \"2026-01-31\"). Defaults to now."
    • changedInput schema / properties / filter_browser / description
      Previous value: -"Filter by browser name"New value: +"Filter by browser name as returned by get_browsers (e.g. \"Chrome\")"
    • changedInput schema / properties / filter_channel / description
      Previous value: -"Filter by marketing channel"New value: +"Filter by marketing channel as returned by get_channels (e.g. \"Organic Search\")"
    • changedInput schema / properties / filter_city / description
      Previous value: -"Filter by city"New value: +"Filter by city name as returned by get_cities"
    • changedInput schema / properties / filter_country / description
      Previous value: -"Filter by country"New value: +"Filter by country name as returned by get_countries (e.g. \"United States\"). Every filter_* value accepts the same operators: \"v\" is, \"!v\" is not, \"~v\" contains, \"!~v\" does not contain, \"a|b\" any of. Filters combine with AND."
    • changedInput schema / properties / filter_goal / description
      Previous value: -"Filter by goal name"New value: +"Filter to visitors who completed this goal name (as returned by get_goals)"
    • changedInput schema / properties / filter_hostname / description
      Previous value: -"Filter by hostname"New value: +"Filter by hostname as returned by get_hostnames (e.g. \"app.example.com\")"
    • changedInput schema / properties / filter_os / description
      Previous value: -"Filter by operating system"New value: +"Filter by operating system name as returned by get_operating_systems (e.g. \"iOS\")"
    • changedInput schema / properties / filter_page / description
      Previous value: -"Filter by page path"New value: +"Filter by page path as returned by get_pages (e.g. \"/pricing\")"
    • changedInput schema / properties / filter_referrer / description
      Previous value: -"Filter by referrer domain"New value: +"Filter by referrer domain as returned by get_referrers (e.g. \"google.com\")"
    • changedInput schema / properties / filter_region / description
      Previous value: -"Filter by region"New value: +"Filter by region code as returned by get_regions (e.g. US-CA)"
    • changedInput schema / properties / limit / description
      Previous value: -"Max results (1-1000, default: 100)"New value: +"Max rows to return (1-1000, default 100)."
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset (default: 0)"New value: +"Rows to skip for pagination (default 0). Compare offset + limit against pagination.total in the response."
    • changedInput schema / properties / startAt / description
      Previous value: -"ISO 8601 start date (e.g. \"2026-01-01\")"New value: +"ISO 8601 start of the reporting window, date or datetime (e.g. \"2026-01-01\" or \"2026-01-01T00:00:00Z\"). Defaults to 30 days ago."
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone (e.g. \"America/New_York\"). Falls back to site default."New value: +"IANA timezone used to bound and bucket the window (e.g. \"America/New_York\"). Defaults to the website timezone from get_metadata."
    • changedInput schema / properties / websiteId / description
      Previous value: -"Website ID to query. Required when using a workspace token unless domain is provided."New value: +"Website ID from list_websites. Required with a workspace token unless domain is given; ignored with a website key."
    • changedOutput schema / properties / result / description
      Previous value: -"Browsers with visitor counts."New value: +"Object with status, data (browser rows with value, visitors, revenue, percentage, ordered by visitors descending), and pagination {limit, offset, total}."
  5. First observed

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds genuinely new behavior: rows carry value/visitors/revenue/percentage with pagination.total, limit defaults to 100 (max 1000), dates default to last 30 days, and auth requires websiteId or domain with a workspace token. Only minor gap is that the row payload partially duplicates the output schema.

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?

Four tight sentences, front-loaded with what the tool returns, then routing alternatives, then output shape/defaults, then auth. No filler and nothing repeats the parameter list verbatim.

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

Completeness5/5

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

For a 28-parameter tool, the description covers the essentials an agent needs: defaults, pagination, auth requirement, the universal applicability of filter_* arguments, and how to get sibling breakdowns. With an output schema present it correctly avoids re-documenting return fields in depth.

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 100%, so the baseline is 3. The description adds cross-cutting semantics not obvious from the schema alone: that all filter_* arguments apply here, that filter_browser values come from this tool's own output, and that limit/date defaults and the websiteId-or-domain auth rule govern invocation.

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 visitors grouped by browser name'), names the ranking and grouping semantics, and explicitly distinguishes itself from get_breakdown (browser_version), get_operating_systems, and get_devices. An agent can select it without opening any sibling schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use get_breakdown with dimension browser_version for versions, get_operating_systems for OS, get_devices for device type, and use filter_browser on other tools to scope them to one browser. This is exactly the when-to-use/when-not framing.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources