get_page_text
Extract visible text from web pages using Firefox browser automation. Input a CSS selector and tab ID to retrieve specific text content for automation or debugging purposes.
Instructions
Get visible text content
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| tabId | No |
Implementation Reference
- index-multi-debug.js:1248-1266 (handler)The core handler function for the 'get_page_text' tool. It retrieves the text content from a specified selector or the entire body of the page in the given tab using Playwright's page.textContent method, then returns it formatted for MCP response.async getPageText(args = {}) { this.ensureBrowserRunning(); const { selector, tabId } = args; const page = this.getPage(tabId); let text; if (selector) { text = await page.textContent(selector); } else { text = await page.textContent('body'); } return { content: [{ type: 'text', text: text || '' }] }; }
- index-multi-debug.js:200-209 (schema)Input schema definition for the get_page_text tool, specifying optional selector (CSS selector for specific element) and tabId (for multi-tab support).name: 'get_page_text', description: 'Get visible text content', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, tabId: { type: 'string' } } } },
- index-multi-debug.js:419-420 (registration)Registration in the tool dispatch switch statement within the CallToolRequestSchema handler, routing calls to the getPageText method.case 'get_page_text': return await this.getPageText(args);
- index-multi-debug.js:42-388 (registration)Tool list registration in ListToolsRequestSchema handler, including get_page_text in the advertised tools list with its schema.setupToolHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ // Original tools (abbreviated for space) { name: 'launch_firefox_multi', description: 'Launch Firefox browser with multi-tab support and debugging', inputSchema: { type: 'object', properties: { headless: { type: 'boolean', default: false }, enableDebugLogging: { type: 'boolean', default: true } } } }, { name: 'create_tab', description: 'Create a new tab with isolated session and debugging', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, url: { type: 'string', default: 'about:blank' }, contextId: { type: 'string' }, enableMonitoring: { type: 'boolean', default: true } }, required: ['tabId'] } }, { name: 'list_tabs', description: 'List all active tabs', inputSchema: { type: 'object', properties: {} } }, { name: 'close_tab', description: 'Close a specific tab', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } }, required: ['tabId'] } }, { name: 'navigate', description: 'Navigate to a URL', inputSchema: { type: 'object', properties: { url: { type: 'string' }, tabId: { type: 'string' } }, required: ['url'] } }, { name: 'click', description: 'Click on an element', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, coordinates: { type: 'object', properties: { x: { type: 'number' }, y: { type: 'number' } } }, tabId: { type: 'string' } } } }, { name: 'type_text', description: 'Type text into an input field', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, text: { type: 'string' }, tabId: { type: 'string' } }, required: ['selector', 'text'] } }, { name: 'send_key', description: 'Send keyboard events', inputSchema: { type: 'object', properties: { key: { type: 'string' }, selector: { type: 'string' }, modifiers: { type: 'array', items: { type: 'string' } }, repeat: { type: 'number', default: 1 }, tabId: { type: 'string' } }, required: ['key'] } }, { name: 'drag', description: 'Perform drag operation', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, fromCoordinates: { type: 'object', properties: { x: { type: 'number' }, y: { type: 'number' } } }, toCoordinates: { type: 'object', properties: { x: { type: 'number' }, y: { type: 'number' } } }, offsetX: { type: 'number' }, offsetY: { type: 'number' }, duration: { type: 'number', default: 0 }, steps: { type: 'number', default: 1 }, tabId: { type: 'string' } } } }, { name: 'execute_script', description: 'Execute JavaScript in the browser', inputSchema: { type: 'object', properties: { script: { type: 'string' }, tabId: { type: 'string' } }, required: ['script'] } }, { name: 'screenshot', description: 'Take a screenshot', inputSchema: { type: 'object', properties: { path: { type: 'string', default: 'screenshot.png' }, fullPage: { type: 'boolean', default: false }, tabId: { type: 'string' } } } }, { name: 'get_page_content', description: 'Get HTML content', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, tabId: { type: 'string' } } } }, { name: 'get_page_text', description: 'Get visible text content', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, tabId: { type: 'string' } } } }, { name: 'wait_for_element', description: 'Wait for element to appear', inputSchema: { type: 'object', properties: { selector: { type: 'string' }, timeout: { type: 'number', default: 30000 }, tabId: { type: 'string' } }, required: ['selector'] } }, { name: 'close_browser', description: 'Close browser and all tabs', inputSchema: { type: 'object', properties: {} } }, { name: 'get_current_url', description: 'Get current page URL', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } } } }, { name: 'back', description: 'Navigate back', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } } } }, { name: 'forward', description: 'Navigate forward', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } } } }, { name: 'reload', description: 'Reload page', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } } } }, { name: 'set_active_tab', description: 'Set active tab', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } }, required: ['tabId'] } }, // NEW DEBUG TOOLS { name: 'get_console_logs', description: 'Get captured console logs from browser', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, since: { type: 'number', description: 'Timestamp to filter logs since' }, types: { type: 'array', items: { type: 'string', enum: ['log', 'error', 'warn', 'info', 'debug'] }, description: 'Filter by log types' }, limit: { type: 'number', default: 50, description: 'Max number of logs to return' } } } }, { name: 'get_javascript_errors', description: 'Get captured JavaScript errors', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, since: { type: 'number' }, limit: { type: 'number', default: 20 } } } }, { name: 'get_network_activity', description: 'Get captured network requests and responses', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, since: { type: 'number' }, filter: { type: 'string', enum: ['all', 'xhr', 'websocket', 'fetch'], default: 'all' }, limit: { type: 'number', default: 30 } } } }, { name: 'get_websocket_messages', description: 'Get captured WebSocket messages (for LiveView debugging)', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, since: { type: 'number' }, limit: { type: 'number', default: 50 } } } }, { name: 'get_performance_metrics', description: 'Get performance metrics (timing, memory usage)', inputSchema: { type: 'object', properties: { tabId: { type: 'string' } } } }, { name: 'start_monitoring', description: 'Start/restart monitoring for a tab', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, types: { type: 'array', items: { type: 'string', enum: ['console', 'errors', 'network', 'websocket', 'performance'] }, default: ['console', 'errors', 'network', 'websocket'] } } } }, { name: 'clear_debug_buffers', description: 'Clear debug event buffers for a tab', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, types: { type: 'array', items: { type: 'string', enum: ['console', 'errors', 'network', 'websocket'] } } } } }, { name: 'get_all_debug_activity', description: 'Get combined feed of all debug events', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, since: { type: 'number' }, limit: { type: 'number', default: 100 } } } }, { name: 'inject_debugging_helpers', description: 'Inject debugging helper functions into the page', inputSchema: { type: 'object', properties: { tabId: { type: 'string' }, includeWebSocketMonitoring: { type: 'boolean', default: true } } } } ], };
- index-multi-debug.js:1021-1033 (helper)Helper method used by getPageText to resolve the target Page object from tabId or active tab.getPage(tabId) { if (tabId) { if (!this.pages.has(tabId)) { throw new Error(`Tab '${tabId}' not found`); } return this.pages.get(tabId); } else { if (!this.activeTabId || !this.pages.has(this.activeTabId)) { throw new Error('No active tab. Use create_tab or set_active_tab first.'); } return this.pages.get(this.activeTabId); } }