Navigation
Claude Notification Server: Custom Alerts & Screen-Free Joy - MCP Implementation

Claude Notification Server: Custom Alerts & Screen-Free Joy

🚨 Claude’s done? Boomβ€”your Mac chimes in! Configure sounds, ditch the screen-stare. MCP-powered joy for macOS. πŸš€

✨ Developer Tools
4.4(88 reviews)
132 saves
61 comments

Users create an average of 31 projects per month with this tool

About Claude Notification Server

What is Claude Notification Server: Custom Alerts & Screen-Free Joy?

Claude Notification Server is a lightweight macOS tool that delivers customizable auditory and visual alerts for Claude Desktop users. It notifies you when requests are processed, allowing you to stay informed without constantly checking your screen. Built with flexibility in mind, it supports system sounds, third-party notifications, and fallback mechanisms to ensure reliability.

How to Use Claude Notification Server: Custom Alerts & Screen-Free Joy?

Installation involves cloning the GitHub repository, configuring Python dependencies, and setting up Claude Desktop with the server path. Key steps include:

  • Install prerequisites like Python 3.8+, uv toolchain, and macOS-specific libraries
  • Configure environment variables for sound paths and visual settings
  • Run the server alongside Claude Desktop using MCP protocol integration
Test notifications through provided scripts to verify functionality across audio/visual channels.

Claude Notification Server Features

Key Features of Claude Notification Server: Custom Alerts & Screen-Free Joy?

  • Adaptive Alerts: Distinct start/end sounds (default macOS tones or custom .aiff files)
  • Multi-Platform Resilience: Falls back across PyObjC, AppleScript, and terminal tools for reliable notifications
  • Visual Integration: macOS Notification Center support with icon customization
  • Environment Control: Toggle notifications and configure behavior via shell variables

Use Cases of Claude Notification Server: Custom Alerts & Screen-Free Joy?

Perfect for:

  • Long-running tasks: Hear completion sounds while focusing on other work
  • Distraction reduction: Get notified without switching windows
  • Accessibility: Auditory cues for visually impaired users
  • Personalization: Match notification tones to workflow preferences (e.g., calming "Purr" for completion)

Claude Notification Server FAQ

FAQ from Claude Notification Server: Custom Alerts & Screen-Free Joy?

  • Why no sound? Check system volume, verify .aiff paths, and test via afplay
  • Visual notifications missing? Ensure macOS notifications are enabled for Python/terminal apps
  • Can I use MP3 files? Only macOS-native .aiff format works reliably
  • Server not connecting? Validate server.py path in Claude config and restart both apps
  • How to reset settings? Delete environment variables and reinstall dependencies

Content

Claude Notification Server

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.

Features

  • πŸ”” Different sound notifications at the beginning and end of Claude responses
  • πŸ’» Compatible with macOS native system sounds (.aiff files)
  • 🎡 Easily customizable notification sounds via environment variables
  • πŸ”” Visual desktop notifications through macOS Notification Center
  • πŸ–ΌοΈ Custom icons for visual notifications
  • πŸš€ Simple setup with minimal dependencies
  • πŸ“± Multiple notification methods with fallbacks (PyObjC, pync, AppleScript, terminal-notifier)

Installation and Setup

Prerequisites

  • macOS (notifications rely on macOS-specific features)
  • Python 3.8 or higher
  • Claude Desktop application

Quick Install

  1. Clone the repository:

    git clone https://github.com/charles-adedotun/notifications-mcp-server.git

cd notifications-mcp-server
  1. 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
  1. 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
  1. Test the installation:

    Run the test script to verify notifications are working

python test_notification.py

# Run the notification server directly
claude-notifications
  1. 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 array already exists, just add this new object to it.

  1. Restart Claude Desktop

  2. Test the notifications:

    python test_notification.py

This will test all available notification methods and help diagnose any issues.

How It Works

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.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     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:

  1. PyObjC (native macOS notifications) - Tried first
  2. pync (if installed) - Tried if PyObjC fails
  3. AppleScript (works consistently) - Used as fallback
  4. terminal-notifier (if installed) - Last resort option

This ensures that at least one notification method should work on your system.

Project Structure

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.

MCP Configuration for LLMs

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.

Customizing Notifications

Sound Notifications

Default Sounds

  • Start of task: "Glass.aiff" from macOS system sounds
  • End of task: "Hero.aiff" from macOS system sounds

Customizing Sounds

# 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

Visual Notifications

# 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

Making Settings Permanent

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

Available System Sounds

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.

Troubleshooting

Visual Notifications Not Working

  1. Run the test script:

    python3 test_notification.py

This comprehensive test will try all notification methods and provide diagnostic information.

  1. Check notification permissions:
* Go to System Preferences β†’ Notifications
* Look for applications that might handle notifications: 
  * Python
  * Terminal
  * osascript (AppleScript)
* Ensure notifications are enabled for these applications

You can open notification preferences directly with:

    open "x-apple.systempreferences:com.apple.preference.notifications"
  1. Try installing terminal-notifier:

    brew install terminal-notifier

This provides an additional fallback method for notifications.

  1. Check the server logs:
* Look for error messages in the terminal where the server is running
* In Claude Desktop, enable Developer Mode (Help menu β†’ Enable Developer Mode)
* Check the MCP Log File in the Developer menu

Sound Notifications Not Working

  1. Verify your macOS sound settings:
* Make sure your system volume is not muted
* Try playing a sound directly: `afplay /System/Library/Sounds/Glass.aiff`
  1. Check custom sound paths:
* If you specified custom sounds, make sure the paths are correct
* Use only `.aiff` files for best compatibility

Server Not Connecting

  1. Verify Claude Desktop configuration:
* Check that the path to the server.py file is correct in claude_desktop_config.json
* Make sure the server is properly configured in your Claude Desktop settings
  1. Restart everything:
* Restart Claude Desktop
* Restart your computer if necessary
  1. Check dependencies:
* Make sure all required packages are installed: `uv pip list | grep fastmcp`
* Try reinstalling: `uv pip install -e .`
  1. Check the server logs:
* Look for error messages in the terminal where the server is running
* In Claude Desktop, enable Developer Mode (Help menu β†’ Enable Developer Mode)
* Check the MCP Log File in the Developer menu

Uninstallation

  1. Remove the repository:

    rm -rf /path/to/notifications-mcp-server

  2. If you installed Python packages:

    Remove packages installed with uv

uv pip uninstall notifications-mcp-server fastmcp pyobjc-core pyobjc-framework-Cocoa pync

Development

  • Requirements: Python 3.10+, fastmcp library, notification libraries

  • Running tests with uv:

    uv pip install pytest pytest-cov
    

    pytest

License

This project is licensed under the MIT License.

Acknowledgments

  • Built using the FastMCP library from Anthropic
  • Special thanks to all contributors and the Claude community

Related MCP Servers & Clients