Skip to main content
Glama

Find search opportunities

find_opportunities
Read-onlyIdempotent

Turn Search Console, GA4 or Ahrefs rows (also rows the user pastes) into the fastest wins, instead of judging them by hand; content_decay and traffic_drop take search_type for Discover, News, Image or Video rows. Pick with mode: ctr_gaps = Page 1 results with a click-through rate far below normal. Needs rows[{position, page, query, clicks, impressions, ctr}]. striking_distance = Queries at positions 8 to 20 worth a push. Needs rows[{position, page, query, clicks, impressions, ctr}]. content_decay = Pages slowly losing clicks over months: a refresh queue. Needs rows[{url, month, clicks}]. traffic_drop = Explain a drop page by page, by device and country. Needs rows[{url, before, after, query, device, country}]. prune = Keep, refresh, merge (301), noindex or remove (410) per page. Needs rows[{url, clicks, impressions, conversions, referring_domains, inlinks}]. discover = Readiness for Google Discover and News, with Discover or News rows. paid_organic = Google Ads terms against Search Console: ad spend you can test cutting, content to write. Needs ads[{term, cost, clicks, conversions}], gsc[{query, position, clicks, page}]. anomalies = Spike and drop days in daily rows, with Google updates near them. Needs rows[{date, clicks, impressions, page}]. ai_queries = Question and prompt-style queries per page, for AI answers. Needs rows[{query, page, clicks, impressions, position}].

Input Schema

NameRequiredDescriptionDefault
adsNoGoogle Ads search terms.
gscNoSearch Console queries.
modeNoDefault ctr_gaps.
rowsNoSearch Console rows for one period (28 days works well).
urlsNoArticle pages to check.
detailNobrief = short summary.
drop_dateNoOptional first day of the drop, YYYY-MM-DD, to check Google updates around it.
fix_log_idNoOptional fix log from log_fix, to spot undone fixes on losing pages.
memory_keyNosite_memory key, records this call.
brand_termsNoOptional brand names, handled apart.
search_typeNoSearch Console search type of the rows, default web.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • removedOutput schema / description
      Removed value: -"The result as structured data; fields depend on mode."
  2. Changed4 schema fields changed
    • changedInput schema / properties / detail / description
      Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
    • addedInput schema / properties / drop_date
      Added value: +{
      +  "description": "Optional first day of the drop, YYYY-MM-DD, to check Google updates around it.",
      +  "maxLength": 10,
      +  "type": "string"
      +}
    • changedInput schema / properties / memory_key / description
      Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "ctr_gaps",
      -  "striking_distance",
      -  "content_decay",
      -  "traffic_drop",
      -  "prune",
      -  "discover",
      -  "paid_organic"
      -]New value: +[
      +  "ctr_gaps",
      +  "striking_distance",
      +  "content_decay",
      +  "traffic_drop",
      +  "prune",
      +  "discover",
      +  "paid_organic",
      +  "anomalies",
      +  "ai_queries"
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "brief returns a short summary, default full.",
      +  "enum": [
      +    "full",
      +    "brief"
      +  ],
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / memory_key
      Added value: +{
      +  "description": "Optional site_memory key, to record this call in the site memory.",
      +  "maxLength": 80,
      +  "type": "string"
      +}
  5. Changed4 schema fields changed
    • addedInput schema / properties / ads
      Added value: +{
      +  "description": "Google Ads search terms.",
      +  "items": {
      +    "properties": {
      +      "clicks": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "conversions": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "cost": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "term": {
      +        "maxLength": 2000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "term",
      +      "cost"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 10000,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / brand_terms
      Added value: +{
      +  "description": "Optional brand names, handled apart.",
      +  "items": {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedInput schema / properties / gsc
      Added value: +{
      +  "description": "Search Console queries.",
      +  "items": {
      +    "properties": {
      +      "clicks": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "page": {
      +        "maxLength": 2048,
      +        "type": "string"
      +      },
      +      "position": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "query": {
      +        "maxLength": 2000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "query",
      +      "position"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 10000,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "ctr_gaps",
      -  "striking_distance",
      -  "content_decay",
      -  "traffic_drop",
      -  "prune",
      -  "discover"
      -]New value: +[
      +  "ctr_gaps",
      +  "striking_distance",
      +  "content_decay",
      +  "traffic_drop",
      +  "prune",
      +  "discover",
      +  "paid_organic"
      +]
  6. Changed3 schema fields changed
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "ctr_gaps",
      -  "striking_distance",
      -  "content_decay",
      -  "traffic_drop"
      -]New value: +[
      +  "ctr_gaps",
      +  "striking_distance",
      +  "content_decay",
      +  "traffic_drop",
      +  "prune",
      +  "discover"
      +]
    • addedInput schema / properties / search_type
      Added value: +{
      +  "description": "Search Console search type of the rows, default web.",
      +  "enum": [
      +    "web",
      +    "discover",
      +    "news",
      +    "image",
      +    "video"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / urls
      Added value: +{
      +  "description": "Article pages to check.",
      +  "items": {
      +    "maxLength": 2048,
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "type": "array"
      +}
  7. Added

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds mode-specific output goals ('a refresh queue', 'Explain a drop page by page') and input constraints, but no extra behavioral context such as auth requirements or return format beyond what the schema and output schema provide.

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 description is long but front-loads the core purpose and then devotes each sentence to a mode, so little is wasted. It would be more scannable as a bulleted list rather than a single dense paragraph, but the information density is appropriate for nine modes.

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

Completeness4/5

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

With an output schema present and all parameters documented, the description is nearly complete for mode selection and required row fields. It does not explain how auxiliary parameters (urls, drop_date, fix_log_id, etc.) pair with specific modes, leaving some integration detail to inference.

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 parameters like ads, gsc, mode, and others are already documented. However, the description adds crucial meaning by mapping each mode to the exact fields required inside the generic rows array (e.g., ctr_gaps needs position, page, query, clicks, impressions, ctr), which the schema alone does not specify.

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

Purpose5/5

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

States a specific verb ('turn rows into fastest wins') and resource (Search Console/GA4/Ahrefs rows), and enumerates nine distinct modes with their distinct outputs. An agent can distinguish this from siblings like prioritize_fixes or check_keyword without opening other tools.

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 gives explicit mode-selection criteria ('ctr_gaps = Page 1 results with a click-through rate far below normal', etc.) and states the required row shape for each mode. It lacks any when-not-to-use guidance or naming of external sibling alternatives, but the internal routing is very clear.

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.