piatra-automation/apple-notifier-mcp
If you are the rightful owner of apple-notifier-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Apple Notifier MCP Server (Enhanced DXT Edition) is an advanced server for sending native macOS notifications with enhanced features and easy installation.
send_notification
Display native macOS notifications with terminal-notifier.
prompt_user
Show interactive dialog prompts to get user input.
speak
Use macOS text-to-speech capabilities.
take_screenshot
Capture screenshots using macOS screencapture.
select_file
Open native macOS file picker dialog.
Apple Notifier MCP Server (Enhanced DXT Edition)
Enhanced MCP server for sending native macOS notifications with terminal-notifier support, interactive dialogs, text-to-speech, screenshots, and file selection. Now available as a Desktop Extension (DXT) for one-click installation in Claude Desktop.
š About This Repository
This repository is based on a fork of the original apple-notifier-mcp by Michael Darmousseh. We've enhanced the original implementation to improve functionality and user experience.
šÆ Why These Enhancements?
Problem 1: Script Editor Icon Limitation
The original implementation used osascript
to send notifications, which resulted in all notifications showing the Script Editor icon. This is because Apple's notification system shows the icon of whatever app sends the notification, and since osascript
belongs to Script Editor, that's what appears.
Our Solution: We've migrated to terminal-notifier
, which provides:
- ā Better icon control - Terminal icon instead of Script Editor
- ā More reliable delivery - Dedicated notification tool
- ā Enhanced customization - Future support for custom app icons
- ā Professional appearance - Better visual integration
Problem 2: Complex Installation Process
The original required multiple manual steps:
- Install Node.js
- Install the package globally
- Manually edit JSON configuration files
- Restart Claude Desktop
- Hope it works
Our Solution: Desktop Extensions (DXT) provide:
- ā One-click installation - Just double-click the .dxt file
- ā Automatic updates - Extensions update themselves
- ā Zero configuration - No JSON file editing required
- ā Built-in Node.js - Claude Desktop includes the runtime
- ā Easy removal - Uninstall through Claude Desktop UI
Important: DXT handles MCP server dependencies automatically, but system-level tools like
terminal-notifier
must still be installed manually. This is by design for security and system integrity.
šļø Technical Improvements
- Modern Architecture: Follows Anthropic's latest DXT specification v0.1
- Better Error Handling: More informative error messages and dependency checking
- Professional Packaging: Industry-standard extension distribution
- Enhanced Documentation: Comprehensive guides for users and developers
- Backward Compatibility: Still works with manual installation methods
⨠What's New
- šÆ Better Notification Icons: Uses
terminal-notifier
instead ofosascript
for custom app icons and improved notification control - š¦ Desktop Extension (DXT): One-click installation in Claude Desktop - no more manual configuration!
- š§ Enhanced Error Handling: Better dependency checking and user-friendly error messages
- šļø Modern Architecture: Updated to follow Anthropic's DXT specification
- š Comprehensive Documentation: Clear installation guides and technical details
- ā” Professional Packaging: Production-ready distribution and build system
Prerequisites
- macOS (required)
- terminal-notifier (for enhanced notifications - required even for DXT installation)
- An MCP-compatible client (Claude Desktop, Cline)
Note for DXT Users: While Claude Desktop handles Node.js and MCP server dependencies automatically,
terminal-notifier
is a system-level tool that must be installed manually.
Installing terminal-notifier
For the best notification experience with custom icons:
# Install using Homebrew (recommended)
brew install terminal-notifier
# Or install using npm
npm install -g terminal-notifier
Why terminal-notifier? The extension will provide helpful error messages and installation guidance if terminal-notifier is missing, but installing it upfront ensures the best experience.
Installation
ā ļø Prerequisites
-
Install terminal-notifier (required system dependency):
brew install terminal-notifier
-
Configure macOS Notifications:
- Open System Settings > Notifications
- Find terminal-notifier in the list
- Enable "Allow Notifications"
- Configure alert style and other preferences as desired
Important: Without these steps, notifications will not appear on your system.
Option 1: Desktop Extension (DXT) - Recommended š
The easiest way to install this extension is as a Desktop Extension (DXT) in Claude Desktop:
-
Download the latest
.dxt
file from our releases page -
Install by double-clicking the
.dxt
file or dragging it to Claude Desktop -
Done! The extension will be automatically configured and ready to use
Note: DXT handles the MCP server installation but cannot install system-level dependencies like
terminal-notifier
. Make sure you've completed the prerequisites above.
Automatic Updates: DXT extensions update automatically when new versions are available!
Option 2: Installing via Smithery
To install Apple Notifier for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install apple-notifier-mcp --client claude
Option 3: Manual Installation
-
Ensure terminal-notifier is installed (see Prerequisites above)
-
Install the package globally:
npm install -g apple-notifier-mcp
- Add to your MCP configuration file:
For Cline (cline_mcp_settings.json
):
{
"mcpServers": {
"apple-notifier": {
"command": "apple-notifier-mcp"
}
}
}
For Claude Desktop (claude_desktop_config.json
):
{
"mcpServers": {
"apple-notifier": {
"command": "apple-notifier-mcp"
}
}
}
Features
Send Notifications
Display native macOS notifications with terminal-notifier for better icon control and enhanced appearance.
Advantages over osascript:
- ā Custom app icons instead of Script Editor icon
- ā Better notification reliability
- ā More consistent appearance
- ā Enhanced notification controls
Parameters:
title
(required): string - The title of the notificationmessage
(required): string - The main message contentsubtitle
(optional): string - A subtitle to displaysound
(optional): boolean - Whether to play the default notification sound (default: true)
Display Prompts
Show interactive dialog prompts to get user input.
Parameters:
message
(required): string - Text to display in the prompt dialogdefaultAnswer
(optional): string - Default text to pre-fillbuttons
(optional): string[] - Custom button labels (max 3)icon
(optional): 'note' | 'stop' | 'caution' - Icon to display
Text-to-Speech
Use macOS text-to-speech capabilities.
Parameters:
text
(required): string - Text to speakvoice
(optional): string - Voice to use (defaults to system voice)rate
(optional): number - Speech rate (-50 to 50, defaults to 0)
Take Screenshots
Capture screenshots using macOS screencapture.
Parameters:
path
(required): string - Path where to save the screenshottype
(required): 'fullscreen' | 'window' | 'selection' - Type of screenshotformat
(optional): 'png' | 'jpg' | 'pdf' | 'tiff' - Image formathideCursor
(optional): boolean - Whether to hide the cursorshadow
(optional): boolean - Whether to include window shadow (only for window type)timestamp
(optional): boolean - Add timestamp to filename
File Selection
Open native macOS file picker dialog.
Parameters:
prompt
(optional): string - Prompt messagedefaultLocation
(optional): string - Default directory pathfileTypes
(optional): object - File type filter (e.g., {"public.image": ["png", "jpg"]})multiple
(optional): boolean - Allow multiple file selection
Example Usage
// Send a notification
await client.use_mcp_tool("apple-notifier", "send_notification", {
title: "Hello",
message: "World",
sound: true
});
// Show a prompt
const result = await client.use_mcp_tool("apple-notifier", "prompt_user", {
message: "What's your name?",
defaultAnswer: "John Doe",
buttons: ["OK", "Cancel"]
});
// Speak text
await client.use_mcp_tool("apple-notifier", "speak", {
text: "Hello, world!",
voice: "Samantha",
rate: -20
});
// Take a screenshot
await client.use_mcp_tool("apple-notifier", "take_screenshot", {
path: "screenshot.png",
type: "window",
format: "png"
});
// Select files
const files = await client.use_mcp_tool("apple-notifier", "select_file", {
prompt: "Select images",
fileTypes: {
"public.image": ["png", "jpg", "jpeg"]
},
multiple: true
});
Contributing
See for development setup and guidelines.
Building as Desktop Extension (DXT)
This project is structured as a Desktop Extension following Anthropic's DXT specification:
Development Commands
# Build the project
npm run build
# Create DXT package
npm run package:dxt
# Build and create DXT in one step
npm run install:dxt
DXT Structure
apple-notifier-mcp.dxt (ZIP file)
āāā manifest.json # DXT manifest with capabilities and metadata
āāā build/ # Compiled TypeScript server
ā āāā index.js # Main MCP server entry point
āāā package.json # Node.js package definition
āāā README.md # Documentation
āāā LICENSE # MIT license
Testing DXT Installation
- Build the DXT:
pnpm package:dxt
- Install in Claude Desktop by double-clicking
apple-notifier-mcp.dxt
- Test the tools in Claude Desktop
For more information about Desktop Extensions, see the Anthropic DXT documentation.
ā Frequently Asked Questions
Does DXT handle all dependencies automatically?
Partially. DXT handles MCP server dependencies (like Node.js packages) automatically, but system-level tools must be installed manually:
- ā Handled by DXT: Node.js runtime, npm packages, MCP server code
- ā Manual installation required:
terminal-notifier
, Homebrew tools, system utilities
Why do I still need to install terminal-notifier with DXT?
For security and system integrity, DXT extensions cannot install system-level tools. This is intentional - extensions shouldn't modify your system without explicit permission. Claude Desktop's built-in error handling will guide you through installing terminal-notifier
if it's missing.
What happens if I don't install terminal-notifier?
The extension will detect the missing dependency and provide clear installation instructions. The notification functionality won't work until terminal-notifier
is installed, but other tools (speech, screenshots, file selection) will continue to work normally.
š Acknowledgments
Contributors
- PIATRA (@piatra-open-source-projects) - DXT Implementation, Terminal-Notifier Integration, Enhanced Features
- Michael Darmousseh (@turlockmike) - Original Author of the base implementation
Special Thanks
- Anthropic - For the MCP protocol and DXT specification
- Julien Blanchard - Creator of terminal-notifier
š License
MIT License - see the file for details.
This project maintains the original MIT license from Michael Darmousseh's work and extends the same license to the enhancements made by PIATRA.
š Related Projects
- Original Project: turlockmike/apple-notifier-mcp
- Terminal Notifier: julienXX/terminal-notifier
- MCP Protocol: modelcontextprotocol/servers
- DXT Specification: anthropics/dxt
Running evals
The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the npx command. Full documentation can be found here.
OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/index.ts
License
MIT License - see the file for details.