Multi-backend notification system for SciTeX with MCP server support. Sends alerts through 9 backends: audio (TTS), desktop (OS popup), emacs (minibuffer), matplotlib (banner), playwright (browser toast), email (SMTP), webhook (HTTP POST), telegram, and twilio (phone/SMS) with automatic fallback.
Server has 7 tools with complete input schemas and descriptions. Naming follows verb_noun convention (notify, list_*, get_*). Descriptions are detailed (150-300 chars) and explain WHEN to use each tool. However, output schemas are not documented, LLMs cannot predict response structure. Parameters lack type constraints (e.g., 'backend' accepts free-form strings instead of enum). Error handling guidance is absent. Tool composition is sound (each does one thing), but missing pagination/limit guidance for list tools.
List only the backends that are currently *working* — dependencies imported cleanly and credentials / env vars / sockets are intact. Shorter than `list_notification_backends` and the right check before picking a fallback order at runtime. Use when the user asks 'what notifiers actually work right now?', 'which backends are live?', or before programmatically choosing one.
Dump the active notification config — fallback order, per-level backend mapping (info/warning/error/critical → which backends), per-backend timeouts, Twilio/Telegram/webhook/email credentials (with secrets redacted). Use when the user asks 'show my notification config', 'what's my fallback order?', 'which backends fire for critical?', or is auditing before editing `~/.scitex/notification/config.yaml`.
Enumerate every registered notification backend (audio, desktop, emacs, matplotlib, playwright, email, webhook, telegram, twilio) along with its reachability status — dependencies installed, env vars set, connections healthy. Use when the user asks 'which notifiers are set up?', 'why isn't my Twilio alert working?', 'is email configured?', or is debugging a silent notification.
Fetch the full Markdown content of one scitex-notification skill page. Use after `notification_skills_list` to read an individual guide (e.g. `backends`, `configuration`, `cli-reference`, `mcp-tools`, `python-api`). Returns a JSON envelope with `content: <markdown>` or an error envelope listing available names.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Tools return JSON but no schema is visible in tool definitions.
'backend' parameter in notify() accepts free-form strings instead of enum. Should constrain to: audio, desktop, emacs, matplotlib, playwright, email, webhook, telegram, twilio. LLMs will hallucinate invalid backend names.
list_notification_backends and available_notification_backends lack pagination/limit guidance. No mention of max results, offset, or cursor. If backend list grows, response could bloat context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
List the names of every skill page shipped by scitex-notification. Use whenever the user wants to discover what detailed docs exist (backends, configuration, CLI reference, MCP tools, Python API) before drilling into a specific topic. Returns a JSON envelope with `skills: [...]`.
Send an alert through any of 9 backends — `audio` (spoken TTS), `desktop` (OS popup), `emacs` (minibuffer), `matplotlib` (banner), `playwright` (browser toast), `email` (SMTP), `webhook` (HTTP POST), `telegram`, `twilio` (phone call / SMS) — with automatic fallback if a backend fails. Drop-in replacement for `smtplib`, `plyer.notification`, `requests.post(slack_webhook)`, `python-telegram-bot`. Use whenever the user asks to 'notify me', 'alert me when this finishes', 'beep when done', 'email me the result', 'ping me on Telegram', 'send a desktop notification', or is wiring up monitoring from scripts / CI / AI agents. Pass `backend='email'` for a specific channel, or `backends=['audio', 'email']` for multi-channel. `level` sets urgency (info / warning / error / critical).
Route a notification through whichever backend set the user has pre-configured for that urgency level — e.g. `info` → just emacs, `critical` → audio + desktop + email + Twilio phone call. Lets callers just say 'this is critical' and let the config decide how loudly to shout. Use whenever the user asks to 'alert at error level', 'escalate to critical', 'send a warning through my usual channels', or has set up `level_backends` in their scitex-notification config.
No error handling guidance. Tools lack recovery hints (e.g., 'If email backend fails, try webhook' or 'Check credentials if Twilio unavailable'). LLMs cannot self-correct on failures.
notify() 'timeout' parameter lacks range constraints. Description says 'default 5' but no min/max specified. LLMs could pass 0, negative, or absurdly large values.