Skip to main content
Glama

List keywords

list_keywords
Read-onlyIdempotent

Every search term tracked for one extension, one row per term per store.

status is "pending" until a fetch has landed since the term was tracked, and "scanned" once one has. A "scanned" row with a null position means we searched depth_scanned results and this extension was not among them — that is a real observation, not missing data.

A "pending" row can still carry a position. Removing a keyword stops the tracking but keeps the history, so a term tracked before and added again arrives with its previous result already in place; captured_on says how old that is. Poll until the status reads "scanned" to know the number answers the current tracking.

locale is the store language the term was searched in. The same term ranks differently under hl=de than under hl=en, so two rows sharing a term and a store are two different results.

locales lists every store language this extension tracks, with a keyword count each — start there to work a language at a time. It always reports every language, including when the locale argument narrows the rows to one.

search_volume is Google Ads' average monthly searches for the term in the row's store language: for English, in the United States or worldwide as the account's profile setting says (United States unless changed), and in one country for the others (Germany for de, Spain for es, Brazil for pt-BR, and so on). It is web search demand, not searches inside the store, and is the same for both stores. null means not fetched yet, Google has no data, or the term can't be looked up (symbols such as + or %, over 80 characters or 10 words, or a store language Google Ads has no country for, such as ru); search_volume_fetched_at says which.

Needs an ExtensionDash account: sign in from your app, e.g. claude mcp login extensions-dashboard or codex mcp login extensions-dashboard.

Input Schema

NameRequiredDescriptionDefault
localeNoStore language, e.g. "de". Omit for every language. Canonicalised before use, so "DE" and "de" are one keyword and "pt-br" comes back as "pt-BR".
extension_idYesFrom list_extensions.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavior the annotations cannot convey: the pending/scanned lifecycle, why a scanned row may carry a null position, that a pending row can still carry a stale position from a prior tracking, that removal keeps history, and the three distinct causes of a null search_volume. It also states the authentication requirement and even the login command.

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

Conciseness4/5

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

The core statement is front-loaded and each paragraph covers a distinct concern (status, locale, locales, search_volume). It is long and dense, but with no output schema the return-value semantics have to live somewhere, so most sentences earn their place; only the Google Ads country enumeration feels padded.

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?

With no output schema and only two parameters, the description carries the full burden of explaining the returned fields — status, position, captured_on, locale, locales, search_volume and its null cases — and it does so thoroughly, plus the auth prerequisite. Nothing an agent needs to interpret the response is missing.

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, but the description meaningfully enriches the locale argument: the same term ranks differently under different store languages, and the output's locales field always reports every language even when the locale argument narrows the rows. That adds interpretive value beyond the schema's canonicalisation note.

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

Purpose4/5

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

The opening sentence gives a precise verb, resource and scope: 'Every search term tracked for one extension, one row per term per store.' An agent immediately knows this is a per-extension, per-store keyword listing. It does not explicitly contrast itself with lookalike siblings such as get_keyword_ranks or get_keyword_serp, so it stops short of a 5.

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

Usage Guidelines4/5

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

It gives actionable operating context: 'Poll until the status reads "scanned" to know the number answers the current tracking' and 'start there to work a language at a time' for the locales field. That is clear guidance on how and in what order to use the tool, though it never names an alternative sibling or states when not to use it.

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