omni-notify-mcp 1.1.1 → 1.1.4

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/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="assets/logo.svg" width="128" height="128" alt="omni-notify-mcp">
2
+ <img src="https://raw.githubusercontent.com/menih/notify-mcp/main/assets/logo.svg" width="128" height="128" alt="omni-notify-mcp">
3
3
  </p>
4
4
 
5
5
  <h1 align="center">omni-notify-mcp</h1>
@@ -13,8 +13,13 @@
13
13
 
14
14
  <p align="center">
15
15
  <a href="https://www.npmjs.com/package/omni-notify-mcp"><img src="https://img.shields.io/npm/v/omni-notify-mcp.svg" alt="npm"></a>
16
- <img src="https://img.shields.io/badge/license-MIT-7c6dfa.svg" alt="MIT license">
17
- <img src="https://img.shields.io/badge/MCP-compatible-3b82f6.svg" alt="MCP compatible">
16
+ <a href="https://marketplace.visualstudio.com/items?itemName=MeniHillel.omni-notify-mcp"><img src="https://img.shields.io/visual-studio-marketplace/v/MeniHillel.omni-notify-mcp?label=marketplace" alt="VS Code Marketplace"></a>
17
+ <img src="https://img.shields.io/badge/license-MIT-4ea3ff.svg" alt="MIT license">
18
+ <img src="https://img.shields.io/badge/MCP-compatible-4ea3ff.svg" alt="MCP compatible">
19
+ </p>
20
+
21
+ <p align="center">
22
+ <img src="https://raw.githubusercontent.com/menih/notify-mcp/main/assets/screenshots/main-ui.png" width="900" alt="omni-notify-mcp config UI — channels and policies side by side, with live activity log">
18
23
  </p>
19
24
 
20
25
  ---
@@ -107,7 +112,11 @@ The server publishes a policy `{ enabled, thresholdSeconds }`. Agents are **inst
107
112
  Cross-platform idle detection: Windows (PowerShell + `GetLastInputInfo`), macOS (`ioreg`), Linux (`xprintidle`).
108
113
 
109
114
  ### Web config UI
110
- One page, dark theme, live activity log streaming over SSE, one-click test buttons per channel, secrets masked at rest.
115
+ One page, dark theme, live activity log streaming over SSE, one-click test buttons per channel, secrets masked at rest. Plus a copy-paste help page that walks any AI client through registration in 30 seconds:
116
+
117
+ <p align="center">
118
+ <img src="https://raw.githubusercontent.com/menih/notify-mcp/main/assets/screenshots/help-page.png" width="800" alt="Help page — copy-paste snippets for Claude Code, Cursor, VS Code, Claude Desktop, Windsurf, Zed">
119
+ </p>
111
120
 
112
121
  ### Activity log
113
122
  Every notify, ask, reply, and inbox event is logged with timestamp, direction (`→` `←` `·`), channel, and (color-coded) client/session id. Visible live in the UI; last 500 entries replayed on connect.
Binary file
Binary file
@@ -9,7 +9,7 @@ export async function sendDesktop(config, message) {
9
9
  if (wantSound && process.platform === "win32") {
10
10
  spawn("powershell", [
11
11
  "-NoProfile", "-Command",
12
- "[console]::beep(880,180); Start-Sleep -Milliseconds 60; [console]::beep(660,180)",
12
+ "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); Start-Sleep -Milliseconds 600",
13
13
  ], { windowsHide: true, stdio: "ignore" });
14
14
  }
15
15
  await new Promise((resolve, reject) => {
package/dist/ui/server.js CHANGED
@@ -150,15 +150,15 @@ app.post("/api/config", (req, res) => {
150
150
  // node-notifier's `sound: true` works reliably, no fallback needed.
151
151
  app.post("/api/test/sound", (_req, res) => {
152
152
  if (process.platform === "win32") {
153
- // Direct PowerShell beep bypasses the notification subsystem entirely.
154
- // Plays an 800Hz tone for 200ms through the system speakers. Cannot be
155
- // muted by per-app notification settings.
153
+ // Use System.Media.SystemSounds.Asteriskplays through the sound card
154
+ // (Windows notification sound), works on every machine. console::beep
155
+ // uses the PC speaker which modern hardware lacks.
156
156
  spawn("powershell", [
157
157
  "-NoProfile",
158
158
  "-Command",
159
- "[console]::beep(880,180); Start-Sleep -Milliseconds 60; [console]::beep(660,180)",
159
+ "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); Start-Sleep -Milliseconds 600",
160
160
  ], { windowsHide: true, stdio: "ignore" });
161
- res.json({ ok: true, message: "Beep sent (Windows console.beep)" });
161
+ res.json({ ok: true, message: "Sound played (System.Media)" });
162
162
  return;
163
163
  }
164
164
  notifier.notify({ title: "Claude Notify", message: "Sound test", sound: true, wait: false }, (err) => {
@@ -175,7 +175,7 @@ app.post("/api/test/desktop", (_req, res) => {
175
175
  if (wantSound && process.platform === "win32") {
176
176
  spawn("powershell", [
177
177
  "-NoProfile", "-Command",
178
- "[console]::beep(880,180); Start-Sleep -Milliseconds 60; [console]::beep(660,180)",
178
+ "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); Start-Sleep -Milliseconds 600",
179
179
  ], { windowsHide: true, stdio: "ignore" });
180
180
  }
181
181
  notifier.notify({
@@ -558,9 +558,13 @@ async function sendNotification(message, priority, client) {
558
558
  // Windows notification settings — fire a PowerShell beep alongside the
559
559
  // toast so the audible cue is reliable. macOS/Linux: trust the OS.
560
560
  if (wantSound && process.platform === "win32") {
561
+ // [console]::beep uses the PC speaker (motherboard buzzer), which
562
+ // modern laptops/desktops don't have — silent on most machines.
563
+ // SystemSounds.Asterisk plays through the actual sound card via
564
+ // the Windows notification sound, audible on every machine.
561
565
  spawn("powershell", [
562
566
  "-NoProfile", "-Command",
563
- "[console]::beep(880,180); Start-Sleep -Milliseconds 60; [console]::beep(660,180)",
567
+ "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); Start-Sleep -Milliseconds 600",
564
568
  ], { windowsHide: true, stdio: "ignore" });
565
569
  }
566
570
  const soundOpt = wantSound && process.platform !== "win32";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omni-notify-mcp",
3
- "version": "1.1.1",
3
+ "version": "1.1.4",
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",
@@ -36,7 +36,7 @@
36
36
  "license": "MIT",
37
37
  "repository": {
38
38
  "type": "git",
39
- "url": "https://github.com/menih/omni-notify-mcp"
39
+ "url": "https://github.com/menih/notify-mcp"
40
40
  },
41
41
  "engines": {
42
42
  "node": ">=18"
@@ -64,6 +64,7 @@
64
64
  "@types/node": "^20.0.0",
65
65
  "@types/node-notifier": "^8.0.5",
66
66
  "@types/nodemailer": "^6.4.14",
67
+ "playwright": "^1.59.1",
67
68
  "ts-node": "^10.9.2",
68
69
  "typescript": "^5.4.0"
69
70
  }