UNPKG

apex-data-for-seo

Version:

A comprehensive MCP server for DataForSEO API

762 lines 29.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.registerTools = registerTools; // Try different import styles to be more resilient let McpServer; try { // Try CommonJS style import first const sdk = require('@modelcontextprotocol/sdk'); McpServer = sdk.McpServer; } catch (error) { try { // Fall back to ESM style const sdk = require('@modelcontextprotocol/sdk/server/mcp'); McpServer = sdk.McpServer; } catch (e) { console.error('Error importing MCP SDK:', e); process.exit(1); } } const zod_1 = require("zod"); /** * Register all tools with the MCP server */ function registerTools(server, client) { // =================== SERP API Tools =================== // Google SERP Search Tool server.tool("DataForSEO_GoogleSearch", { keyword: zod_1.z.string().describe("Search keyword"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')"), device: zod_1.z.enum(["desktop", "mobile", "tablet"]).optional().describe("Device type") }, async (params) => { try { const response = await client.post("/serp/google/organic/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English", device: params.device || "desktop" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Google Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Google Maps Search server.tool("DataForSEO_GoogleMapsSearch", { keyword: zod_1.z.string().describe("Search keyword for Google Maps"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/serp/google/maps/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Google Maps Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Google News Search server.tool("DataForSEO_GoogleNewsSearch", { keyword: zod_1.z.string().describe("Search keyword for Google News"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/serp/google/news/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Google News Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Bing Search server.tool("DataForSEO_BingSearch", { keyword: zod_1.z.string().describe("Search keyword for Bing"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/serp/bing/organic/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Bing Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== Keywords Data API Tools =================== // Keyword Data Tool server.tool("DataForSEO_KeywordData", { keyword: zod_1.z.string().describe("Keyword to analyze"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/keywords_data/google/search_volume/live", [{ keywords: [params.keyword], location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Keyword Data tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Keyword Ideas Tool server.tool("DataForSEO_KeywordIdeas", { seed_keywords: zod_1.z.array(zod_1.z.string()).describe("List of seed keywords"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')"), limit: zod_1.z.number().optional().describe("Number of results to return") }, async (params) => { try { const response = await client.post("/keywords_data/google/keywords_for_keywords/live", [{ keywords: params.seed_keywords, location_name: params.location_name || "United States", language_name: params.language_name || "English", limit: params.limit || 100 }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Keyword Ideas tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Keywords For Site Tool server.tool("DataForSEO_KeywordsForSite", { target: zod_1.z.string().describe("Target website URL"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')"), limit: zod_1.z.number().optional().describe("Number of results to return") }, async (params) => { try { const response = await client.post("/keywords_data/google/keywords_for_site/live", [{ target: params.target, location_name: params.location_name || "United States", language_name: params.language_name || "English", limit: params.limit || 100 }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Keywords For Site tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== Domain Analytics API Tools =================== // Domain Overview Tool server.tool("DataForSEO_DomainOverview", { domain: zod_1.z.string().describe("Domain to analyze (e.g., 'example.com')"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/domain_analytics/domain_overview/live", [{ target: params.domain, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Domain Overview tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Website Technologies Tool server.tool("DataForSEO_WebsiteTechnologies", { domain: zod_1.z.string().describe("Domain to analyze (e.g., 'example.com')") }, async (params) => { try { const response = await client.post("/domain_analytics/technologies/live", [{ target: params.domain }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Website Technologies tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== Backlinks API Tools =================== // Backlinks Overview Tool server.tool("DataForSEO_BacklinksOverview", { target: zod_1.z.string().describe("Target URL or domain"), limit: zod_1.z.number().optional().describe("Number of results to return") }, async (params) => { try { const response = await client.post("/backlinks/summary/live", [{ target: params.target, limit: params.limit || 100 }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Backlinks Overview tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Backlinks List Tool server.tool("DataForSEO_BacklinksList", { target: zod_1.z.string().describe("Target URL or domain"), limit: zod_1.z.number().optional().describe("Number of results to return") }, async (params) => { try { const response = await client.post("/backlinks/backlinks/live", [{ target: params.target, limit: params.limit || 100 }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Backlinks List tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== On-Page API Tools =================== // On-Page Analysis Tool server.tool("DataForSEO_OnPageAnalysis", { target: zod_1.z.string().describe("URL to analyze"), max_crawl_pages: zod_1.z.number().optional().describe("Maximum number of pages to crawl"), store_raw_html: zod_1.z.boolean().optional().describe("Whether to store raw HTML") }, async (params) => { try { const response = await client.post("/on_page/task_post", [{ target: params.target, max_crawl_pages: params.max_crawl_pages || 10, store_raw_html: params.store_raw_html || false }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in On-Page Analysis tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Instant Page Analysis Tool server.tool("DataForSEO_InstantPageAnalysis", { url: zod_1.z.string().describe("URL to analyze"), custom_js: zod_1.z.string().optional().describe("Custom JavaScript to execute on the page") }, async (params) => { try { const response = await client.post("/on_page/instant_pages", [{ url: params.url, custom_js: params.custom_js || "" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Instant Page Analysis tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== Merchant API Tools =================== // Google Shopping Search Tool server.tool("DataForSEO_GoogleShoppingSearch", { keyword: zod_1.z.string().describe("Search keyword for Google Shopping"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/merchant/google/search/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Google Shopping Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Amazon Product Search Tool server.tool("DataForSEO_AmazonProductSearch", { keyword: zod_1.z.string().describe("Search keyword for Amazon"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/merchant/amazon/search/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Amazon Product Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== Content Analysis API Tools =================== // Content Analysis Tool server.tool("DataForSEO_ContentAnalysis", { content: zod_1.z.string().describe("Text content to analyze"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/content_analysis/sentiment_analysis/live", [{ content: params.content, language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Content Analysis tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== App Data API Tools =================== // App Store Search Tool server.tool("DataForSEO_AppStoreSearch", { keyword: zod_1.z.string().describe("Search keyword for App Store"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/app_data/apple/app_store/search/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in App Store Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Google Play Search Tool server.tool("DataForSEO_GooglePlaySearch", { keyword: zod_1.z.string().describe("Search keyword for Google Play"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/app_data/google/play/search/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Google Play Search tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== Business Data API Tools =================== // Google Business Info Tool server.tool("DataForSEO_GoogleBusinessInfo", { keyword: zod_1.z.string().describe("Business name or keyword"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/business_data/google/my_business_info/live", [{ keyword: params.keyword, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Google Business Info tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // =================== DataForSEO Labs API Tools =================== // Domain Competitors Tool server.tool("DataForSEO_DomainCompetitors", { domain: zod_1.z.string().describe("Domain to analyze competitors for (e.g., 'example.com')"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')"), limit: zod_1.z.number().optional().describe("Number of results to return") }, async (params) => { try { const response = await client.post("/dataforseo_labs/domain_competitors/live", [{ target: params.domain, location_name: params.location_name || "United States", language_name: params.language_name || "English", limit: params.limit || 100 }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Domain Competitors tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Domain Intersection Tool server.tool("DataForSEO_DomainIntersection", { domains: zod_1.z.array(zod_1.z.string()).min(2).describe("Array of domains to compare (min 2)"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')"), limit: zod_1.z.number().optional().describe("Number of results to return") }, async (params) => { try { const response = await client.post("/dataforseo_labs/domain_intersection/live", [{ targets: params.domains, location_name: params.location_name || "United States", language_name: params.language_name || "English", limit: params.limit || 100 }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Domain Intersection tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); // Keyword Difficulty Tool server.tool("DataForSEO_KeywordDifficulty", { keywords: zod_1.z.array(zod_1.z.string()).describe("Array of keywords to analyze"), location_name: zod_1.z.string().optional().describe("Location name (e.g., 'United States')"), language_name: zod_1.z.string().optional().describe("Language name (e.g., 'English')") }, async (params) => { try { const response = await client.post("/dataforseo_labs/keyword_difficulty/live", [{ keywords: params.keywords, location_name: params.location_name || "United States", language_name: params.language_name || "English" }]); return { content: [ { type: "text", text: JSON.stringify(response, null, 2) } ] }; } catch (error) { console.error("Error in Keyword Difficulty tool:", error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ] }; } }); } //# sourceMappingURL=tools.js.map