DataForSEO logo

DataForSEO

Organization
dataforseo

DataForSEO API modelcontextprotocol server

Publisherdataforseo
Repositorymcp-server-typescript
LanguageTypeScript
Forks
116
Stars
246
Available tools
0
Transport typestdio
Categories
LicenseApache-2.0
Links
  • Connect tools to AI workflows

    DataForSEO exposes MCP capabilities that can be used by compatible AI clients and agents.

  • 0 available tools

    Browse the callable actions below, including names and descriptions when provided by the server.

  • Ready-to-copy setup

    Use the installation snippets to configure this server in your preferred MCP client.

  • Open source signals

    246 stars and 116 forks from the linked repository.

DataForSEO MCP Server

This is the new v3 MCP server. The previous v2+ MCP server is deprecated and lives at dataforseo/mcp-server-typescript-deprecated.

MCP server and CLI for LLM agents to browse DataForSEO API documentation and make authenticated API requests. By default the binary starts an MCP server on stdio; CLI commands are an optional second mode.

Quick Start

Start the MCP server on stdio (default mode; set DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD):

bash
npx dataforseo-mcp-server@latest

HTTP transport (port 3000; override with PORT):

bash
npx dataforseo-mcp-server@latest --mode http

Authentication

OAuth 2.0 (default for HTTP MCP): works out of the box. MCP clients discover the DataForSEO authorization server via Protected Resource metadata and send Authorization: Bearer tokens.

Fallback: API login/password via environment variables (HTTP Basic). Required for CLI and stdio MCP; on HTTP it is used when no Authorization header is present.

bash
# bash / macOS / Linux
export DATAFORSEO_LOGIN="your_api_login"
export DATAFORSEO_PASSWORD="your_api_password"
powershell
# PowerShell
$env:DATAFORSEO_LOGIN="your_api_login"
$env:DATAFORSEO_PASSWORD="your_api_password"
cmd
REM CMD
set DATAFORSEO_LOGIN=your_api_login
set DATAFORSEO_PASSWORD=your_api_password

DATAFORSEO_USERNAME is accepted as an alias for DATAFORSEO_LOGIN. Get API keys at https://app.dataforseo.com/api-access.

MCP Server

The same tool implementations power both the MCP server and the CLI. One binary serves both modes; MCP is the default.

How the binary chooses a mode:

  • MCP stdio — default when no CLI command is passed
  • MCP HTTP — pass --mode http (Streamable HTTP on port 3000; override with PORT)
  • CLI — when the first command is docs or request, or when --cli / --help / --version is passed

MCP stdio (default):

bash
npx dataforseo-mcp-server

MCP HTTP:

bash
npx dataforseo-mcp-server --mode http

CLI:

bash
npx dataforseo-mcp-server docs index

MCP client config (Cursor, Claude Desktop, and similar clients that use mcpServers):

Via URL — use the hosted remote MCP server, or start a local HTTP server (npx dataforseo-mcp-server --mode http) and point the client at it. OAuth works out of the box; env credentials are optional fallback only.

Public remote MCP server URL: https://mcp.dataforseo.com/v3/mcp

json
{
  "mcpServers": {
    "dataforseo": {
      "url": "https://mcp.dataforseo.com/v3/mcp"
    }
  }
}

Local server (default port 3000):

json
{
  "mcpServers": {
    "dataforseo": {
      "url": "http://localhost:3000/mcp"
    }
  }
}

Via command (stdio) — the client starts the binary itself (stdio is the default mode). OAuth is not used on this transport — set env credentials (or pass them in the MCP client env block):

jsonc
{
  "mcpServers": {
    "dataforseo": {
      "command": "npx",
      "args": [
        "dataforseo-mcp-server",
        // Optional additional args:
        // "--docs-cache-dir", "D:\\my-docs-cache",
        // "--configuration", "field-config.json"
      ],
      "env": {
        "DATAFORSEO_LOGIN": "your_api_login",
        "DATAFORSEO_PASSWORD": "your_api_password",
        // Optional additional env:
        // "FIELD_CONFIG_PATH": "field-config.json"
      }
    }
  }
}

From the repo root during development:

json
{
  "mcpServers": {
    "dataforseo": {
      "command": "npx",
      "args": ["tsx", "src/index.ts"],
      "cwd": "/path/to/mcp-server-typescript"
    }
  }
}

MCP Tools

ToolTitleDescription
docs_indexDocs IndexFetch documentation index, optionally filtered by section (24h cache)
docs_list_sectionsDocs List SectionsReturn available documentation section names
docs_searchDocs SearchFetch documentation from a documentation URL (needCodeExample, 24h cache)
api_requestAPI RequestMake an authenticated API request

api_request uses .ai paths by default. Set noAiMode to true in MCP requests, or pass --no-ai-mode in the CLI, to use the standard path. Request body is passed as data (JSON object or array). The --param option is CLI-only.

HTTP transport

Streamable HTTP endpoints:

  • POST /mcp
  • POST /http

OAuth 2.0 Protected Resource metadata (RFC 9728) is always exposed so MCP clients can discover the authorization server and authenticate with Bearer tokens:

  • GET /.well-known/oauth-protected-resource
  • GET /.well-known/oauth-protected-resource/mcp
  • GET /.well-known/oauth-protected-resource/http

Behind a reverse proxy, set TRUST_PROXY=true so metadata URLs use https.

Auth priority on HTTP requests:

  1. Authorization: Basic header
  2. Authorization: Bearer header (OAuth access token)
  3. Env credentials (DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD) — fallback when no Authorization header is sent

CLI (optional)

In addition to MCP, the same binary exposes docs and request as CLI commands.

Commands

CommandDescription
npx dataforseo-mcp-server docs indexFetch full API documentation index
npx dataforseo-mcp-server docs index --section "SERP API"Filter index by API section
npx dataforseo-mcp-server docs index --list-sectionsList available sections
npx dataforseo-mcp-server docs search <url>Fetch documentation from a documentation URL or path (cURL example only by default)
npx dataforseo-mcp-server docs search <url> --need-code-exampleFetch documentation with PHP, Node.js, Python, and C# examples
npx dataforseo-mcp-server request -X <method> -p <path>Make an authenticated API request (.ai path by default)

From a built local clone you can also use npx . instead of npx dataforseo-mcp-server.

Examples

bash
# Browse SERP API endpoints
npx dataforseo-mcp-server docs index --section "SERP API"

# Read endpoint documentation (path or full docs URL)
npx dataforseo-mcp-server docs search serp/google/organic/live/regular
npx dataforseo-mcp-server docs search https://docs.dataforseo.com/v3/serp/google/organic/live/regular

# Include multi-language code examples (PHP, Node.js, Python, C#)
npx dataforseo-mcp-server docs search backlinks/referring_networks/live --need-code-example

# Live SERP request (recommended: use --param)
npx dataforseo-mcp-server request -X POST -p /v3/serp/google/organic/live/regular \
  --param keyword=dataforseo --param language_code=en --param location_code=2840

# Same request via JSON body
npx dataforseo-mcp-server request -X POST -p /v3/serp/google/organic/live/regular \
  -d '[{"keyword":"dataforseo","location_code":2840,"language_code":"en"}]'

Documentation responses are cached for 24 hours. Default cache directory:

  • Windows: %LOCALAPPDATA%\dataforseo-mcp-server\docs-cache
  • macOS: ~/Library/Caches/dataforseo-mcp-server/docs-cache
  • Linux: ~/.cache/dataforseo-mcp-server/docs-cache (or $XDG_CACHE_HOME)

Override with --cache-dir <path> on CLI docs commands. For MCP, pass --docs-cache-dir <path> in server startup args.

API responses are returned as the response body only (parsed JSON when possible). When a field configuration is loaded, api_request / request responses are trimmed to the configured fields for that endpoint path (see Field configuration).

Field configuration

Optionally limit which fields are returned from API responses. Unlike the previous multi-tool MCP server (keys = tool names), this package keys the config by API endpoint path.

bash
# MCP stdio (default when no CLI command is passed)
npx dataforseo-mcp-server --configuration field-config.json

# MCP HTTP
npx dataforseo-mcp-server --mode http --configuration field-config.json

# CLI
npx dataforseo-mcp-server --configuration field-config.json request -X POST -p /v3/backlinks/summary/live --param target=example.com

Or set env:

  • FIELD_CONFIG_PATH — path to a JSON file (Node)
  • FIELD_CONFIG_JSON — inline JSON string (Node / Cloudflare Worker)

Minimal example (see field-config.example.json for a fuller sample):

json
{
  "supported_fields": {
    "/v3/serp/google/organic/live/advanced": ["id", "items.title", "items.url", "status_code"],
    "/v3/backlinks/summary/live": ["id", "items.backlinks", "items.referring_domains", "status_code"]
  }
}

Behavior:

  • Built-in defaults always apply for /v3/on_page/lighthouse/live/json (shrunk Lighthouse payload). Custom config merges on top and can override any path.
  • Path match ignores .ai suffix, trailing slash, and host (full URLs work).
  • If the path is configured with a non-empty field list → only those fields are kept (applied to each tasks[].result[] item).
  • If the path has an empty field list [] → full response for that path (disables filtering).
  • If the path is missing from both defaults and custom config → full response.

Copy the example and trim to the endpoints you use:

bash
cp field-config.example.json my-config.json

Architecture

src/
├── index.ts            # Unified entry (MCP by default stdio; CLI if docs/request/--cli)
├── config/             # URLs, sections, auth server
├── core/
│   ├── api/            # auth, client, path, request-body
│   ├── cli/            # program, error, output
│   ├── config/         # field configuration + defaults
│   ├── docs/           # path, section, cache
│   ├── http/           # fetch
│   ├── mcp/            # startup args (--configuration, --docs-cache-dir)
│   ├── tools/          # shared CLI + MCP tool implementations
│   ├── utils/          # field filter
│   ├── env.ts
│   └── version.ts
├── mcp/
│   ├── init-mcp-server.ts
│   ├── tool-definition.ts
│   ├── auth-middleware.ts
│   ├── http-routes.ts
│   ├── index.ts        # stdio transport
│   └── index-http.ts   # streamable HTTP
└── worker/             # Cloudflare Worker entry (built separately)

Build outputs

TargetCommandOutputUsed by
Node (MCP + CLI)npm run build (tsc)dist/index.jsbin, Docker, start* scripts
Cloudflare Workernpm run worker:buildbuild/worker/worker/index-worker.jswrangler.jsonc → main

Worker path is build/worker/worker/... because tsconfig.worker.json sets rootDir to src and the entry lives at src/worker/index-worker.ts.

For LLM Agents

Read SKILL.md in this repo for full agent instructions.

Development

Requires Node.js 20+.

bash
npm install
npm run build

# Dev (tsx, no build step)
npm run dev              # MCP stdio (default)
npm run dev:mcp:http     # MCP HTTP
npm run dev -- docs index --section "SERP API"   # CLI

# After build
npm run start            # MCP stdio (default)
npm run start:mcp:http   # Streamable HTTP
npx . docs index --list-sections

Installation

TypingMind
Prerequisites:

Node.js 18+

{
  "mcpServers": {
    "data-for-seo": {
      "command": "npx",
      "args": [
        "dataforseo-mcp-server"
      ],
      "env": {
        "DATAFORSEO_USERNAME": "your_username",
        "DATAFORSEO_PASSWORD": "your_password"
      }
    }
  }
}

Use DataForSEO MCP with multiple AI models

TypingMind connects MCP tools at the workspace level, so once DataForSEO is connected, you can use it with different AI models in TypingMind instead of setting it up separately for each model. This MCP runs locally through the TypingMind MCP connector on your device.

Setup guide to use the local connector

Use this when the MCP server needs access to local files, apps, or private resources on your computer.

1

Open the MCP settings

In TypingMind, go to Settings, Advanced Settings, then Model Context Protocol and choose Setup Connector.

  1. Open TypingMind in your browser.
  2. Click the Settings icon.
  3. Go to Advanced Settings.
  4. Open the Model Context Protocol section.
  5. Click Setup Connector and choose This Device.
TypingMind MCP connector setup screen with This Device selected
2

Run the connector command

Choose This Device, copy the command from TypingMind, and run it in Terminal. Keep the process running while you use MCP.

  1. Copy the setup command shown by TypingMind.
  2. Open Terminal on macOS or Windows Terminal on Windows.
  3. Paste and run the command.
  4. Approve the package install if Terminal asks you to proceed.
  5. Keep the Terminal window running while using MCP tools.
3

Add DataForSEO as a server

When the connector status is Ready, click Edit Servers and paste the MCP server configuration.

  1. Wait until the connector status shows Ready.
  2. Click Edit Servers.
  3. Paste the DataForSEO MCP server configuration.
  4. Save the server list.
  5. Refresh if you want to confirm the connector is still ready.
TypingMind MCP settings showing active server and Edit Servers button
{
  "mcpServers": {
    "dataforseo": {
      "command": "npx",
      "args": [
        "-y",
        "dataforseo-mcp-server"
      ]
    }
  }
}
4

Use it across models

Save the server list, open Plugins, enable the DataForSEO MCP tools, then select any supported AI model in TypingMind and use the tools in chat or assign them to an AI agent.

  1. Open the Plugins page in TypingMind.
  2. Enable the DataForSEO MCP tools.
  3. Start a chat and choose the AI model you want to use.
  4. Use the MCP tools in chat or assign them to an AI agent.
  5. Switch to another AI model whenever needed without reconnecting MCP.
TypingMind chat using enabled MCP tools with a selected AI model
Can you use DataForSEO to help me with this task?
DataForSEO
Sure. I read it.
Here is what I found using DataForSEO.

Frequently asked questions

What is the DataForSEO MCP server used for?

DataForSEO is an MCP server that lets compatible AI clients connect to external tools and context. In TypingMind, you can add this MCP server once and make its tools available in your AI workspace.

Can I use DataForSEO MCP with multiple AI models in TypingMind?

Yes. TypingMind connects MCP tools at the workspace level, so you can use DataForSEO with different AI models such as Claude, ChatGPT, Gemini, or other models you have configured in TypingMind without setting up the MCP server separately for each model.

Why use DataForSEO MCP with TypingMind?

TypingMind is one of the best frontends for LLM chat because it brings multiple AI models, prompts, plugins, AI agents, API keys, and MCP tools into one workspace. With DataForSEO connected, you can use its MCP tools across your preferred models while keeping your chat workflow organized in TypingMind.

How do I connect DataForSEO MCP to TypingMind?

DataForSEO runs through the TypingMind local MCP connector. This is best when the MCP server needs access to local files, desktop apps, command-line tools, or private resources on your computer.

What tools does DataForSEO MCP provide in TypingMind?

DataForSEO exposes MCP capabilities that can be enabled from the TypingMind Plugins page and used in chat or assigned to AI agents.

Do I need to share my API keys with TypingMind to use DataForSEO MCP?

No. TypingMind is local-first and lets you keep your model providers, API keys, prompts, and MCP configuration under your control. If DataForSEO requires authentication, add the required headers, OAuth settings, or local configuration for that MCP server when you create the connection.

Related MCP Servers

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇