Not-Happy-Jan
Provides haptic feedback to Logitech MX Master mouse via distinct firmware waveforms for different intents (e.g., completed, alert).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Not-Happy-Jannotify when the tests complete"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Not-Happy-Jan
Multi-sensory feedback for AI coding agents. When your coding agent finishes a task, someone picks up the phone and tells you — cheerfully if it went well, furiously if it didn't. Hold music while it works, a cast of cloned voices when it's done, and a buzz on your mouse or a flash on a pixel display to match — all 100% on your own machine.
"Not happy, Jan — the issue is…"
Built on the agent-feedback idea from AgentVibes — and taken way too far.
📖 Read the docs · 🎬 Watch the demo (videos coming soon)
⚠️ Public alpha — an early, for-fun release that will have rough edges. Open an issue or start a discussion. The minimal install speaks instantly with the bundled voice bank (no downloads); the full live experience wants an Apple-Silicon Mac and a one-off ~5 GB of local models.
What you'll experience
🎷 Hold music plays while the agent is busy and pauses the instant it's done — a zero-attention "still working / finished" signal.
👩 Jan handles routine "all done". 🧑💼 Bazza escalates warnings. 📣 Karren takes over when it breaks — she is NOT. HAPPY. JAN.
🎚️ Tune each character — boganism, competence, chaos — just by asking Claude in plain language.
📟 Fan out across devices you already have — a haptic mouse, $60 pixel clocks, a LaMetric, a physical bell — or nothing but your speakers.
→ Meet the cast and the one-word modes: Characters & dials · Modes
Related MCP server: Notifications MCP Server
Install
curl -fsSL https://raw.githubusercontent.com/guruswami-ai/not-happy-jan/main/install.sh | bashOne command, non-interactive, no sudo. The default installs the full local
experience — cloned voices, the dynamic ocker-bogan-nano brain, and hold music — with
on-demand model loading, so there's no resident RAM cost at idle.
Profile | Command | What you get |
Default |
| Full experience: Qwen3-TTS + |
Full |
| …plus persistent warm TTS/LLM/MCP services (macOS) for sub-second responses |
Minimal |
| Hooks + MCP + the bundled voice bank — the cast speaks pre-recorded lines, no downloads (CI / low-RAM) |
The MCP server always binds to 127.0.0.1; LAN access is an explicit opt-in
(--full --listen 0.0.0.0). Uninstall is one reversible, user-only command:
nhj uninstall # stops services, removes runtime/config/models/hooks; --yes to skip the promptRequirements: macOS Apple Silicon (M1+), Python 3.10+, ~8 GB RAM (16 recommended),
~5 GB disk. The alpha is Apple-Silicon-only; TTS_ENGINE=none runs text-only.
→ Requirements & tiers · Install profiles · Dynamic voices
Quick start
nhj test ok # fire a "done" across every configured channel
nhj voices # the cast + what each voice can speak with
nhj set jan.ockerism 11 # tune any dial live (or just ask Claude)
nhj mode rave # one-word vibe switch; nhj status to see current→ Full walkthrough: Quick start
Documentation
📖 guruswami-ai.github.io/not-happy-jan — the full task-oriented docs site. By audience:
New here → What is NHJ? — the full story in plain language
Trying it / choosing a profile → Requirements & tiers · Install profiles · Quick start
Living in it → Characters & dials · Modes · Audio & hold music
Wiring up devices & agents → Integration · AWTRIX display · Haptic mouse · Devices
Customizing → Dynamic voices · Configuration
Building on it → Architecture · Developer guide · Contributing
Security & privacy
Inference runs on-device — the cloned-voice references never leave your machine.
Local services bind to 127.0.0.1 by default; LAN access is a deliberate opt-in. A
secret guard scans prompts for leaked credentials. Install/uninstall are user-context
only (no sudo) and fully reversible. Report vulnerabilities via SECURITY.md.
Credits & license
The core idea — narrating your coding agent's status via [vibes:] markers — comes from
AgentVibes (TTS for Claude Code) by Paul
Preibisch, an actively-developed project with its own evolving character system. Not-Happy-Jan
is an independent, unapologetically over-engineered take on that idea. TTS powered by
Qwen3-TTS via
mlx-audio.
Code is MIT. Downloadable media and voice assets are licensed separately with mixed provenance — mostly AI-generated (CC0) or procedurally synthesised, hold music under a licensed Suno plan. See Media provenance; do not assume the code license grants rights to media, and use only voice references you own or have documented consent to use.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/guruswami-ai/not-happy-jan'
If you have feedback or need assistance with the MCP directory API, please join our Discord server