Skip to main content
Glama
CFP-102

cfp-seo-agent

keyword_gap

Idempotent

Find Google keywords a competitor ranks for but your domain does not, ordered by search volume, with the competitor's ranking page for each gap.

Instructions

Keywords a competitor ranks for in Google but your domain does not: up to 25, highest search volume first, with the competitor's ranking page (DataForSEO Labs Domain Intersection). Returns: JSON with domain, competitor, total_available, keywords. SANDBOX (development): returns dummy data, no payment.

Input Schema

NameRequiredDescriptionDefault
domainYesYour domain, e.g. example.com: keywords it already ranks for are excluded.
competitorYesThe competitor's domain, e.g. competitor.com: the keywords it ranks for are returned.
language_codeNoLanguage code such as en or de. Default: English if available for the country, else its first language. Unsupported country/language pairs are refused before payment.
location_codeNoDataForSEO location code. Country level: 2840 = United States (default), 2276 = Germany, 2040 = Austria, 2756 = Switzerland. Google SERP, Maps, News, Images and Local Market Check also accept city/region codes in Germany, Austria and Switzerland (free lookup: GET /api/v1/locations?q=...).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.1.2
    • changedInput schema / properties / competitor / description
      Previous value: -"Domain to analyze, e.g. example.com. A pasted URL is reduced to its domain; IP addresses and ports are rejected."New value: +"The competitor's domain, e.g. competitor.com: the keywords it ranks for are returned."
    • changedInput schema / properties / domain / description
      Previous value: -"Domain to analyze, e.g. example.com. A pasted URL is reduced to its domain; IP addresses and ports are rejected."New value: +"Your domain, e.g. example.com: keywords it already ranks for are excluded."
  2. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

Adds real context beyond the annotations: only the top 25 by search volume are returned while total_available signals truncation, and the SANDBOX notice makes clear the data is dummy and no payment is taken. That last point matters because readOnlyHint=false hints at a billed call. It stops short of stating actual cost or quota behavior.

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?

Three compact clauses: purpose and ordering first, then the return shape, then the sandbox caveat. No filler, and the most decision-relevant information is front-loaded.

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 no output schema, the description usefully enumerates the return keys (domain, competitor, total_available, keywords), and the sandbox warning covers the payment question. Minor gap: it advertises the competitor's ranking page as part of the result, but that field does not appear in the listed return keys.

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

Parameters3/5

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

Schema description coverage is 100%, so domain, competitor, language_code, and location_code are all already documented with examples and defaults; the description adds nothing further about them. Baseline 3 is appropriate where the schema carries the full parameter burden.

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 precise verb+resource+scope: keywords a competitor ranks for in Google that your domain does not. The gap condition itself distinguishes it from siblings like ranked_keywords or keywords_for_site without needing to name them. The upstream source (DataForSEO Labs Domain Intersection) is named as well.

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?

The gap-analysis use case is implied by the definition, and the 25-keyword cap plus volume ordering signal it is a sampling/preview call rather than an exhaustive export. However, it never explicitly says when to pick this over siblings such as competitors, ranked_keywords, or keywords_for_site, nor 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.