android_logcat
Capture Android device or emulator logcat output for debugging, with options to filter logs, specify line count, and clear buffers.
Instructions
Capture Android logcat output from device or emulator
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| serial | Yes | Device serial number | |
| filter | No | Log filter (e.g., *:E for errors only) | |
| lines | No | Number of log lines to capture | |
| clear | No | Clear logcat buffer before capturing |
Implementation Reference
- src/tools/android.ts:924-970 (handler)The handler function for the 'android_logcat' tool. It validates input parameters using Zod, constructs ADB logcat arguments based on serial, filter, lines, and clear options, executes the command via processExecutor, and returns formatted log output or clearance confirmation.handler: async (args: any) => { const validation = AndroidAdbLogcatSchema.safeParse(args); if (!validation.success) { throw new Error(`Invalid request: ${validation.error.message}`); } const { serial, filter, lines = 100, clear = false } = validation.data; const adb_args = ['-s', serial, 'logcat']; if (clear) { adb_args.push('-c'); const clearResult = await processExecutor.execute('adb', adb_args); return { success: true, data: { serial, action: 'cleared', output: 'Logcat cleared successfully', }, }; } // Add filter if provided if (filter) { adb_args.push(filter); } // Add line limit adb_args.push('-t', lines.toString()); const result = await processExecutor.execute('adb', adb_args, { timeout: 60000, // 1 minute timeout for logcat }); return { success: true, data: { serial, filter: filter || 'all', lines, logs: result.stdout, exitCode: result.exitCode, }, }; }
- src/tools/android.ts:171-176 (schema)Zod schema for validating input parameters of the android_logcat tool: serial (required), filter (optional), lines (optional, default 100), clear (optional, default false).const AndroidAdbLogcatSchema = z.object({ serial: z.string().min(1), filter: z.string().optional(), lines: z.number().min(1).max(10000).default(100), clear: z.boolean().default(false), });
- src/tools/android.ts:911-971 (registration)Registration of the 'android_logcat' tool in the createAndroidTools map, including name, description, inputSchema (JSON schema), and reference to the handler function.tools.set('android_logcat', { name: 'android_logcat', description: 'Capture Android logcat output from device or emulator', inputSchema: { type: 'object', properties: { serial: { type: 'string', minLength: 1, description: 'Device serial number' }, filter: { type: 'string', description: 'Log filter (e.g., *:E for errors only)' }, lines: { type: 'number', minimum: 1, maximum: 10000, description: 'Number of log lines to capture' }, clear: { type: 'boolean', description: 'Clear logcat buffer before capturing' } }, required: ['serial'] }, handler: async (args: any) => { const validation = AndroidAdbLogcatSchema.safeParse(args); if (!validation.success) { throw new Error(`Invalid request: ${validation.error.message}`); } const { serial, filter, lines = 100, clear = false } = validation.data; const adb_args = ['-s', serial, 'logcat']; if (clear) { adb_args.push('-c'); const clearResult = await processExecutor.execute('adb', adb_args); return { success: true, data: { serial, action: 'cleared', output: 'Logcat cleared successfully', }, }; } // Add filter if provided if (filter) { adb_args.push(filter); } // Add line limit adb_args.push('-t', lines.toString()); const result = await processExecutor.execute('adb', adb_args, { timeout: 60000, // 1 minute timeout for logcat }); return { success: true, data: { serial, filter: filter || 'all', lines, logs: result.stdout, exitCode: result.exitCode, }, }; } });