check_scrollability
Determine if a web page is scrollable in a specified direction (vertical, horizontal, or both) using the MCP Browser Server to automate web interaction and analysis.
Instructions
Check if the page is scrollable in the specified direction
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | Direction to check for scrollability | both |
Implementation Reference
- src/index.ts:809-906 (handler)Handler for 'check_scrollability' tool: evaluates page scroll dimensions and viewport to determine vertical/horizontal scrollability, current position, and possible scroll directions. Returns formatted text response.
case 'check_scrollability': { if (!currentPage) { throw new Error('No browser page available. Launch a browser first.'); } const params = CheckScrollabilitySchema.parse(args); const { direction } = params; // Check scrollability with proper typing const scrollInfo = await currentPage.evaluate((dir) => { const documentHeight = Math.max( document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight ); const documentWidth = Math.max( document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth ); const viewportHeight = window.innerHeight; const viewportWidth = window.innerWidth; const verticalScrollable = documentHeight > viewportHeight; const horizontalScrollable = documentWidth > viewportWidth; const currentScrollY = window.scrollY; const currentScrollX = window.scrollX; const maxScrollY = Math.max(0, documentHeight - viewportHeight); const maxScrollX = Math.max(0, documentWidth - viewportWidth); const verticalInfo = { scrollable: verticalScrollable, currentPosition: currentScrollY, maxScroll: maxScrollY, canScrollDown: currentScrollY < maxScrollY, canScrollUp: currentScrollY > 0 }; const horizontalInfo = { scrollable: horizontalScrollable, currentPosition: currentScrollX, maxScroll: maxScrollX, canScrollRight: currentScrollX < maxScrollX, canScrollLeft: currentScrollX > 0 }; return { direction: dir, vertical: verticalInfo, horizontal: horizontalInfo, anyScrollable: verticalScrollable || horizontalScrollable }; }, direction); // Format the response message based on direction let message = ''; if (direction === 'both') { const v = scrollInfo.vertical; const h = scrollInfo.horizontal; message = `Page scrollability status: Vertical: ${v.scrollable ? 'Scrollable' : 'Not scrollable'}${v.scrollable ? ` (${v.currentPosition}/${v.maxScroll})` : ''} Horizontal: ${h.scrollable ? 'Scrollable' : 'Not scrollable'}${h.scrollable ? ` (${h.currentPosition}/${h.maxScroll})` : ''} Overall: ${scrollInfo.anyScrollable ? 'Page is scrollable' : 'Page is not scrollable'}`; } else if (direction === 'vertical') { const v = scrollInfo.vertical; message = `Vertical scrolling: ${v.scrollable ? 'Available' : 'Not available'}`; if (v.scrollable) { message += `\nPosition: ${v.currentPosition}/${v.maxScroll}`; message += `\nCan scroll up: ${v.canScrollUp}`; message += `\nCan scroll down: ${v.canScrollDown}`; } } else { const h = scrollInfo.horizontal; message = `Horizontal scrolling: ${h.scrollable ? 'Available' : 'Not available'}`; if (h.scrollable) { message += `\nPosition: ${h.currentPosition}/${h.maxScroll}`; message += `\nCan scroll left: ${h.canScrollLeft}`; message += `\nCan scroll right: ${h.canScrollRight}`; } } return { content: [ { type: 'text', text: message } ] }; } - src/index.ts:78-80 (schema)Zod schema defining input for check_scrollability: optional direction ('vertical', 'horizontal', 'both').
const CheckScrollabilitySchema = z.object({ direction: z.enum(['vertical', 'horizontal', 'both']).default('both') }); - src/index.ts:387-400 (registration)Tool registration in ListTools response: defines name, description, and inputSchema for check_scrollability.
{ name: 'check_scrollability', description: 'Check if the page is scrollable in the specified direction', inputSchema: { type: 'object', properties: { direction: { type: 'string', enum: ['vertical', 'horizontal', 'both'], default: 'both', description: 'Direction to check for scrollability' } } }