Skip to main content
Glama
A1-x-Tech

Google Search Console MCP

Search Analytics (performance) query

search_analytics
Read-onlyIdempotent

Get Google Search clicks, impressions, CTR, and average position for your property, grouped by query, page, device, or date. Analyze performance to find optimization opportunities.

Instructions

Runs a Search Analytics (performance) query for a property: clicks, impressions, CTR and average position from Google Search, grouped by the requested dimensions. Each returned row has keys[] (one value per requested dimension, in the same order) plus clicks, impressions, ctr (a FRACTION 0..1, not a percent) and position; rows are sorted by clicks descending. With no dimensions you get one totals row for the range. Dates are calendar dates in Pacific Time and end_date is INCLUSIVE; final data lags ~2-3 days behind (use data_state "all" for fresh, still-changing rows). Pagination: there is no page token — repeat with start_row increased by row_limit until a response comes back with no rows. When grouping by query/page some anonymized long-tail data is never returned, so summed rows will not match a dimensionless totals query. Quota: 1,200 queries/minute per site and per user.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filtersNoRow filters, ALL combined with AND — the API has no OR across filters (run separate queries instead).
end_dateYesLast date of the range, YYYY-MM-DD, Pacific Time, inclusive.
site_urlYesThe property EXACTLY as registered in Search Console. Two formats: URL-prefix — a full URL with scheme and trailing slash, e.g. "https://example.com/" (http/https and www/non-www are different properties), or domain property — "sc-domain:example.com" (no scheme, no slash). A mismatched value returns 403/404; list_sites shows the exact registered values.
row_limitNoMax rows to return (1..25000; API default 1000).
start_rowNo0-based row offset for pagination (default 0). A response with no rows means the end.
data_stateNo"final" (default) — only finalized data; "all" — include fresh data still subject to change; "hourly_all" — required when grouping by hour (recent data only).
dimensionsNoHow to group rows; keys[] in each row follows this order. "country" values are ISO 3166-1 alpha-3 codes, "device" is DESKTOP/MOBILE/TABLET, "hour" requires data_state "hourly_all". Omit for one totals row.
start_dateYesFirst date of the range, YYYY-MM-DD, Pacific Time.
search_typeNoWhich search surface to report: "web" (default), "image", "video", "news" (News tab of search), "discover" (Discover feed), "googleNews" (news.google.com and the app). discover/googleNews support a reduced dimension set — an unsupported combination returns the API's 400 verbatim.
aggregation_typeNoHow metrics are aggregated: "auto" (default) lets the API decide, "byPage"/"byProperty" force it, "byNewsShowcasePanel" is for News Showcase. Affects how clicks/impressions are counted, not which rows exist.
Behavior5/5

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

Annotations already indicate read-only, idempotent, and open-world behavior. The description adds valuable behavioral context beyond annotations: 2-3 day data lag, inclusive Pacific Time dates, pagination behavior (no page token, loop until empty), long-tail data anonymization, and the 1,200 qpm quota. 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.

Conciseness5/5

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

The description is dense but every sentence carries useful information. It opens with the core purpose, then progressively details output, date semantics, pagination, data caveats, and quota. No filler or repetition; the structure front-loads the most important information and then covers edge cases.

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?

This is a 10-parameter tool with no output schema, so the description must explain both request nuances and return shape. It covers row structure, sorting, pagination, dimension effects, data lag, and quota. Combined with the 100% schema coverage, the agent has everything needed to invoke and interpret results correctly.

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

Parameters5/5

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

Even though schema descriptions cover 100% of parameters, the description adds semantic depth: explains keys[] ordering, ctr fraction, inclusive end_date, pagination with start_row/row_limit, why data_state 'all' matters, and the grouping caveat that summed rows won't match totals. These clarifications go well beyond schema property descriptions.

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?

The description clearly states the tool's function: 'Runs a Search Analytics (performance) query for a property' with specific metrics (clicks, impressions, CTR, position) and grouping by dimensions. It distinguishes itself from siblings like list_sites or get_top_queries by focusing on the full analytics query capability, and even explains output row structure.

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 description provides rich usage context: how to get a totals row (no dimensions), pagination via start_row/row_limit, data_state selection for fresh data, and the caveat about anonymized data when grouping by query/page. However, it does not explicitly mention when to choose this tool over alternatives like get_top_queries, so it stops short of full 'when-not' guidance.

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

Install Server

Other Tools

Latest Blog Posts

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/A1-x-Tech/mcp-google-search-console'

If you have feedback or need assistance with the MCP directory API, please join our Discord server