Skip to main content
Glama
scalably-io

io.scalably/dataforseo-mcp

Official
by scalably-io

DataForSEO MCP

A thin wrapper around DataForSEO's official MCP server that adds a searchable docs index and normalized errors. If you only need the raw API, install dataforseo-mcp-server directly.

Install

Claude Code:

claude mcp add dataforseo -e DATAFORSEO_USERNAME=your-login -e DATAFORSEO_PASSWORD=your-password -- npx -y @scalably-io/dataforseo-mcp

Codex:

codex mcp add dataforseo --env DATAFORSEO_USERNAME=your-login --env DATAFORSEO_PASSWORD=your-password -- npx -y @scalably-io/dataforseo-mcp

Claude Desktop: this wrapper ships on npm only (its upstream dependency makes a desktop bundle over 100 MB). Install DataForSEO's own server from https://github.com/dataforseo/mcp-server-typescript instead; the docs-search tools are the only thing you lose.

Related MCP server: Semrush MCP

Setup

  1. Create or open a DataForSEO account at dataforseo.com.

  2. Read the API login (an email address) and API password from the dashboard.

  3. api_request calls the live DataForSEO API and can incur cost per DataForSEO's own pricing; the three docs_* tools are free documentation lookups.

Tools (4)

Tool

What it does

docs_index

Fetch the DataForSEO API documentation index (llms.txt), optionally filtered by section

docs_list_sections

Return available DataForSEO API documentation section names

docs_search

Fetch DataForSEO API documentation from a documentation URL

api_request

Make an authenticated request to the DataForSEO API (method, path or url, body, and an optional noAiMode flag for the full, non AI-optimized response)

Use docs_list_sections or docs_index to pick an API family, then docs_search for the exact current endpoint path, method, request body and pricing before calling api_request.

Configuration

Variable

Required

Purpose

DATAFORSEO_USERNAME

yes

DataForSEO account login (email) from the dashboard

DATAFORSEO_PASSWORD

yes

DataForSEO account API password from the dashboard

NODE_ENV, DATAFORSEO_PROXY_TEST_CHILD

no

Test suite only: with NODE_ENV=test the wrapper spawns the fake child named by DATAFORSEO_PROXY_TEST_CHILD instead of the upstream server. Never set them in normal use

Reply shape

Every tool returns plain JSON with status (succeeded, partial, no_op), operation, summary, target, result, proof, warnings, recovery. Failures surface as a tool error whose text is <code>: <message> <hint>. api_request normalizes DataForSEO's per-task status codes (pending tasks, no-result tasks, partial failures, and vendor error codes) into that shape instead of returning DataForSEO's raw task envelope unexamined.

Limits

api_request is a real, billable call to the DataForSEO API; DataForSEO's own account balance and rate limits apply. A failed call to a paid endpoint is reported with an ambiguous_paid_request error when the outcome could not be confirmed, since retrying blind could double the charge.

Verify

Each release lists the package version and the production commit it was derived from in CHANGELOG.md; npm publishes with provenance from GitHub Actions. CI runs the tests and a clean install of the packed tarball on every push.

Privacy Policy

This server runs locally, on your machine, under your own credentials. It collects no personal data, contains no telemetry, stores nothing persistently, and talks only to the vendor API it wraps. No third party, including Scalably, receives your data. Contact: hello@scalably.io. Canonical copy: https://scalably.io/connector-privacy.html

License

MIT. Copyright Scalably.

Available Tools

4 tools
api_requestAPI RequestB

Make an authenticated request to the DataForSEO API

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoFull API URL (alternative to path)
dataNoRequest body as JSON object or array of task objects
pathNoAPI path (e.g. /v3/serp/google/organic/live/regular)
methodYesHTTP method
noAiModeNoDisable the .ai path suffix and return the full response schema instead of the AI-optimized subset. Can increase context size significantly. Default: false.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate this is not read-only, not idempotent, and not destructive, but openWorldHint is true, meaning external side effects. The description adds the authentication detail, which is useful but minimal. It does not disclose rate limits, error behavior, or response format. No contradiction with annotations.

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 a single, concise sentence that front-loads the core purpose. It is efficient and avoids fluff, but could have been enriched with a bit more context without losing conciseness.

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?

For a generic API request tool with 5 parameters, the description is quite sparse. It does not explain the return value structure, authentication failure behavior, or how the 'data' parameter should be formatted for different methods. Given the tool's complexity and lack of output schema, more detail is needed to guide correct usage.

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?

Schema description coverage is 100%, so every parameter already has a clear description. The tool description itself adds no additional meaning beyond what the schema provides, such as how parameters interact or typical usage patterns. Baseline 3 is appropriate.

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?

The description clearly states the tool's purpose: making an authenticated request to a specific API (DataForSEO). The verb 'make' and the resource 'authenticated request' are specific and unambiguous. Sibling tools are all documentation-related, so this tool is clearly distinguished as the API request tool.

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 is provided on when to use this tool versus alternatives. While siblings are documentation tools, the description does not explicitly state that this is the only tool for API requests or mention any conditions or exclusions. The agent must infer usage from context.

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

docs_indexDocs IndexB
Read-onlyIdempotent

Fetch the DataForSEO API documentation index (llms.txt), optionally filtered by section

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoFilter by API section (e.g. "SERP API")

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds the llms.txt format detail and the optional filtering behavior, which is helpful context. It does not disclose return format or pagination, but for a simple read-only fetch the annotations carry most of the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 13-word sentence that front-loads the core action and then states the optional modifier. Zero filler, every word earns its place.

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

Completeness3/5

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

For a simple one-parameter fetch tool with a strong annotation safety profile, the description is mostly adequate. The gap is that it does not clarify the relationship with siblings (docs_search, docs_list_sections), and with no output schema the agent only learns the response is an 'index' or llms.txt text rather than its structure. Routing guidance would complete it.

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?

Schema coverage is 100% and the single 'section' parameter is already documented with an example ('SERP API'). The description's mention of 'optionally filtered by section' reinforces the parameter's purpose but adds no syntax or format details beyond what the schema provides, so the baseline of 3 is appropriate.

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 uses a specific verb ('Fetch') and a precise resource ('DataForSEO API documentation index (llms.txt)'), and notes the optional section filter. It is clear what the tool does, though it does not explicitly contrast itself with siblings like docs_search or docs_list_sections, leaving some differentiation to inference.

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?

There is no guidance on when to use this tool versus the sibling tools. The description mentions optional section filtering but never routes the agent to docs_search for queries or docs_list_sections for browsing sections. A clear when-to-use/when-not-to-use statement is absent.

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

docs_list_sectionsDocs List SectionsA
Read-onlyIdempotent

Return available DataForSEO API documentation section names

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive, so the description does not need to cover those aspects. It adds a small amount of behavioral context by stating that it returns available section names, but it does not disclose output format, ordering, or other runtime behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action and the resource. There is no redundant or filler content.

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?

For a zero-parameter, read-only listing tool with strong annotations, the description is adequately complete. It clearly states what the tool returns, which is sufficient given the low complexity and lack of an output schema.

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?

This tool has zero parameters and the schema description coverage is 100%, so the description has no parameter meaning to add. A score of 4 is appropriate for a no-parameter tool where the schema is already complete.

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 uses a specific verb ('Return') and identifies the resource ('available DataForSEO API documentation section names'), making the tool's function clear. It does not explicitly contrast with sibling tools like docs_index or docs_search, so it misses the full differentiation that would earn a 5.

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?

There is no guidance about when to use this tool versus the sibling tools docs_index, docs_search, or api_request. The intended use is implied by the description, but no alternatives, exclusions, or selection criteria are provided.

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 observedapi_request
    • First observeddocs_index
    • First observeddocs_list_sections
    • First observeddocs_search

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation4/5

The tools are mostly distinct: api_request handles API calls, docs_search fetches specific documentation pages, docs_index retrieves the documentation index, and docs_list_sections lists section names. However, docs_search and docs_index could be confused since both retrieve documentation-related content, though their purposes differ enough to avoid significant ambiguity.

Naming Consistency3/5

Three tools share a consistent 'docs_' prefix with verb-noun style (docs_search, docs_index, docs_list_sections), but api_request breaks the pattern and uses a noun-noun construction. The naming is readable but not fully uniform, mixing conventions.

Tool Count5/5

Four tools is an ideal size for a focused server that combines documentation retrieval with API request execution. Each tool has a clear purpose, and the count feels neither sparse nor bloated for the server's stated scope.

Completeness5/5

The tool set covers the full workflow: discovering available sections (docs_list_sections), browsing the index (docs_index), fetching specific documentation (docs_search), and making authenticated API requests (api_request). No obvious dead ends or missing core operations are apparent for a documentation and API helper server.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    MCP server & CLI for keyword research, domain analytics, backlinks, traffic analysis, and competitive intelligence using Semrush API data.
    77
    46 npm
    39
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Model Context Protocol (MCP) server implementation for DataForSEO, enabling AI assistants to interact with selected DataForSEO APIs and obtain SEO data through a standardized interface.
    89
    7,607 npm
    Apache 2.0