Claude MCP Data Explorer

by tofunori
Verified
/** * Setup script for Claude MCP Data Explorer * This script configures the Claude Desktop application to use this MCP server. */ import fs from 'fs'; import path from 'path'; import os from 'os'; import { fileURLToPath } from 'url'; import { execSync } from 'child_process'; // Get the directory name of the current module const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // Get the path to Claude Desktop configuration file function getConfigPath() { if (process.platform === 'win32') { const appDataPath = process.env.APPDATA; if (!appDataPath) { console.error("APPDATA environment variable not found"); return null; } return path.join(appDataPath, "Claude", "claude_desktop_config.json"); } else if (process.platform === 'darwin') { // macOS return path.join(os.homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json"); } else { console.error(`Unsupported platform: ${process.platform}`); return null; } } // Update Claude Desktop configuration function updateClaudeConfig() { const configPath = getConfigPath(); if (!configPath) { return false; } // Create directory if it doesn't exist const configDir = path.dirname(configPath); if (!fs.existsSync(configDir)) { fs.mkdirSync(configDir, { recursive: true }); } // Load existing config or create a new one let config = {}; if (fs.existsSync(configPath)) { try { const configData = fs.readFileSync(configPath, 'utf8'); config = JSON.parse(configData); } catch (error) { console.error(`Error reading config file: ${error}`); } } // Update or create mcpServers section if (!config.mcpServers) { config.mcpServers = {}; } // Get the current directory path const currentDir = path.resolve(__dirname); // Add our server configuration - using the compiled JavaScript file config.mcpServers["claude-mcp-data-explorer"] = { "command": "node", "args": [ path.join(currentDir, "dist", "index.js") ] }; // Write updated config back to file try { fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); console.log(`Updated Claude Desktop config at ${configPath}`); return true; } catch (error) { console.error(`Error updating config file: ${error}`); return false; } } // Create necessary directories function createDirectories() { // Create logs directory if (!fs.existsSync("logs")) { fs.mkdirSync("logs"); } // Create data directory for sample data if (!fs.existsSync("data")) { fs.mkdirSync("data"); } // Create dist directory if it doesn't exist if (!fs.existsSync("dist")) { fs.mkdirSync("dist"); } } // Build the TypeScript code function buildTypeScript() { try { console.log("Building TypeScript..."); execSync("npm run build", { stdio: 'inherit' }); return true; } catch (error) { console.error(`Error building TypeScript: ${error}`); return false; } } // Main function function main() { console.log("Starting Claude MCP Data Explorer setup..."); // Check Node.js version const nodeVersion = process.versions.node.split('.').map(Number); if (nodeVersion[0] < 16) { console.error(`Node.js 16+ is required. Found Node.js ${process.versions.node}`); return false; } // Create necessary directories createDirectories(); // Build TypeScript code if (!buildTypeScript()) { console.error("Failed to build TypeScript code"); return false; } // Update Claude Desktop config if (!updateClaudeConfig()) { console.error("Failed to update Claude Desktop configuration"); return false; } console.log("\n================================================="); console.log("Setup completed successfully!"); console.log("Please complete these steps:"); console.log("1. Restart Claude Desktop app"); console.log("2. In Claude Desktop, enable Developer Mode from Help menu"); console.log("3. Check the MCP Log File for connection status"); console.log("================================================="); return true; } // Run the main function if (import.meta.url === `file://${process.argv[1]}`) { const success = main(); process.exit(success ? 0 : 1); }