数据搜索优化
STDIODataForSEO数据获取标准接口服务
DataForSEO数据获取标准接口服务
Model Context Protocol (MCP) server implementation for DataForSEO, enabling ChatGPT or other agents to interact with selected DataForSEO APIs and obtain SEO data through a standardized interface. The server now includes optional tools that satisfy OpenAI's remote MCP requirements for search and document retrieval.
git clone https://github.com/dataforseo/mcp-server-typescript cd mcp-server-typescript
npm install
# 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,OPENAI" # 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:
# Start local server (direct MCP communication) npx dataforseo-mcp-server # Start HTTP server npx dataforseo-mcp-server http
The server runs on port 3000 by default and supports both Basic Authentication and environment variable-based authentication.
To start the HTTP server, run:
npm run http
Basic Authentication
Authorization: Basic <base64-encoded-credentials>
username:passwordEnvironment Variables
export DATAFORSEO_USERNAME=your_username export DATAFORSEO_PASSWORD=your_password
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;OPENAI: provides search and fetch tools compatible with ChatGPT connectors;Each module corresponds to a specific DataForSEO API:
SERP module → SERP APIKEYWORDS_DATA module → Keywords Data APIONPAGE module → OnPage APIDATAFORSEO_LABS module → DataForSEO Labs APIBACKLINKS: module → Backlinks APIBUSINESS_DATA: module → Business Data APIDOMAIN_ANALYTICS: module → Domain Analytics APIYou can either:
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); } } }
src/modules/ for your module:mkdir -p src/modules/your-module-name
// 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), }; } }
src/config/modules.config.ts:export const AVAILABLE_MODULES = [ 'SERP', 'KEYWORDS_DATA', 'ONPAGE', 'DATAFORSEO_LABS', 'YOUR_MODULE_NAME', 'OPENAI' // Built-in module providing search and fetch for ChatGPT ] as const;
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:
Your feedback helps us prioritize which APIs to support next!
The OPENAI module provides a search tool and a fetch tool that follow OpenAI's remote MCP server requirements. Enable the module by including OPENAI in the ENABLED_MODULES environment variable or leave the variable unset to enable all modules.
The search tool accepts a query string and allows optional parameters to refine the request:
source – serp for live search engine results (default) or labs to use DataForSEO Labs keyword ideassearch_engine – one of google, bing, or yahoo (used when source=serp)language_code – language code such as enlocation_name – full location name (default United States)depth – number of results to fetch from SERP (when source=serp)limit – number of keyword ideas to return (when source=labs)It returns a list of results with id, title, text, and url. Use the fetch tool with a returned id to retrieve the full record for citation in ChatGPT.