Model Context Protocol (MCP) server implementation for DataForSEO, enabling Claude to interact with selected DataForSEO APIs and obtain SEO data through a standardized interface.
- SERP API: real-time Search Engine Results Page (SERP) data for Google, Bing, and Yahoo;
- KEYWORDS_DATA API: keyword research and clickstream data, including search volume, cost-per-click, and other metrics;
- ONPAGE API: allows crawling websites and webpages according to customizable parameters to obtain on-page SEO performance metrics;
- DATAFORSEO_LABS API: data on keywords, SERPs, and domains based on DataForSEO's in-house databases and proprietary algorithms.
- Node.js (v14 or higher)
- DataForSEO API credentials (API login and password)
- Clone the repository:
git clone https://github.com/dataforseo/mcp-server-typescript
cd mcp-server-typescript
- Install dependencies:
npm install
- Set up environment variables:
# Required
export DATAFORSEO_USERNAME=your_username
export DATAFORSEO_PASSWORD=your_password
# Optional: specify which modules to enable (comma-separated)
# If not set, all modules will be enabled
export ENABLED_MODULES="SERP,KEYWORDS_DATA,ONPAGE,DATAFORSEO_LABS,BACKLINKS,BUSINESS_DATA,DOMAIN_ANALYTICS"
# Optional: enable full API responses
# If not set or set to false, the server will filter and transform API responses to a more concise format
# If set to true, the server will return the full, unmodified API responses
export DATAFORSEO_FULL_RESPONSE="false"
You can install the package globally:
npm install -g dataforseo-mcp-server
Or run it directly without installation:
npx dataforseo-mcp-server
Remember to set environment variables before running the command:
# Required environment variables
export DATAFORSEO_USERNAME=your_username
export DATAFORSEO_PASSWORD=your_password
# Run with npx
npx dataforseo-mcp-server
Build the project:
npm run build
Run the server:
npm start
The following modules are available to be enabled/disabled:
-
SERP
: real-time SERP data for Google, Bing, and Yahoo; -
KEYWORDS_DATA
: keyword research and clickstream data; -
ONPAGE
: crawl websites and webpages to obtain on-page SEO performance metrics; -
DATAFORSEO_LABS
: data on keywords, SERPs, and domains based on DataForSEO's databases and algorithms; -
BACKLINKS
: data on inbound links, referring domains and referring pages for any domain, subdomain, or webpage; -
BUSINESS_DATA
: based on business reviews and business information publicly shared on the following platforms: Google, Trustpilot, Tripadvisor; -
DOMAIN_ANALYTICS
: helps identify all possible technologies used for building websites and offers Whois data;
Each module corresponds to a specific DataForSEO API:
-
SERP
module → SERP API -
KEYWORDS_DATA
module → Keywords Data API -
ONPAGE
module → OnPage API -
DATAFORSEO_LABS
module → DataForSEO Labs API -
BACKLINKS
: module → Backlinks API -
BUSINESS_DATA
: module → Business Data API -
DOMAIN_ANALYTICS
: module → Domain Analytics API
You can either:
- Add a new tool to an existing module
- Create a completely new module
Here's how to add a new tool to any new or pre-existing module:
// src/modules/your-module/tools/your-tool.tool.ts
import { BaseTool } from '../../base.tool';
import { DataForSEOClient } from '../../../client/dataforseo.client';
import { z } from 'zod';
export class YourTool extends BaseTool {
constructor(private client: DataForSEOClient) {
super(client);
// DataForSEO API returns extensive data with many fields, which can be overwhelming
// for AI agents to process. We select only the most relevant fields to ensure
// efficient and focused responses.
this.fields = [
'title', // Example: Include the title field
'description', // Example: Include the description field
'url', // Example: Include the URL field
// Add more fields as needed
];
}
getName() {
return 'your-tool-name';
}
getDescription() {
return 'Description of what your tool does';
}
getParams(): z.ZodRawShape {
return {
// Required parameters
keyword: z.string().describe('The keyword to search for'),
location: z.string().describe('Location in format "City,Region,Country" or just "Country"'),
// Optional parameters
fields: z.array(z.string()).optional().describe('Specific fields to return in the response. If not specified, all fields will be returned'),
language: z.string().optional().describe('Language code (e.g., "en")'),
};
}
async handle(params: any) {
try {
// Make the API call
const response = await this.client.makeRequest({
endpoint: '/v3/dataforseo_endpoint_path',
method: 'POST',
body: [{
// Your request parameters
keyword: params.keyword,
location: params.location,
language: params.language,
}],
});
// Validate the response for errors
this.validateResponse(response);
//if the main data array is specified in tasks[0].result[:] field
const result = this.handleDirectResult(response);
//if main data array specified in tasks[0].result[0].items field
const result = this.handleItemsResult(response);
// Format and return the response
return this.formatResponse(result);
} catch (error) {
// Handle and format any errors
return this.formatErrorResponse(error);
}
}
}
- Create a new directory under
src/modules/
for your module:
mkdir -p src/modules/your-module-name
- Create module files:
// src/modules/your-module-name/your-module-name.module.ts
import { BaseModule } from '../base.module';
import { DataForSEOClient } from '../../client/dataforseo.client';
import { YourTool } from './tools/your-tool.tool';
export class YourModuleNameModule extends BaseModule {
constructor(private client: DataForSEOClient) {
super();
}
getTools() {
return {
'your-tool-name': new YourTool(this.client),
};
}
}
- Register your module in
src/config/modules.config.ts
:
export const AVAILABLE_MODULES = [
'SERP',
'KEYWORDS_DATA',
'ONPAGE',
'DATAFORSEO_LABS',
'YOUR_MODULE_NAME' // Add your module name here
] as const;
- Initialize your module in
src/index.ts
:
if (isModuleEnabled('YOUR_MODULE_NAME', enabledModules)) {
modules.push(new YourModuleNameModule(dataForSEOClient));
}
We're always looking to expand the capabilities of this MCP server. If you have specific DataForSEO endpoints or APIs you'd like to see supported, please:
- Check the DataForSEO API Documentation to see what's available
- Open an issue in our GitHub repository with:
- The API/endpoint you'd like to see supported;
- A brief description of your use case;
- Describe any specific features you'd like to see implemented.
Your feedback helps us prioritize which APIs to support next!