UNPKG

@aiondadotcom/mcp-salesforce

Version:

Model Context Protocol (MCP) server for Salesforce integration using OAuth authentication

128 lines (106 loc) โ€ข 3.68 kB
#!/usr/bin/env node import { config } from 'dotenv'; import { TokenManager } from '../src/auth/token-manager.js'; // Load environment variables config(); class StatusChecker { constructor() { this.requiredEnvVars = [ 'SALESFORCE_CLIENT_ID', 'SALESFORCE_CLIENT_SECRET', 'SALESFORCE_INSTANCE_URL' ]; } async checkStatus() { console.log('๐Ÿ” MCP Salesforce Server Status Check'); console.log('=====================================\n'); // Check environment console.log('๐Ÿ“‹ Environment Configuration:'); const envStatus = this.checkEnvironment(); if (!envStatus.valid) { console.log('\nโŒ Environment configuration incomplete. Please run setup first.'); return; } // Check authentication console.log('\n๐Ÿ” Authentication Status:'); await this.checkAuthentication(); console.log('\n๐Ÿ’ก Next Steps:'); console.log('- If authentication failed, run: npm run setup'); console.log('- If successful, add to Claude Desktop configuration'); console.log('- Use npm run config-help for Connected App setup'); } checkEnvironment() { const missing = []; const config = {}; for (const envVar of this.requiredEnvVars) { const value = process.env[envVar]; if (!value) { missing.push(envVar); console.log(`โŒ ${envVar}: Not set`); } else { config[envVar] = value; console.log(`โœ… ${envVar}: ${this.maskSensitive(envVar, value)}`); } } if (missing.length > 0) { console.log('\nโŒ Missing environment variables:'); missing.forEach(envVar => console.log(` - ${envVar}`)); return { valid: false, missing }; } return { valid: true, config }; } async checkAuthentication() { try { const tokenManager = new TokenManager( process.env.SALESFORCE_CLIENT_ID, process.env.SALESFORCE_CLIENT_SECRET, process.env.SALESFORCE_INSTANCE_URL ); const hasTokens = await tokenManager.initialize(); if (!hasTokens) { console.log('โŒ No authentication tokens found'); console.log(' Run: npm run setup'); return false; } const tokenInfo = tokenManager.getTokenInfo(); console.log('โœ… Tokens found in Keychain'); console.log(` Instance: ${tokenInfo.instance_url}`); if (tokenInfo.expires_at) { const expiresIn = Math.round((tokenInfo.expires_at - Date.now()) / (1000 * 60)); console.log(` Expires: ${expiresIn} minutes`); } // Test the tokens console.log('๐Ÿงช Testing token validity...'); const testResult = await tokenManager.testTokens(); if (testResult.valid) { console.log('โœ… Authentication successful!'); console.log(` API versions available: ${testResult.apiVersions}`); return true; } else { console.log(`โŒ Token validation failed: ${testResult.error}`); console.log(' Run: npm run setup'); return false; } } catch (error) { console.log(`โŒ Authentication check failed: ${error.message}`); return false; } } maskSensitive(key, value) { if (key.includes('SECRET')) { return value.substring(0, 8) + '***'; } if (key.includes('CLIENT_ID')) { return value.substring(0, 12) + '***'; } return value; } } // Run status check if called directly if (import.meta.url === `file://${process.argv[1]}`) { const checker = new StatusChecker(); checker.checkStatus().catch(error => { console.error('โŒ Status check failed:', error.message); process.exit(1); }); }