Skip to main content
Glama
iflow-mcp

SEO Research MCP

by iflow-mcp

SEO Research MCP

Free SEO research tools for AI-powered IDEs

Python 3.10+ License: MIT MCP

FeaturesInstallationIDE SetupAPI ReferenceContributingCredits


CAUTION

⚠️ Educational Use Only

This project is for educational and research purposes only.

  • This tool interfaces with third-party services (Ahrefs, CapSolver)

  • Users must comply with all applicable terms of service

  • The authors do not endorse any use that violates third-party ToS

  • Use responsibly and at your own risk

By using this software, you acknowledge that you understand and accept these terms.


Related MCP server: SEO Research MCP

🎯 What is this?

SEO Research MCP brings powerful SEO research capabilities directly into your AI coding assistant. Using the Model Context Protocol (MCP), it connects your IDE to Ahrefs' SEO data, allowing you to:

  • Research competitor backlinks while coding

  • Generate keyword ideas without leaving your editor

  • Analyze traffic patterns for any website

  • Check keyword difficulty before creating content


✨ Features

Feature

Description

Example Use

🔗 Backlink Analysis

Domain rating, anchor text, edu/gov links

"Show me backlinks for competitor.com"

🔑 Keyword Research

Generate ideas from seed keywords

"Find keywords related to 'python tutorial'"

📊 Traffic Analysis

Monthly traffic, top pages, countries

"What's the traffic for example.com?"

📈 Keyword Difficulty

KD score with full SERP breakdown

"How hard is 'best laptop 2025' to rank for?"


📋 Prerequisites

Before you start, you'll need:

  1. Python 3.10 or higher

    python --version  # Should be 3.10+
  2. CapSolver API Key (for CAPTCHA solving)

    👉 Get your API key here


📦 Installation

pip install seo-mcp

Or using uv:

uv pip install seo-mcp

Option 2: From Source

git clone https://github.com/egebese/seo-research-mcp.git
cd seo-research-mcp
pip install -e .

🛠️ IDE Setup Guides

Choose your IDE and follow the setup instructions:

Step 1: Open Config File

  1. Open Claude Desktop

  2. Go to SettingsDeveloperEdit Config

Step 2: Add Configuration

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "seo-research": {
      "command": "uvx",
      "args": ["--python", "3.10", "seo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Step 3: Restart & Verify

  1. Restart Claude Desktop

  2. Look for the hammer/tools icon in the bottom-right corner

📁 Config file locations:

OS

Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Option A: Quick Setup (CLI)

# Add the MCP server
claude mcp add seo-research --scope user -- uvx --python 3.10 seo-mcp

# Set your API key
export CAPSOLVER_API_KEY="YOUR_API_KEY_HERE"

Option B: Config File

Add to ~/.claude.json:

{
  "mcpServers": {
    "seo-research": {
      "command": "uvx",
      "args": ["--python", "3.10", "seo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Verify Installation

claude mcp list

Global Setup (All Projects)

Create ~/.cursor/mcp.json:

{
  "mcpServers": {
    "seo-research": {
      "command": "uvx",
      "args": ["--python", "3.10", "seo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Project Setup (Single Project)

Create .cursor/mcp.json in your project root with the same content.

Verify Installation

  1. Go to FilePreferencesCursor Settings

  2. Select MCP in the sidebar

  3. Check that seo-research appears under Available Tools

Step 1: Open Settings

  • Mac: Cmd + Shift + P → "Open Windsurf Settings"

  • Windows/Linux: Ctrl + Shift + P → "Open Windsurf Settings"

Step 2: Add Configuration

Navigate to CascadeMCP ServersEdit raw mcp_config.json:

{
  "mcpServers": {
    "seo-research": {
      "command": "uvx",
      "args": ["--python", "3.10", "seo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

📁 Config location: ~/.codeium/windsurf/mcp_config.json

⚠️ Requires VS Code 1.102+ with GitHub Copilot

Setup

Create .vscode/mcp.json in your workspace:

{
  "servers": {
    "seo-research": {
      "command": "uvx",
      "args": ["--python", "3.10", "seo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Activate

  1. Open the .vscode/mcp.json file

  2. Click the Start button that appears

  3. In Chat view, click Tools to toggle MCP tools

  4. Use #tool_name in prompts to invoke tools

Setup

Add to your Zed settings.json:

{
  "context_servers": {
    "seo-research": {
      "command": {
        "path": "uvx",
        "args": ["--python", "3.10", "seo-mcp"],
        "env": {
          "CAPSOLVER_API_KEY": "YOUR_API_KEY_HERE"
        }
      }
    }
  }
}

Verify

  1. Open Agent Panel settings

  2. Check the indicator dot next to seo-research

  3. Green dot = Server is active


📖 API Reference

Get backlink data for any domain.

# Input
domain: str  # e.g., "example.com"

# Output
{
  "overview": {
    "domainRating": 76,
    "backlinks": 1500,
    "refDomains": 300
  },
  "backlinks": [
    {
      "anchor": "Example link",
      "domainRating": 76,
      "title": "Page title",
      "urlFrom": "https://source.com/page",
      "urlTo": "https://example.com/page",
      "edu": false,
      "gov": false
    }
  ]
}

keyword_generator(keyword, country?, search_engine?)

Generate keyword ideas from a seed keyword.

# Input
keyword: str        # Seed keyword
country: str        # Default: "us"
search_engine: str  # Default: "Google"

# Output
[
  {
    "keyword": "example keyword",
    "volume": 1000,
    "difficulty": 45
  }
]

get_traffic(domain_or_url, country?, mode?)

Estimate search traffic for a website.

# Input
domain_or_url: str  # Domain or full URL
country: str        # Default: "None" (all countries)
mode: str           # "subdomains" | "exact"

# Output
{
  "traffic": {
    "trafficMonthlyAvg": 50000,
    "costMontlyAvg": 25000
  },
  "top_pages": [...],
  "top_countries": [...],
  "top_keywords": [...]
}

keyword_difficulty(keyword, country?)

Get keyword difficulty score with SERP analysis.

# Input
keyword: str   # Keyword to analyze
country: str   # Default: "us"

# Output
{
  "difficulty": 45,
  "serp": [...]
}

⚙️ How It Works

┌──────────────┐     ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│     Your     │     │   CapSolver  │     │    Ahrefs    │     │   Formatted  │
│    AI IDE    │────▶│   (CAPTCHA)  │────▶│     API      │────▶│    Results   │
└──────────────┘     └──────────────┘     └──────────────┘     └──────────────┘
  1. Request → Your AI assistant calls an MCP tool

  2. CAPTCHA → CapSolver handles Cloudflare verification

  3. Data → Ahrefs API returns SEO data

  4. Response → Formatted results appear in your IDE


🐛 Troubleshooting

Problem

Solution

"CapSolver API key error"

Check CAPSOLVER_API_KEY is set correctly

Rate limiting

Wait a few minutes, reduce request frequency

No results

Domain may not be indexed by Ahrefs

Server not appearing

Restart your IDE after config changes

Connection timeout

Check your internet connection


🤝 Contributing

Contributions are welcome! Here's how you can help:

Ways to Contribute

  • 🐛 Report Bugs - Found an issue? Open a bug report

  • 💡 Suggest Features - Have an idea? Request a feature

  • 📝 Improve Docs - Fix typos, clarify instructions, add examples

  • 🔧 Submit Code - Bug fixes, new features, optimizations

Development Setup

# Clone the repo
git clone https://github.com/egebese/seo-research-mcp.git
cd seo-research-mcp

# Install dependencies
uv sync

# Run locally
python main.py

Pull Request Process

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to your branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

Code Guidelines

  • Keep code simple and readable

  • Add comments for complex logic

  • Test your changes before submitting

  • Follow existing code style


📊 Star History

Star History Chart


📄 License

This project is licensed under the MIT License with an educational use notice.

See LICENSE for full details.


🙏 Credits

This project is a fork of seo-mcp by @cnych.

Special thanks to the original author for creating this tool.


⭐ If this helps your SEO research, consider giving it a star! ⭐

Available Tools

4 tools
get_trafficC
Check the estimated search traffic for any website. 

Args:
    domain_or_url (str): The domain or URL to query
    country (str): The country to query, default is "None"
    mode (["subdomains", "exact"]): The mode to use for the query
Returns:
    Traffic data for the specified domain or URL
ParametersJSON Schema
NameRequiredDescriptionDefault
domain_or_urlYes
countryNoNone
modeNosubdomains

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It does not disclose whether the tool is read-only, destructive, requires authentication, or has rate limits. For a data query tool, this is a significant gap.

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 concise at two sentences plus an Args/Returns list. It is front-loaded with the purpose and structured for easy scanning. No wasted words.

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

Completeness2/5

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

Given no output schema, the description only vaguely states 'Traffic data' without specifying structure. Combined with missing behavioral context, the description is incomplete for a 3-parameter tool.

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?

The description includes an Args section that lists parameters and their types, adding some meaning beyond the schema (e.g., domain_or_url is 'The domain or URL to query'). However, it does not explain the difference between 'subdomains' and 'exact' modes, nor the effect of the country parameter, beyond default values.

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 description states 'Check the estimated search traffic for any website', which clearly identifies the verb and resource. It distinguishes from sibling tools like get_backlinks_list and keyword_difficulty by focusing on traffic estimation, but does not explicitly differentiate.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor does it specify prerequisites or exclusions. It simply states the tool's function without context for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keyword_difficultyC

Get keyword difficulty for the specified keyword

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
countryNous

TDQS

C2.6/5.0
Behavior2/5

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

No annotations provided, so description must carry full burden. It does not disclose how difficulty is calculated, what unit/scale is used, or any side effects. Bare minimum.

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?

Single sentence of 8 words is concise but lacks substance. Appropriate length for the content, but more detail would improve informativeness.

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

Completeness2/5

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

Given no annotations, no output schema, and 2 params requiring explanation, the description is inadequate. Leaves agent guessing about return values, scope, and usage nuances.

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

Parameters2/5

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

Schema has 0% description coverage. Description only mentions 'specified keyword' without explaining its meaning or format. Country parameter and default are not explained. Adds minimal value to schema.

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 description 'Get keyword difficulty for the specified keyword' clearly states the action and resource. It is distinct from sibling tools like get_backlinks_list and get_traffic, though sibling differentiation is implicit rather than explicit.

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

Usage Guidelines2/5

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

No guidance on when to use this tool compared to alternatives. Lacks context about prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keyword_generatorC

Get keyword ideas for the specified keyword

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
countryNous
search_engineNoGoogle

TDQS

C2.4/5.0
Behavior2/5

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

No annotations provided. Description only says 'get ideas' with no disclosure of behavior (e.g., return format, rate limits, data source).

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?

Extremely short, no fluff, but lacks essential details. Conciseness is achieved at the expense of completeness.

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

Completeness1/5

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

With 3 parameters, no output schema, and no annotations, the description is severely incomplete. No information on return values or side effects.

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

Parameters1/5

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

Schema coverage is 0% and description only mentions the keyword parameter, ignoring country and search_engine. Fails to compensate for missing parameter descriptions.

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 description clearly states it returns keyword ideas for a given keyword. It distinguishes from sibling tools (backlinks, traffic, difficulty) but lacks specificity about the output format or scope.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs. alternatives, no prerequisites, no context about typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.4
    • First observedget_backlinks_list
    • First observedget_traffic
    • First observedkeyword_difficulty
    • First observedkeyword_generator

TDQS

B3.1/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct SEO aspect: backlinks, traffic, keyword difficulty, and keyword generation. No overlap in functionality.

Naming Consistency3/5

Two tools use 'get_' prefix (get_backlinks_list, get_traffic) while two use 'keyword_' prefix (keyword_difficulty, keyword_generator), creating an inconsistent pattern.

Tool Count4/5

Four tools is a reasonable size for a focused SEO research server, covering core tasks without being bloated.

Completeness3/5

Covers backlinks, traffic, and keyword analysis but missing common SEO features like domain overview or competitor analysis, leaving minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    C
    quality
    Not graded
    maintenance
    Enables AI assistants to access comprehensive SEO data through DataForSEO APIs, including SERP results, keyword research, backlink analysis, on-page metrics, and domain analytics. Supports real-time search engine data from Google, Bing, and Yahoo with customizable filtering and multiple deployment options.
    36
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI coding assistants to perform SEO research tasks including backlink analysis, keyword research, traffic estimation, and keyword difficulty analysis using Ahrefs data directly within IDEs.
    4
    191
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Connects AI assistants to SEO APIs for backlinks analysis, keyword research, and traffic analysis.
    7 npm
    28
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides AI agents with professional-grade SEO capabilities including on-page analysis, technical audits, PageSpeed insights, and Ahrefs data integration.
    13
    8 npm
    5
    MIT