Skip to main content
Glama
cleanup-credentials.js•3.5 kB
#!/usr/bin/env node import * as fs from 'fs'; import * as path from 'path'; import * as readline from 'readline'; const HOME_DIR = process.env.HOME || ""; const CREDENTIALS_PATH = path.join(HOME_DIR, ".google-sheets-mcp-credentials.json"); const TOKEN_PATH = path.join(HOME_DIR, ".google-sheets-mcp-token.json"); const CLAUDE_SETTINGS_PATH = path.join(HOME_DIR, ".claude", "settings.json"); async function askQuestion(question) { const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); return new Promise((resolve) => { rl.question(question, (answer) => { rl.close(); resolve(answer.trim().toLowerCase()); }); }); } async function cleanup() { console.log('\n🧹 Google Sheets MCP Credential Cleanup'); console.log('═'.repeat(60)); console.log(); console.log('This script will remove:'); console.log(' 1. OAuth credentials file'); console.log(' 2. Authentication token file'); console.log(' 3. MCP server configuration from Claude settings (optional)'); console.log(); const answer = await askQuestion('āš ļø Are you sure you want to remove all credentials? (yes/no): '); if (answer !== 'yes' && answer !== 'y') { console.log('\nāŒ Cleanup cancelled.'); process.exit(0); } console.log(); let removedCount = 0; // Remove credentials file if (fs.existsSync(CREDENTIALS_PATH)) { fs.unlinkSync(CREDENTIALS_PATH); console.log('āœ… Removed OAuth credentials:', CREDENTIALS_PATH); removedCount++; } else { console.log('ā„¹ļø OAuth credentials file not found (already removed)'); } // Remove token file if (fs.existsSync(TOKEN_PATH)) { fs.unlinkSync(TOKEN_PATH); console.log('āœ… Removed authentication token:', TOKEN_PATH); removedCount++; } else { console.log('ā„¹ļø Token file not found (already removed)'); } // Ask about removing from Claude settings console.log(); const removeFromClaude = await askQuestion('Remove Google Sheets MCP server from Claude settings? (yes/no): '); if (removeFromClaude === 'yes' || removeFromClaude === 'y') { if (fs.existsSync(CLAUDE_SETTINGS_PATH)) { try { const content = fs.readFileSync(CLAUDE_SETTINGS_PATH, 'utf-8'); const settings = JSON.parse(content); if (settings.mcpServers && settings.mcpServers['google-sheets']) { delete settings.mcpServers['google-sheets']; fs.writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n'); console.log('āœ… Removed MCP server from Claude settings'); removedCount++; } else { console.log('ā„¹ļø MCP server not found in Claude settings (already removed)'); } } catch (error) { console.error('āš ļø Could not update Claude settings:', error.message); } } else { console.log('ā„¹ļø Claude settings file not found'); } } console.log(); console.log('═'.repeat(60)); if (removedCount > 0) { console.log(`āœ… Cleanup complete! Removed ${removedCount} item(s).`); } else { console.log('ā„¹ļø No credentials found to remove.'); } console.log('═'.repeat(60)); console.log(); if (removeFromClaude === 'yes' || removeFromClaude === 'y') { console.log('āš ļø Don\'t forget to restart Claude Code for changes to take effect!'); console.log(); } } cleanup().catch(error => { console.error('āŒ Error during cleanup:', error.message); process.exit(1); });

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/saturnino-adrales/gdocs-mcp'

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