Apprise notifications over MCP and CLI with authenticated stdio and HTTP transports.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Apprise notifications over MCP and CLI with authenticated stdio and HTTP transports.
It exposes one MCP tool, apprise, plus the rapprise CLI. Agents can send
tagged notifications through a preconfigured Apprise server, run one-off
Apprise URL sends, and check upstream health through stdio MCP, Streamable HTTP
MCP, or direct shell commands.
30-second path: run npx -y @dinglebear/rapprise health --json -> start loopback
HTTP with APPRISE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rapprise serve -> call
tools/call with {"action":"health"}.
Status: operational RMCP upstream-client server. Write-capable; notification
sends are intentional side effects. HTTP MCP supports loopback dev mode, static
bearer tokens, and Google OAuth through lab-auth.
Not for: replacing Apprise API, storing notification destinations in this repo, scheduling reminders, building a generic webhook relay, multi-tenant isolation, or passing upstream Apprise bearer tokens through MCP tool arguments.
| Surface | This repo |
|---|---|
| Repository | apprise-rmcp |
| Rust crate | apprise-mcp |
| Binary / CLI | rapprise |
| npm package | @dinglebear/rapprise |
| npm binary aliases | apprise-rmcp, rapprise |
| MCP tool | apprise |
| Config home | ~/.apprise on hosts, /data in containers |
| Env prefixes | APPRISE_*, APPRISE_MCP_*, APPRISE_RMCP_* for npm launcher controls |
The repo and npm package use the RMCP family name, while the shipped binary uses
the short Rust CLI name rapprise.
notify_url.send_alert prompt for critical alert workflows.| This repo owns | Apprise owns | Explicitly out of scope |
|---|---|---|
| MCP/CLI projection, request validation, auth policy, response shaping, setup checks, and transport wiring. | Notification delivery, configured destinations, tags, delivery backend credentials, upstream API semantics. | Destination storage, scheduling, retry policy beyond upstream behavior, multi-tenant sandboxing, arbitrary webhook relay behavior. |
| Path | Command | Best for | Notes |
|---|---|---|---|
| npm / npx | npx -y @dinglebear/rapprise --help | Linux/Windows x86_64 clients. | Verifies the release archive SHA-256 before atomic install. |
| Release installer | Verified installer procedure | Linux x86_64 without Node. | Verifies checksum and offline provenance before executing installer code. |
| Docker / Compose | docker compose up -d | Shared HTTP MCP deployments. | Reads .env and exposes container port 40050. Needs the external network first β see Deployment. |
| Build from source | cargo build --release | Development and audits. | Produces target/release/rapprise. |
| Plugin | just build-plugin && claude plugin install ./plugins/apprise | Claude Code from this checkout. | Bundled rapprise stdio plugin. Ships no hooks. |
Releases publish SHA-256 files and offline GitHub build-provenance bundles. The installers verify both the checksum and provenance identity with GitHub CLI 2.68+. The npm launcher supports x86_64 Linux and Windows release assets.
Run the stdio MCP server or CLI without a manual binary install:
The npm package downloads rapprise during postinstall. Override download
behavior only when testing packaging:
| Variable | Purpose |
|---|---|
APPRISE_RMCP_SKIP_DOWNLOAD=1 | Skip postinstall binary download. |
APPRISE_RMCP_VERSION or APPRISE_RMCP_BINARY_VERSION | Select the GitHub Release tag. |
APPRISE_RMCP_REPO | Select the GitHub repo used for release downloads. |
APPRISE_RMCP_RELEASE_BASE_URL | Select a custom release base URL. |
Verified binary installation is fail-closed and pins the repository, release
workflow, and source tag. Install gh 2.68 or newer before using npm or the
release installer.
Download the installer and its verification material without executing it, then verify both integrity and provenance before running it:
Replace version with the release tag you want; v0.2.0 is current.
The --repo and --signer-workflow values must match the identity recorded in
the attestation at build time. Releases cut before the repository moved to the
dinglebear-ai org are attested as jmagar/rapprise; use dinglebear-ai/rapprise
for releases cut afterwards.
The npm launcher supports Windows x86_64 only when GitHub CLI 2.68+ is installed
and gh.exe is available on PATH; provenance verification is not skipped.
Minimum supported Rust version: 1.90. Rust edition 2021. The Cargo workspace has
two members: the root apprise-mcp package and xtask.
The default upstream is http://localhost:8000.
Use APPRISE_URL when the API server is elsewhere:
Set APPRISE_TOKEN only when your Apprise API server requires bearer auth:
In another shell:
Register Apprise through Labby as an HTTP upstream when sharing one long-running server, or run it directly as stdio for local-only use.
Do not put APPRISE_TOKEN, OAuth secrets, SSH keys, passwords, or upstream
bearer tokens in MCP tool arguments. Use env, config files, or the MCP client's
secret storage.
| Surface | Status | Entry point | Purpose |
|---|---|---|---|
| MCP stdio | Supported | rapprise mcp, npx -y @dinglebear/rapprise mcp | Local child-process MCP clients. |
| MCP HTTP | Supported | rapprise serve, POST /mcp | Streamable HTTP MCP for local or shared server deployments. |
| Liveness | Supported | GET /health | Always unauthenticated. |
| Readiness / status | Supported | GET /ready, GET /status | Behind the same auth layer as /mcp. |
| OAuth discovery | Conditional | /mcp/.well-known/* and lab-auth routes | Mounted only when auth_mode = oauth. |
| CLI | Supported | rapprise <command> | Scriptable parity and debugging. |
| Prompt | Supported | send_alert | Reusable critical-alert workflow. |
| REST API | Not shipped | N/A | Apprise API already owns the REST API. |
| Web UI | Not shipped | N/A | Apprise API already owns the web UI. |
One MCP tool is exposed: apprise. Pass the required action argument to select
the operation.
| Action | Description | Required params | Optional params |
|---|---|---|---|
health | Check Apprise API server health. | none | none |
status | Return authenticated deployment and runtime status. | none | none |
help | Return built-in markdown tool help. | none | none |
| Action | Description | Required params | Optional params |
|---|---|---|---|
notify | Send to a configured Apprise tag, or all configured services when tag is omitted. | body | tag, title, type |
notify_url | Send a stateless one-off notification to one or more Apprise URL schemas. | urls, body | title, type |
| Type | Meaning |
|---|---|
info | Informational notification. |
success | Successful operation. |
warning | Non-critical warning. |
failure | Critical failure or error. |
Curated action summaries live here. docs/INVENTORY.md is the current
source of truth for complete parameters until a generated docs/MCP_SCHEMA.md
is added.
The CLI calls the same service methods as the MCP tool.
--json emits raw JSON instead of pretty-printed fields. --help prints the
full environment-variable reference.
Configuration loads from config.toml when present, then environment variables
override those values. On startup it loads
${APPRISE_HOME:-~/.apprise}/.env on hosts or /data/.env in containers.
See the complete inventory.
| Variable | Required | Description |
|---|---|---|
APPRISE_URL | no | Apprise API server base URL. Defaults to http://localhost:8000. |
APPRISE_TOKEN | only for protected upstreams | Outbound bearer token for the upstream Apprise API. Distinct from the inbound APPRISE_MCP_TOKEN. |
APPRISE_MAX_CONCURRENT_REQUESTS | no | Upstream request concurrency. Default 32, bounded 1..=1024. |
APPRISE_MAX_RESPONSE_BYTES | no | Upstream response cap. Default 65536, bounded 1..=4194304. |
APPRISE_HOME | no | Data directory. Defaults to ~/.apprise on hosts, /data in containers. |
| Variable | Default | Description |
|---|---|---|
APPRISE_MCP_HOST | 0.0.0.0 | HTTP MCP bind host. |
APPRISE_MCP_PORT | 40050 | HTTP MCP bind port. |
APPRISE_MCP_TOKEN | empty | Static bearer token for HTTP MCP when not in loopback dev mode. |
APPRISE_MCP_NO_AUTH | false | Disable HTTP MCP auth. Use only on loopback or behind a trusted gateway. |
APPRISE_MCP_AUTH_MODE | bearer | Set to oauth for Google OAuth through lab-auth. |
APPRISE_MCP_PUBLIC_URL | empty | Public URL for OAuth metadata and protected-resource discovery. |
APPRISE_MCP_GOOGLE_CLIENT_ID | empty | Google OAuth client ID. |
APPRISE_MCP_GOOGLE_CLIENT_SECRET | empty | Google OAuth client secret. |
APPRISE_MCP_AUTH_ADMIN_EMAIL | empty | Initial/admin OAuth email. |
APPRISE_MCP_ALLOWED_HOSTS | empty | Additional accepted HTTP Host values. |
APPRISE_MCP_ALLOWED_ORIGINS | empty | Additional CORS origins for HTTP MCP. |
APPRISE_MCP_AUTH_ALLOWED_REDIRECT_URIS | empty | OAuth client redirect URIs. |
APPRISE_MCP_AUTH_ALLOWED_EMAILS | empty | OAuth email allowlist. |
APPRISE_MCP_AUTH_SQLITE_PATH | data-dir auth.db | OAuth state store path. |
APPRISE_MCP_AUTH_KEY_PATH | data-dir auth-jwt.pem | JWT signing key path. |
APPRISE_MCP_DISABLE_STATIC_TOKEN_WITH_OAUTH | true | Forbid the static bearer token from bypassing OAuth. |
RUST_LOG | info | Rust log filter. Stdio logs must stay off stdout. |
Token TTL and rate-limit variables (APPRISE_MCP_AUTH_*_TTL_SECS,
APPRISE_MCP_AUTH_*_REQUESTS_PER_MINUTE, APPRISE_MCP_AUTH_MAX_PENDING_OAUTH_STATES)
are listed in full in docs/INVENTORY.md.
| Policy | When | Effect |
|---|---|---|
| Stdio | rapprise mcp | Local process trust; HTTP auth does not apply. |
| Loopback dev | loopback plus no-auth | Permits unauthenticated local HTTP. |
| Non-loopback no-auth | non-loopback plus no-auth | Invalid; startup must reject it. |
| Static bearer | bearer plus APPRISE_MCP_TOKEN | Require exact bearer token. |
| OAuth | issuer/client/admin settings | Require OAuth/JWT. |
| OAuth static control | disable-static true | Static token must not bypass OAuth. |
MCP scopes are apprise:notify and apprise:admin. OAuth tokens are checked
before MCP calls are dispatched.
APPRISE_TOKEN, OAuth secrets, static bearer tokens,
passwords, SSH keys, or API keys as tool arguments.notify is the preferred path because destinations are configured upstream
under tags.notify_url intentionally accepts Apprise URL schemas in MCP arguments for
one-off sends. Treat those URLs as sensitive payloads and avoid using them
when a tagged upstream destination is available.| Path | Role |
|---|---|
src/app.rs | Business service layer, response shaping, counters, and notification calls. |
src/apprise.rs | Apprise API REST client. |
src/mcp/ | RMCP tool, prompt, schema, routes, and auth checks. |
src/cli.rs | CLI parser, doctor/setup helpers, and output formatting. |
src/config.rs | Env/config loading and defaults. |
packages/apprise-rmcp/ | npm launcher and release-binary downloader. |
Notification commands and MCP converge on AppriseService. The CLI also owns
setup, doctor, self-install, filesystem, and output orchestration today; it is
not a pure argument shim.
| Artifact | File(s) | Must align with |
|---|---|---|
| Rust crate/binary | Cargo.toml, Cargo.lock | Git tag, release assets, CLI docs, install scripts. |
| npm launcher | packages/apprise-rmcp/package.json, bin/rapprise.js, lib/platform.js, scripts/install.js | GitHub Release tag and assets named rapprise-x86_64.tar.gz and rapprise-windows-x86_64.tar.gz. |
| GitHub Releases | .github/workflows/*, scripts/install.sh, install.sh | Package version, binary name, checksums, supported platforms. |
| Docker / Compose | config/Dockerfile, docker-compose.yml, docker-compose.prod.yml | Exposed port 40050, healthcheck /health, env file contract. |
| MCP registry | server.json | Identity ai.dinglebear/rapprise, stdio package, version. |
| Plugin | plugins/apprise | Bundled rapprise stdio only. No hooks, no version, no userConfig in manifests. |
| Docs | README.md, docs/INVENTORY.md, docs/QUICKSTART.md | Current binary name, default port, action list, and env names. |
Release invariant: npm, crate, registry/server metadata, manifest, GitHub tag, and native assets move together. Release Please owns these updates.
just wraps the common loops: just check, just lint, just fmt,
just test, just release, just build-plugin, just docker-up,
just health. The plugin recipe is build-plugin β there is no plugin-build.
Cargo.toml declares rmcp = "1.6.0", but the caret range resolves forward and
Cargo.lock pins rmcp 1.7.0. Trust the lock.
For live notification tests, configure at least one destination in the Apprise
API server and call notify with its tag.
docker-compose.prod.yml declares the apprise-mcp network as external: true,
so create it once before the first bring-up:
docker-compose.yml builds apprise-mcp:dev from config/Dockerfile and
extends the production service. docker-compose.prod.yml alone runs the
published image with pull_policy: never, so pull or load it first. The
container runs read-only as UID 1000 and stores app data under /data, normally
mounted from ${APPRISE_DATA_DIR:-${HOME}/.apprise}. Override the published
host port with APPRISE_MCP_HOST_PORT.
Expose only /mcp and /health β plus the lab-auth and /mcp/.well-known/*
routes when running OAuth. Keep /ready and /status internal. Preserve
Streamable HTTP headers, require TLS, and configure bearer or OAuth auth before
exposing the server beyond loopback.
The plugin is bundled stdio and ships no Claude Code hooks β nothing runs automatically on session start, so run setup yourself once:
| Symptom | Likely cause | Fix |
|---|---|---|
401 from /mcp | Missing or wrong bearer/OAuth token. | Check APPRISE_MCP_TOKEN and client headers, or use loopback dev mode locally. |
| CLI health fails | Apprise API is not reachable. | Check APPRISE_URL and the upstream Apprise API server. |
notify sends nowhere | No upstream destinations match the tag. | Check configured tags in Apprise API or omit tag to send to all configured services. |
notify_url fails | Invalid Apprise URL schema or blocked destination backend. | Test the URL with Apprise API directly and prefer configured tags for repeated use. |
| stdio MCP JSON parse errors | Logs went to stdout. | Keep protocol logs off stdout and lower RUST_LOG if needed. |
| npm launcher cannot find binary | Release asset download failed or was skipped. | Reinstall, check APPRISE_RMCP_VERSION, or build rapprise from source. |
unraid-rs/ is the GraphQL MCP bridge (binary runraid).Start here:
docs/QUICKSTART.md - focused setup flow.docs/INVENTORY.md - component inventory for actions,
CLI commands, env vars, and endpoints.docs/README.md - docs index.server.json - MCP registry metadata.packages/apprise-rmcp/README.md - npm
package launcher notes.This README is curated. Generated or exhaustive catalogs should be refreshed in their own files and treated as the source of truth for current branch details.
Original Dinglebear-authored portions of this project are licensed under AGPL-3.0-only. Separate commercial licensing is available for organizations that need terms outside the AGPL. Third-party material remains under its original license. See LICENSING.md.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/apprise-rmcp-2)<a href="https://allmcps.com/mcp/apprise-rmcp-2"><img src="https://allmcps.com/api/badge/apprise-rmcp-2?style=directory" alt="Apprise RMCP on AllMCPs" /></a>