Rust MCP server and CLI for Gotify push notifications and message management.
$git clone https://github.com/dinglebear-ai/rgotifyInstalls into the current project.
Install rgotify by running `git clone https://github.com/dinglebear-ai/rgotify`, then use it for the current task and follow its documentation at https://github.com/dinglebear-ai/rgotify.
| 1 | # gotify-rmcp |
| 2 | |
| 3 | `gotify-rmcp` is a Rust MCP server and CLI for connecting agents to a |
| 4 | self-hosted [Gotify](https://gotify.net/) push notification server. |
| 5 | |
| 6 | It exposes one MCP tool, `gotify`, plus the `rgotify` CLI. Agents can send |
| 7 | notifications, inspect server health, list messages, and manage Gotify apps and |
| 8 | clients through stdio MCP, Streamable HTTP MCP, or direct shell commands. |
| 9 | |
| 10 | **30-second path:** set `GOTIFY_URL`, then run `npx -y gotify-rmcp health --json` |
| 11 | -> start loopback HTTP with `GOTIFY_MCP_HOST=127.0.0.1 npx -y gotify-rmcp serve` |
| 12 | -> call `tools/call` with `{"action":"health"}`. |
| 13 | |
| 14 | **Status:** operational RMCP upstream-client server. Write-capable; destructive |
| 15 | delete actions are gated by explicit confirmation. HTTP MCP supports loopback |
| 16 | dev mode, static bearer tokens, and Google OAuth through `lab-auth`. |
| 17 | |
| 18 | **Not for:** replacing Gotify, storing notifications independently, generic |
| 19 | webhook routing, scheduling reminders, multi-tenant isolation, or passing Gotify |
| 20 | tokens through MCP tool arguments. |
| 21 | |
| 22 | ## Contents |
| 23 | |
| 24 | - [Naming](#naming) |
| 25 | - [Capabilities And Boundaries](#capabilities-and-boundaries) |
| 26 | - [Install](#install) |
| 27 | - [Quickstart](#quickstart) |
| 28 | - [Client Configuration](#client-configuration) |
| 29 | - [Runtime Surfaces](#runtime-surfaces) |
| 30 | - [MCP Tool Reference](#mcp-tool-reference) |
| 31 | - [CLI Reference](#cli-reference) |
| 32 | - [Configuration](#configuration) |
| 33 | - [Authentication](#authentication) |
| 34 | - [Safety And Trust Model](#safety-and-trust-model) |
| 35 | - [Architecture](#architecture) |
| 36 | - [Distribution Contract](#distribution-contract) |
| 37 | - [Development](#development) |
| 38 | - [Verification](#verification) |
| 39 | - [Deployment](#deployment) |
| 40 | - [Troubleshooting](#troubleshooting) |
| 41 | - [Related Servers](#related-servers) |
| 42 | - [Documentation](#documentation) |
| 43 | - [License](#license) |
| 44 | |
| 45 | ## Naming |
| 46 | |
| 47 | | Surface | This repo | |
| 48 | |---|---| |
| 49 | | Repository | `gotify-rmcp` | |
| 50 | | Rust crate | `gotify-rmcp` | |
| 51 | | Binary / CLI | `rgotify` | |
| 52 | | npm package | `gotify-rmcp` | |
| 53 | | npm binary aliases | `gotify-rmcp`, `rgotify` | |
| 54 | | MCP tool | `gotify` | |
| 55 | | Config home | `~/.gotify` on hosts, `/data` in containers | |
| 56 | | Env prefixes | `GOTIFY_*`, `GOTIFY_MCP_*`, `GOTIFY_RMCP_*` for npm launcher controls | |
| 57 | |
| 58 | The repo and npm package use the RMCP family name, while the shipped binary uses |
| 59 | the short Rust CLI name `rgotify`. |
| 60 | |
| 61 | ## Capabilities And Boundaries |
| 62 | |
| 63 | - Send Gotify push notifications with message, title, priority, and extras. |
| 64 | - Read server health, runtime status, server version, current user, messages, |
| 65 | applications, and clients. |
| 66 | - Create or update applications and create clients. |
| 67 | - Delete messages, all messages, applications, or clients only after explicit |
| 68 | destructive confirmation. |
| 69 | - Expose MCP prompts for common workflows and a resource containing the current |
| 70 | tool schema. |
| 71 | |
| 72 | | This repo owns | Gotify owns | Explicitly out of scope | |
| 73 | |---|---|---| |
| 74 | | MCP/CLI projection, request validation, auth policy, response shaping, setup checks, destructive gates. | Notification storage, delivery, Gotify users, token issuance, app/client state, upstream API semantics. | Notification scheduling, independent persistence, arbitrary webhook relay behavior, multi-tenant sandboxing, credential brokerage. | |
| 75 | |
| 76 | ## Install |
| 77 | |
| 78 | | Path | Command | Best for | Notes | |
| 79 | |---|---|---|---| |
| 80 | | npm / npx | `npx -y gotify-rmcp --help` | Local MCP clients and quick trials. | Downloads the matching `rgotify` binary from GitHub Releases. | |
| 81 | | Release installer | `curl -fsSL https://raw.githubusercontent.com/jmagar/rgotify/main/scripts/install.sh \| bash` | Host installs without Node. | Installs `rgotify` for the current Linux host. | |
| 82 | | Docker / Compose | `docker compose up -d` | Shared HTTP MCP deployments. | Reads `.env` and exposes container port `40020`. | |
| 83 | | Build from source | `cargo build --release` | Development and audits. | Produces `target/release/rgotify`. | |
| 84 | | Plugin | `claude plugin install plugins/gotify` | Claude Code local plugin setup from this checkout. | Uses the packaged setup hook and local runtime metadata. | |
| 85 | |
| 86 | ### npm / npx |
| 87 | |
| 88 | Run the stdio MCP server or CLI without a manual binary install: |
| 89 | |
| 90 | ```bash |
| 91 | npx -y gotify-rmcp --help |
| 92 | npx -y gotify-rmcp mcp |
| 93 | npx -y gotify-rmcp health --json |
| 94 | ``` |
| 95 | |
| 96 | The npm package downloads `rgotify` during `postinstall`. Override download |
| 97 | behavior only when testing packaging: |
| 98 | |
| 99 | | Variable | Purpose | |
| 100 | |---|---| |
| 101 | | `GOTIFY_RMCP_SKIP_DOWNLOAD=1` | Skip postinstall binary download. | |
| 102 | | `GOTIFY_RMCP_VERSION` or `GOTIFY_RMCP_BINARY_VERSION` | Select the GitHub Release tag. | |
| 103 | | `GOTIFY_RMCP_REPO` | Select the GitHub repo used for release downloads. | |
| 104 | | `GOTIFY_RMCP_RELEASE_BASE_URL` | Select a custom release base URL. | |
| 105 | |
| 106 | ### Build From Source |
| 107 | |
| 108 | ```bash |
| 109 | git clone https://github.com/jmagar/rgotify |
| 110 | cd gotify-rmcp |
| 111 | cargo build --release |
| 112 | ./target/release/rgotify --help |
| 113 | ``` |
| 114 | |
| 115 | Minimum supported Rust version: 1.86. |
| 116 | |
| 117 | ## Quickstart |
| 118 | |
| 119 | ### 1. Configure Gotify |
| 120 | |
| 121 | For the safest first call, only `GOTIFY_URL` is required: |
| 122 | |
| 123 | ```bash |
| 124 | export GOTIFY_URL=https://gotify.example.com |
| 125 | ``` |
| 126 | |
| 127 | Create tokens in the Gotify web UI before using ma |