Skip to main content
Glama

Puppeteer Real Browser MCP Server

by withLinda
phase2-browser-tests.js•5.66 kB
const MCPTestClient = require('./mcp-test-client'); class Phase2BrowserTests { constructor(logger) { this.logger = logger; this.client = new MCPTestClient(logger); } async run() { this.logger.startPhase('Phase 2', 'Basic Browser Operations'); try { await this.client.start(); await this.client.initialize(); // Test 2.1: Browser Initialization await this.testBrowserInitialization(); // Test 2.2: Simple Navigation await this.testSimpleNavigation(); // Test 2.3: Multiple Browser Modes await this.testBrowserModes(); } catch (error) { this.logger.log(`Phase 2 critical error: ${error.message}`, 'ERROR'); } finally { await this.client.stop(); this.logger.endPhase('Phase 2'); } } async testBrowserInitialization() { try { const startTime = Date.now(); const result = await this.client.callTool('browser_init', { headless: true }); const duration = Date.now() - startTime; if (result && result.content && result.content.length > 0) { this.logger.logTest('Phase 2', 'Browser Initialization (Headless)', 'passed', { duration: `${duration}ms`, message: result.content[0].text }); } else { this.logger.logTest('Phase 2', 'Browser Initialization (Headless)', 'failed', { error: result?.error || 'Unknown error' }); } // Clean up await this.client.callTool('browser_close'); } catch (error) { this.logger.logTest('Phase 2', 'Browser Initialization (Headless)', 'failed', { error: error.message }); } } async testSimpleNavigation() { let browserInitialized = false; try { // Initialize browser const initResult = await this.client.callTool('browser_init', { headless: true }); if (!initResult?.content || initResult.content.length === 0) { throw new Error('Failed to initialize browser'); } browserInitialized = true; // Navigate to example.com const navStartTime = Date.now(); const navResult = await this.client.callTool('navigate', { url: 'https://example.com', waitUntil: 'networkidle2' }); const navDuration = Date.now() - navStartTime; if (navResult?.content && navResult.content.length > 0) { this.logger.logTest('Phase 2', 'Navigation to example.com', 'passed', { duration: `${navDuration}ms`, retries: navResult.retries || 0 }); } else { this.logger.logTest('Phase 2', 'Navigation to example.com', 'failed', { error: navResult?.error || 'Navigation failed' }); return; } // Get page content const contentResult = await this.client.callTool('get_content', { type: 'text' }); if (contentResult?.content && contentResult.content.length > 0) { const textContent = contentResult.content[0]?.text || ''; this.logger.logTest('Phase 2', 'Get Page Content', 'passed', { contentLength: textContent.length, hasExampleText: textContent.includes('Example Domain') }); } else { this.logger.logTest('Phase 2', 'Get Page Content', 'failed', { error: contentResult?.error || 'Content retrieval failed' }); } } catch (error) { this.logger.logTest('Phase 2', 'Simple Navigation Test', 'failed', { error: error.message }); } finally { if (browserInitialized) { try { const closeResult = await this.client.callTool('browser_close'); this.logger.logTest('Phase 2', 'Browser Cleanup', (closeResult?.content && closeResult.content.length > 0) ? 'passed' : 'failed', {}); } catch (error) { this.logger.log(`Failed to close browser: ${error.message}`, 'ERROR'); } } } } async testBrowserModes() { // Test non-headless mode let browserInitialized = false; try { const startTime = Date.now(); const result = await this.client.callTool('browser_init', { headless: false }); const duration = Date.now() - startTime; if (result && result.content && result.content.length > 0) { browserInitialized = true; this.logger.logTest('Phase 2', 'Browser Initialization (Non-Headless)', 'passed', { duration: `${duration}ms`, antiDetectionEnabled: result.message?.includes('anti-detection') }); // Quick navigation test in non-headless mode const navResult = await this.client.callTool('navigate', { url: 'https://httpbin.org/user-agent' }); if (navResult?.content && navResult.content.length > 0) { this.logger.logTest('Phase 2', 'Non-Headless Navigation', 'passed', {}); } else { this.logger.logTest('Phase 2', 'Non-Headless Navigation', 'failed', { error: navResult?.error }); } } else { this.logger.logTest('Phase 2', 'Browser Initialization (Non-Headless)', 'failed', { error: result?.error || 'Unknown error' }); } } catch (error) { this.logger.logTest('Phase 2', 'Browser Modes Test', 'failed', { error: error.message }); } finally { if (browserInitialized) { await this.client.callTool('browser_close'); } } } } module.exports = Phase2BrowserTests;

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/withLinda/puppeteer-real-browser-mcp-server'

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