jules_screenshot
Capture screenshots of Jules AI coding assistant pages for debugging and verification purposes during development workflows.
Instructions
Take a screenshot of current Jules page for debugging and verification
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional filename for screenshot | |
| taskId | No | Optional task ID to navigate to first |
Implementation Reference
- src/index.ts:1595-1621 (handler)The handler function that implements the jules_screenshot tool. It optionally navigates to a task page, takes a full-page screenshot using Playwright, saves it to a file, and returns the file path.private async takeScreenshot(args: any) { const { taskId, filename } = args; const page = await this.getPage(); try { if (taskId) { const actualTaskId = this.extractTaskId(taskId); const url = taskId.includes('jules.google.com') ? taskId : `${this.config.baseUrl}/task/${actualTaskId}`; await page.goto(url); await page.waitForLoadState('networkidle'); } const screenshotPath = filename || `jules-screenshot-${Date.now()}.png`; await page.screenshot({ path: screenshotPath, fullPage: true }); return { content: [ { type: 'text', text: `Screenshot saved to: ${screenshotPath}` } ] }; } catch (error) { throw new Error(`Failed to take screenshot: ${error}`); } }
- src/index.ts:340-355 (schema)The input schema definition for the jules_screenshot tool, registered in the listTools handler.name: 'jules_screenshot', description: 'Take a screenshot of current Jules page for debugging and verification', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Optional task ID to navigate to first', }, filename: { type: 'string', description: 'Optional filename for screenshot', }, }, }, },
- src/index.ts:382-382 (registration)The dispatch case in the CallToolRequestSchema handler that routes calls to the takeScreenshot method.return await this.takeScreenshot(args);
- src/index.ts:1236-1243 (helper)Helper method used by takeScreenshot to extract task ID from URL if provided.private extractTaskId(taskIdOrUrl: string): string { if (taskIdOrUrl.includes('jules.google.com/task/')) { const match = taskIdOrUrl.match(/\/task\/([^/]+)/); return match ? match[1] : taskIdOrUrl; } return taskIdOrUrl; }
- src/index.ts:118-358 (registration)The ListToolsRequestSchema handler that registers and advertises the jules_screenshot tool schema.this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ // === CORE TASK MANAGEMENT === { name: 'jules_create_task', description: 'Create a new task in Google Jules with repository and description', inputSchema: { type: 'object', properties: { description: { type: 'string', description: 'Task description - what you want Jules to do', }, repository: { type: 'string', description: 'GitHub repository in format owner/repo-name', }, branch: { type: 'string', description: 'Git branch to work on (optional, defaults to main)', }, }, required: ['description', 'repository'], }, }, { name: 'jules_get_task', description: 'Get details of a specific Jules task by ID or URL', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Task ID or full Jules task URL', }, }, required: ['taskId'], }, }, { name: 'jules_list_tasks', description: 'List all Jules tasks with their status', inputSchema: { type: 'object', properties: { status: { type: 'string', enum: ['all', 'active', 'pending', 'completed', 'paused'], description: 'Filter tasks by status', }, limit: { type: 'number', description: 'Maximum number of tasks to return (default 10)', }, }, }, }, { name: 'jules_send_message', description: 'Send a message/instruction to Jules in an active task', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Task ID or URL', }, message: { type: 'string', description: 'Message to send to Jules', }, }, required: ['taskId', 'message'], }, }, { name: 'jules_approve_plan', description: 'Approve Jules execution plan for a task', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Task ID or URL', }, }, required: ['taskId'], }, }, { name: 'jules_resume_task', description: 'Resume a paused Jules task', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Task ID or URL', }, }, required: ['taskId'], }, }, // === ADVANCED TASK OPERATIONS === { name: 'jules_analyze_code', description: 'Analyze code changes and diff in a Jules task', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Task ID or URL', }, includeSourceCode: { type: 'boolean', description: 'Whether to include full source code content', }, }, required: ['taskId'], }, }, { name: 'jules_bulk_create_tasks', description: 'Create multiple tasks from a list of descriptions and repositories', inputSchema: { type: 'object', properties: { tasks: { type: 'array', items: { type: 'object', properties: { description: { type: 'string' }, repository: { type: 'string' }, branch: { type: 'string' }, }, required: ['description', 'repository'], }, description: 'Array of task objects to create', }, }, required: ['tasks'], }, }, // === SESSION & AUTHENTICATION MANAGEMENT === { name: 'jules_session_info', description: 'Get current session configuration and authentication status', inputSchema: { type: 'object', properties: {}, }, }, { name: 'jules_setup_wizard', description: 'Interactive session setup wizard for automated Google authentication configuration', inputSchema: { type: 'object', properties: { environment: { type: 'string', enum: ['local', 'cloud', 'smithery', 'auto-detect'], description: 'Deployment environment (auto-detect will analyze current setup)', }, preferences: { type: 'object', properties: { priority: { type: 'string', enum: ['ease-of-use', 'reliability', 'portability', 'performance'], description: 'User priority for session management' }, hasChrome: { type: 'boolean', description: 'Whether user has local Chrome browser access' }, cloudDeployment: { type: 'boolean', description: 'Whether deploying to cloud platforms' } } } }, }, }, { name: 'jules_get_cookies', description: 'Extract current browser cookies for session persistence and backup', inputSchema: { type: 'object', properties: { format: { type: 'string', enum: ['json', 'string'], description: 'Output format for cookies (default: json)', }, }, }, }, { name: 'jules_set_cookies', description: 'Set browser cookies from string or JSON for authentication', inputSchema: { type: 'object', properties: { cookies: { type: 'string', description: 'Cookies as JSON string or cookie string format', }, format: { type: 'string', enum: ['json', 'string'], description: 'Format of input cookies (default: json)', }, }, required: ['cookies'], }, }, // === DEBUGGING & UTILITIES === { name: 'jules_screenshot', description: 'Take a screenshot of current Jules page for debugging and verification', inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Optional task ID to navigate to first', }, filename: { type: 'string', description: 'Optional filename for screenshot', }, }, }, }, ], }; });