{
  "markdown": "# apprise-rmcp\n\nApprise notifications over MCP and CLI with authenticated stdio and HTTP transports.\n\nIt exposes one MCP tool, `apprise`, plus the `rapprise` CLI. Agents can send\ntagged notifications through a preconfigured Apprise server, run one-off\nApprise URL sends, and check upstream health through stdio MCP, Streamable HTTP\nMCP, or direct shell commands.\n\n**30-second path:** run `npx -y @dinglebear/rapprise health --json` -> start loopback\nHTTP with `APPRISE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rapprise serve` -> call\n`tools/call` with `{\"action\":\"health\"}`.\n\n**Status:** operational RMCP upstream-client server. Write-capable; notification\nsends are intentional side effects. HTTP MCP supports loopback dev mode, static\nbearer tokens, and Google OAuth through `lab-auth`.\n\n**Not for:** replacing Apprise API, storing notification destinations in this\nrepo, scheduling reminders, building a generic webhook relay, multi-tenant\nisolation, or passing upstream Apprise bearer tokens through MCP tool arguments.\n\n## Contents\n\n- [Naming](#naming)\n- [Capabilities And Boundaries](#capabilities-and-boundaries)\n- [Install](#install)\n- [Quickstart](#quickstart)\n- [Client Configuration](#client-configuration)\n- [Runtime Surfaces](#runtime-surfaces)\n- [MCP Tool Reference](#mcp-tool-reference)\n- [CLI Reference](#cli-reference)\n- [Configuration](#configuration)\n- [Authentication](#authentication)\n- [Safety And Trust Model](#safety-and-trust-model)\n- [Architecture](#architecture)\n- [Distribution Contract](#distribution-contract)\n- [Development](#development)\n- [Verification](#verification)\n- [Deployment](#deployment)\n- [Troubleshooting](#troubleshooting)\n- [Related Servers](#related-servers)\n- [Documentation](#documentation)\n- [License](#license)\n\n## Naming\n\n| Surface | This repo |\n|---|---|\n| Repository | `apprise-rmcp` |\n| Rust crate | `apprise-mcp` |\n| Binary / CLI | `rapprise` |\n| npm package | `@dinglebear/rapprise` |\n| npm binary aliases | `apprise-rmcp`, `rapprise` |\n| MCP tool | `apprise` |\n| Config home | `~/.apprise` on hosts, `/data` in containers |\n| Env prefixes | `APPRISE_*`, `APPRISE_MCP_*`, `APPRISE_RMCP_*` for npm launcher controls |\n\nThe repo and npm package use the RMCP family name, while the shipped binary uses\nthe short Rust CLI name `rapprise`.\n\n## Capabilities And Boundaries\n\n- Send notifications through tags configured in the upstream Apprise API server.\n- Send one-off notifications to Apprise URL schemas with `notify_url`.\n- Check upstream Apprise API health.\n- Expose the `send_alert` prompt for critical alert workflows.\n- Provide setup and doctor commands for local plugin/runtime checks.\n\n| This repo owns | Apprise owns | Explicitly out of scope |\n|---|---|---|\n| 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. |\n\n## Install\n\n| Path | Command | Best for | Notes |\n|---|---|---|---|\n| npm / npx | `npx -y @dinglebear/rapprise --help` | Linux/Windows x86_64 clients. | Verifies the release archive SHA-256 before atomic install. |\n| Release installer | [Verified installer procedure](#verified-release-installer) | Linux x86_64 without Node. | Verifies checksum and offline provenance before executing installer code. |\n| Docker / Compose | `docker compose up -d` | Shared HTTP MCP deployments. | Reads `.env` and exposes container port `40050`. Needs the external network first — see [Deployment](#docker--compose). |\n| Build from source | `cargo build --release` | Development and audits. | Produces `target/release/rapprise`. |\n| Plugin | `just build-plugin && claude plugin install ./plugins/apprise` | Claude Code from this checkout. | Bundled `rapprise` stdio plugin. Ships no hooks. |\n\nReleases publish SHA-256 files and offline GitHub build-provenance bundles. The\ninstallers verify both the checksum and provenance identity with GitHub CLI 2.68+.\nThe npm launcher supports x86_64 Linux and Windows release assets.\n\n### npm / npx\n\nRun the stdio MCP server or CLI without a manual binary install:\n\n```bash\nnpx -y @dinglebear/rapprise --help\nnpx -y @dinglebear/rapprise mcp\nnpx -y @dinglebear/rapprise health --json\n```\n\nThe npm package downloads `rapprise` during `postinstall`. Override download\nbehavior only when testing packaging:\n\n| Variable | Purpose |\n|---|---|\n| `APPRISE_RMCP_SKIP_DOWNLOAD=1` | Skip postinstall binary download. |\n| `APPRISE_RMCP_VERSION` or `APPRISE_RMCP_BINARY_VERSION` | Select the GitHub Release tag. |\n| `APPRISE_RMCP_REPO` | Select the GitHub repo used for release downloads. |\n| `APPRISE_RMCP_RELEASE_BASE_URL` | Select a custom release base URL. |\n\nVerified binary installation is fail-closed and pins the repository, release\nworkflow, and source tag. Install `gh` 2.68 or newer before using npm or the\nrelease installer.\n\n### Verified Release Installer\n\nDownload the installer and its verification material without executing it,\nthen verify both integrity and provenance before running it:\n\nReplace `version` with the release tag you want; `v0.2.0` is current.\n\n```bash\nversion=v0.2.0\nbase=\"https://github.com/dinglebear-ai/rapprise/releases/download/${version}/rapprise-installer.sh\"\ncurl -fsSLO \"$base\"\ncurl -fsSLO \"$base.sha256\"\ncurl -fsSLO \"$base.sigstore.json\"\nsha256sum --check rapprise-installer.sh.sha256\ngh attestation verify rapprise-installer.sh \\\n  --repo dinglebear-ai/rapprise \\\n  --bundle rapprise-installer.sh.sigstore.json \\\n  --signer-workflow dinglebear-ai/rapprise/.github/workflows/release.yml \\\n  --source-ref \"refs/tags/${version}\" \\\n  --deny-self-hosted-runners\nAPPRISE_RMCP_VERSION=\"$version\" bash rapprise-installer.sh\n```\n\nThe `--repo` and `--signer-workflow` values must match the identity recorded in\nthe attestation at build time. Releases cut before the repository moved to the\n`dinglebear-ai` org are attested as `jmagar/rapprise`; use `dinglebear-ai/rapprise`\nfor releases cut afterwards.\n\nThe npm launcher supports Windows x86_64 only when GitHub CLI 2.68+ is installed\nand `gh.exe` is available on `PATH`; provenance verification is not skipped.\n\n### Build From Source\n\n```bash\ngit clone https://github.com/dinglebear-ai/rapprise\ncd rapprise\ncargo build --release\n./target/release/rapprise --help\n```\n\nMinimum supported Rust version: 1.90. Rust edition 2021. The Cargo workspace has\ntwo members: the root `apprise-mcp` package and `xtask`.\n\n## Quickstart\n\n### 1. Start Or Point At Apprise API\n\nThe default upstream is `http://localhost:8000`.\n\n```bash\ndocker run --rm -p 8000:8000 caronc/apprise:latest\n```\n\nUse `APPRISE_URL` when the API server is elsewhere:\n\n```bash\nexport APPRISE_URL=http://198.51.100.2:8766\n```\n\nSet `APPRISE_TOKEN` only when your Apprise API server requires bearer auth:\n\n```bash\nexport APPRISE_TOKEN=...\n```\n\n### 2. Run A Safe CLI Call\n\n```bash\nnpx -y @dinglebear/rapprise health --json\n```\n\n### 3. Start Loopback HTTP MCP\n\n```bash\nAPPRISE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rapprise serve\n```\n\nIn another shell:\n\n```bash\ncurl -sf http://127.0.0.1:40050/health\n```\n\n### 4. Make A First MCP Call\n\n```bash\ncurl -s -X POST http://127.0.0.1:40050/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"apprise\",\"arguments\":{\"action\":\"health\"}}}'\n```\n\n## Client Configuration\n\n### Claude Code Stdio\n\n```json\n{\n  \"mcpServers\": {\n    \"apprise\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"apprise-rmcp\", \"mcp\"],\n      \"env\": {\n        \"APPRISE_URL\": \"http://localhost:8000\"\n      }\n    }\n  }\n}\n```\n\n### Claude Code HTTP\n\n```json\n{\n  \"mcpServers\": {\n    \"apprise\": {\n      \"type\": \"http\",\n      \"url\": \"http://127.0.0.1:40050/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${APPRISE_MCP_TOKEN}\"\n      }\n    }\n  }\n}\n```\n\n### Codex / Labby Gateway\n\nRegister Apprise through Labby as an HTTP upstream when sharing one long-running\nserver, or run it directly as stdio for local-only use.\n\n```toml\n[mcp_servers.apprise]\ncommand = \"npx\"\nargs = [\"-y\", \"apprise-rmcp\", \"mcp\"]\n```\n\n### Generic MCP JSON\n\n```json\n{\n  \"command\": \"rapprise\",\n  \"args\": [\"mcp\"],\n  \"env\": {\n    \"APPRISE_URL\": \"http://localhost:8000\"\n  }\n}\n```\n\nDo not put `APPRISE_TOKEN`, OAuth secrets, SSH keys, passwords, or upstream\nbearer tokens in MCP tool arguments. Use env, config files, or the MCP client's\nsecret storage.\n\n## Runtime Surfaces\n\n| Surface | Status | Entry point | Purpose |\n|---|---:|---|---|\n| MCP stdio | Supported | `rapprise mcp`, `npx -y @dinglebear/rapprise mcp` | Local child-process MCP clients. |\n| MCP HTTP | Supported | `rapprise serve`, `POST /mcp` | Streamable HTTP MCP for local or shared server deployments. |\n| Liveness | Supported | `GET /health` | Always unauthenticated. |\n| Readiness / status | Supported | `GET /ready`, `GET /status` | Behind the same auth layer as `/mcp`. |\n| OAuth discovery | Conditional | `/mcp/.well-known/*` and `lab-auth` routes | Mounted only when `auth_mode = oauth`. |\n| CLI | Supported | `rapprise <command>` | Scriptable parity and debugging. |\n| Prompt | Supported | `send_alert` | Reusable critical-alert workflow. |\n| REST API | Not shipped | N/A | Apprise API already owns the REST API. |\n| Web UI | Not shipped | N/A | Apprise API already owns the web UI. |\n\n## MCP Tool Reference\n\nOne MCP tool is exposed: `apprise`. Pass the required `action` argument to select\nthe operation.\n\n### Read Actions\n\n| Action | Description | Required params | Optional params |\n|---|---|---|---|\n| `health` | Check Apprise API server health. | none | none |\n| `status` | Return authenticated deployment and runtime status. | none | none |\n| `help` | Return built-in markdown tool help. | none | none |\n\n### Write Actions\n\n| Action | Description | Required params | Optional params |\n|---|---|---|---|\n| `notify` | Send to a configured Apprise tag, or all configured services when `tag` is omitted. | `body` | `tag`, `title`, `type` |\n| `notify_url` | Send a stateless one-off notification to one or more Apprise URL schemas. | `urls`, `body` | `title`, `type` |\n\n### Notification Types\n\n| Type | Meaning |\n|---|---|\n| `info` | Informational notification. |\n| `success` | Successful operation. |\n| `warning` | Non-critical warning. |\n| `failure` | Critical failure or error. |\n\n### MCP Call Examples\n\n```bash\ncurl -s -X POST http://127.0.0.1:40050/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"apprise\",\"arguments\":{\"action\":\"health\"}}}'\n```\n\n```json\n{\n  \"name\": \"apprise\",\n  \"arguments\": {\n    \"action\": \"notify\",\n    \"body\": \"Deployment succeeded\",\n    \"tag\": \"ops\",\n    \"title\": \"Deploy complete\",\n    \"type\": \"success\"\n  }\n}\n```\n\nCurated action summaries live here. `docs/INVENTORY.md` is the current\nsource of truth for complete parameters until a generated `docs/MCP_SCHEMA.md`\nis added.\n\n## CLI Reference\n\nThe CLI calls the same service methods as the MCP tool.\n\n```bash\nrapprise health [--json]\nrapprise notify <body> [--tag TAG] [--title T] [--type info|success|warning|failure] [--json]\nrapprise notify-url <urls> <body> [--title T] [--type info|success|warning|failure] [--json]\n\nrapprise serve                          # Streamable HTTP MCP on :40050\nrapprise serve mcp                      # same as `serve`\nrapprise mcp                            # stdio MCP\nrapprise doctor [--json]                # pre-flight environment validation\nrapprise setup check                    # read-only audit of appdata/env\nrapprise setup repair                   # idempotent: create missing setup files\nrapprise setup install                  # copy this binary into ~/.local/bin\nrapprise setup plugin-hook [--no-repair]\n\nrapprise help                           # or --help / -h\nrapprise --version                      # or -V\n```\n\n`--json` emits raw JSON instead of pretty-printed fields. `--help` prints the\nfull environment-variable reference.\n\n## Configuration\n\nConfiguration loads from `config.toml` when present, then environment variables\noverride those values. On startup it loads\n`${APPRISE_HOME:-~/.apprise}/.env` on hosts or `/data/.env` in containers.\nSee [the complete inventory](docs/INVENTORY.md).\n\n### Upstream Variables\n\n| Variable | Required | Description |\n|---|---:|---|\n| `APPRISE_URL` | no | Apprise API server base URL. Defaults to `http://localhost:8000`. |\n| `APPRISE_TOKEN` | only for protected upstreams | Outbound bearer token for the upstream Apprise API. Distinct from the inbound `APPRISE_MCP_TOKEN`. |\n| `APPRISE_MAX_CONCURRENT_REQUESTS` | no | Upstream request concurrency. Default `32`, bounded `1..=1024`. |\n| `APPRISE_MAX_RESPONSE_BYTES` | no | Upstream response cap. Default `65536`, bounded `1..=4194304`. |\n| `APPRISE_HOME` | no | Data directory. Defaults to `~/.apprise` on hosts, `/data` in containers. |\n\n### Runtime Variables\n\n| Variable | Default | Description |\n|---|---|---|\n| `APPRISE_MCP_HOST` | `0.0.0.0` | HTTP MCP bind host. |\n| `APPRISE_MCP_PORT` | `40050` | HTTP MCP bind port. |\n| `APPRISE_MCP_TOKEN` | empty | Static bearer token for HTTP MCP when not in loopback dev mode. |\n| `APPRISE_MCP_NO_AUTH` | `false` | Disable HTTP MCP auth. Use only on loopback or behind a trusted gateway. |\n| `APPRISE_MCP_AUTH_MODE` | `bearer` | Set to `oauth` for Google OAuth through `lab-auth`. |\n| `APPRISE_MCP_PUBLIC_URL` | empty | Public URL for OAuth metadata and protected-resource discovery. |\n| `APPRISE_MCP_GOOGLE_CLIENT_ID` | empty | Google OAuth client ID. |\n| `APPRISE_MCP_GOOGLE_CLIENT_SECRET` | empty | Google OAuth client secret. |\n| `APPRISE_MCP_AUTH_ADMIN_EMAIL` | empty | Initial/admin OAuth email. |\n| `APPRISE_MCP_ALLOWED_HOSTS` | empty | Additional accepted HTTP Host values. |\n| `APPRISE_MCP_ALLOWED_ORIGINS` | empty | Additional CORS origins for HTTP MCP. |\n| `APPRISE_MCP_AUTH_ALLOWED_REDIRECT_URIS` | empty | OAuth client redirect URIs. |\n| `APPRISE_MCP_AUTH_ALLOWED_EMAILS` | empty | OAuth email allowlist. |\n| `APPRISE_MCP_AUTH_SQLITE_PATH` | data-dir `auth.db` | OAuth state store path. |\n| `APPRISE_MCP_AUTH_KEY_PATH` | data-dir `auth-jwt.pem` | JWT signing key path. |\n| `APPRISE_MCP_DISABLE_STATIC_TOKEN_WITH_OAUTH` | `true` | Forbid the static bearer token from bypassing OAuth. |\n| `RUST_LOG` | `info` | Rust log filter. Stdio logs must stay off stdout. |\n\nToken TTL and rate-limit variables (`APPRISE_MCP_AUTH_*_TTL_SECS`,\n`APPRISE_MCP_AUTH_*_REQUESTS_PER_MINUTE`, `APPRISE_MCP_AUTH_MAX_PENDING_OAUTH_STATES`)\nare listed in full in [`docs/INVENTORY.md`](docs/INVENTORY.md).\n\n## Authentication\n\n| Policy | When | Effect |\n|---|---|---|\n| Stdio | `rapprise mcp` | Local process trust; HTTP auth does not apply. |\n| Loopback dev | loopback plus no-auth | Permits unauthenticated local HTTP. |\n| Non-loopback no-auth | non-loopback plus no-auth | Invalid; startup must reject it. |\n| Static bearer | bearer plus `APPRISE_MCP_TOKEN` | Require exact bearer token. |\n| OAuth | issuer/client/admin settings | Require OAuth/JWT. |\n| OAuth static control | disable-static true | Static token must not bypass OAuth. |\n\nMCP scopes are `apprise:notify` and `apprise:admin`. OAuth tokens are checked\nbefore MCP calls are dispatched.\n\n## Safety And Trust Model\n\n- MCP callers never provide `APPRISE_TOKEN`, OAuth secrets, static bearer tokens,\n  passwords, SSH keys, or API keys as tool arguments.\n- Upstream Apprise credentials are loaded from env/config only.\n- `notify` is the preferred path because destinations are configured upstream\n  under tags.\n- `notify_url` intentionally accepts Apprise URL schemas in MCP arguments for\n  one-off sends. Treat those URLs as sensitive payloads and avoid using them\n  when a tagged upstream destination is available.\n- Apprise API is the durable source of destination configuration; this server is\n  a thin projection over that API.\n- HTTP mode should not be exposed beyond loopback without bearer or OAuth auth\n  plus TLS from an upstream reverse proxy.\n\n## Architecture\n\n```text\nMCP client / CLI\n       |\n       v\nrapprise\n       |\n       +-- MCP shim: JSON args -> AppriseService -> structured result\n       +-- CLI shim: argv -> AppriseService -> stdout\n       |\n       v\nAppriseService\n       |\n       v\nAppriseClient\n       |\n       v\nApprise API server\n       |\n       v\nNotification backends\n```\n\n| Path | Role |\n|---|---|\n| `src/app.rs` | Business service layer, response shaping, counters, and notification calls. |\n| `src/apprise.rs` | Apprise API REST client. |\n| `src/mcp/` | RMCP tool, prompt, schema, routes, and auth checks. |\n| `src/cli.rs` | CLI parser, doctor/setup helpers, and output formatting. |\n| `src/config.rs` | Env/config loading and defaults. |\n| `packages/apprise-rmcp/` | npm launcher and release-binary downloader. |\n\nNotification commands and MCP converge on `AppriseService`. The CLI also owns\nsetup, doctor, self-install, filesystem, and output orchestration today; it is\nnot a pure argument shim.\n\n## Distribution Contract\n\n| Artifact | File(s) | Must align with |\n|---|---|---|\n| Rust crate/binary | `Cargo.toml`, `Cargo.lock` | Git tag, release assets, CLI docs, install scripts. |\n| 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`. |\n| GitHub Releases | `.github/workflows/*`, `scripts/install.sh`, `install.sh` | Package version, binary name, checksums, supported platforms. |\n| Docker / Compose | `config/Dockerfile`, `docker-compose.yml`, `docker-compose.prod.yml` | Exposed port `40050`, healthcheck `/health`, env file contract. |\n| MCP registry | `server.json` | Identity `ai.dinglebear/rapprise`, stdio package, version. |\n| Plugin | `plugins/apprise` | Bundled `rapprise` stdio only. No hooks, no `version`, no `userConfig` in manifests. |\n| Docs | `README.md`, `docs/INVENTORY.md`, `docs/QUICKSTART.md` | Current binary name, default port, action list, and env names. |\n\nRelease invariant: npm, crate, registry/server metadata, manifest, GitHub tag,\nand native assets move together. Release Please owns these updates.\n\n## Development\n\n```bash\ncargo fmt -- --check\ncargo clippy --all-targets -- -D warnings\ncargo test\ncargo build --release\nnpm --prefix packages/apprise-rmcp run check\nnpm --prefix packages/apprise-rmcp test\n\n# Contract checks\nbash tests/docs-contract.sh              # docs, versions, and plugin invariants\nbash scripts/validate-plugin-layout.sh   # or: just validate-plugin\n```\n\n`just` wraps the common loops: `just check`, `just lint`, `just fmt`,\n`just test`, `just release`, `just build-plugin`, `just docker-up`,\n`just health`. The plugin recipe is `build-plugin` — there is no `plugin-build`.\n\n`Cargo.toml` declares `rmcp = \"1.6.0\"`, but the caret range resolves forward and\n`Cargo.lock` pins **rmcp 1.7.0**. Trust the lock.\n\n## Verification\n\n```bash\n# Binary and CLI\ncargo build --release\n./target/release/rapprise --version\n./target/release/rapprise health --json\n\n# HTTP health\nAPPRISE_MCP_HOST=127.0.0.1 ./target/release/rapprise serve\ncurl -sf http://127.0.0.1:40050/health\n\n# MCP tool call\ncurl -s -X POST http://127.0.0.1:40050/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"apprise\",\"arguments\":{\"action\":\"health\"}}}'\n```\n\nFor live notification tests, configure at least one destination in the Apprise\nAPI server and call `notify` with its tag.\n\n## Deployment\n\n### Docker / Compose\n\n`docker-compose.prod.yml` declares the `apprise-mcp` network as `external: true`,\nso create it once before the first bring-up:\n\n```bash\ncp .env.example .env\n$EDITOR .env\ndocker network create apprise-mcp\ndocker compose up -d\ncurl -sf http://127.0.0.1:40050/health\n```\n\n`docker-compose.yml` builds `apprise-mcp:dev` from `config/Dockerfile` and\nextends the production service. `docker-compose.prod.yml` alone runs the\npublished image with `pull_policy: never`, so pull or load it first. The\ncontainer runs read-only as UID 1000 and stores app data under `/data`, normally\nmounted from `${APPRISE_DATA_DIR:-${HOME}/.apprise}`. Override the published\nhost port with `APPRISE_MCP_HOST_PORT`.\n\n### Reverse Proxy\n\nExpose only `/mcp` and `/health` — plus the `lab-auth` and `/mcp/.well-known/*`\nroutes when running OAuth. Keep `/ready` and `/status` internal. Preserve\nStreamable HTTP headers, require TLS, and configure bearer or OAuth auth before\nexposing the server beyond loopback.\n\n### Plugin\n\nThe plugin is bundled stdio and ships no Claude Code hooks — nothing runs\nautomatically on session start, so run setup yourself once:\n\n```bash\njust build-plugin\nclaude plugin install ./plugins/apprise\nrapprise setup check\n```\n\n## Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| `401` from `/mcp` | Missing or wrong bearer/OAuth token. | Check `APPRISE_MCP_TOKEN` and client headers, or use loopback dev mode locally. |\n| CLI health fails | Apprise API is not reachable. | Check `APPRISE_URL` and the upstream Apprise API server. |\n| `notify` sends nowhere | No upstream destinations match the tag. | Check configured tags in Apprise API or omit `tag` to send to all configured services. |\n| `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. |\n| stdio MCP JSON parse errors | Logs went to stdout. | Keep protocol logs off stdout and lower `RUST_LOG` if needed. |\n| npm launcher cannot find binary | Release asset download failed or was skipped. | Reinstall, check `APPRISE_RMCP_VERSION`, or build `rapprise` from source. |\n\n## Related Servers\n\n- [soma](https://github.com/dinglebear-ai/soma) - RMCP runtime and scaffold for provider-backed MCP servers.\n- [unifi-rmcp](https://github.com/dinglebear-ai/runifi) - UniFi controller REST API bridge.\n- [tailscale-rmcp](https://github.com/dinglebear-ai/rtailscale) - Tailscale API bridge for devices, users, and tailnet operations.\n- [unraid](https://github.com/dinglebear-ai/unraid) - Unraid monorepo; `unraid-rs/` is the GraphQL MCP bridge (binary `runraid`).\n- [gotify-rmcp](https://github.com/dinglebear-ai/rgotify) - Gotify push notification bridge for sends, messages, apps, and clients.\n- [arcane-rmcp](https://github.com/dinglebear-ai/rarcane) - Arcane Docker management bridge for containers and related resources.\n- [yarr](https://github.com/dinglebear-ai/yarr) - Media-stack bridge for Sonarr, Radarr, Prowlarr, Plex, and related services.\n- [ytdl-rmcp](https://github.com/dinglebear-ai/rytdl) - Media download and metadata workflow server.\n- [synapse-rmcp](https://github.com/dinglebear-ai/synapse) - Local Synapse workflow server for scout and flux actions.\n- [cortex](https://github.com/dinglebear-ai/cortex) - Syslog and homelab log aggregation MCP server.\n- [axon](https://github.com/dinglebear-ai/axon) - RAG, crawl, scrape, extract, and semantic search project.\n- [labby](https://github.com/dinglebear-ai/labby) - Homelab control plane and MCP gateway project.\n\n## Documentation\n\nStart here:\n\n- [`docs/QUICKSTART.md`](docs/QUICKSTART.md) - focused setup flow.\n- [`docs/INVENTORY.md`](docs/INVENTORY.md) - component inventory for actions,\n  CLI commands, env vars, and endpoints.\n- [`docs/README.md`](docs/README.md) - docs index.\n- [`server.json`](server.json) - MCP registry metadata.\n- [`packages/apprise-rmcp/README.md`](packages/apprise-rmcp/README.md) - npm\n  package launcher notes.\n\nThis README is curated. Generated or exhaustive catalogs should be refreshed in\ntheir own files and treated as the source of truth for current branch details.\n\n## License\n\nOriginal Dinglebear-authored portions of this project are licensed under [AGPL-3.0-only](LICENSE). Separate commercial licensing is available for organizations that need terms outside the AGPL. Third-party material remains under its original license. See [LICENSING.md](https://github.com/dinglebear-ai/rapprise/blob/main/LICENSING.md).\n",
  "bytes": 24252,
  "sha": "e920280fa2550c1fb489fade3fe208d0716e68502d5d6731b5febbcb9a8ef52b",
  "repo_slug": "jmagar/apprise-rmcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_dinglebear_apprise_rmcp_65e9236a/readme"
}