android_swipe
Perform swipe gestures on Android devices by specifying start and end coordinates, enabling navigation, scrolling, and interaction simulation.
Instructions
Perform a swipe gesture between two coordinates
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| startX | Yes | Starting X coordinate | |
| startY | Yes | Starting Y coordinate | |
| endX | Yes | Ending X coordinate | |
| endY | Yes | Ending Y coordinate | |
| duration | No | Swipe duration in milliseconds (default: 300) | |
| deviceSerial | No | Specific device serial number to target (optional) |
Implementation Reference
- src/handlers.ts:168-201 (handler)The main handler function for the android_swipe tool. Validates input arguments and calls the ADB swipe method.export async function swipeHandler( adb: ADBWrapper, args: any ): Promise<{ content: Array<{ type: string; text: string }> }> { const { startX, startY, endX, endY, duration = 300, deviceSerial } = args as SwipeArgs; if ( typeof startX !== 'number' || typeof startY !== 'number' || typeof endX !== 'number' || typeof endY !== 'number' ) { throw new Error('Invalid coordinates: all coordinates must be numbers'); } if (startX < 0 || startY < 0 || endX < 0 || endY < 0) { throw new Error('Invalid coordinates: all coordinates must be positive'); } try { await adb.swipe(startX, startY, endX, endY, duration, deviceSerial); return { content: [ { type: 'text', text: `Swipe executed from (${startX}, ${startY}) to (${endX}, ${endY}) over ${duration}ms`, }, ], }; } catch (error) { throw new Error(`Swipe failed: ${error instanceof Error ? error.message : String(error)}`); } }
- src/index.ts:85-119 (schema)Input schema definition for the android_swipe tool, used in tool listing and validation.{ name: 'android_swipe', description: 'Perform a swipe gesture between two coordinates', inputSchema: { type: 'object', properties: { startX: { type: 'number', description: 'Starting X coordinate', }, startY: { type: 'number', description: 'Starting Y coordinate', }, endX: { type: 'number', description: 'Ending X coordinate', }, endY: { type: 'number', description: 'Ending Y coordinate', }, duration: { type: 'number', description: 'Swipe duration in milliseconds (default: 300)', default: 300, }, deviceSerial: { type: 'string', description: 'Specific device serial number to target (optional)', }, }, required: ['startX', 'startY', 'endX', 'endY'], }, },
- src/index.ts:468-469 (registration)Registration of the android_swipe handler in the CallToolRequest switch statement.case 'android_swipe': return await swipeHandler(this.adb, args);
- src/handlers.ts:15-22 (schema)TypeScript interface defining the SwipeArgs used for type checking in the handler.interface SwipeArgs { startX: number; startY: number; endX: number; endY: number; duration?: number; deviceSerial?: string; }
- src/adb-wrapper.ts:316-339 (helper)Low-level ADB wrapper method that executes the actual swipe gesture using ADB shell input swipe command.async swipe( startX: number, startY: number, endX: number, endY: number, duration: number = 300, deviceSerial?: string ): Promise<void> { const device = await this.getTargetDevice(deviceSerial); await this.exec( [ 'shell', 'input', 'swipe', String(startX), String(startY), String(endX), String(endY), String(duration), ], device ); }