Skip to main content
Glama

MisarSEO MCP Server

get_keyword_gap

Idempotent

Compares the project's own domain against up to 3 competitor domains and classifies every keyword a competitor ranks for as missing / behind / tied / ahead / unknown. The inverse of find_serp_competitors, which asks who competes for a keyword set. CHARGES CREDITS: one ranked-keywords lookup per domain, so one call costs up to 4 upstream requests (our domain plus the competitors). Each lookup is cached 12h per domain, so re-running the same comparison with a different sort or classification filter is free — do that rather than issuing a new comparison. Compares the top 1000 keywords per domain by search volume, so a large domain is compared on a slice; per-domain coverage reports keywordsFetched, keywordsTotal, truncated and volumeFloor. missing and unknown are NOT interchangeable: missing means a competitor ranks and we provably do not; unknown means our own slice ran out above that keyword's volume, so nothing was measured about whether we rank. Never present unknown as a gap. The project's own domain is read from the project record and cannot be passed in — if the project has no domain the call fails with a validation error telling the user to set one. When unavailable is true, no configured data provider has a ranked-keyword source and no comparison happened; the empty rows in that case does NOT mean the competitors rank for nothing. At most 200 rows are returned; totalRows is the real match count.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectIdYesRequired. The MisarSEO project ID to scope this call to. Get one from list_projects.
sortFieldNoSort column: 'volume' (default), 'theirPosition' or 'ourPosition'. All three are measured values — there is deliberately no composite opportunity score. Nulls sort last in both directions.
sortOrderNoSort direction. Defaults to 'desc'.
languageCodeNoLanguage code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'.
locationCodeNoDataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable.
classificationsNoRestrict rows to these classifications. Omit for all five — omitting never hides `unknown`. The filter is applied before the row cap, and `totalRows` reports the pre-cap match count.
competitorDomainsYes1–3 competitor domains (bare domain or full URL). Each one is a separate billable ranked-keywords lookup, so pick the rivals actually being chased. The project's own domain is added automatically and is ignored if it appears here.
includeSubdomainsNoCount subdomains as part of a domain. Defaults to true, and applies to every compared domain including ours.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Far exceeds the annotations: discloses credit cost (one ranked-keywords lookup per domain, up to 4 upstream requests), 12h per-domain caching, the top-1000-keywords slice with per-domain coverage fields, and the critical missing-vs-unknown semantics plus the truncated-slice caveat. It also explains the unavailable flag and why empty rows then does not mean no rankings. The readOnlyHint=false is consistent with the credit-charging behavior, so no contradiction.

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?

Purpose is front-loaded and the dense informational sentences each carry distinct value (cost, caching, slice/coverage, missing vs unknown, unavailable, row cap). It is long, but nearly every clause earns its place; the length is driven by necessary semantics rather than padding.

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, the description carries the full return-value burden and does so: it names coverage sub-fields, the 200-row cap vs totalRows, and the unavailable/empty-rows case. Nothing an agent needs to call it or read its result correctly 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 adds genuine interpretation beyond the schema: the missing/unknown distinction ('never present unknown as a gap'), the fact that omitting classifications never hides unknown, and that competitorDomains billing is per-domain. These add semantic meaning the enum list alone does not convey.

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 and resource ('compares the project's own domain against up to 3 competitor domains') and a precise output classification set (missing/behind/tied/ahead/unknown). It further distinguishes itself from the sibling by describing itself as 'the inverse of find_serp_competitors, which asks who competes for a keyword set,' so an agent can disambiguate without opening either schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative (find_serp_competitors) and the condition that selects this tool over it. It also gives a concrete reuse rule — re-run with a different sort or classification filter rather than issuing a new comparison, because lookups are cached 12h — and states the failure precondition (no project domain → validation error).

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.