SEO Research MCP
DataSEO MCP
DataSEO MCP는 AI 어시스턴트에서 실용적인 SEO 조사를 수행하기 위한 Model Context Protocol 서버입니다. Ahrefs의 무료 SEO 데이터, CAPTCHA 제공업체 폴백, 그리고 선택 사항인 OpenRouter 기반 쿼리 계획 기능을 소규모 MCP 도구 세트 뒤에 결합합니다.
[!CAUTION] 이 프로젝트는 교육 및 연구 목적으로만 사용됩니다. Ahrefs, CapSolver, Anti-Captcha, OpenRouter를 포함한 타사 서비스와 상호 작용합니다. 사용자는 모든 관련 서비스 약관을 준수할 책임이 있습니다.
기능
도구 | 목적 | 예시 프롬프트 |
| 백링크 개요 및 상위 백링크 행 | "suparank.io의 백링크를 보여줘" |
| 키워드 및 질문 아이디어 | "온보딩을 위한 SaaS SEO 키워드 찾기" |
| 유기적 트래픽 추정 | "ege.md의 트래픽 추정" |
| KD 및 SERP 스냅샷 | "AI SEO 도구의 난이도 확인" |
| 검색 의도별 AI 쿼리 아이디어 | "SaaS SEO를 위한 AI 검색 쿼리 생성" |
| 단일 도메인 백링크 + 트래픽 요약 | "suparank.io 요약" |
| 2~5개 도메인 비교 | "suparank.io와 ahrefs.com 비교" |
| 경쟁사 백링크 소스 격차 | "내 도메인의 백링크 격차 찾기" |
| SERP + AI 지원 콘텐츠 브리핑 | "AI SEO 감사를 위한 콘텐츠 브리핑 작성" |
DataSEO MCP는 Ege Bese가 유지 관리합니다. AI SEO 및 순위 추적 워크플로우는 Suparank를 참조하세요.
Related MCP server: SEO Insights MCP Server
설치
uvx --python 3.10 dataseo-mcp로컬 개발 환경:
git clone https://github.com/egebese/dataseo-mcp.git
cd dataseo-mcp
uv sync
uv run dataseo-mcp레거시 seo-mcp 명령어는 호환성 별칭으로 계속 제공됩니다.
구성
Ahrefs 기반 도구에는 최소 하나의 CAPTCHA 제공업체가 필요합니다:
export CAPSOLVER_API_KEY="your-capsolver-key"
# or
export ANTICAPTCHA_API_KEY="your-anticaptcha-key"둘 다 구성된 경우 CapSolver가 먼저 시도되고 Anti-Captcha가 폴백으로 사용됩니다. AI 도구는 선택 사항입니다:
export OPENROUTER_API_KEY="your-openrouter-key"
export OPENROUTER_MODEL="openai/gpt-4o-mini" # optional유용한 런타임 재정의:
변수 | 기본값 | 목적 |
|
| 서명 캐시 위치 |
|
| 초 단위 HTTP 타임아웃 |
|
| CAPTCHA 폴링 제한 |
|
| OpenAI 호환 AI 엔드포인트 |
MCP 설정
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-mcpVS Code MCP 구성:
{
"servers": {
"dataseo": {
"command": "uvx",
"args": ["--python", "3.10", "dataseo-mcp"],
"env": {
"CAPSOLVER_API_KEY": "YOUR_CAPSOLVER_KEY"
}
}
}
}하나의 CAPTCHA 제공업체 키만 필요합니다. AI 지원 쿼리 생성이나 콘텐츠 브리핑을 원할 때만 OPENROUTER_API_KEY를 추가하세요.
API 참조
get_backlinks_list(domain)
반환값:
{
"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")
기존 label / value 형태의 키워드 및 질문 아이디어를 반환합니다.
get_traffic(domain_or_url, country="None", mode="subdomains")
트래픽 기록, 트래픽 요약, 상위 페이지, 국가 및 키워드를 반환합니다. 레거시 costMontlyAvg 필드가 보존되며 costMonthlyAvg도 포함됩니다.
keyword_difficulty(keyword, country="us")
키워드 난이도 점수와 사용 가능한 지표가 포함된 유기적 SERP 행을 반환합니다.
ai_search_queries(keyword, count=10, model="openai/gpt-4o-mini", language="en")
중복 제거된 AI 생성 쿼리를 반환합니다:
{
"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는 1에서 50 사이로 검증됩니다. 유효한 의도는 informational(정보성), commercial(상업성), transactional(거래성), navigational(탐색성)입니다.
추가 도구
domain_overview(domain, country="None"): 단일 도메인에 대한 백링크 개요 및 트래픽 요약.compare_domains(domains, country="None"): 2~5개의 고유 도메인 비교.backlink_opportunities(domain, competitors): 대상 샘플에 없는 경쟁사 백링크 소스 나열.seo_content_brief(keyword, country="us", count=12, model, language): 키워드 난이도, SERP 행, AI 검색 쿼리 및 권장 콘텐츠 방향을 결합합니다.
아키텍처
server.py는 의도적으로 가볍게 설계되었습니다. 구현은 다음과 같이 나뉩니다:
services.py: MCP 도구 오케스트레이션 및 공개 반환 형태.schemas.py: Pydantic 검증 및 정규화.captcha.py: 제한된 폴링을 사용하는 CapSolver / Anti-Captcha 폴백.backlinks.py,keywords.py,traffic.py: Ahrefs 엔드포인트 어댑터.ai.py: OpenRouter/OpenAI 호환 쿼리 생성.cache.py: 기본적으로~/.cache/dataseo-mcp아래의 JSON 서명 캐시.
모든 외부 HTTP 경계는 테스트에서 모의(mock) 처리됩니다.
개발
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"문제 해결
문제 | 해결 방법 |
CAPTCHA 제공업체가 구성되지 않음 |
|
CAPTCHA 해결 실패 | 제공업체 잔액, 키 유효성 및 속도 제한 확인 |
AI 도구가 누락된 키 오류를 반환함 |
|
빈 SEO 응답 | 도메인이나 키워드가 업스트림 소스에 인덱싱되지 않았을 수 있음 |
이전 명령어가 더 이상 문서화되지 않음 |
|
라이선스
교육용 고지가 포함된 MIT 라이선스. 원본 포크 귀속 정보는 LICENSE에 보존되어 있습니다.
Available Tools
4 toolsget_backlinks_listA
Get backlinks list for the specified domain
Args:
domain (str): The domain to query
Returns:
List of backlinks for the domain, containing title, URL, domain rating, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return type and fields (title, URL, domain rating). No annotations provided, so description carries burden; it is transparent about the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, all sentences contribute value. Front-loaded purpose with immediate clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, the description covers purpose, input, and output sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%; description adds 'The domain to query' which is minimal. Provides no additional context like format or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb and resource: 'Get backlinks list for the specified domain'. Distinguishes from sibling tools like get_traffic and keyword_difficulty.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use. Implied usage for domain backlinks, but no guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| domain_or_url | Yes | ||
| country | No | None | |
| mode | No | subdomains |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| country | No | us |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| country | No | us | |
| search_engine | No |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.0.0- First observed
get_backlinks_list - First observed
get_traffic - First observed
keyword_difficulty - First observed
keyword_generator
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Real SEO data for AI assistants: page audits, Keyword Planner volumes, Search Console history.
- VouchedOAuthcom.vouchedhq
SEO data your AI can cite: Search Console, GA4, keywords, backlinks, SERPs and AI visibility.
Open-source SEO manager for coding agents: keyword research, content PRs, rank + Search Console.
SEO data for AI agents: Google SERP, keyword research, backlinks, site audits, AI answer visibility.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables 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.4MIT
- AlicenseNot gradedqualityFmaintenanceConnects AI assistants to SEO APIs for backlinks analysis, keyword research, and traffic analysis.9 npm28MIT
- AlicenseAqualityDmaintenanceProvides AI agents with professional-grade SEO capabilities including on-page analysis, technical audits, PageSpeed insights, and Ahrefs data integration.1311 npm5MIT
- AlicenseNot gradedqualityBmaintenanceEnables SEO data retrieval including backlinks, keyword research, keyword difficulty, and traffic estimation using Ahrefs free tools.4 npmMIT