Mcp

Content Intelligence

Tools for keyword research and competitive analysis. All tools require a Pro API key and use DataForSEO under the hood.

research_keywords

Find long-tail keywords with search volume, difficulty, and CPC. Uses relaxed filters by default to return more results.

Works best with consumer-facing search terms. Very technical or niche developer topics (e.g., "nuxt sitemap configuration") may return limited data. For those, use analyze_serp to see what content actually ranks.
ParameterTypeDefaultDescription
topicstringrequiredSeed topic or keyword
minVolumenumber10Minimum monthly search volume
maxVolumenumber10000Maximum monthly search volume
maxDifficultynumber60Maximum keyword difficulty (0-100)
limitnumber20Max keywords to return (1-50)
includeRelatedbooleantrueInclude "searches related to" keywords
research_keywords({
  topic: 'nuxt meta tags',
  maxDifficulty: 30,
  limit: 10
})

Returns:

{
  "topic": "nuxt meta tags",
  "keywords": [
    {
      "keyword": "nuxt 4 meta tags",
      "volume": 320,
      "difficulty": 24,
      "intent": "informational",
      "cpc": 0.45
    },
    {
      "keyword": "useseoMeta nuxt",
      "volume": 210,
      "difficulty": 18,
      "intent": "informational",
      "cpc": 0.32
    }
  ],
  "totalFound": 156,
  "filters": {
    "minVolume": 10,
    "maxVolume": 10000,
    "maxDifficulty": 30
  }
}

Keyword Difficulty Scale

DifficultyMeaningStrategy
0-20EasyNew sites can rank with quality content
21-40MediumNeeds solid content + some authority
41-60HardRequires established domain + links
61-100Very hardOnly high-authority sites compete

analyze_serp

Analyze SERP competition for a keyword. Returns top results with domain rank and SERP features present.

ParameterTypeDefaultDescription
keywordstringrequiredKeyword to analyze
depthnumber10Number of results (1-20)
analyze_serp({
  keyword: 'nuxt schema.org',
  depth: 10
})

Returns:

{
  "keyword": "nuxt schema.org",
  "results": [
    {
      "position": 1,
      "url": "https://nuxtseo.com/docs/schema-org/getting-started",
      "title": "Getting Started - Schema.org",
      "domain": "nuxtseo.com",
      "domainRank": 45
    },
    {
      "position": 2,
      "url": "https://nuxt.com/modules/schema-org",
      "title": "Schema.org Module",
      "domain": "nuxt.com",
      "domainRank": 78
    }
  ],
  "serpFeatures": ["featured_snippet", "people_also_ask"],
  "hasAiOverview": false,
  "hasFeaturedSnippet": true,
  "hasLocalPack": false,
  "hasPeopleAlsoAsk": true
}
domainRank may be null for newer or smaller domains that lack authority data in DataForSEO's database.

SERP Feature Types

FeatureWhat It Means
ai_overviewGoogle AI Overview appears—harder to get clicks
featured_snippetSnippet opportunity—structure content for it
people_also_askFAQ opportunity—answer related questions
local_packLocal results—need LocalBusiness schema
videoVideo results—consider video content
imagesImage pack—optimize image SEO

check_rankings

Check what keywords a domain ranks for. Useful for competitor analysis and finding content gaps.

ParameterTypeDefaultDescription
domainstringrequiredDomain to check (without https://)
limitnumber50Max keywords to return (1-100)
minPositionnumber1Minimum ranking position
maxPositionnumber20Maximum ranking position
check_rankings({
  domain: 'competitor.com',
  maxPosition: 10,
  limit: 30
})

Returns:

{
  "domain": "competitor.com",
  "keywords": [
    {
      "keyword": "vue seo guide",
      "position": 3,
      "volume": 480,
      "traffic": 156,
      "url": "https://competitor.com/blog/vue-seo"
    },
    {
      "keyword": "nuxt meta description",
      "position": 7,
      "volume": 320,
      "traffic": 42,
      "url": "https://competitor.com/blog/nuxt-meta"
    }
  ],
  "positionRange": { "min": 1, "max": 10 }
}

Content Gap Analysis

Compare your rankings to competitors:

  1. Run check_rankings on your domain
  2. Run check_rankings on 2-3 competitors
  3. Find keywords they rank for that you don't
  4. Create content targeting those gaps

get_sitemap_urls

Get URLs from a verified site's sitemap. Useful for content audits and analysis.

ParameterTypeDefaultDescription
siteUrlstringrequiredSite URL (must be verified in your Pro account)
limitnumber15Max URLs to return (1-50)
get_sitemap_urls({
  siteUrl: 'https://mysite.com',
  limit: 10
})

Returns:

{
  "siteId": "site_abc123",
  "siteName": "My Site",
  "urls": [
    "https://mysite.com/blog/detailed-guide",
    "https://mysite.com/blog/another-post",
    "https://mysite.com/docs/getting-started"
  ],
  "total": 156
}

URLs are sorted by path depth (deeper = more likely to be content pages). Skips sitemap indexes, API routes, and internal routes.

Site Verification

The site must be verified in your Pro account. Add sites in the Pro dashboard before using this tool.

Data Freshness

ToolCache DurationData Source
research_keywords24 hoursDataForSEO keyword database
analyze_serp12 hoursLive SERP results
check_rankings24 hoursDataForSEO ranking database
get_sitemap_urls1 hourLive sitemap fetch

Results are cached to reduce API costs and improve response time.

Troubleshooting

Empty keyword results

If research_keywords returns no keywords:

  1. Topic too niche - Developer-focused terms like "nuxt sitemap configuration" have limited keyword data. Try broader terms like "sitemap generator" or "xml sitemap"
  2. Try analyze_serp instead - See what content actually ranks for your term, even without keyword volume data
  3. Use shorter phrases - 2-3 word queries work better than long-tail phrases

Missing metrics (CPC, difficulty)

Some keywords may have null values for CPC or difficulty:

  • CPC - Only populated for keywords with active ad bidding
  • Difficulty - Requires sufficient ranking data; new/niche terms may lack scores

This is a DataForSEO data limitation, not a tool issue.

domainRank missing in SERP results

The domainRank field in analyze_serp results depends on DataForSEO having authority data for that domain. Newer or smaller sites may not have scores.

Did this page help you?