Google Analytics 4 MCP
Provides read-only access to Google Analytics 4 properties, including standard, batch, pivot, realtime, and funnel reports, metadata catalog, and admin lists for properties, streams, custom dimensions/metrics, key events, audiences, Google Ads links, annotations, and access reports.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Analytics 4 MCPshow me sessions and users by country for the last 7 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Analytics 4 MCP
Read-only MCP server for Google Analytics 4. Seventeen tools cover the read surface of both the Data API and the Admin API: standard, batch, pivot, realtime and funnel reports; the metadata catalog and compatibility check; and admin lists for properties, streams, custom dimensions and metrics, key events, audiences, Google Ads links, annotations and access reports. We run this server in production for every analytics client.
Install
Claude Code:
claude mcp add ga4 -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json -- uvx scalably-ga4-mcpCodex:
codex mcp add ga4 --env GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json -- uvx scalably-ga4-mcpClaude Desktop: download ga4-mcp.mcpb from the latest GitHub release and open it.
Related MCP server: Google Analytics MCP Server
Setup
In Google Cloud, create or pick a project and enable the Google Analytics Data API and the Google Analytics Admin API on it (APIs and Services, Library).
Create a service account in that project and download its JSON key.
Add the service account's email as a Viewer on each GA4 property you want to query (Admin, Property access management).
No OAuth consent screen is needed; the server authenticates as the service account with the analytics.readonly scope. One service account can read any property that grants it access, so there is no per-client configuration beyond step 3 above.
Call ga4_list_account_summaries first to discover which property_id values the service account can see, then pass one into the reporting or admin tools.
Tools (17)
Tool | What it does |
| List every GA4 account and its child properties accessible to this service account |
| Full metadata for a single GA4 property |
| List all data streams (web, iOS, Android) on a GA4 property |
| List custom dimensions configured on a GA4 property |
| List custom metrics configured on a GA4 property |
| List key events (formerly conversions) on a GA4 property |
| List audiences defined on a GA4 property |
| List Google Ads links attached to a GA4 property |
| List reporting annotations on a GA4 property |
| Audit log of who read what on a GA4 property, last 12 months |
| Fetch the full GA4 dimension and metric catalog for a property |
| Run a GA4 standard report, the workhorse tool |
| Run up to 5 GA4 reports in a single round trip |
| Run a GA4 pivot report |
| Run a GA4 real-time report covering the last 30 minutes |
| Validate whether a dimension and metric combo can be queried together |
| Run a GA4 funnel report (v1alpha, drop-off analysis) |
Configuration
Variable | Required | Purpose |
| yes | Path to a Google service-account JSON file with the |
| no | INFO (default) or DEBUG |
Filter expression shape
Every tool accepting dimension_filter / metric_filter takes a dict:
{"filter": {"field_name": "country", "string_filter": {"value": "US"}}}Compose with boolean groups:
{"and_group": {"expressions": [
{"filter": {"field_name": "country", "string_filter": {"value": "US"}}},
{"filter": {"field_name": "deviceCategory", "string_filter": {"value": "mobile"}}}
]}}A raw {"field_name": ..., "string_filter": ...} is auto-wrapped into {"filter": {...}}.
Reply shape
Every tool returns JSON with status (succeeded, partial, no_op), summary, result, proof, warnings, recovery. proof.nextOffset on a partial status means: continue from that offset. proof.propertyQuota carries the property's remaining Data API quota so the caller can self-throttle. proof.dataQualityLimited is true when the response was sampled, thresholded, or collapsed high-cardinality rows into (other); treat such a result as directionally useful, not exact.
Limits
250,000 rows per Data API response (the server caps any higher client-supplied limit). Batch reports: up to 5 per call. Funnel reports: up to 10 steps. Realtime reports use a separate, smaller dimension and metric catalog covering only the last 30 minutes; non-realtime data typically lags 24 to 48 hours. Funnel reporting is v1alpha and its shape can change upstream. Every quota bucket (core reports, realtime, funnel) allows roughly 14,000 quota tokens per project per property per hour (a complex query can cost more than one token); 360 properties get a 10x multiplier. Re-check Google's current quota page before relying on an exact number.
Verify
Each release lists the package version, the .mcpb sha256 and the production commit it was derived from in CHANGELOG.md. CI runs the tests and a clean install of the built wheel on every push.
Privacy Policy
This server runs locally, on your machine, under your own credentials. It collects no personal data, contains no telemetry, stores nothing persistently, and talks only to the vendor API it wraps. No third party, including Scalably, receives your data. Contact: hello@scalably.io. Canonical copy: https://scalably.io/connector-privacy.html
License
MIT. Copyright Scalably.
Available Tools
17 toolsga4_batch_run_reportsARead-only
Run up to 5 GA4 reports in a single round-trip.
requests: list of run_report-shaped dicts. Same top-level parameters as ga4_run_report (minus property_id, inferred from the batch). Each entry accepts: dimensions, metrics, date_ranges, dimension_filter, metric_filter, order_bys, metric_aggregations, limit, offset, keep_empty_rows, currency_code.
Useful when the agent needs paired views (e.g. landing pages + referrers for the same window) and wants them atomically + under one quota call.
| Name | Required | Description | Default |
|---|---|---|---|
| requests | Yes | ||
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only and open-world hints. The description adds meaningful behavioral detail beyond annotations: the 5-report limit, atomic execution, quota-call efficiency, and property_id inference. It does not describe failure modes, but the read-only annotation and output schema reduce the need for that.
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. The request-shape explanation is structured as a list, and every sentence provides necessary invocation or selection guidance without 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 the minimal schema, the description provides enough detail to construct valid batch requests and choose the tool appropriately. It covers request shape, accepted fields, top-level property_id, limits, and the atomic/quota benefit, while an output schema exists for return values.
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 0%, and the requests item schema is just an open object. The description fully compensates by explaining that each request is run_report-shaped, listing all accepted parameters, and clarifying that property_id is inferred from the batch rather than repeated per request.
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 ('Run'), a bounded resource ('up to 5 GA4 reports'), and a clear distinguishing mechanism ('in a single round-trip'). It also references ga4_run_report, making the relationship to sibling tools obvious.
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 says when to use it: when the agent needs paired views for the same window and wants them atomically under one quota call. It does not explicitly say 'use ga4_run_report for a single report,' but the batch framing and reference to the single-report tool make the intended division of labor clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_check_compatibilityARead-only
Validate whether a dim/metric combo can be queried together. Cheap pre-flight.
compatibility_filter: 'COMPATIBLE' (default, returns only fields that work with the provided selection) or 'INCOMPATIBLE' (returns only fields that would conflict).
Use before run_report when composing exploratory queries, cheaper than catching a GoogleAdsException after a big failed report.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No | ||
| dimensions | No | ||
| property_id | Yes | ||
| metric_filter | No | ||
| dimension_filter | No | ||
| compatibility_filter | No | COMPATIBLE |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already covers safety; the description adds behavioral value by saying it is a cheap pre-flight, by documenting that compatibility_filter returns only working or conflicting fields, and by framing it as a guard against expensive failures. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose first, then the one non-obvious parameter, then usage context. The formatting is scannable and free of 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 readOnlyHint, openWorldHint, and an output schema, the description covers the main invocation context and the compatibility_filter semantics. It is only slightly incomplete on the exact interpretation of the filter/parameter fields for an agent unfamiliar with GA4.
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 0%, so the description must compensate. It fully explains compatibility_filter and references metrics/dimensions, but metric_filter, dimension_filter, and property_id are left to be inferred from names and schema, which is only partial compensation.
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?
Opening states a specific verb-resource pair: 'Validate whether a dim/metric combo can be queried together.' The phrase 'Cheap pre-flight' and comparison to run_report make its purpose distinct from the reporting siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use it: 'Use before run_report when composing exploratory queries.' It also gives the alternative (run_report) and the cost-based rationale, so an agent can decide without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_get_metadataARead-only
Fetch the full GA4 dimension + metric catalog for a property.
If property_id is omitted, returns the universal catalog (excludes property-specific custom fields). Pass a property_id to include custom dimensions and metrics like 'customEvent:foo' and 'customUser:signup_plan'.
Response: {"dimensions": [...], "metrics": [...]}. Each entry has api_name, ui_name, description, category, custom_definition.
Call this before run_report when the agent is uncertain about field names: GA4's catalog is large and custom fields require the property to resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description explains the key behavioral difference between omitting and passing property_id, what kind of fields appear in each case, and the general response shape. This is exactly the information an agent needs to decide how to invoke the 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?
The description is front-loaded with the core purpose, then gives parameter behavior, response shape, and usage guidance in a compact, efficient way. Every sentence adds value and no fluff 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?
For a read-only metadata tool with one optional parameter and an output schema, the description covers the purpose, parameter semantics, response entry shape, and when to use it before running reports. Nothing essential 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 input schema provides no description for property_id, and schema coverage is 0%. The description fully compensates by explaining that omitting it returns the universal catalog and passing it includes property-specific custom dimensions and metrics, with concrete examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch the full GA4 dimension + metric catalog for a property.' It clearly differentiates itself from report tools and sibling list tools by emphasizing the full catalog, including custom fields when a property_id is supplied.
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 gives clear, actionable guidance: call this before run_report when uncertain about field names, and explains when to include property_id. It does not explicitly rule out alternatives like ga4_list_custom_dimensions, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_get_property_detailsARead-only
Full metadata for a single GA4 property.
Returns display_name, property_type, parent account, time_zone, currency_code, industry_category, service_level, delete_time, expire_time, account reference, create_time, update_time.
property_id: numeric (e.g. "123456789") or resource (e.g. "properties/123456789").
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so no safety concerns are hidden. The description adds behavioral transparency by enumerating the returned metadata fields and explicitly accepting both numeric and resource ID formats, which goes beyond the bare 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, followed by a compact return-field list and the parameter format note. Every sentence adds useful information 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 single-property read tool with a read-only annotation and an available output schema, the description covers the purpose, return content, and accepted input formats. Sibling tools are clearly distinct from this focused metadata operation, so no additional disambiguation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says property_id is a string, with no description. The tool description compensates by explaining that property_id can be either a numeric string or a full resource name, with concrete examples, giving the agent the needed format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States 'Full metadata for a single GA4 property' with a clear resource and scope, and lists the exact fields returned. This distinguishes it from sibling list/report tools, which target multiple items or aggregated metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is for retrieving metadata about one property, and the singular scope separates it from list tools. However, it does not explicitly state when to prefer this over alternatives or mention any exclusions, leaving usage guidance mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_account_summariesARead-only
List every GA4 account and its child properties accessible to this service account.
CALL THIS FIRST to discover which property_id to pass into other tools. The SA only sees accounts/properties where its email has been explicitly added as a user.
Response: {"accounts": [{account, display_name, property_summaries: [...], ...}]}. Each property_summary has property, display_name, property_type, parent.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as read-only and open-world, but the description goes further by explaining the access boundary (explicit email grant required) and showing the exact response shape. It adds meaningful behavioral context beyond the structured annotations without contradicting them.
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, well-organized, and every sentence earns its place: the main purpose, the when-to-call guidance, the access caveat, and the response format. The response example is useful and not padded with irrelevant detail.
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 zero-parameter discovery tool, the description is fully complete. It explains what the tool returns, how the response is structured, the access model, and how it fits into the workflow. Nothing needed for correct invocation 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 tool accepts zero parameters, so there is nothing for the description to explain about parameter meaning. The baseline for zero-parameter tools is 4, and the description appropriately focuses instead on the response shape, which is the semantically relevant part here.
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') and a specific resource ('every GA4 account and its child properties accessible to this service account'). It clearly positions itself as a discovery tool for finding property_id values, which distinguishes it from the property-scoped sibling list tools like ga4_list_custom_metrics and ga4_list_data_streams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'CALL THIS FIRST' and explains the purpose: to discover which property_id to pass into other tools. It also provides a crucial constraint: the service account only sees accounts/properties where its email has been explicitly added. This is strong, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_audiencesARead-only
List audiences defined on a GA4 property.
Each audience has name, display_name, description, membership_duration_days, ads_personalization_enabled, event_trigger, exclusion_duration_mode, filter_clauses. Reference audienceId as a dimension in run_report for audience-based breakdowns.
NOTE: Uses Admin v1alpha since audiences are still alpha in April 2026.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral context by listing the fields returned for each audience and by noting that it 'Uses Admin v1alpha since audiences are still alpha in April 2026,' which helps the agent set expectations about API stability.
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 purpose. The field list is useful, and the note about the alpha Admin API is relevant without bloating the text. Every sentence contributes something meaningful.
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 simple required parameter, an output schema available, and clear scope, the description is largely complete. Minor gaps like pagination behavior and authentication requirements are not mentioned, but they are less critical for this straightforward read-only listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the single required parameter, property_id, is self-describing with title 'Property Id' and is referenced in the description as 'a GA4 property.' The description does not specify the expected format (e.g., numeric property ID vs. full resource name), so it only partially compensates for the missing schema description.
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: 'List audiences defined on a GA4 property.' This distinguishes it from sibling list tools like ga4_list_custom_metrics and ga4_list_data_streams by naming the specific resource. Even without the annotation title, the verb and resource are explicit.
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 concrete guidance on how to use the result, saying to 'Reference audienceId as a dimension in run_report for audience-based breakdowns.' This is a clear usage context, though it does not explicitly list alternatives or when-not-to-use situations, which keeps it just below the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_custom_dimensionsARead-only
List custom dimensions configured on a GA4 property.
Each entry contains the parameter_name (how you query it, use prefix 'customEvent:' or 'customUser:' when passing to get_metadata / run_report), display_name, scope (EVENT|USER|ITEM), and description. Essential grounding before running reports that reference custom fields.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds valuable context about what each entry contains and how the parameter_name should be prefixed when used in get_metadata or run_report. It does not mention pagination or limits, but for a read-only list tool this is acceptable.
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 with the core action, and every sentence adds useful information. The prefix guidance and entry content summary are directly actionable without adding 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?
For a low-complexity list tool with an output schema, the description covers the main purpose, the contents of the response, and the downstream usage of the returned data. It is nearly complete, though it could briefly mention where property_id comes from or address potential pagination.
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 0%, and the description does not meaningfully elaborate on the property_id parameter beyond calling it a GA4 property. The parameter name and title are already in the schema, so the description adds little semantic value for this single required argument.
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: 'List custom dimensions configured on a GA4 property.' It is clearly distinct from sibling tools like ga4_list_custom_metrics and ga4_list_key_events by naming the exact entity being listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it is 'Essential grounding before running reports that reference custom fields.' It does not explicitly exclude alternatives or state when not to use it, but the context is strong enough for an agent to know when this tool is relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_custom_metricsARead-only
List custom metrics configured on a GA4 property.
Each entry: parameter_name, display_name, measurement_unit, scope, restricted_metric_type.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. It adds useful context by specifying the fields returned for each entry (parameter_name, display_name, measurement_unit, scope, restricted_metric_type), which sets expectations beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: one clear purpose sentence followed by a concise list of returned fields. There is no fluff or redundant restatement of annotations.
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 list operation with one parameter, read-only annotations, and an output schema, the description covers the essential resource and result structure. It does not discuss pagination or limits, but those are lower-risk for a read-only list tool and are partially covered by the openWorldHint.
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 0% and the description never defines property_id or its expected format. The only clue is 'configured on a GA4 property,' which weakly connects the parameter to the tool but does not compensate for the missing schema documentation.
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: 'List custom metrics configured on a GA4 property.' It clearly distinguishes from sibling tools such as ga4_list_custom_dimensions by naming the exact entity being listed.
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 use is implied by 'List custom metrics configured on a GA4 property,' but there is no explicit guidance about when to choose this over related siblings like ga4_list_custom_dimensions or ga4_get_metadata. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_data_streamsARead-only
List all data streams (web, iOS, Android) on a GA4 property.
Useful for finding the Measurement ID (web), firebase_app_id (mobile), or the hostname of a web stream. Each stream has its creation/update timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful context by scoping the list to web/iOS/Android streams and mentioning creation/update timestamps, but it does not disclose pagination, rate limits, or how many streams are returned. This matches the expected level for a read-only list with annotation coverage.
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 tight sentences: the first states the operation, the second gives practical lookup purposes, and the third adds timestamp behavior. There is no filler or redundant restating of the tool name. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only list tool with an output schema and read-only annotations, the description is largely complete. It clearly states scope, common use cases, and available metadata fields. The only notable gaps are property_id format details and explicit pagination/limit behavior, but these are minor given the low complexity and existing annotations/output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for property_id, so the description carries the burden. It does tie the parameter to 'a GA4 property,' adding minimal semantic context beyond the schema's bare 'Property Id' title. However, it does not specify the expected format (e.g., numeric property ID vs. resource path), so the parameter guidance is incomplete but adequate for a single obvious required parameter.
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 all data streams (web, iOS, Android) on a GA4 property.' It clearly distinguishes this from sibling list tools by naming the exact resource type and the platform variants. There is no ambiguity about what the tool operates on.
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 concrete use cases: finding Measurement ID, firebase_app_id, hostname, and timestamps. It implies 'use this when you need data stream identifiers or metadata,' which is clear context. It does not explicitly mention exclusions or sibling alternatives, but the sibling tools are all different GA4 resources, so the usage context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_google_ads_linksARead-only
List Google Ads links attached to a GA4 property.
Returns customer_id (the Ads account), can_manage_clients, ads_personalization_enabled, and creator_email. Useful to confirm Ads ↔ GA4 cross-reporting availability before querying Ads-related dimensions like sessionGoogleAdsCampaignId.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful scoping and return-field context, but does not disclose pagination, error behavior, or prerequisites. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler. The action is front-loaded, return fields are briefly listed, and the practical use case earns its place. Well-structured for an agent to parse quickly.
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-only list tool with an output schema, the description covers purpose, returned fields, and the key decision context. The only notable gap is the property_id format, which keeps it from being fully 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 0%, so the description bears the burden for explaining property_id. It only implies the parameter is the GA4 property via 'attached to a GA4 property'; it does not clarify the expected format (e.g., numeric ID vs. 'properties/123456789') or any constraints. This is insufficient compensation for the missing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a concrete resource ('Google Ads links attached to a GA4 property'), and names returned fields. This clearly distinguishes it from sibling list tools such as ga4_list_custom_dimensions or ga4_list_key_events even without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete use case: confirm Ads↔GA4 cross-reporting availability before querying Ads-related dimensions. It does not explicitly name alternatives or when-not-to-use conditions, but the intended context 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.
ga4_list_key_eventsARead-only
List key events (formerly conversions) on a GA4 property.
These are the events the client has marked as conversion-worthy. Query
conversion metrics via conversions dimension or direct metric names.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful semantic context about conversion-worthy events and how to query conversion metrics, but it does not disclose operational details like pagination, auth requirements, or property access restrictions.
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 short, front-loaded, and to the point. The first sentence states the operation and resource, while the additional sentences clarify the semantics and related query usage. Each sentence contributes value, though the final metric-querying hint is slightly tangential to the tool itself.
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 one-parameter list tool with readOnly and openWorld annotations plus an output schema, the description is mostly complete. It explains what the key events are and how to think about conversion metrics. The main gap is no explicit guidance on choosing this over the many sibling list 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?
The schema has 0% description coverage and the description does not explain property_id at all. However, the single parameter is self-explanatory and required, so an agent can likely invoke the tool correctly. The description adds no extra meaning beyond the schema's title/type.
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 verb 'List' and the exact resource: key events (formerly conversions) on a GA4 property. It distinguishes this tool from sibling list tools because it uniquely identifies client-marked conversion-worthy events and clarifies the legacy naming.
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: these are events the client has marked as conversion-worthy, which tells an agent when listing key events is appropriate. It does not explicitly mention alternative tools or when not to use this tool, so it falls short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_property_annotationsARead-only
List reporting annotations on a GA4 property.
Annotations are markers (user-added or Google-system) flagging important events on a timeline: product launches, outages, marketing pushes, so downstream analysis can correlate metric swings with known events.
Each annotation has: name, title, description, annotation_date, annotation_date_range, color, creator_email, system_generated.
NOTE: Uses Admin v1alpha since annotations are still alpha in April 2026.
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuine behavioral context beyond annotations: it warns that the tool uses Admin v1alpha because annotations are still alpha in April 2026, signaling an unstable API surface. It also enumerates the exact returned fields, though that partially overlaps with the existing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action is front-loaded in the first sentence, followed by three short paragraphs each adding distinct value: the conceptual explanation of annotations, the field list, and the alpha API version caveat. There is no filler, no repetition of annotation metadata, and no redundant 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 single-parameter list operation with an output schema and read-only annotations, the definition is thorough: it explains the niche resource concept, enumerates its fields, and flags the alpha API version. The only gaps are undisclosed behavioral details such as pagination behavior and possible result limits.
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 0%, so the description must compensate, but it only provides minimal context ('on a GA4 property'), leaving property_id's format and origin undocumented. The burden is softened because property_id is a single self-explanatory parameter whose name conveys its 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?
States a specific action and resource: 'List reporting annotations on a GA4 property.' The explanation of what annotations are (markers for product launches, outages, marketing pushes) gives the agent a concrete model of the resource, which distinguishes this from every sibling list_* tool (custom_metrics, key_events, audiences, etc.), none of which mention annotations.
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 when the tool is useful — 'so downstream analysis can correlate metric swings with known events' — which gives the agent situational context for selecting it. However, it never explicitly states when to use this tool versus the 16 siblings, nor names an alternative for related resources such as key events or custom metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_access_reportARead-only
Audit log of who-read-what on a GA4 property (last 12 months).
dimensions (common): userEmail, accessedPropertyName. metrics: accessCount. date_ranges: list of {start_date, end_date} (YYYY-MM-DD or relative). Defaults to last 7d.
Use cases: identify usage of GA4 data by staff, confirm SA activity, compliance audits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metrics | No | ||
| dimensions | No | ||
| date_ranges | No | ||
| property_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds meaningful behavioral context: data retention of 12 months, default date range of 7 days, and the common dimensions/metrics. This goes beyond the annotations without contradicting them.
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 summary is one clear sentence, followed by compact parameter guidance and use cases. Every line adds value, with no filler or repetition of the 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?
Moderately complex tool with an output schema present, so return-value details are not required. The description covers the key constraints, defaults, and use cases. Minor gaps like property_id and limit semantics keep it from a perfect score.
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?
With 0% schema description coverage, the description partially compensates by explaining date_ranges format/defaults and the meaningful dimensions/metrics. However, it does not explain the required property_id parameter or the limit parameter, leaving part of the parameter semantics to inference.
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: 'Audit log of who-read-what on a GA4 property'. It clearly distinguishes this access-report tool from regular reporting siblings like ga4_run_report, and reinforces the purpose with named dimensions and metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are provided: identifying staff usage, confirming service account activity, and compliance audits. It does not name alternative tools or state when not to use it, but the audit-log framing makes the intended context clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_funnel_reportARead-only
Run a GA4 funnel report. v1alpha, API surface may change.
funnel: { is_open_funnel: bool, steps: [ { name: str, is_directly_followed_by: bool, filter_expression: FunnelFilterExpression, within_duration_from_prior_step: {seconds: int}, }, ... ] } funnel_breakdown: {dimension_name, limit}, optional per-step breakdown. funnel_next_action: {dimension_name, limit}, optional "what came after".
Use for drop-off analysis across a sequence of events. Behind an alpha flag because Google can change the shape, check the Feb 2026 release notes if this fails with a validation error.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| funnel | Yes | ||
| date_ranges | No | ||
| property_id | Yes | ||
| dimension_filter | No | ||
| funnel_breakdown | No | ||
| funnel_next_action | No | ||
| return_property_quota | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the API is v1alpha, that the surface may change, and that validation errors may require checking the Feb 2026 release notes. This is useful behavioral context beyond the structured annotations; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and the funnel code block earns its place by adding structure the schema lacks. Minor redundancy exists between 'v1alpha, API surface may change' and the later alpha-flag sentence, but overall it is well organized.
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 alpha report tool with nested objects and zero schema descriptions, the description covers the central funnel structure, the intended drop-off use case, and the external reference link. It does not describe the remaining standard parameters, but the output schema exists and the reference URL fills any 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?
With 0% schema description coverage, the description compensates well for the core funnel parameter by documenting its nested structure (is_open_funnel, steps, filter_expression, within_duration_from_prior_step) and clarifying funnel_breakdown and funnel_next_action. It leaves common parameters like date_ranges, limit, and dimension_filter without explicit descriptions, but their titles and types are largely self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run a GA4 funnel report') and anchors usage with 'Use for drop-off analysis across a sequence of events.' This clearly distinguishes it from sibling reporting tools like ga4_run_report and ga4_run_pivot_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?
Explicitly says when to use it ('Use for drop-off analysis across a sequence of events'), which gives clear context against the sibling report tools. It does not explicitly name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_pivot_reportARead-only
Run a GA4 pivot report.
pivots: list of pivot specs, each with:
field_names: list of dimension names to pivot on
limit: max rows per pivot
offset: pagination offset
order_bys: list of OrderBy dicts (same shape as run_report's order_bys)
metric_aggregations: list of TOTAL|MINIMUM|MAXIMUM|COUNT
Use when you want a 2D view: e.g. rows=date, columns=device, values=sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| pivots | No | ||
| metrics | No | ||
| dimensions | No | ||
| date_ranges | No | ||
| property_id | Yes | ||
| currency_code | No | ||
| metric_filter | No | ||
| keep_empty_rows | No | ||
| dimension_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value beyond annotations by explaining the pivot spec structure (field_names, limit, offset, order_bys, metric_aggregations) and noting that order_bys shares shape with run_report, which is useful behavioral context for constructing valid calls. No contradiction with annotations exists.
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: purpose in the first sentence, a tight structured list of the pivot sub-fields, and a memorable usage example. Every sentence earns its place, and the dense bullet-style format packs meaningful detail without padding.
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 an output schema exists (so return values need no explanation) and annotations carry the safety profile, the description needn't cover much more than the pivot mechanics, which it does well. Minor gaps remain: it doesn't state constraints like maximum pivot count or how pivots interact with the top-level dimensions/metrics parameters, but these are edge details for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate, but it only explains the pivots parameter in detail. The other eight parameters (metrics, dimensions, date_ranges, filters, currency_code, keep_empty_rows) are left entirely underexplained, relying on GA4 API conventions. The pivots explanation is strong and the run_report order_bys cross-reference helps, but the compensation is partial across the full parameter set.
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 ('Run a GA4 pivot report') and immediately distinguishes it from sibling report tools by introducing the 2D pivot concept. The concrete example 'rows=date, columns=device, values=sessions' makes the tool's unique function unmistakable, separating it from ga4_run_report, ga4_run_realtime_report, and ga4_run_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 an explicit usage trigger: 'Use when you want a 2D view'. This clearly implies the standard report tools are for non-pivoted, one-dimensional tables. It doesn't explicitly name alternatives or exclusion conditions, but the 'use when' framing provides enough routing guidance for an agent to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_realtime_reportARead-only
Run a GA4 real-time report. Covers the last 30 minutes only.
IMPORTANT: realtime uses a SEPARATE, smaller dimension/metric catalog. Do NOT pass 'date', 'totalRevenue', etc: they don't exist in realtime. Common dims: 'minutesAgo', 'country', 'deviceCategory', 'unifiedScreenName', 'eventName'. Common metrics: 'activeUsers', 'screenPageViews', 'eventCount'.
minute_ranges: list of {start_minutes_ago, end_minutes_ago, name?}. Max 2 ranges. Values are 0-29 (0 = now, 29 = 30 min ago).
For historical / batch reports use ga4_run_report instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metrics | No | ||
| order_bys | No | ||
| dimensions | No | ||
| property_id | Yes | ||
| metric_filter | No | ||
| minute_ranges | No | ||
| dimension_filter | No | ||
| metric_aggregations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits beyond the annotations, including the 30-minute window, the unsupported 'date' and 'totalRevenue' fields, and the max-2 minute_ranges constraint. The readOnlyHint annotation is consistent with the described read-only report behavior, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: the main behavior, the critical realtime catalog warning, the minute_ranges detail, and the sibling alternative each have a clear purpose. No sentence is wasted, and important constraints are highlighted.
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 covers the key operational constraints, common fields, range limits, and the alternative tool, and an output schema exists so return-value documentation is not required. However, advanced parameters like filter expressions and order_bys remain underspecified for agents needing those features.
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 0%, so the description must compensate. It usefully explains minute_ranges semantics and gives common dimension/metric examples, but it leaves several parameters unguided, such as limit, order_bys, metric_aggregations, dimension_filter, and metric_filter. This is partial compensation, not complete.
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 runs a GA4 real-time report covering the last 30 minutes only. It distinguishes itself from the historical ga4_run_report sibling by explicitly saying realtime uses a separate catalog and that historical/batch reports should go elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage boundaries: realtime only, last 30 minutes, separate dimension/metric catalog, and common dimension/metric examples. It also names the alternative tool (ga4_run_report) for historical or batch reports, making the selection decision unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_reportARead-only
Run a GA4 standard report. The workhorse tool.
Args: property_id: numeric or 'properties/NNN'. dimensions: list of dimension api_names (e.g. ["country", "deviceCategory", "date"]). Custom dims require 'customEvent:' or 'customUser:' prefixes. metrics: list of metric api_names (e.g. ["activeUsers", "sessions", "totalRevenue"]). date_ranges: list of {start_date, end_date, name?}. Accepts 'YYYY-MM-DD', 'NdaysAgo', 'today', 'yesterday'. Up to 4 ranges. dimension_filter / metric_filter: filter expression dicts. Shapes: {"filter": {"field_name": "country", "string_filter": {"value": "US"}}} {"and_group": {"expressions": [...]}} {"or_group": {"expressions": [...]}} {"not_expression": {...}} order_bys: list of {metric: {metric_name}, desc} or {dimension: {...}}. metric_aggregations: list of TOTAL|MINIMUM|MAXIMUM|COUNT. limit: max rows (hard cap 250000 per response). offset: pagination offset. keep_empty_rows: include rows where all metrics are zero. currency_code: override property default for revenue metrics. cohort_spec / comparisons: advanced specs (see REST docs).
Gotchas surfaced in response.metadata:
samplingMetadatas: present if query was sampled (> 10M events scanned)
dataLossFromOtherRow: true if high-cardinality dims collapsed into "(other)"
schemaRestrictionResponse: active thresholding rules
subjectToThresholding: true if user-privacy thresholding dropped rows
propertyQuota always included so the agent can self-throttle.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| metrics | No | ||
| order_bys | No | ||
| dimensions | No | ||
| cohort_spec | No | ||
| comparisons | No | ||
| date_ranges | No | ||
| property_id | Yes | ||
| currency_code | No | ||
| metric_filter | No | ||
| keep_empty_rows | No | ||
| dimension_filter | No | ||
| metric_aggregations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint=true already signals safety, the description adds rich behavioral context: it cautions about sampling (>10M events), data loss from high-cardinality dimensions, thresholding, and schema restrictions, and notes that propertyQuota is always included for self-throttling. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but justifiably so for a 14-parameter tool with no schema descriptions. It is well-structured with clear 'Args' and 'Gotchas' sections, front-loading the core purpose. A few minor redundancies (e.g., repeating filter shapes) keep it from a 5.
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 the tool has an output schema and readOnlyHint/openWorldHint annotations, the description covers all pre-call essentials: parameter formats, constraints (hard cap, up to 4 date ranges, required property_id), pagination, and critical response metadata signals. Nothing needed for correct invocation 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 0%, so the description carries full responsibility for parameter meaning. It documents every one of the 14 parameters with concrete formats, examples, prefixes for custom dimensions, accepted date expressions, filter shape examples, default limits, and advanced spec references. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Run a GA4 standard report. The workhorse tool,' which gives a clear verb and resource. The term 'standard' implicitly distinguishes this from the many sibling run_* tools (pivot, realtime, funnel, access, batch), but it doesn't explicitly name any alternative the way a 5 would.
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?
Calling it 'the workhorse tool' implies it is the default for standard GA4 reporting, but the description gives no explicit when-to-use vs. when-not-to-use guidance and never names alternatives such as ga4_run_pivot_report or ga4_run_realtime_report. An agent must infer usage boundaries from the sibling tool names alone.
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.
17 tool updates
v1.0.0- First observed
ga4_batch_run_reports - First observed
ga4_check_compatibility - First observed
ga4_get_metadata - First observed
ga4_get_property_details - First observed
ga4_list_account_summaries - First observed
ga4_list_audiences - First observed
ga4_list_custom_dimensions - First observed
ga4_list_custom_metrics - First observed
ga4_list_data_streams - First observed
ga4_list_google_ads_links - First observed
ga4_list_key_events - First observed
ga4_list_property_annotations - First observed
ga4_run_access_report - First observed
ga4_run_funnel_report - First observed
ga4_run_pivot_report - First observed
ga4_run_realtime_report - First observed
ga4_run_report
TDQS
Scored across 17 tools
Tools are grouped into clear resource-based listings and distinct report modes (standard, batch, pivot, realtime, funnel, access). The only real overlap is that ga4_get_metadata also surfaces custom fields alongside ga4_list_custom_dimensions/metrics, but the descriptions clarify the catalog-vs-config distinction.
Every tool uses the ga4_ prefix and follows a predictable verb-first pattern: list_* for enumeration, get_* for single-item metadata, run_* for report execution, and check_* for validation. This is internally consistent and makes behavior predictable from the name alone.
17 tools is on the heavy side for an MCP server and approaches the borderline zone, especially with many list_* variants plus multiple report modes. However, each tool does map to a distinct GA4 API operation, so the count is defensible even if slightly large.
The surface covers the full read-only analytics workflow: property discovery, stream/config enumeration, field metadata, compatibility validation, and all major report types including realtime, funnel, batch, and access reporting. There are no glaring dead ends; write/admin mutations are absent but not part of this server's stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Google Ads, Meta Ads & GA4 MCP server - 250+ tools for campaigns, creatives, audiences & reports.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
- dataOAuthco.thinair
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceMCP server that provides tools to interact with Google Analytics APIs, enabling account and property retrieval, report running, and custom dimension/metrics access.Apache 2.0
- AlicenseAqualityDmaintenanceEnables LLM applications to query and analyze Google Analytics 4 data through standard MCP interfaces, supporting service account and OAuth2 authentication.524MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying Google Analytics 4 data through MCP tools for running reports, listing properties, getting real-time metrics, and exploring metadata.13MIT
- AlicenseBqualityAmaintenanceMCP server for Google Analytics 4 and Google Tag Manager with read and write access, providing 40 tools to manage GA4 reports, audiences, and GTM tags, triggers, and variables via natural language.40MIT
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/scalably-io/ga4-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server