omni-notify-mcp 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -171,7 +171,13 @@ const server = new McpServer({ name: "notify-mcp", version: "1.2.0" }, {
171
171
  instructions: "This is the stdio bridge for notify-mcp. It pushes unsolicited user " +
172
172
  "messages to the agent via `notifications/claude/channel` when the host " +
173
173
  "supports Channels (Claude Code v2.1.80+). Otherwise call `wait_for_inbox` " +
174
- "as a long-poll to reliably receive user messages as tool results.",
174
+ "as a long-poll to reliably receive user messages as tool results.\n\n" +
175
+ "ALWAYS call `notify` when: (a) a task that took >60s of wall-clock time " +
176
+ "just finished (success or failure), (b) you have a question or need a " +
177
+ "decision, (c) something important happened the user needs to know right " +
178
+ "now. Idle/DND gating is handled server-side — fire notify and let the " +
179
+ "server decide routing. Err on the side of notifying: a wrong-call gets " +
180
+ "silently downgraded by idle gating; a missed notify costs the user hours.",
175
181
  });
176
182
  // Thin proxy: forward a tool call to the HTTP server and return its content
177
183
  // block array verbatim. Error shape matches what the SDK expects from tool
package/dist/ui/server.js CHANGED
@@ -1116,12 +1116,37 @@ channels are in use — just call 'notify' or 'ask' with a generic message.
1116
1116
 
1117
1117
  BEHAVIORAL RULES for every client that connects:
1118
1118
 
1119
- 1. Always call 'notify' for milestones, decisions, completions. The SERVER
1120
- handles all gating (DND, idle, channel routing). You do not need to
1121
- pre-flight with 'get_idle_seconds' — the server checks it itself and
1122
- downgrades the delivery automatically. When the user is active, the server
1123
- will play a local desktop sound+banner so they know something happened
1124
- (without blasting their phone). Just call 'notify'.
1119
+ 1. ALWAYS call 'notify' in these three situations — idle or not, DND or not,
1120
+ the server decides routing, you decide whether to fire:
1121
+
1122
+ (a) LONG PROCESSING FINISHED. Any single task that took more than ~60
1123
+ seconds of wall-clock time (long build, test run, backtest, migration,
1124
+ big refactor, multi-step plan) gets a 'notify' the moment it completes
1125
+ — success OR failure. Rule of thumb: if the user could have reasonably
1126
+ walked away to grab coffee while you ran, they need a ping on the way
1127
+ back. Don't try to guess whether they were watching. Just notify.
1128
+
1129
+ (b) YOU HAVE A QUESTION OR NEED A DECISION. Any time you're about to ask
1130
+ the user something — "should I delete these?", "which branch?",
1131
+ "proceed with plan B?" — fire 'notify' (or 'ask' for blocking
1132
+ two-way). Silent questions in the terminal get missed; a notification
1133
+ does not.
1134
+
1135
+ (c) SOMETHING IMPORTANT HAPPENED that the user needs to know about right
1136
+ now. Examples: a test suddenly failed after being green, a destructive
1137
+ operation is about to run, you found a security issue, a deploy
1138
+ succeeded, a production service looks degraded, you hit an
1139
+ unrecoverable error. When in doubt on importance, ERR ON THE SIDE OF
1140
+ NOTIFYING — the server's idle gating will automatically downgrade a
1141
+ mis-judged 'normal' to a silent desktop banner if the user is active,
1142
+ so the cost of over-notifying is near zero. The cost of missing a
1143
+ real event is that the user finds out 4 hours later.
1144
+
1145
+ The SERVER handles all routing (DND, idle threshold, channel selection,
1146
+ priority escalation). You do NOT need to pre-flight with
1147
+ 'get_idle_seconds' before these three triggers — fire 'notify' and let
1148
+ the server decide. get_idle_seconds is the HEARTBEAT primitive (rule 6),
1149
+ not a gate on legitimate milestones.
1125
1150
 
1126
1151
  2. Use priority correctly:
1127
1152
  - 'low' = email only — for low-stakes status (background completion).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omni-notify-mcp",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "An MCP server that lets AI agents (Claude, Cursor, etc.) reach you on any channel — desktop, Telegram, SMS, email — with two-way ask/reply, real-time inbox push, Do Not Disturb, idle gating, multi-session routing, and a one-page web UI for setup. Zero config code; configure once, agents call notify/ask.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",