Get current activity/window focus
get-current-activityIdentify the currently focused app or window on an Android device by inspecting dumpsys window output.
Instructions
Inspect current focused app/window via dumpsys window.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No | Timeout per adb call in milliseconds |
Implementation Reference
- src/tools/logcatTool.js:119-125 (handler)Handler function for 'get-current-activity' tool. Runs 'adb shell dumpsys window', filters for mCurrentFocus/mFocusedApp lines, and returns up to 8 lines of focus info.
async (params) => { const dump = await runAdbCommand(['shell', 'dumpsys', 'window'], params.timeoutMs); const lines = dump.split('\n').filter(line => line.includes('mCurrentFocus') || line.includes('mFocusedApp')); const trimmed = lines.slice(0, 8).join('\n').trim(); return { content: [{ type: 'text', text: trimmed || 'No focus info found.' }] }; } ); - src/tools/logcatTool.js:22-24 (schema)Input schema (zod) for 'get-current-activity': optional timeoutMs parameter (1000-15000ms, default 5000).
const currentActivityInputSchema = z.object({ timeoutMs: z.number().int().min(1000).max(15000).default(5000).describe('Timeout per adb call in milliseconds') }); - src/tools/logcatTool.js:112-125 (registration)Registration of 'get-current-activity' tool via server.registerTool() with title, description, inputSchema, and handler.
server.registerTool( 'get-current-activity', { title: 'Get current activity/window focus', description: 'Inspect current focused app/window via dumpsys window.', inputSchema: currentActivityInputSchema }, async (params) => { const dump = await runAdbCommand(['shell', 'dumpsys', 'window'], params.timeoutMs); const lines = dump.split('\n').filter(line => line.includes('mCurrentFocus') || line.includes('mFocusedApp')); const trimmed = lines.slice(0, 8).join('\n').trim(); return { content: [{ type: 'text', text: trimmed || 'No focus info found.' }] }; } ); - src/tools/logcatTool.js:26-41 (helper)Helper function runAdbCommand that executes adb commands with timeout, used by the handler to run 'dumpsys window'.
async function runAdbCommand(args, timeoutMs) { try { const { stdout } = await execFileAsync('adb', args, { timeout: timeoutMs, maxBuffer: 5 * 1024 * 1024 }); return stdout.trimEnd(); } catch (error) { const stderr = error && typeof error.stderr === 'string' ? error.stderr.trim() : ''; const message = [`adb ${args.join(' ')} failed`, error.message].filter(Boolean).join(': '); if (stderr) { throw new Error(`${message} | stderr: ${stderr}`); } throw new Error(message); } }