Navi
Navi ๐ง
Hey! Listen!
A desktop notifier for AI agents, styled after the fairy from The Legend of
Zelda: Ocarina of Time. Navi floats on your screen; when an agent (Claude
Code or any MCP client) calls her notify tool, she rings, changes color,
and shows the message in a speech bubble โ so you know when an agent needs
you without watching the terminal.
Kind | Meaning | Color | Chime volume |
| Agent needs your approval | ๐ด Red | 100% |
| Something needs attention | ๐ก Yellow | 60% |
| Task finished | ๐ข Green | 35% |
Idle, she glows soft blue, bobs, flaps her wings, sheds sparks, and drifts lazily around her corner of the screen. Drag her anywhere by her body.
How it works
One Electron app hosts both:
An MCP server (streamable HTTP, stateless) on
0.0.0.0:8641, exposing a single tool:notify(kind: "urgent" | "warning" | "success", message: string, title?: string)The fairy overlay โ a transparent, frameless, always-on-top window.
A tray icon provides per-kind test notifications, a "Copy MCP add command" shortcut, and Quit.
Related MCP server: mcp-server-notify
Requirements
Windows 10/11 with Node.js LTS (the app is Windows-only: transparent overlay + audio).
Agents can run anywhere that can reach port 8641 โ including WSL2.
Run from source
npm install
npm startAllow the Windows Firewall prompt on first launch (tick Public if your agents connect from WSL2 โ the WSL virtual adapter is usually classified Public).
Build the exe
npm run packageOutput: release/navi-win32-x64/navi.exe. Launching it starts the MCP
server automatically; on startup Navi's speech bubble shows the exact
command to register her with Claude Code.
Connect an agent
From Windows:
claude mcp add --transport http navi http://localhost:8641/mcpFrom WSL2 (NAT mode โ the default), use the Windows host IP instead:
HOST=$(ip route show default | awk '{print $3}')
claude mcp add --transport http navi http://$HOST:8641/mcpThe NAT IP can change after a reboot โ re-run the command if calls stop
connecting, or enable networkingMode=mirrored in .wslconfig so
localhost works from WSL too. The tray's Copy MCP add command always
has the current URL.
Then just ask your agent to use it, or add a standing instruction like:
When you finish a task, need my approval, or hit a problem, call the
notifytool (kind: success / urgent / warning).
The chime
Drop your own sound at assets/hey_listen.mp3 (gitignored โ bring your own;
Nintendo's audio cannot be distributed with this repo). Without the file,
Navi synthesizes a two-note fairy chime with WebAudio.
Development notes
No bundler: two
tscprojects (tsconfig.jsonfor main/preload,tsconfig.renderer.jsonfor browser-global renderer scripts).npm run buildcompiles both; seeCLAUDE.mdfor the full development log and environment gotchas.
Known limitations
The server listens on
0.0.0.0, so any LAN host can trigger notifications. Fine for a home setup; firewall the port if that bothers you.Always-on-top does not cover exclusive-fullscreen games.
This server cannot be deployed
Maintenance
Related MCP Connectors
Let your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.
Push notifications for AI agents - send instant iPhone notifications from any MCP client.
Reach your own phone from an AI agent: notifications, approval questions, reminders, ring, files.
Zero-setup WhatsApp notifications + human-in-the-loop for AI agents โ text 'join', send in 60s.
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol service that sends desktop notifications and alert sounds when AI agent tasks are completed, integrating with various LLM clients like Claude Desktop and Cursor.154MIT
- AlicenseAqualityCmaintenanceไธไธช่ฝป้็บง็ๆก้ข้็ฅๅทฅๅ ท๏ผๆฏๆ MCP ๅ่ฎฎ้ๆๅๅฝไปค่ก็ดๆฅ่ฐ็จ๏ผ่ฎฉ Agent ่ฝๅคๆบ่ฝๅ้็ณป็ป้็ฅใ14 npm4MIT
- AlicenseNot gradedqualityDmaintenanceLet your AI agent notify you via email, Slack, Discord, or webhook using a single tool.MIT
- AlicenseDqualityDmaintenanceEnables MCP agents to send desktop notifications for completed tasks, failures, and important updates, providing visible and reliable feedback.133 npm2Apache 2.0