paging-mcp
Allows sending page/alert notifications via Discord webhooks.
Allows sending page/alert notifications via Matrix.
Allows sending page/alert notifications via ntfy.sh topics.
Allows sending page/alert notifications via Signal.
Allows sending page/alert notifications via Slack incoming webhooks.
Allows sending page/alert notifications via Telegram bots.
Allows sending page/alert notifications via Twilio SMS.
Allows sending page/alert notifications via WhatsApp Business (Whapi).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@paging-mcpsend a critical alert about prod database outage to all channels"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
paging-mcp
FastMCP server that pages on-call via 100+ notification channels. Built on top of Apprise, which speaks WhatsApp, ntfy, Pushover, Telegram, Discord, Slack, Signal, Matrix, Gotify, mailto, Twilio SMS, AWS SNS, and dozens more.
The point is provider independence. Wire one MCP, configure as many channels as you want, get redundant paging without rewriting integration code every time you swap a vendor.
Why this exists
If you're building anything that needs to wake a human up — a synthetic monitor on a B2B pipeline, a long-running batch job, a security alert — you want:
Multiple channels in parallel so a single provider outage doesn't lose the page.
Channels that actually fit your operator (WhatsApp for LatAm on-calls, ntfy for self-hosters, Pushover for personal phones, Twilio SMS for the cases where it still fits).
Credentials redacted in tool responses so an agent reading the output doesn't leak them back into a transcript.
One MCP your agent can call from anywhere (Claude Code, Codex, Cursor, etc.) without having to ship a new MCP per channel.
Apprise solves channels 1-2 in Python. This server makes it MCP-callable with redaction and channel filtering on top.
Related MCP server: mcp-gotify
Install
Open Claude Code, paste:
/plugin marketplace add adelaidasofia/paging-mcp
/plugin install paging-mcp@paging-mcpgit clone https://github.com/adelaidasofia/paging-mcp ~/.claude/paging-mcp
cd ~/.claude/paging-mcp
python3 -m venv .venv
.venv/bin/pip install -r requirements.txtConfigure
Set APPRISE_URLS to one or more Apprise URLs. Newline, semicolon, or comma separated:
export APPRISE_URLS="
ntfys://ntfy.sh/<your-secret-topic>
whapi+https://gate.whapi.cloud/messages/text?token=<TOKEN>&to=+57...
pover://<USER_KEY>@<APP_TOKEN>
mailto://user:pass@smtp.example.com/?to=alerts@example.com
"Apprise URL examples by provider:
Provider | URL pattern |
WhatsApp Business (Whapi) |
|
ntfy |
|
Pushover |
|
Telegram bot |
|
Twilio SMS |
|
Signal CLI |
|
Slack incoming webhook |
|
Discord webhook |
|
SMTP email |
|
AWS SNS |
|
Full list: https://github.com/caronc/apprise/wiki
Register with Claude Code
Project-scoped (<vault>/.mcp.json):
{
"mcpServers": {
"paging": {
"command": "/Users/<you>/.claude/paging-mcp/.venv/bin/python",
"args": ["/Users/<you>/.claude/paging-mcp/server.py"],
"env": {
"APPRISE_URLS": "ntfys://ntfy.sh/<your-secret-topic>"
}
}
}
}User-scoped:
claude mcp add -s user paging \
/Users/<you>/.claude/paging-mcp/.venv/bin/python \
/Users/<you>/.claude/paging-mcp/server.py \
--env APPRISE_URLS="ntfys://ntfy.sh/<your-secret-topic>"Restart Claude Code. Verify with claude mcp list.
Tools
Tool | What it does |
| Server self-check + Apprise version + configured channel count. |
| Lists the channels paging-mcp will dispatch to, credentials redacted. |
| Sends a notification to all configured channels (or a subset filter on redacted URL). Returns per-channel results. |
| Sends to a single ad-hoc Apprise URL (not persisted). |
| Shows what |
severity is one of info, success, warning, failure. Channels that color or icon-tag use it.
Tests
.venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytest tests/ -v16 unit + integration tests covering URL redaction, multi-channel dispatch, partial failure, channel filtering, and end-to-end paging flow with credentials in URLs.
Security notes
Credentials are never echoed in tool responses. Path-as-secret schemes (ntfy, pushbullet, pover) get their last path segment masked too.
notify_oneaccepts an ad-hoc URL; agents passing literal credentials are still responsible for not echoing them in conversation. PreferAPPRISE_URLSconfigured at server start.The server does not persist channels or messages; everything is in-process.
Telemetry
This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.
What is sent:
Plugin name (e.g.
slack-mcp)Plugin version (e.g.
0.1.0)
What is NOT sent:
No user identifiers, names, emails, tokens, or API keys
No file paths, message content, or anything from your work
No IP address is stored after dedup processing
Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.
Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.
License
MIT — see LICENSE.
Built by Mycelium AI. Full install or team version at diazroa.com.
Available Tools
5 toolsdry_runB
Show what notify() would send, without dispatching.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| title | Yes | ||
| severity | No | warning |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It accurately notes that no dispatch occurs, but does not disclose any other behavioral aspects like simulation behavior or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded, with no wasted words. However, it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters, a missing output schema explanation, and five sibling tools, the description is insufficient to fully guide the agent without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no information about the parameters (body, title, severity) despite 0% schema description coverage, leaving the agent to guess their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it shows the output of `notify()` without actually dispatching, distinguishing it from the actual notify tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a preview mechanism, but it does not explicitly state when to use or when not to use it, nor does it mention alternatives beyond the sibling tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Server self-check + channel inventory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions self-check and inventory, implying read-only behavior, but does not explicitly state side effects or what exactly is checked. With no annotations, more detail would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, two aspects covered in one short sentence with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While output schema exists and no input params, the description does not explain how health_check differs from list_configured_channels or what 'inventory' entails. Slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description does not need to add param info beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Server self-check + channel inventory' clearly states the tool performs a health check and lists channels. It is distinct from sibling tools that focus on listing, notifying, or dry runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or avoid. The purpose is implied but lacks details about prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_configured_channelsA
List the channels paging-mcp will dispatch to, with credentials redacted.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that credentials are redacted, which is an important behavioral detail. However, it does not mention ordering, pagination, or whether the list is complete, but given the simplicity, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that conveys the essential information without any waste. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an existing output schema, and distinct sibling tools, the description is fully sufficient. It explains the output content (channels with redacted credentials) and the tool's purpose, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%, so the description does not need to add parameter information. The baseline for 0 parameters is 4, and the description adds no extra semantics, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists channels and includes a key detail about credentials being redacted. The verb 'list' and resource 'channels' are precise, and it naturally distinguishes from sibling tools like notify and health_check which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating the action, but does not explicitly guide when to use this tool over alternatives or mention any preconditions. Since siblings have distinct purposes (e.g., notifying, health checking), the context is clear but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notifyA
Send a notification to all configured channels.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Message body. Most channels accept plain text or markdown. | |
| title | Yes | Short subject line shown by channels that support titles. | |
| channels | No | Optional subset of redacted URL prefixes to filter to. If omitted, dispatches to every configured channel. | |
| severity | No | "info" | "success" | "warning" | "failure". Some channels color or icon-tag based on this; default "warning". | warning |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, placing the full burden on description. The description states it sends a notification, but omits potential side effects (e.g., external calls, rate limits, persistence). It is adequate but lacks depth for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is very concise, but underspecified. Could include more context (e.g., that it dispatches to all channels or uses defaults). Still, it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of output schema, the description covers the essential purpose. It is complete enough for an agent to understand the action, though slightly more context about behavior would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add parameter information beyond the schema, which is sufficient. No additional semantic value is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Send' and resource 'notification to all configured channels'. It distinguishes from sibling tool 'notify_one' by specifying 'all configured channels'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for broadcasting to all channels, but does not explicitly state when to use this tool versus alternatives like 'notify_one' or 'dry_run'. However, sibling names and context make the use case reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notify_oneA
Send a notification to a single ad-hoc Apprise URL (not persisted).
Useful for one-off pages where the channel isn't in APPRISE_URLS.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | Yes | ||
| title | Yes | ||
| severity | No | warning |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It states that notifications are not persisted, which is a key behavioral trait. However, it does not mention error handling, rate limits, or whether the tool is synchronous. The existence of an output schema suggests a return value, but the description omits any discussion of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose in the first sentence and usage guidance in the second. Every word adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the description covers purpose and usage context. However, it omits parameter semantics (despite low schema coverage) and does not explain the output format, even though an output schema exists. For a tool with 4 parameters and no schema descriptions, the description is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description does not explain individual parameters. It only loosely associates 'ad-hoc Apprise URL' with the 'url' parameter, but provides no details on formats, allowed values for 'severity', or the role of 'body' and 'title'. The description fails to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool sends a notification to a single ad-hoc Apprise URL and notes that it is not persisted. This distinguishes it from siblings like 'notify' (persisted channels) and 'dry_run' (testing), providing a specific verb-resource-scope combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Useful for one-off pages where the channel isn't in `APPRISE_URLS`', giving clear context for when to use this tool. It implies the alternative 'notify' for persisted channels, though it does not name the sibling directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.0- First observed
dry_run - First observed
health_check - First observed
list_configured_channels - First observed
notify - First observed
notify_one
TDQS
Each tool has a clearly distinct purpose: health_check for server status, list_configured_channels for viewing channels, notify for broadcasting, notify_one for sending to a single URL, and dry_run for previewing. No overlap in functionality.
Names are consistent in using lowercase with underscores, and most follow a verb_noun pattern (list_configured_channels, notify, notify_one, dry_run). health_check is a compound noun but still clear. Minor deviation in verb usage (health_check vs. notify) keeps it from a perfect score.
With 5 tools, the server is well-scoped for a paging/notification service. Each tool addresses a necessary operation (health, listing, sending, sending to one, dry run) without redundancy or excessive count.
Covers core functionality: health check, channel listing, broadcasting, single notification, and preview. Lacks a tool to manage persistent channels or retrieve notification history, but these are minor gaps given the server's focus on dispatching notifications.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native
Syslog receiver and MCP server for homelab log intelligence.
Syslog receiver and MCP server for homelab log intelligence.
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for the Splunk On-Call (VictorOps) API providing comprehensive incident management, on-call schedules, team administration, and alert reporting through natural language.MIT
- AlicenseBqualityDmaintenanceMCP server for sending Gotify push notifications to your devices.1MIT
- AlicenseCqualityDmaintenanceMCP server for sending notifications to ntfy.sh or self-hosted ntfy instances.219MIT
- AlicenseBqualityDmaintenanceA lightweight MCP server for sending push notifications via ntfy.sh, supporting customizable titles, priorities, tags, and action buttons.1106MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adelaidasofia/paging-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server