Skip to main content
Glama

get_keyword_research

Read-only

One stored keyword lookup (key) or saved list (listId) with this client's joins, filtered, sorted and paged like the app's table: per keyword the monthly searches (a Google Ads-based model, with its band and date), 12-month trend, difficulty and its step, intent, CPC and bids, SERP features of the dated sample, the AI Overview by its best evidence (the Rank Tracker's newer check where tracked, else DataForSEO's dated sample; source, date, age, stale after 90 days, client cited), how often AI engines ran the search for the client's prompts (runs of n answers, window), and the client's Search Console position. Also the summary of the matching rows (median difficulty with n, AI Overview k of n) and how many rows each view holds (aio_gap, striking, ai_searched). Reads only; nothing is sent to DataForSEO.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "clientId": "<clientId>"
    },
    "name": "get_keyword_research"
  }
}

Input Schema

NameRequiredDescriptionDefault
keyNoA stored lookup's key (from list_keyword_research or research_keywords).
sortNoDefault volume.
viewNoaio_gap = an AI Overview that does not cite the client; striking = Search Console average position 4–20; ai_searched = an AI engine ran this search for the client's prompts.
limitNoRows per call (default 50).
wordsNoWords in the keyword from–to.
cpcUsdNoCost per click in USD from–to.
intentNo
listIdNoA saved list's id (from list_keyword_research).
offsetNo
volumeNoMonthly searches from–to. A keyword without a figure is outside any range set.
sortDirNo
clientIdYesClient id (from list_clients); its joins are read.
containsNoWords the keyword contains (all of them).
excludesNoWords that leave a keyword out.
aiOverviewNoBy the best evidence: the Rank Tracker's newer check where tracked, else DataForSEO's dated sample.
difficultyNoKeyword difficulty 0–100 from–to.
serpFeatureNoOnly keywords whose results-page sample has this feature.
questionsOnlyNoOnly questions (the language's question openers).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description reinforces this with 'Reads only; nothing is sent to DataForSEO.' It goes well beyond annotations by enumerating what is returned per keyword (volume band and date, 12-month trend, difficulty and step, intent, CPC/bids, SERP features, AI Overview provenance with 90-day staleness rule, AI run counts, GSC position) plus aggregate summaries and per-view row counts.

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

Conciseness3/5

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

Everything is loaded into one enormous run-on sentence with nested parentheticals, which makes it hard to scan even though the retrieval scope is front-loaded and little is outright redundant. It would be materially clearer split into purpose, filters, and return-value sentences.

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

Completeness3/5

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

With 18 parameters and no output schema, the description correctly takes on the burden of describing returned fields, aggregates, and per-view counts. However, it omits practical invocation details such as pagination limits (200 max, offset behavior) and the cost/latency of the DataForSEO-backed evidence, which matter for a tool this wide.

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 83%, so the schema already carries most parameter meaning and the baseline would be 3. The description adds real value on top: it clarifies that key and listId are alternative single-target selectors, and that the view counts it returns correspond to the aio_gap/striking/ai_searched filters, linking parameters to output.

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 states a specific verb and resource: retrieve one stored keyword lookup (key) or a saved list (listId), with the client's joins, filtered/sorted/paged. It is clearly a single-record-with-rows read, distinct from list_keyword_research or research_keywords, though it never names those siblings to make the contrast explicit.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the key comes from list_keyword_research or research_keywords (per the schema) and listId from a saved list, so the agent can infer the call follows lookup creation. There is no explicit when-to-use, when-not-to-use, or alternative-naming guidance, so it lands at implied-only.

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