
Claude Notification
STDIOLightweight MCP server providing auditory and visual notifications for Claude Desktop on macOS
Lightweight MCP server providing auditory and visual notifications for Claude Desktop on macOS
A lightweight MCP server that provides both auditory and visual notifications for Claude Desktop on macOS. This server lets you know when Claude starts processing your request and when it has completed a task.
.aiff
files)Clone the repository:
git clone https://github.com/charles-adedotun/notifications-mcp-server.git cd notifications-mcp-server
Install uv (if not already installed):
# Option 1: Using curl curl -LsSf https://astral.sh/uv/install.sh | sh # Option 2: Using Homebrew brew install uv
Install the package and dependencies:
# Install the package in development mode uv pip install -e . # Or install directly from the repository uv pip install git+https://github.com/charles-adedotun/notifications-mcp-server.git # Install visual notification dependencies (recommended) uv pip install pyobjc-core pyobjc-framework-Cocoa
Test the installation:
# Run the test script to verify notifications are working uv run python test_notification.py # Run the notification server directly uv run claude-notifications
Configure Claude Desktop:
Edit Claude's configuration to include the notification server:
{ "mcpServers": { "notify-user": { "command": "uv", "args": [ "run", "--with", "fastmcp", "fastmcp", "run", "/path/to/server.py" ] } } }
Replace /path/to/server.py
with the absolute path to the server.py file on your system.
If the mcpServers
object already exists, just add this new server configuration to it.
Restart Claude Desktop
Test the notifications:
uv run python test_notification.py
This will test all available notification methods and help diagnose any issues.
Once installed, the server automatically connects with Claude Desktop and offers the task_status
notification tool. Claude will call this tool at the start and end of each interaction, producing both audible and visual notifications.
┌─────────────────┐ MCP Protocol ┌─────────────────┐ System Command ┌─────────────┐
│ │ ──────────────────> │ │ ──────────────────> │ macOS Sound │
│ Claude Desktop │ │ Notification │ │ System │
│ Application │ <────────────────── │ MCP Server │ <────────────────── │ │
│ │ │ │ └─────────────┘
│ │ ┌───────────-──┐
│ │ ──────────────────> │ macOS │
│ │ │ Notification │
│ │ <────────────────── │ Center │
└─────────────────┘ └─────────────-┘
The notification server uses multiple methods to deliver visual notifications, with automatic fallbacks:
This ensures that at least one notification method should work on your system.
The Claude Notifications MCP Server is now organized into a modular structure:
notifications/
├── __init__.py # Package initialization with version info
├── core/ # Core functionality
│ ├── __init__.py
│ ├── sound_manager.py # Sound playback management
│ └── notification_manager.py # Visual notification management
├── platform/ # Platform-specific implementations
│ ├── __init__.py
│ └── macos/ # macOS-specific code
│ ├── __init__.py
│ ├── sound.py # macOS sound functions
│ └── notification.py # macOS notification methods
├── utils/ # Utility functions
│ ├── __init__.py
│ ├── config.py # Configuration constants and helpers
│ └── logging.py # Logging setup
└── server.py # MCP server implementation
This modular structure improves maintainability and makes it easier to add support for additional platforms in the future.
To configure an LLM to use this notification server, add the following to your MCP configuration:
{ "notify-user": { "command": "uv", "args": [ "run", "--with", "fastmcp", "fastmcp", "run", "/path/to/server.py" ] } }
Replace /path/to/server.py
with the absolute path to the server.py file on your system.
This configuration uses the uv
command to run the notification server with the required dependencies.
# For start notifications export CLAUDE_START_SOUND="/System/Library/Sounds/Ping.aiff" # For completion notifications export CLAUDE_COMPLETE_SOUND="/System/Library/Sounds/Purr.aiff" # After setting environment variables, restart the notification server
# Disable visual notifications export CLAUDE_VISUAL_NOTIFICATIONS="false" # Set custom notification icon export CLAUDE_NOTIFICATION_ICON="/path/to/your/custom/icon.png" # After setting environment variables, restart the notification server
Add to your shell profile (~/.zshrc, ~/.bashrc, or similar):
# For different sounds echo 'export CLAUDE_START_SOUND="/System/Library/Sounds/Ping.aiff"' >> ~/.zshrc echo 'export CLAUDE_COMPLETE_SOUND="/System/Library/Sounds/Purr.aiff"' >> ~/.zshrc # For visual notifications echo 'export CLAUDE_VISUAL_NOTIFICATIONS="true"' >> ~/.zshrc echo 'export CLAUDE_NOTIFICATION_ICON="/path/to/your/icon.png"' >> ~/.zshrc source ~/.zshrc
macOS provides these built-in sounds in /System/Library/Sounds/
:
Sound Name | Description |
---|---|
Basso.aiff | Deep, serious tone |
Blow.aiff | Wind-like sound |
Bottle.aiff | Bottle pop sound |
Frog.aiff | Frog croak |
Funk.aiff | Funky electronic sound |
Glass.aiff | Glass tapping sound (default) |
Hero.aiff | Triumphant sound |
Morse.aiff | Short morse code beep |
Ping.aiff | Classic ping notification |
Pop.aiff | Short pop sound |
Purr.aiff | Gentle purr sound |
Sosumi.aiff | Apple's classic alert |
Submarine.aiff | Submarine ping |
Tink.aiff | Light tink sound |
You can preview these sounds with:
afplay /System/Library/Sounds/Glass.aiff
You can also use your own .aiff files by providing the full path.
Run the test script:
uv run python test_notification.py
This comprehensive test will try all notification methods and provide diagnostic information.
Check notification permissions:
You can open notification preferences directly with:
open "x-apple.systempreferences:com.apple.preference.notifications"
Try installing terminal-notifier:
brew install terminal-notifier
This provides an additional fallback method for notifications.
Check the server logs:
Verify your macOS sound settings:
afplay /System/Library/Sounds/Glass.aiff
Check custom sound paths:
.aiff
files for best compatibilityVerify Claude Desktop configuration:
Restart everything:
Check dependencies:
uv pip list | grep fastmcp
uv pip install -e .
Check the server logs:
Remove the repository:
rm -rf /path/to/notifications-mcp-server
If you installed Python packages:
# Remove packages installed with uv uv pip uninstall notifications-mcp-server fastmcp pyobjc-core pyobjc-framework-Cocoa pync
uv pip install pytest pytest-cov pytest
This project is licensed under the MIT License.