Notifications MCP Server
README.md
# 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
TDQS
A3.6/5.0
Scored across 1 tool
Disambiguation5/5
Only one tool exists, so there is no ambiguity with other tools. The tool's purpose is clearly described.
Naming Consistency2/5
The tool name 'task_status' suggests checking status, but the tool actually sends notifications. This mismatch between name and function indicates poor naming consistency.
Tool Count3/5
A single tool for a notifications server is borderline. It might be sufficient for simple task notifications, but the scope is narrow.
Completeness2/5
The server only covers task status notifications, missing other common notification types (e.g., errors, warnings, arbitrary messages). This is a significant gap.
Maintenance
ActivityInactive
ResponsivenessNo issues