Skip to main content
Glama

shake

Simulate device shaking on Android or iOS for automation testing by specifying duration, intensity, and platform. Simplify testing gestures with precise control.

Instructions

Shake the device

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
durationNoDuration of the shake in milliseconds (default: 1000)
intensityNoIntensity of the shake acceleration (default: 100)
platformYesPlatform of the device

Implementation Reference

  • Shake class implementing the core shake logic using ADB emulator sensor commands to simulate device shaking.
    export class Shake extends BaseVisualChange { constructor(device: BootedDevice, adb: AdbUtils | null = null, axe: Axe | null = null) { super(device, adb, axe); } async execute( options: ShakeOptions = {}, progress?: ProgressCallback ): Promise<ShakeResult> { const duration = options.duration ?? 1000; // Default 1 second const intensity = options.intensity ?? 100; // Default intensity of 100 return this.observedInteraction( async () => { try { // Start the shake by setting high acceleration values await this.adb.executeCommand(`emu sensor set acceleration ${intensity}:${intensity}:${intensity}`); logger.info(`Started shake with intensity ${intensity} for ${duration}ms`); // Wait for the specified duration await new Promise(resolve => setTimeout(resolve, duration)); // Stop the shake by resetting acceleration to 0 await this.adb.executeCommand(`emu sensor set acceleration 0:0:0`); logger.info("Shake completed"); return { success: true, duration, intensity }; } catch (error) { logger.error(`Failed to execute shake: ${error}`); return { success: false, duration, intensity, error: `Failed to shake device: ${error}` }; } }, { changeExpected: false, // Shake typically doesn't change UI directly timeoutMs: duration + 2000, // Give extra time beyond shake duration tolerancePercent: 0.00, progress } ); } }
  • Tool registration for the 'shake' MCP tool, linking schema, handler, and description.
    ToolRegistry.registerDeviceAware( "shake", "Shake the device", shakeSchema, shakeHandler, true // Supports progress notifications );
  • Zod schema defining input parameters for the shake tool (duration, intensity, platform).
    export const shakeSchema = z.object({ duration: z.number().optional().describe("Duration of the shake in milliseconds (default: 1000)"), intensity: z.number().optional().describe("Intensity of the shake acceleration (default: 100)"), platform: z.enum(["android", "ios"]).describe("Platform of the device") });
  • TypeScript interface defining ShakeOptions used in the execute method.
    /** * Options for performing a shake operation */ export interface ShakeOptions { /** * Duration of the shake in milliseconds (default: 1000ms) */ duration?: number; /** * Intensity of the shake acceleration (default: 100) * Higher values create more intense shaking */ intensity?: number; }
  • TypeScript interface for ShakeResult returned by the execute method.
    /** * Result of a shake operation */ export interface ShakeResult { success: boolean; duration: number; intensity: number; observation?: ObserveResult; error?: string; }

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/zillow/auto-mobile'

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