Skip to main content
Glama

hover

Simulate mouse hover interactions on web elements to trigger dynamic content like dropdown menus, tooltips, or hover effects for automated browser testing and interaction.

Instructions

Hover over an element on the page

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
selectorYesCSS selector for the element
timeoutNoTimeout in milliseconds
tabIdNoTab ID to operate on (uses active tab if not specified)

Implementation Reference

  • Zod schema for hover tool input: requires CSS selector, optional timeout (ms), optional tabId.
    export const hoverSchema = z.object({ selector: selectorSchema, timeout: timeoutSchema, tabId: tabIdSchema, });
  • Registers the 'hover' MCP tool with server.tool(): description, input schema, and inline handler that waits for element by selector and calls element.hover() using Playwright.
    // Hover over element server.tool( 'hover', 'Hover over an element on the page', hoverSchema.shape, async ({ selector, timeout, tabId }) => { const pageResult = await getPageForOperation(tabId); if (!pageResult.success) { return handleResult(pageResult); } const page = pageResult.data; const timeoutMs = timeout ?? getDefaultTimeout(); try { const element = await page.waitForSelector(selector, { timeout: timeoutMs, }); if (!element) { return handleResult(err(selectorNotFound(selector))); } await element.hover(); return handleResult(ok({ hovered: true, selector })); } catch (error) { if (error instanceof Error && error.message.includes('waiting for selector')) { return handleResult(err(selectorNotFound(selector))); } return handleResult(err(normalizeError(error))); } } );
  • src/server.ts:24-24 (registration)
    Invokes registerInteractionTools(server) within createServer() to register all interaction tools, including 'hover'.
    registerInteractionTools(server);
  • Inline handler function for hover tool: gets page, waits for selector, hovers element, handles errors appropriately.
    async ({ selector, timeout, tabId }) => { const pageResult = await getPageForOperation(tabId); if (!pageResult.success) { return handleResult(pageResult); } const page = pageResult.data; const timeoutMs = timeout ?? getDefaultTimeout(); try { const element = await page.waitForSelector(selector, { timeout: timeoutMs, }); if (!element) { return handleResult(err(selectorNotFound(selector))); } await element.hover(); return handleResult(ok({ hovered: true, selector })); } catch (error) { if (error instanceof Error && error.message.includes('waiting for selector')) { return handleResult(err(selectorNotFound(selector))); } return handleResult(err(normalizeError(error))); } }

Latest Blog Posts

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/andytango/puppeteer-mcp'

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