Content
# Notifications MCP Server
[](https://github.com/charles-adedotun/notifications-mcp-server/actions/workflows/python-test.yml)
MCP server that lets Claude Desktop or another MCP client trigger macOS sound and visual notifications through a `task_status` tool.
## Current Status
This is a macOS-focused utility. It is not an automatic Claude completion detector by itself: an MCP client or model must call the `task_status` tool when it wants a notification.
## What Works Today
- Registers a `task_status` MCP tool.
- Plays macOS system sounds with `afplay`.
- Sends visual notifications using terminal-notifier, AppleScript, PyObjC, or pync fallbacks.
- Supports separate start and completion sounds.
- Supports disabling visual notifications through an environment variable.
- Includes tests for the modular notification and sound managers.
## Important Limitations
- macOS is the only implemented platform.
- Linux and Windows support are not implemented.
- Notifications only happen when the MCP tool is called.
- The packaged console script is `claude-notifications`.
- The Python package is `notifications`; there is no `notifications_mcp_server` module entry point.
- Custom sound configuration uses environment variables, not the JSON configuration block that older README versions showed.
## Installation
```bash
pip install notifications-mcp-server
```
Optional visual notification dependencies:
```bash
pip install "notifications-mcp-server[visual]"
pip install "notifications-mcp-server[pync]"
```
For terminal-notifier fallback support:
```bash
brew install terminal-notifier
```
## Claude Desktop Configuration
Use the console script installed by the package:
```json
{
"mcpServers": {
"notifications": {
"command": "claude-notifications"
}
}
}
```
Restart Claude Desktop after changing the config.
## Configuration
Environment variables:
```bash
export CLAUDE_START_SOUND="/System/Library/Sounds/Glass.aiff"
export CLAUDE_COMPLETE_SOUND="/System/Library/Sounds/Hero.aiff"
export CLAUDE_VISUAL_NOTIFICATIONS="true"
export CLAUDE_NOTIFICATION_ICON="/path/to/icon.png"
```
If no custom sounds are set, the server uses macOS system sounds.
## MCP Tool
`task_status`
Input:
```json
{
"message": "Task completed"
}
```
Messages containing `start` or `processing` are treated as start notifications. Other messages are treated as completion notifications.
## Verification Demo
Run the local diagnostic script on macOS to test the available notification paths:
```bash
python3 test_notification.py
```
The MCP tool returns a compact status object after attempting sound and visual notification delivery:
```json
{
"status": "success",
"message": "Task completed",
"sound": "/System/Library/Sounds/Hero.aiff",
"visual": true
}
```
For a quieter smoke test that skips visual notification prompts:
```bash
CLAUDE_VISUAL_NOTIFICATIONS=false claude-notifications
```
## Development
```bash
git clone https://github.com/charles-adedotun/notifications-mcp-server.git
cd notifications-mcp-server
pip install -e ".[dev]"
pytest
```
## License
MIT
Connection Info
You Might Also Like
cc-switch
All-in-One Assistant for Claude Code, Codex & Gemini CLI across platforms.
awesome-mcp-servers
A collection of MCP servers.
git
A Model Context Protocol server for Git automation and interaction.
oh-my-opencode
Background agents · Curated agents like oracle, librarians, frontend...
TrendRadar
TrendRadar: Your hotspot assistant for real news in just 30 seconds.
Appwrite
Build like a team of hundreds