long_press
Simulate a long press at element or coordinates to open context menus or initiate text selection.
Instructions
Simulate long-press at coordinates or on an element. Useful for context menus or selection.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Element or position to long-press | |
| duration | No | Press duration in ms | |
| tabId | No | Target tab ID (defaults to currently active tab) | |
| apiKey | No | API key for authentication if enabled |
Implementation Reference
- src/tools/gestures.ts:67-89 (handler)The 'long_press' tool handler defined via server.tool(). It accepts a target, duration, tabId, and apiKey, sends a 'long_press' command via WebSocket bridge, and returns the result.
server.tool( 'long_press', 'Simulate long-press at coordinates or on an element. Useful for context menus or selection.', { target: targetSchema.describe('Element or position to long-press'), duration: z.number().optional().default(800).describe('Press duration in ms'), tabId: z.number().optional().describe('Target tab ID (defaults to currently active tab)'), apiKey: z.string().optional().describe('API key for authentication if enabled'), }, async ({ target, duration, tabId, apiKey }) => { const result = await bridge.sendCommand({ command: 'long_press', params: { target, duration }, tabId, apiKey, timeout: LONG_TIMEOUT + (duration || 800), }); if (!result.success) { return { content: [{ type: 'text', text: `Error: ${result.error?.message}` }], isError: true }; } return { content: [{ type: 'text', text: JSON.stringify(result.data, null, 2) }] }; } ); - src/tools/gestures.ts:6-15 (schema)The 'targetSchema' used by long_press (and other gesture tools) for input validation: accepts 'coordinates' (x,y), 'css', or 'xpath' target types.
const targetSchema = z.object({ type: z.enum(['coordinates', 'css', 'xpath']).describe('Method to locate: "css" (most reliable), "xpath", or "coordinates"'), value: z.union([ z.string().describe('CSS selector or XPath to element'), z.object({ x: z.number().describe('X coordinate in pixels'), y: z.number().describe('Y coordinate in pixels'), }).describe('Exact pixel coordinates'), ]).describe('The selector string or {x, y} coordinates object'), }); - src/tools/gestures.ts:70-74 (schema)Input schema for long_press tool: target (required), duration (optional, default 800ms), tabId (optional), apiKey (optional).
{ target: targetSchema.describe('Element or position to long-press'), duration: z.number().optional().default(800).describe('Press duration in ms'), tabId: z.number().optional().describe('Target tab ID (defaults to currently active tab)'), apiKey: z.string().optional().describe('API key for authentication if enabled'), - src/tools/index.ts:29-55 (registration)'registerGestureTools(server, bridge)' is called from registerAllTools() to register the long_press tool on the MCP server.
export function registerAllTools(server: McpServer, bridge: WebSocketBridge) { registerNavigationTools(server, bridge); registerTabManagementTools(server, bridge); registerKeyboardTools(server, bridge); registerScreenshotTools(server, bridge); registerClickTools(server, bridge); registerInputTools(server, bridge); registerDragDropTools(server, bridge); registerHoverTools(server, bridge); registerDevtoolsSourcesTools(server, bridge); registerDevtoolsModifyTools(server, bridge); registerDevtoolsNetworkTools(server, bridge); registerDevtoolsStorageTools(server, bridge); registerDevtoolsConsoleTools(server, bridge); registerAccessibilityTools(server, bridge); registerEmulationTools(server, bridge); registerElementTools(server, bridge); registerAuditTools(server, bridge); registerInteractionTools(server, bridge); registerMonitoringTools(server, bridge); registerQaTools(server, bridge); registerGestureTools(server, bridge); registerMacroTools(server, bridge); registerVisualRegressionTools(server, bridge); } - src/tools/index.ts:25-25 (registration)Import of 'registerGestureTools' from src/tools/gestures.ts.
import { registerGestureTools } from './gestures.js';