quick_action
Execute predefined file automation tasks like compressing images, converting to PDF, resizing images, extracting text, combining PDFs, or converting video files on macOS.
Instructions
Run a predefined quick action
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Quick action to perform | |
| files | Yes | File paths to process | |
| options | No | Action-specific options |
Implementation Reference
- src/index.js:289-330 (handler)The primary handler for the 'quick_action' tool. It destructures the input arguments, defines a mapping of quick actions to their implementations (which use AppleScript), and executes the specified action on the provided files.async runQuickAction(args) { const { action, files, options = {} } = args; const quickActions = { compress_images: async () => { const script = ` tell application "Finder" set theFiles to {${files.map(f => `POSIX file "${f}"`).join(', ')}} end tell repeat with theFile in theFiles do shell script "sips -Z 1024 " & quoted form of POSIX path of theFile end repeat `; return this.runAppleScript(script); }, convert_to_pdf: async () => { const outputPath = options.outputPath || files[0].replace(/\.[^.]+$/, '.pdf'); const script = ` do shell script "convert ${files.map(f => `'${f}'`).join(' ')} '${outputPath}'" `; return this.runAppleScript(script); }, resize_images: async () => { const size = options.size || '800x600'; const script = ` repeat with filePath in {${files.map(f => `"${f}"`).join(', ')}} do shell script "sips -z ${size.split('x')[1]} ${size.split('x')[0]} " & filePath end repeat `; return this.runAppleScript(script); }, }; if (quickActions[action]) { return await quickActions[action](); } throw new Error(`Unknown quick action: ${action}`); }
- src/index.js:111-137 (schema)Input schema for the 'quick_action' tool, defining the expected parameters: 'action' (enum of available quick actions), 'files' (array of file paths, required), and optional 'options'.inputSchema: { type: 'object', properties: { action: { type: 'string', enum: [ 'compress_images', 'convert_to_pdf', 'resize_images', 'extract_text_from_pdf', 'combine_pdfs', 'convert_video', ], description: 'Quick action to perform', }, files: { type: 'array', items: { type: 'string' }, description: 'File paths to process', }, options: { type: 'object', description: 'Action-specific options', }, }, required: ['action', 'files'], },
- src/index.js:108-138 (registration)Registration of the 'quick_action' tool in the listTools handler response, including name, description, and full input schema.{ name: 'quick_action', description: 'Run a predefined quick action', inputSchema: { type: 'object', properties: { action: { type: 'string', enum: [ 'compress_images', 'convert_to_pdf', 'resize_images', 'extract_text_from_pdf', 'combine_pdfs', 'convert_video', ], description: 'Quick action to perform', }, files: { type: 'array', items: { type: 'string' }, description: 'File paths to process', }, options: { type: 'object', description: 'Action-specific options', }, }, required: ['action', 'files'], }, },
- src/index.js:187-188 (registration)Handler dispatch registration in the CallToolRequestHandler switch statement, routing 'quick_action' calls to the runQuickAction method.case 'quick_action': return await this.runQuickAction(args);
- src/index.js:292-324 (helper)Helper mapping object within the handler that defines implementations for specific quick actions like compress_images, convert_to_pdf, and resize_images using AppleScript.const quickActions = { compress_images: async () => { const script = ` tell application "Finder" set theFiles to {${files.map(f => `POSIX file "${f}"`).join(', ')}} end tell repeat with theFile in theFiles do shell script "sips -Z 1024 " & quoted form of POSIX path of theFile end repeat `; return this.runAppleScript(script); }, convert_to_pdf: async () => { const outputPath = options.outputPath || files[0].replace(/\.[^.]+$/, '.pdf'); const script = ` do shell script "convert ${files.map(f => `'${f}'`).join(' ')} '${outputPath}'" `; return this.runAppleScript(script); }, resize_images: async () => { const size = options.size || '800x600'; const script = ` repeat with filePath in {${files.map(f => `"${f}"`).join(', ')}} do shell script "sips -z ${size.split('x')[1]} ${size.split('x')[0]} " & filePath end repeat `; return this.runAppleScript(script); }, };