Hello-MCP

by hongsw
Verified
import { exec } from 'child_process'; import os from 'os'; import fs from 'fs'; import path from 'path'; import { time } from 'console'; // Claude Desktop이 설치되어 있는지 확인 function isClaudeDesktopInstalled() { const platform = process.platform; let claudePath = ''; if (platform === 'darwin') { // macOS claudePath = '/Applications/Claude.app'; } else if (platform === 'win32') { // Windows const programFiles = process.env['ProgramFiles'] || 'C:\\Program Files'; claudePath = path.join(programFiles, 'Claude', 'Claude.exe'); const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)'; const alternativePath = path.join(programFilesX86, 'Claude', 'Claude.exe'); if (fs.existsSync(alternativePath)) { return true; } } else { // Linux const homedir = os.homedir(); claudePath = path.join(homedir, '.local', 'share', 'Claude', 'Claude'); } return fs.existsSync(claudePath); } // Claude Desktop 재시작 function restartClaudeDesktop() { return new Promise((resolve, reject) => { // OS별 명령어 let command = ''; if (process.platform === 'darwin') { // macOS command = 'pkill -f "Claude" && sleep 1.5 && open -a Claude'; } else if (process.platform === 'win32') { // Windows command = 'taskkill /F /IM "Claude.exe" && timeout /t 2 && start "" "Claude.exe"'; } else { // Linux or other OS console.log('Linux에서는 Claude Desktop을 수동으로 재시작해주세요.'); resolve(false); return; } console.log('Restarting Claude Desktop...'); exec(command, (error) => { if (error) { // 실행 중인 Claude가 없는 경우 - 오류가 아님 if (error.code === 1) { // Claude 시작 let startCommand = ''; if (process.platform === 'darwin') { startCommand = 'open -a Claude'; } else if (process.platform === 'win32') { startCommand = 'start "" "Claude.exe"'; } exec(startCommand, (startError) => { if (startError) { console.log('Claude Desktop을 시작할 수 없습니다. 수동으로 실행해주세요.'); resolve(false); } else { resolve(true); } }); } else { console.log('Claude Desktop을 재시작할 수 없습니다. 수동으로 재시작해주세요.'); resolve(false); } } else { resolve(true); } }); }); } // 오류 메시지 및 해결 가이드 제공 function getTroubleshootingGuide(errorType) { const guides = { 'claude-service-disruption': { title: 'Claude Service Disruption', description: 'Claude Desktop에서 "Claude will return Soon, Claude ai is currently experiencing a temporary service disruption" 오류가 발생했습니다.', steps: [ '1. Claude Desktop 앱을 완전히 종료한 후 다시 시작해보세요.', '2. 인터넷 연결 상태를 확인하세요.', '3. 앤트로픽(Anthropic)의 서비스 상태 확인: https://status.anthropic.com/', '4. 문제가 지속되면 몇 시간 후에 다시 시도하세요. 앤트로픽 서버의 일시적인 문제일 수 있습니다.' ] }, 'website-invalid': { title: 'Website Invalid', description: '웹사이트 접속 중 오류가 발생했습니다.', steps: [ '1. 인터넷 연결 상태를 확인하세요.', '2. 브라우저 캐시를 삭제한 후 다시 시도해보세요.', '3. 다른 브라우저를 사용해보세요.', '4. 아래 주소로 직접 접속해보세요: https://garak.ai/getting-started', '5. 오류가 지속되면 help@garak.ai로 문의해주세요.' ] }, 'email-error': { title: 'Email Sending Error', description: '이메일 전송 중 오류가 발생했습니다.', steps: [ '1. 이메일 주소가 올바른지 확인하세요.', '2. 인터넷 연결 상태를 확인하세요.', '3. API 키가 유효한지 확인하세요. `npx hello-mcp` 명령어로 새 API 키를 발급받을 수 있습니다.', '4. 메시지 본문이 너무 길면(200자 이상) 분할하여 전송해보세요.', '5. 오류가 지속되면 help@garak.ai로 문의해주세요.' ] } }; return guides[errorType] || { title: 'General Troubleshooting', description: '문제가 발생했습니다.', steps: [ '1. Claude Desktop을 재시작해보세요.', '2. 인터넷 연결을 확인하세요.', '3. `npx hello-mcp` 명령어로 설정을 다시 실행해보세요.', '4. 문제가 지속되면 help@garak.ai 또는 GitHub 이슈(https://github.com/hongsw/hello-mcp/issues)로 문의해주세요.' ] }; } export { restartClaudeDesktop, isClaudeDesktopInstalled, getTroubleshootingGuide };