UNPKG

okta-mcp-server

Version:

Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching

136 lines • 4.68 kB
#!/usr/bin/env node import { spawn } from 'child_process'; import readline from 'readline'; const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); async function interactiveTest() { console.log('Starting Okta MCP Server Interactive Test...\n'); // Spawn the server const server = spawn('node', ['dist/server.js'], { stdio: ['pipe', 'pipe', 'pipe'], // pipe stderr separately env: process.env, }); let messageId = 1; let buffer = ''; // Process server stderr (logs) separately server.stderr.on('data', (data) => { // Optionally show debug logs if (process.env['DEBUG']) { console.error('[LOG]', data.toString()); } }); // Process server stdout (JSON-RPC responses) server.stdout.on('data', (data) => { buffer += data.toString(); const lines = buffer.split('\n'); buffer = lines.pop() || ''; for (const line of lines) { if (line.trim()) { try { const response = JSON.parse(line); if (response.result) { console.log('\nāœ… Response:', JSON.stringify(response.result, null, 2)); showMenu(); rl.question('Select option: ', () => { }); } else if (response.error) { console.error('\nāŒ Error:', response.error); showMenu(); rl.question('Select option: ', () => { }); } } catch (e) { console.error('Failed to parse:', line); } } } }); // Helper to send request function sendRequest(method, params) { const request = { jsonrpc: '2.0', id: messageId++, method, params: params || {}, }; server.stdin.write(JSON.stringify(request) + '\n'); } // Wait for server to start await new Promise((resolve) => setTimeout(resolve, 1000)); // Initialize console.log('Initializing connection...'); sendRequest('initialize', { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'interactive-test', version: '1.0.0', }, }); await new Promise((resolve) => setTimeout(resolve, 500)); // Show menu function showMenu() { console.log('\nšŸ“‹ Available Commands:'); console.log(' 1. List tools'); console.log(' 2. List 5 users'); console.log(' 3. Search active users'); console.log(' 4. Get specific user'); console.log(' 5. List resources'); console.log(' 6. Exit'); console.log(''); } // Show initial menu and prompt showMenu(); rl.question('Select option: ', () => { }); // Interactive prompt handler rl.on('line', async (input) => { switch (input.trim()) { case '1': console.log('\nListing tools...'); sendRequest('tools/list'); break; case '2': console.log('\nListing 5 users...'); sendRequest('tools/call', { name: 'listUsers', arguments: { limit: 5 }, }); break; case '3': console.log('\nSearching for active users...'); sendRequest('tools/call', { name: 'listUsers', arguments: { filter: 'status eq "ACTIVE"', limit: 5, }, }); break; case '4': rl.question('Enter user ID or email: ', (userId) => { sendRequest('tools/call', { name: 'getUser', arguments: { userIdOrLogin: userId }, }); }); break; case '5': console.log('\nListing resources...'); sendRequest('resources/list'); break; case '6': console.log('\nShutting down...'); server.kill(); process.exit(0); break; default: console.log('Invalid option'); showMenu(); rl.question('Select option: ', () => { }); } }); } interactiveTest().catch(console.error); //# sourceMappingURL=test-interactive.js.map