Skip to main content
Glama
index.ts4.55 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { setupApiClient } from "./api/client.js"; import { registerSerpTools } from "./api/serp/index.js"; import { registerKeywordsTools } from "./api/keywords/index.js"; import { registerLabsTools } from "./api/labs/index.js"; import { registerBacklinksTools } from "./api/backlinks/index.js"; import { registerOnPageTools } from "./api/onpage/index.js"; import { registerDomainAnalyticsTools } from "./api/domain-analytics/index.js"; import { registerContentAnalysisTools } from "./api/content-analysis/index.js"; import { registerContentGenerationTools } from "./api/content-generation/index.js"; import { registerMerchantTools } from "./api/merchant/index.js"; import { registerAppDataTools } from "./api/app-data/index.js"; import { registerBusinessDataTools } from "./api/business-data/index.js"; import { registerLocalFalconTools } from "./api/localfalcon/index.js"; import { registerAiOptimizationTools } from "./api/ai-optimization/index.js"; async function main() { // Get authentication credentials from environment variables const dataForSeoLogin = process.env.DATAFORSEO_LOGIN; const dataForSeoPassword = process.env.DATAFORSEO_PASSWORD; if (!dataForSeoLogin || !dataForSeoPassword) { console.error("Error: DataForSEO API credentials not provided"); console.error("Please set DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD environment variables"); process.exit(1); } // Setup API client const apiClient = setupApiClient(dataForSeoLogin, dataForSeoPassword); // Create an MCP server const server = new McpServer({ name: "SEO Tools MCP Server", version: "1.0.0", }); // Parse enabled modules from environment variable // Format: ENABLED_MODULES="SERP,BUSINESS_DATA,LABS" (comma-separated) // If not set, all modules are enabled const enabledModulesEnv = process.env.ENABLED_MODULES; const enabledModules = enabledModulesEnv ? new Set(enabledModulesEnv.split(',').map(m => m.trim().toUpperCase())) : null; // null means all enabled const isEnabled = (module: string) => !enabledModules || enabledModules.has(module); // Register tools for each DataForSEO API category (conditionally) if (isEnabled('SERP')) registerSerpTools(server, apiClient); if (isEnabled('KEYWORDS_DATA')) registerKeywordsTools(server, apiClient); if (isEnabled('LABS') || isEnabled('DATAFORSEO_LABS')) registerLabsTools(server, apiClient); if (isEnabled('BACKLINKS')) registerBacklinksTools(server, apiClient); if (isEnabled('ONPAGE')) registerOnPageTools(server, apiClient); if (isEnabled('DOMAIN_ANALYTICS')) registerDomainAnalyticsTools(server, apiClient); if (isEnabled('CONTENT_ANALYSIS')) registerContentAnalysisTools(server, apiClient); if (isEnabled('CONTENT_GENERATION')) registerContentGenerationTools(server, apiClient); if (isEnabled('MERCHANT')) registerMerchantTools(server, apiClient); if (isEnabled('APP_DATA')) registerAppDataTools(server, apiClient); if (isEnabled('BUSINESS_DATA')) registerBusinessDataTools(server, apiClient); if (isEnabled('AI_OPTIMIZATION')) registerAiOptimizationTools(server, apiClient); console.error(`Enabled modules: ${enabledModules ? Array.from(enabledModules).join(', ') : 'ALL'}`); // Register third-party API tools // Local Falcon API (optional integration) const localFalconApiKey = process.env.LOCALFALCON_API_KEY; if (localFalconApiKey) { console.error("Local Falcon API key found - registering Local Falcon tools"); registerLocalFalconTools(server, { apiKey: localFalconApiKey, baseUrl: process.env.LOCALFALCON_API_URL // Optional, uses default if not provided }); } else { console.error("Local Falcon API key not found - skipping Local Falcon integration"); console.error("To enable, set the LOCALFALCON_API_KEY environment variable"); } // Add more third-party API integrations here // Example: // if (process.env.ANOTHER_SEO_TOOL_API_KEY) { // registerAnotherSeoToolTools(server, { apiKey: process.env.ANOTHER_SEO_TOOL_API_KEY }); // } // Start receiving messages on stdin and sending messages on stdout const transport = new StdioServerTransport(); console.error("SEO Tools MCP Server starting..."); await server.connect(transport); console.error("SEO Tools MCP Server connected"); } main().catch((error) => { console.error("Error in SEO Tools MCP Server:", error); process.exit(1); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Skobyn/dataforseo-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server