This server displays notification popups via Quickshell on Linux with rich customization options.
Core Capabilities:
Display notifications - Show customizable popup notifications with messages, titles, and severity levels (info/warn/crit)
Customize appearance - Control accent colors (via severity or custom hex), background patterns (waves, grid, stripes, sunset), and left panel images (ghost, claude, openai, or custom paths)
Configure behavior - Set auto-hide timeouts (0 for persistent), transition effects (glow, ghost, ripple, none), and actions on backtick keypress (switch workspace or focus app)
Check status - Verify if Quickshell is running with the ohai IPC target registered
Test notifications - Use the bundled CLI tool to test preset notifications or create custom ones
Client integration - Configure for use with Claude, Cursor, or codex-cli via environment variables for default image and transition settings
Setup Quickshell - Launch the popup daemon and verify IPC target registration for communication between the MCP server and Quickshell
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., "@Polybar Notification MCPshow a warning notification saying 'Build failed' with title 'CI Pipeline'"
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.
ohai
MCP for displaying Quickshell-based notifications on Linux.
Installation
npm install
npm run buildRelated MCP server: MCP Server Basic Example
Tools
ohai
Display a notification popup.
Parameter | Type | Required | Description |
| string | yes | Message body |
| string | no | Popup title (defaults to message) |
|
| no | Accent color (default: |
| string | no | Custom accent color (CSS/hex; overrides severity) |
| number | no | Auto-hide delay (default: 8; 0 = persistent) |
| string | no | Background pattern ID or path |
| string | no | Image ID or path (default: |
| string | no | Workspace to switch to on backtick |
| string | no | App/window to focus on backtick |
|
| no | Entry transition effect (default: |
ohai_status
Check if Quickshell is running with the ohai IPC target registered.
Transition Effects
Effect | Description |
| Soft blur glow pulse (default) |
| Expanding/fading copies of actual notification content |
| Border ripples emanating outward |
| No transition effect |
Set a default transition via environment variable:
export OHAI_TRANSITION=ghostQuickshell Setup
Start the popup daemon:
qs -p /path/to/ohai-mcp/ohai/shell.qmlVerify the IPC target is registered:
qs ipc show
# Should list: target ohaiTest manually:
qs ipc call ohai notify "Hello" "Test message" "info" 5 "" "" "" "" "" "glow"Controls while popup is visible:
Escape- hide popupBacktick (`) - switch to workspace or focus app (if configured), then hide
Testing with ohai-test
A CLI helper for testing notification appearance:
bin/ohai-test [preset] # Run a preset
bin/ohai-test custom [options] # Custom notificationPresets:
Preset | Description |
| Basic info notification (default) |
| Warning notification |
| Critical notification |
| Long text (test layout) |
| Minimal notification |
| Claude-themed |
| OpenAI-themed |
| Grid pattern background |
| Stripes pattern background |
| Waves pattern background |
| Test glow transition effect |
| Test ghost echo transition effect |
| Test ripple transition effect |
| Cycle through all presets |
Custom options:
bin/ohai-test custom \
-t "Title" \
-b "Body text" \
-s warn \
-i claude \
-p grid-01 \
-d 10 \
-c "#ff00ff" \
-x ghostOption | Description |
| Title text |
| Body text |
|
|
| Image ID or path |
| Pattern ID or path |
| Timeout in seconds |
| Custom accent color (hex) |
| Workspace to switch on backtick |
| App to focus on backtick |
|
|
Bundled Assets
Patterns (background overlays):
waves-01,grid-01,stripes-01,sunset-01
Images (left panel):
ghost(default),claude,openai
Use an absolute path for custom assets.
Integration
Use environment variables to configure defaults per client.
Claude Code
To add via the CLI for user scope:
claude mcp add ohai \
--scope user \
--env OHAI_TRANSITION=glow \
--env OHAI_DEFAULT_IMAGE=claude \
-- node <OHAI_PATH>/bin/ohai-mcp~/.claude.json:
{
"mcpServers": {
"ohai": {
"type": "stdio",
"command": "node",
"args": ["/path/to/ohai-mcp/bin/ohai-mcp"],
"env": {
"OHAI_DEFAULT_IMAGE": "claude",
"OHAI_TRANSITION": "glow"
}
}
}
}Cursor
Add to MCP settings:
{
"mcpServers": {
"ohai": {
"command": "node",
"args": ["/path/to/ohai-mcp/bin/ohai-mcp"],
"env": {
"OHAI_DEFAULT_IMAGE": "claude",
"OHAI_TRANSITION": "ghost"
}
}
}
}codex-cli
~/.codex/config.toml:
[mcp_servers.ohai]
command = "node"
args = ["/path/to/ohai-mcp/bin/ohai-mcp"]
[mcp_servers.ohai.env]
OHAI_DEFAULT_IMAGE = "openai"
OHAI_TRANSITION = "glow"Auto-launch (Hyprland)
exec-once = qs -p /path/to/ohai-mcp/ohai/shell.qmlEnvironment Variables
Variable | Description |
| Default image when |
| Default transition effect (e.g., |
Architecture
┌─────────────┐ qs ipc call ┌─────────────────┐
│ MCP Client │ ──────────────────▶ │ Quickshell │
│ (Claude) │ │ (shell.qml) │
└─────────────┘ └─────────────────┘
│ │
│ │
▼ ▼
┌─────────────┐ ┌─────────────────┐
│ ohai-mcp │ │ IpcHandler │
│ (Node.js) │ │ target: "ohai" │
└─────────────┘ └─────────────────┘The MCP server communicates with Quickshell via its built-in IPC mechanism (qs ipc call), which uses a Unix socket for instant, reliable delivery.
Development
npm run dev # Watch mode
npm run build # Build
npm run lint # Lint
npm run format # FormatRequirements
Linux with Quickshell
Node.js 18+
Credit
Original implementation adapted from neotanx/neomcps - sound notification mcp.