@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
JavaScript
;
/**
* 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);
}