Skip to main content
Glama

https://github.com/user-attachments/assets/5da68f17-e8fd-4366-bc6e-96da649fcef8


The problem

You run five Claude threads across three projects. One of them finished ten minutes ago and is waiting for a decision. You find out only when you happen to click on it. Work stalls.

Related MCP server: Claude Code Notification Hooks

The fix

Every thread pings you, with the project name and one ultra-short line saying exactly what it needs. Details stay in the chat.

βœ…  Website redesign     Done                Homepage ready, review it
🟑  Q3 report            Needs your answer   Use March or April figures?
πŸ”΄  Mobile app           Urgent              Build failed β€” need API key

Level

When

Default sound (macOS)

βœ… done

Task finished

Glass

🟑 question

Waiting for your answer, decision, data or access

Ping

πŸ”΄ urgent

Blocked, error, deadline

Sosumi

Highlights

  • Works in Claude Desktop (chats, Projects, Cowork) and Claude Code

  • macOS and Windows (Linux via notify-send)

IMPORTANT

Windows testers wanted. The Windows version is written but not yet tested on a real Windows machine. On Windows? Please try it and report in issue #1. It takes 2 minutes.

  • One-click install, settings in Claude's UI, no config files

  • Zero dependencies, no accounts, no servers. Your notification text never leaves your computer

  • Update alerts: once a day it checks GitHub and pings you when a new version is out (can be turned off)

  • Set up once: one line in your Claude instructions and every thread, in every project, pings you


⚑ Claude Desktop: 3 steps to make it work

Claude Code users: just install the plugin, nothing else. In Claude Desktop (chats, Projects, Cowork) all three steps are required, because of how the app works:

1. Install the extension. Download claude-smart-notifier.mcpb β†’ double-click β†’ Install.

2. Tell Claude to use it (once). Claude Desktop loads extension tools on demand and doesn't pass their instructions to threads, so the model won't call notify unless told. Paste this into Settings β†’ Your Claude β†’ Instructions:

Always: when you finish a task, and whenever you need my answer, decision, data or access, call the `notify` tool (Claude Smart Notifier) once as your very last action β€” this is required in every chat and project. The tool is often deferred: if it isn't loaded, load it first with tool search (query "notify"). Arguments: project = the Claude Project name (not the thread name), thread = this thread's name, level = done / question / urgent, lang = your reply language, message = max 40 chars saying what I must do (the gist of your "What's next?" β€” end every long reply with a 1–2 sentence "What's next?" line telling me exactly what I need to do, or that nothing is needed). Only if no notify tool exists at all (phone or web without my computer), skip it silently.

3. Run threads on your computer. Only threads linked to your computer can reach the extension:

  • send messages from Claude Desktop on that computer, or

  • on the web or phone, pick your computer under + β†’ Devices before sending.

Threads running purely in the cloud (started on web/phone without a device, or cloud "coordinator" agents) can't call notify. If such an agent needs to ping you, have it start a short thread linked to your computer whose only job is to call notify.

Keep in mind: the computer must be on with Claude Desktop open Β· new threads only (open threads don't see newly installed tools) Β· while you record or share the screen, macOS hides banners (they still land in Notification Center).


πŸ“¦ Install

Claude Desktop (macOS / Windows): one click

  1. Download claude-smart-notifier.mcpb

  2. Double-click it. Claude opens the install dialog, then click Install

  3. (optional) Settings β†’ Extensions β†’ Claude Smart Notifier: language (auto = same as the thread, 48 languages), sounds, mute

Do I need to put any files on my computer? No. The .mcpb is a Claude Desktop extension: Claude installs it and runs it with its own built-in Node.js. When a new version is out you get a notification; download the new .mcpb from Releases and install it over the old one. Nothing to configure by hand.

Start a new chat and give it something that takes a while. You'll get pinged when it's done.

Claude Code

/plugin marketplace add vjvasiljev/claude_smart_notifier
/plugin install smart-notifier@claude-smart-notifier

Restart Claude Code.

πŸ€– Ask Claude to install it

Paste this into Claude (Desktop/Cowork with access to your computer, or Claude Code):

Install Claude Smart Notifier for me: https://github.com/vjvasiljev/claude_smart_notifier β€” follow INSTALL.md in that repo.

Claude follows INSTALL.md: it downloads the bundle and opens the installer (Desktop) or runs the plugin commands (Code). You only click Install.

Requires Node.js β‰₯ 16.

git clone https://github.com/vjvasiljev/claude_smart_notifier.git
{
  "mcpServers": {
    "smart-notifier": {
      "command": "node",
      "args": ["/absolute/path/to/claude_smart_notifier/server/index.js"],
      "env": { "NOTIFY_LANG": "en" }
    }
  }
}

Make every project and thread ping you

Where

Setup after install

Claude Code (plugin)

Nothing. Built-in hooks ping you when a session finishes, asks a question, or needs a permission. No model involvement, works every time.

Claude Desktop / Cowork / Projects (.mcpb)

One line, once. Claude Desktop loads extension tools on demand and doesn't pass server instructions to threads, so the model has to be told. The extension reminds you on first run.

For Claude Desktop, paste this into Settings β†’ Your Claude β†’ Instructions (applies to every chat and project):

Always: when you finish a task, and whenever you need my answer, decision, data or access, call the notify tool (Claude Smart Notifier) once as your very last action β€” this is required in every chat and project. The tool is often deferred: if it isn't loaded, load it first with tool search (query "notify"). Arguments: project = the Claude Project name (not the thread name), thread = this thread's name, level = done / question / urgent, lang = your reply language, message = max 40 chars saying what I must do (the gist of your "What's next?" β€” end every long reply with a 1–2 sentence "What's next?" line telling me exactly what I need to do, or that nothing is needed). Only if no notify tool exists at all (phone or web without my computer), skip it silently.

Start a new thread afterwards.

Check it works

node server/index.js --test

Shows one notification of each level.


βš™οΈ Settings

In Claude Desktop, change these in Settings β†’ Extensions. Elsewhere, set them as environment variables.

Setting

Env var

Default

Language

NOTIFY_LANG

auto

Labels language. auto = the language the thread replies in (fallback: system language). 48 supported: en ru uk be lt lv et pl cs sk de fr es pt it ca nl sv no da fi hu ro bg sr hr sl el tr az ka hy kk uz he ar fa hi bn ja ko zh zh-tw vi th id ms sw

Sound: done

NOTIFY_SOUND_DONE

Glass

macOS sound name

Sound: needs answer

NOTIFY_SOUND_QUESTION

Ping

macOS sound name

Sound: urgent

NOTIFY_SOUND_URGENT

Sosumi

macOS sound name

Mute

NOTIFY_MUTE

false

Silence everything

Check for updates

NOTIFY_UPDATE_CHECK

true

Once a day ask GitHub for the latest release and notify you about a new version

Advanced

NOTIFY_CONFIG

β€”

Path to a JSON file (below)

Advanced: custom emoji, labels and sounds per level

{
  "levels": {
    "done":     { "emoji": "🟒", "sound": "Hero",  "label": "Finished" },
    "question": { "emoji": "🟑", "sound": "Ping",  "label": "Your turn" },
    "urgent":   { "emoji": "πŸ”΄", "sound": "Basso", "label": "Blocked" }
  },
  "emojiInTitle": true
}

macOS sounds: Basso Blow Bottle Frog Funk Glass Hero Morse Ping Pop Purr Sosumi Submarine Tink. On Windows each level uses a system sound (Default / Reminder / IM), and πŸ”΄ urgent stays on screen until dismissed.


🩺 Troubleshooting

Symptom

Fix

macOS: nothing appears (the tool still reports "sent": macOS gives no delivery confirmation)

Notifications go through osascript, which macOS attributes to Script Editor. Open System Settings β†’ Notifications β†’ Script Editor and allow them. Turn off Focus / Do Not Disturb.

macOS: notifications land in Notification Center but no banner pops up

You're recording or sharing the screen β€” macOS hides banners then. Stop the recording, or enable System Settings β†’ Notifications β†’ Allow notifications when mirroring or sharing the display.

macOS: banners disappear too fast

System Settings β†’ Notifications β†’ Script Editor β†’ style Alerts: notifications stay on screen until you close them. (Applies to all levels.)

macOS: click opens Script Editor

Known osascript limitation. Switch to Claude manually.

Windows: nothing appears

Settings β†’ System β†’ Notifications must be on; Focus Assist off. Toasts appear under Windows PowerShell.

A thread says it has no notify tool

The thread isn't linked to your computer (e.g. started on the web or phone). Send a message in it from Claude Desktop on that computer, or on web/phone pick your computer under + β†’ Devices before sending. The computer must be on with Claude Desktop open.

A thread didn't ping me

The server instructs Claude, but the model decides when to call the tool. Already-open threads only pick it up after a restart. To make a project more reliable, add to its instructions: "When you finish or need my answer, call notify."

Old threads don't have the tool

Restart Claude and start a new thread.


❓ FAQ

How do I get notified when Claude Code finishes a task? Install the Claude Code plugin (two commands above). Every session will ping you when it's done or waiting for input.

How do I know when a Claude Desktop / Cowork / Projects chat is waiting for me? Install the .mcpb extension. Any thread that needs your decision sends a 🟑 notification with the project name.

Does it work with many parallel threads and projects? That's what it's built for. Each notification starts with the project name, so you know where to go.

Does it send my data anywhere? No. Your notifications are shown locally via the OS. The only network request is a once-a-day version check to GitHub's public releases API (no data about you, can be turned off). No telemetry.

Can it play a different sound per level? Yes. Set sounds in the extension settings, or emoji/labels/sounds per level via NOTIFY_CONFIG.

My language isn't there. Add one line to LABELS in server/index.js and open a PR.

πŸ›  How it works

A ~350-line, zero-dependency Node.js MCP server with one tool:

notify(title, message, level = done | question | urgent, subtitle?, sound?)
  • Speaks MCP over stdio

  • Calls the native notification API: osascript (macOS), PowerShell WinRT toast (Windows), notify-send (Linux)

  • Returns MCP instructions, so every connected Claude thread knows to call notify once at the end of a task, with a ≀ 40-character message in your language

server/index.js           MCP server (the whole thing)
manifest.json             Claude Desktop extension manifest (.mcpb)
.claude-plugin/           Claude Code plugin + marketplace
.mcp.json                 MCP config used by the Claude Code plugin

πŸ—Ί Roadmap

  • Verify on Windows (help wanted)

  • Click a notification to open the exact thread

  • Quiet hours

  • Phone push (ntfy / Pushover) as an optional channel

  • Per-project sounds

  • Native dropdown for language (when Claude extension settings support it)

Ideas and PRs welcome. See CONTRIBUTING.md.

License

MIT Β© vjvasiljev

Not affiliated with or endorsed by Anthropic. "Claude" is a trademark of Anthropic, PBC.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers