Skip to main content
Glama
egebese

SEO Research MCP

by egebese

DataSEO MCP

DataSEO MCP es un servidor del Protocolo de Contexto de Modelos (MCP) para la investigación SEO práctica en asistentes de IA. Combina datos SEO gratuitos de Ahrefs, un sistema de respaldo para proveedores de CAPTCHA y planificación de consultas opcional mediante OpenRouter, todo detrás de un pequeño conjunto de herramientas MCP.

[!CAUTION] Este proyecto es solo para fines educativos y de investigación. Interactúa con servicios de terceros, incluidos Ahrefs, CapSolver, Anti-Captcha y OpenRouter. Los usuarios son responsables de cumplir con todos los términos de servicio aplicables.

Características

Herramienta

Propósito

Ejemplo de prompt

get_backlinks_list

Resumen de backlinks y filas de backlinks principales

"Muestra los backlinks de suparank.io"

keyword_generator

Ideas de palabras clave y preguntas

"Encuentra palabras clave SEO SaaS para onboarding"

get_traffic

Estimaciones de tráfico orgánico

"Estima el tráfico para ege.md"

keyword_difficulty

KD y captura de pantalla de SERP

"Comprueba la dificultad para herramientas de IA SEO"

ai_search_queries

Ideas de consultas de IA por intención de búsqueda

"Genera consultas de búsqueda de IA para SEO SaaS"

domain_overview

Resumen de backlinks + tráfico de un dominio

"Resume suparank.io"

compare_domains

Compara 2-5 dominios

"Compara suparank.io y ahrefs.com"

backlink_opportunities

Brechas de fuentes de backlinks de la competencia

"Encuentra brechas de backlinks para mi dominio"

seo_content_brief

SERP + resumen de contenido asistido por IA

"Crea un resumen de contenido para una auditoría SEO de IA"

DataSEO MCP es mantenido por Ege Bese. Para flujos de trabajo de SEO de IA y seguimiento de rankings, consulta Suparank.

Related MCP server: SEO Insights MCP Server

Instalación

uvx --python 3.10 dataseo-mcp

Para desarrollo local:

git clone https://github.com/egebese/dataseo-mcp.git
cd dataseo-mcp
uv sync
uv run dataseo-mcp

El comando heredado seo-mcp sigue estando expuesto como un alias de compatibilidad.

Configuración

Se requiere al menos un proveedor de CAPTCHA para las herramientas respaldadas por Ahrefs:

export CAPSOLVER_API_KEY="your-capsolver-key"
# or
export ANTICAPTCHA_API_KEY="your-anticaptcha-key"

Si ambos están configurados, se intenta primero con CapSolver y se utiliza Anti-Captcha como respaldo. Las herramientas de IA son opcionales:

export OPENROUTER_API_KEY="your-openrouter-key"
export OPENROUTER_MODEL="openai/gpt-4o-mini"  # optional

Anulaciones de tiempo de ejecución útiles:

Variable

Predeterminado

Propósito

DATASEO_CACHE_DIR

~/.cache/dataseo-mcp

Ubicación de la caché de firmas

DATASEO_REQUEST_TIMEOUT

30

Tiempo de espera HTTP en segundos

DATASEO_MAX_POLLING_ATTEMPTS

120

Límite de sondeo de CAPTCHA

OPENROUTER_BASE_URL

https://openrouter.ai/api/v1

Punto final de IA compatible con OpenAI

Configuración de MCP

Configuración estilo Claude Desktop / Cursor:

{
  "mcpServers": {
    "dataseo": {
      "command": "uvx",
      "args": ["--python", "3.10", "dataseo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_CAPSOLVER_KEY",
        "ANTICAPTCHA_API_KEY": "YOUR_ANTICAPTCHA_KEY",
        "OPENROUTER_API_KEY": "YOUR_OPENROUTER_KEY"
      }
    }
  }
}

Claude Code:

claude mcp add dataseo --scope user -- uvx --python 3.10 dataseo-mcp

Configuración de MCP para VS Code:

{
  "servers": {
    "dataseo": {
      "command": "uvx",
      "args": ["--python", "3.10", "dataseo-mcp"],
      "env": {
        "CAPSOLVER_API_KEY": "YOUR_CAPSOLVER_KEY"
      }
    }
  }
}

Solo se requiere una clave de proveedor de CAPTCHA. Agrega OPENROUTER_API_KEY solo cuando desees generación de consultas asistida por IA o resúmenes de contenido.

Referencia de API

Devuelve:

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

keyword_generator(keyword, country="us", search_engine="Google")

Devuelve ideas de palabras clave y preguntas en la forma existente label / value.

get_traffic(domain_or_url, country="None", mode="subdomains")

Devuelve el historial de tráfico, resumen de tráfico, páginas principales, países y palabras clave. El campo heredado costMontlyAvg se conserva y también se incluye costMonthlyAvg.

keyword_difficulty(keyword, country="us")

Devuelve una puntuación de dificultad de palabra clave y filas de SERP orgánico con las métricas disponibles.

ai_search_queries(keyword, count=10, model="openai/gpt-4o-mini", language="en")

Devuelve consultas generadas por IA deduplicadas:

{
  "keyword": "ai seo audit",
  "queries": [
    {"query": "what is an AI SEO audit", "intent": "informational"},
    {"query": "best AI SEO audit tools", "intent": "commercial"}
  ],
  "model_used": "openai/gpt-4o-mini",
  "total_queries": 2
}

count se valida de 1 a 50. Las intenciones válidas son informational, commercial, transactional y navigational.

Herramientas adicionales

  • domain_overview(domain, country="None"): resumen de backlinks más resumen de tráfico para un dominio.

  • compare_domains(domains, country="None"): compara 2-5 dominios únicos.

  • backlink_opportunities(domain, competitors): enumera fuentes de backlinks de la competencia que no están presentes en la muestra objetivo.

  • seo_content_brief(keyword, country="us", count=12, model, language): combina dificultad de palabras clave, filas de SERP, consultas de búsqueda de IA y ángulos de contenido recomendados.

Arquitectura

server.py es intencionalmente ligero. La implementación se divide en:

  • services.py: orquestación de herramientas MCP y formas de retorno públicas.

  • schemas.py: validación y normalización de Pydantic.

  • captcha.py: respaldo de CapSolver / Anti-Captcha con sondeo limitado.

  • backlinks.py, keywords.py, traffic.py: adaptadores de puntos finales de Ahrefs.

  • ai.py: generación de consultas compatible con OpenRouter/OpenAI.

  • cache.py: caché de firmas JSON en ~/.cache/dataseo-mcp por defecto.

Todos los límites HTTP externos están simulados en las pruebas.

Desarrollo

uv sync
uv run pytest -q
uv run ruff check .
uv run python -m compileall -q src
uv run python -c "from seo_mcp.server import main"

Solución de problemas

Problema

Solución

No hay proveedor de CAPTCHA configurado

Establece CAPSOLVER_API_KEY o ANTICAPTCHA_API_KEY

Falló la resolución de CAPTCHA

Verifica el saldo del proveedor, la validez de la clave y los límites de tasa

La herramienta de IA devuelve error de clave faltante

Establece OPENROUTER_API_KEY

Respuesta SEO vacía

Es posible que el dominio o la palabra clave no estén indexados por la fuente ascendente

Comando antiguo ya no documentado

Usa dataseo-mcp; seo-mcp sigue funcionando como alias

Licencia

MIT con aviso de uso educativo. La atribución de la bifurcación original se conserva en LICENSE.

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 updatesv1.0.0
    • 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 has a clearly distinct purpose: get_backlinks_list retrieves backlink data, get_traffic provides traffic estimates, keyword_difficulty assesses keyword competitiveness, and keyword_generator suggests related keywords. There is no overlap in functionality, making tool selection unambiguous.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case: get_backlinks_list, get_traffic, keyword_difficulty, keyword_generator. The naming is predictable and readable, with no deviations in style or convention.

Tool Count4/5

With 4 tools, the count is reasonable for an SEO research server, covering key areas like backlinks, traffic, and keywords. It is slightly lean but not insufficient, as these tools address core SEO analysis needs without being overwhelming.

Completeness3/5

The toolset covers essential SEO research functions but has notable gaps. For example, there are no tools for competitor analysis, content suggestions, or SERP features, which are common in SEO workflows. Agents can perform basic research but may lack comprehensive coverage for advanced tasks.

Maintenance

ActivityInactive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI-powered IDEs to perform SEO research including backlink analysis, keyword generation, traffic estimation, and keyword difficulty using Ahrefs data and CapSolver for CAPTCHA solving.
    4
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Connects AI assistants to SEO APIs for backlinks analysis, keyword research, and traffic analysis.
    9 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
    11 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables SEO data retrieval including backlinks, keyword research, keyword difficulty, and traffic estimation using Ahrefs free tools.
    4 npm
    MIT