play_error_sound
Play a system error sound to provide audio feedback for error conditions in macOS applications.
Instructions
Play an error system sound
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/index.ts:370-379 (handler)Executes the play_error_sound tool by calling the shared playSound helper with 'error' type and returns a success response.case 'play_error_sound': await playSound('error'); return { content: [ { type: 'text', text: 'Error sound played successfully', }, ], };
- src/index.ts:297-305 (registration)Registers the play_error_sound tool in the ListTools response with description and empty input schema.{ name: 'play_error_sound', description: 'Play an error system sound', inputSchema: { type: 'object', properties: {}, required: [], }, },
- src/index.ts:300-304 (schema)Input schema for play_error_sound: empty object (no parameters required).inputSchema: { type: 'object', properties: {}, required: [], },
- src/index.ts:96-149 (helper)Helper function playSound that implements the core logic: maps 'error' to 'Sosumi' system sound and spawns afplay process with throttling and timeout.async function playSound(soundType: 'info' | 'warning' | 'error'): Promise<void> { const requestId = `${soundType}-${Date.now()}`; // Throttle requests to prevent conflicts if (activeRequests.has(soundType)) { throw new Error(`${soundType} sound already playing`); } activeRequests.add(soundType); try { return new Promise((resolve, reject) => { let soundName: string; switch (soundType) { case 'info': soundName = 'Glass'; break; case 'warning': soundName = 'Purr'; break; case 'error': soundName = 'Sosumi'; break; default: soundName = 'Glass'; } const afplay = spawn('afplay', [`/System/Library/Sounds/${soundName}.aiff`]); // Add timeout const timeout = setTimeout(() => { afplay.kill(); reject(new Error('Sound playback timed out')); }, PROCESS_TIMEOUT_MS); afplay.once('close', (code) => { clearTimeout(timeout); if (code === 0) { resolve(); } else { reject(new Error(`Sound playback failed with code ${code}`)); } }); afplay.once('error', (error) => { clearTimeout(timeout); reject(error); }); }); } finally { activeRequests.delete(soundType); } }