UNPKG

@cequenceai/mcp-cli

Version:

Cequence MCP CLI - Command-line tool for setting up Cequence MCP servers with AI clients

117 lines (116 loc) โ€ข 4.72 kB
#!/usr/bin/env node "use strict"; /** * Token Refresh Testing Utility * This script helps test the improved mcp-remote with automatic token refresh */ Object.defineProperty(exports, "__esModule", { value: true }); exports.testTokenRefresh = testTokenRefresh; const child_process_1 = require("child_process"); const validation_1 = require("./validation"); /** * Tests the token refresh functionality by running mcp-remote with monitoring */ async function testTokenRefresh(config) { console.log('๐Ÿงช Testing Token Refresh Functionality'); console.log('====================================='); console.log(`๐Ÿ“ฆ Using package: ${(0, validation_1.getMcpRemotePackage)()}`); console.log(`๐Ÿ”— Server URL: ${config.serverUrl}`); console.log(`โฑ๏ธ Test duration: ${config.testDuration || 10} minutes`); console.log(''); const args = ['-y', (0, validation_1.getMcpRemotePackage)(), config.serverUrl]; console.log(`๐Ÿš€ Starting mcp-remote with command: npx ${args.join(' ')}`); console.log(''); // Set up environment variables const env = { ...process.env }; if (config.apiKey) { env.API_KEY = config.apiKey; env.MCP_API_KEY = config.apiKey; } // Enable debug logging to see token refresh activities env.DEBUG = 'mcp-remote:*'; env.MCP_DEBUG = 'true'; const child = (0, child_process_1.spawn)('npx', args, { stdio: 'pipe', env }); let tokenRefreshCount = 0; let authenticationCount = 0; let lastTokenRefresh = 0; // Monitor stdout for token refresh activities child.stdout.on('data', (data) => { const output = data.toString(); console.log(`๐Ÿ“ค STDOUT: ${output.trim()}`); // Look for token refresh indicators if (output.includes('Token refresh successful') || output.includes('refreshing token')) { tokenRefreshCount++; lastTokenRefresh = Date.now(); console.log(`โœ… Token refresh detected! Count: ${tokenRefreshCount}`); } // Look for authentication requests if (output.includes('Authentication required') || output.includes('Initializing auth')) { authenticationCount++; console.log(`๐Ÿ” Authentication request detected! Count: ${authenticationCount}`); } }); // Monitor stderr for errors child.stderr.on('data', (data) => { const output = data.toString(); console.log(`๐Ÿ“ฅ STDERR: ${output.trim()}`); // Look for token refresh errors if (output.includes('Token refresh failed') || output.includes('refresh token')) { console.log('โŒ Token refresh error detected!'); } }); // Handle process exit child.on('close', (code) => { console.log(''); console.log('๐Ÿ“Š Test Results'); console.log('==============='); console.log(`Exit code: ${code}`); console.log(`Token refreshes: ${tokenRefreshCount}`); console.log(`Authentication requests: ${authenticationCount}`); console.log(`Last token refresh: ${lastTokenRefresh ? new Date(lastTokenRefresh).toISOString() : 'Never'}`); if (tokenRefreshCount > 0) { console.log('โœ… Token refresh is working!'); } else if (authenticationCount > 1) { console.log('โš ๏ธ Multiple authentication requests detected - token refresh may not be working'); } else { console.log('โ„น๏ธ No token refresh activity detected (this might be normal for short tests)'); } }); // Run for specified duration const duration = (config.testDuration || 10) * 60 * 1000; // Convert to milliseconds setTimeout(() => { console.log('\nโฐ Test duration reached, stopping...'); child.kill('SIGTERM'); }, duration); // Handle Ctrl+C process.on('SIGINT', () => { console.log('\n๐Ÿ›‘ Test interrupted by user'); child.kill('SIGTERM'); process.exit(0); }); } /** * CLI interface for the test utility */ if (require.main === module) { const args = process.argv.slice(2); if (args.length === 0) { console.log('Usage: ts-node test-token-refresh.ts <server-url> [api-key] [duration-minutes]'); console.log(''); console.log('Examples:'); console.log(' ts-node test-token-refresh.ts https://your-server.com'); console.log(' ts-node test-token-refresh.ts https://your-server.com your-api-key 15'); process.exit(1); } const config = { serverUrl: args[0], apiKey: args[1], testDuration: args[2] ? parseInt(args[2]) : 10 }; testTokenRefresh(config).catch(console.error); }