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 +13 -4
- package/assets/screenshots/help-page.png +0 -0
- package/assets/screenshots/main-ui.png +0 -0
- package/dist/channels/desktop.js +1 -1
- package/dist/ui/server.js +11 -7
- package/package.json +3 -2
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/
|
|
17
|
-
<img src="https://img.shields.io/badge/
|
|
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
|
package/dist/channels/desktop.js
CHANGED
|
@@ -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
|
-
"[
|
|
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
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
153
|
+
// Use System.Media.SystemSounds.Asterisk — plays 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
|
-
"[
|
|
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: "
|
|
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
|
-
"[
|
|
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
|
-
"[
|
|
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.
|
|
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/
|
|
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
|
}
|