| name | gotify |
| description | How to interact with the Gotify self-hosted push notification server via the gotify-mcp MCP tool, CLI binary, or direct REST API. Use this skill whenever the user wants to send a push notification, check notification history, manage Gotify applications or clients, check Gotify server health, delete messages, or do anything with Gotify — even if they just say "send an alert" or "notify me when X is done". Also invoke this when the user asks about notification history, wants to know if their Gotify server is up, or mentions monitoring, alerting, or push notifications in a self-hosted context.
|
Gotify — Push Notification Server
Gotify is a self-hosted push notification server. The gotify-mcp bridge exposes it as a single MCP tool (gotify) with action-based dispatch. A CLI binary and direct REST API are available as fallbacks.
Token model (critical — read this first)
Two tokens, two purposes. Using the wrong token returns 401.
| Token | Env var | Starts with | Used for |
|---|
| Client token | GOTIFY_CLIENT_TOKEN | C | All management: list/create/delete apps, clients, messages; read user |
| App token | GOTIFY_APP_TOKEN | A | Sending only — POST /message |
health and version need no token at all.
Tier 1 — MCP tool gotify (preferred)
Single tool, action selects the operation. All other parameters are optional unless noted.
Read actions
| Action | Parameters | Notes |
|---|
health | — | No auth required |
version | — | No auth required |
me | — | Returns current user info |
messages | app_id?, limit? (default 50), since? | since is a message-ID cursor for pagination |
applications | — | Returns array with id, name, defaultPriority, token |
clients | — | Returns array with id, name, token |
Write actions
| Action | Required | Optional |
|---|
send | message | title, priority (0–10), extras (object) |
create_application | name | description, default_priority |
update_application | app_id | name, description, default_priority |
create_client | name | — |
Destructive actions — require confirm=true
These will fail unless confirm=true is passed or GOTIFY_ALLOW_DESTRUCTIVE=true is set in the environment. Always confirm with the user before passing confirm=true, especially for delete_all_messages.
| Action | Required | What it does |
|---|
delete_message | id, confirm=true | Deletes one message |
delete_all_messages | confirm=true | Wipes all messages — irreversible |
delete_application | app_id, confirm=true | Deletes application and its token |
delete_client | client_id, confirm=true | Deletes client and its token |
Meta
help — Returns full built-in documentation.
Examples
gotify(action="send", message="Disk usage at 95%", title="ALERT", priority=8)
gotify(action="send", message="Build failed", title="CI", priority=5,
extras={"client::display": {"contentType": "text/markdown"}})
gotify(action="health")
gotify(action="messages", limit=20)
gotify(action="messages", app_id=3, limit=10)
gotify(action="messages", since=100)
gotify(action="applications")
gotify(action="me")
gotify(action="create_application", name="Monitoring", description="System alerts", default_priority=5)
gotify(action="update_application", app_id=2, default_priority=8)
gotify(action="delete_message", id=42, confirm=True)
gotify(action="delete_all_messages", confirm=)
gotify(action=, app_id=, confirm=)
gotify(action=, name=)
gotify(action=, client_id=, confirm=)
Tier 2 — CLI binary (secondary)
Binary: ~/workspace/rustify/target/release/rgotify (or /usr/local/bin/rgotify in Docker)
Add --json to any command for raw JSON output. Add --confirm to destructive commands.
rgotify health
rgotify version
rgotify me
rgotify messages
rgotify messages --limit 20
rgotify messages --app-id 3
rgotify messages --since 100
rgotify messages --json
rgotify applications
rgotify send "Server rebooted" --title "Alert" --priority 8
rgotify create app "Monitoring" --description "System alerts" --priority 5
rgotify create-app "Monitoring"
rgotify delete app 3 --confirm
rgotify delete-app 3 --confirm
rgotify delete message 42 --confirm
rgotify delete-message 42 --confirm
rgotify delete all --confirm
rgotify delete-all --confirm
rgotify clients
rgotify create client "MyApp"
rgotify create-client "MyApp"
rgotify delete client 2 --confirm
rgotify delete-client 2 --confirm
Tier 3 — Direct REST API (fallback)
Use when neither the MCP tool nor the CLI binary is available.
Auth header: X-Gotify-Key: <token>
curl "$GOTIFY_URL/health"
curl "$GOTIFY_URL/version"
curl -X POST "$GOTIFY_URL/message" \
-H "X-Gotify-Key: $GOTIFY_APP_TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":"Server rebooted","title":"Alert","priority":5}'
curl "$GOTIFY_URL/message?limit=20" \
-H "X-Gotify-Key: $GOTIFY_CLIENT_TOKEN"
curl "$GOTIFY_URL/application/3/message?limit=10" \
-H "X-Gotify-Key: $GOTIFY_CLIENT_TOKEN"
curl "$GOTIFY_URL/application" \
-H "X-Gotify-Key: $GOTIFY_CLIENT_TOKEN"
curl "$GOTIFY_URL/client" \
-H "X-Gotify-Key: $GOTIFY_CLIENT_TOKEN"
curl "$GOTIFY_URL/current/user" \
-H "X-Gotify-Key: $GOTIFY_CLIENT_TOKEN"
curl -X POST "$GOTIFY_URL/application" \
-H "X-Gotify-Key: $GOTIFY_CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Monitoring","description":"System alerts","defaultPriority":5}'
curl -X PUT \
-H \
-H \
-d
curl -X DELETE \
-H
curl -X DELETE \
-H
curl -X DELETE \
-H
curl -X POST \
-H \
-H \
-d
curl -X DELETE \
-H
Gotchas
-
Wrong token = 401. send uses GOTIFY_APP_TOKEN. Everything else uses GOTIFY_CLIENT_TOKEN. Do not mix them.
-
Destructive gate. Delete operations require confirm=True (MCP) or --confirm (CLI) unless GOTIFY_ALLOW_DESTRUCTIVE=true is set. The error message when missing is: "destructive operation — pass confirm=true or set GOTIFY_ALLOW_DESTRUCTIVE=true".
-
Priority scale. 0 = silent/low, 5 = normal, 8+ = high/urgent. The Gotify Android client shows heads-up notifications at priority ≥ 8. Default is whatever the application's defaultPriority is set to.
-
delete_all_messages is irreversible. Always confirm with the user before passing confirm=True.
-
extras for rich content. Pass an object like {"client::display": {"contentType": "text/markdown"}} to render markdown in compatible clients. See Gotify extras docs for the full spec.
-
Pagination. messages returns up to limit items. The response includes a paging.next cursor — pass it as since to fetch the next page.
-
MCP server port. Runs on 9158 by default (GOTIFY_MCP_PORT to override).
-
No-auth endpoints. health and version work without any token — useful for liveness probes.
-
update_application is a PATCH-style PUT. Only fields you include are updated; omitted fields keep their current values.