dataforseo-mcp-server
Version:
A Model Context Protocol (MCP) server for the DataForSEO API, enabling modular and extensible integration of DataForSEO endpoints with support for both HTTP and SSE transports.
59 lines (58 loc) • 2.61 kB
JavaScript
import { z } from 'zod';
import { BaseTool } from '../../../base.tool.js';
export class DataForSeoTrendsSubregionInterestsTool extends BaseTool {
constructor(dataForSEOClient) {
super(dataForSEOClient);
}
getName() {
return 'keywords_data_dataforseo_trends_subregion_interests';
}
getDescription() {
return `This endpoint will provide you with location-specific keyword popularity data from DataForSEO Trends`;
}
getParams() {
return {
location_name: z.string().nullable().default(null).describe(`full name of the location
optional field
in format "Country"
example:
United Kingdom`),
keywords: z.array(z.string()).describe(`keywords
the maximum number of keywords you can specify: 5`),
type: z.enum(['web', 'news', 'ecommerce']).default('web').describe(`dataforseo trends type`),
date_from: z.string().optional().describe(`starting date of the time range
if you don’t specify this field, the current day and month of the preceding year will be used by default
minimal value for the web type: 2004-01-01
minimal value for other types: 2008-01-01
date format: "yyyy-mm-dd"
example:
"2019-01-15"`),
date_to: z.string().optional()
.describe(`ending date of the time range
if you don’t specify this field, the today’s date will be used by default
date format: "yyyy-mm-dd"
example:
"2019-01-15"`),
time_range: z.enum(['past_4_hours', 'past_day', 'past_7_days', 'past_30_days', 'past_90_days', 'past_12_months', 'past_5_years'])
.default('past_7_days')
.describe(`preset time ranges
if you specify date_from or date_to parameters, this field will be ignored when setting a task`),
};
}
async handle(params) {
try {
const response = await this.dataForSEOClient.makeRequest('/v3/keywords_data/dataforseo_trends/subregion_interests/live', 'POST', [{
location_name: params.location_name,
keywords: params.keywords,
type: params.type,
date_from: params.date_from,
date_to: params.date_to,
time_range: params.time_range,
}]);
return this.validateAndFormatResponse(response);
}
catch (error) {
return this.formatErrorResponse(error);
}
}
}