notify-mcp
Allows sending push notifications to Telegram via an Apprise gateway, enabling AI agents to push short messages to a user's phone or chat.
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., "@notify-mcpsend a notification to my phone: 'build completed'"
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.
page-user — proactive push-notification MCP
English | 简体中文
An MCP server that gives any MCP client (Claude Code, Codex CLI, …) a page_user
tool. The AI calls it to proactively push a short message to your phone via
Telegram — when a long task finishes, a run fails, it needs a decision, or you
asked for periodic progress. Each message carries the machine name, which
CLI sent it, a session label, and optional tables (rendered aligned).
Claude Code / Codex ── page_user(message, title?, host?, session?, agent?, table?, tag?) ──►
(just a URL + token in config) │
▼
Cloudflare Worker (remote MCP) ──► TelegramThere are two flavors. The Cloudflare remote MCP is recommended; the original self-hosted Apprise gateway is kept as a legacy alternative (see the end).
Recommended: remote MCP on Cloudflare
The whole server is one Cloudflare Worker in cloudflare/ —
stateless MCP over Streamable HTTP, bearer auth, pushes straight to Telegram.
Nothing runs on your machines; you update every client at once by redeploying.
Deploy the Worker and set its secrets — full step-by-step in
cloudflare/README.md. You end up with an endpoint likehttps://<name>.<subdomain>.workers.dev/mcpand a bearerAUTH_TOKEN.Register with your CLIs on each machine:
PAGE_USER_TOKEN=<AUTH_TOKEN> ./scripts/install_page_user.shThis removes any old
notifyserver and addspage-userto Claude Code (user scope) and Codex (~/.codex/config.toml), baking in the machine's hostname (X-Host) and the CLI name (X-Agent). Override the endpoint withPAGE_USER_URLif you deployed under a different name.Verify:
claude mcp list(should showpage-user … ✔ Connected) andcodex mcp list.
Egress: clients must be able to reach
*.workers.dev(the default Worker domain is commonly blocked on direct connections — a working HTTP(S) proxy in the environment is enough; the CLIs inheritHTTPS_PROXY). If a machine can't reach*.workers.devat all, bind a custom domain to the Worker instead.
The tool
page_user(message, title?, host?, session?, agent?, table?, tag?) — pushes a
formatted notification. Only message is required; host/agent default to the
X-Host/X-Agent headers set at registration, tag selects a recipient group
(TARGETS secret), and table is rows of strings rendered as an aligned
monospace table. The model learns all of this from the tool's MCP schema — it
does not read this README. To change the tool or its guidance, edit
cloudflare/worker.js and npx wrangler deploy; all clients pick it up.
Manual registration
# Claude Code (user scope):
claude mcp add --transport http page-user https://<name>.<subdomain>.workers.dev/mcp \
-H "Authorization: Bearer <AUTH_TOKEN>" -H "X-Host: $(hostname)" -H "X-Agent: claude-code" -s user
# Codex — add to ~/.codex/config.toml:
# [mcp_servers.page-user]
# url = "https://<name>.<subdomain>.workers.dev/mcp"
# http_headers = { "Authorization" = "Bearer <AUTH_TOKEN>", "X-Host" = "<host>", "X-Agent" = "codex" }Related MCP server: ntfy-mcp
Legacy: self-hosted Apprise gateway
The original design is a thin Python MCP wrapper (notify_mcp.py, tool
send_notification) that POSTs to a self-hosted Apprise gateway (server.py),
which forwards to Telegram/Feishu/etc. Use this if you can't or don't want to use
Cloudflare. It is managed with uv:
uv sync --extra gateway # wrapper + apprise
./scripts/start_gateway.sh # run the gateway (needs ./token and ./targets.json)
./scripts/install_mcp.sh # register the `notify` MCP with Claude Code + CodexDetails:
docs/NOTIFY_GATEWAY.md— example gateway deployment (systemd, proxy, Telegram/Feishu).docs/MCP_INTROSPECTION.md— how a client discovers the server's identity and tool.docs/ABOUT.txt— short, human-friendly intro (中文).
Unit tests (legacy Python code)
uv run pytest -q # no network needed
uv run pre-commit run --all-files # ruff format/lintAvailable Tools
1 toolsend_notificationA
Push a short notification to the user's phone (Telegram) via the local gateway.
Use this to proactively reach the user when they may be away from the terminal:
a long-running task finished, a build/training run succeeded or failed, or you
have hit something that needs their decision before you can continue. Do NOT use
it for routine progress chatter or to echo an answer they are clearly watching.
Args:
message: The notification body. Keep it one line and lead with what they'd
act on (e.g. "train run failed: OOM at step 1200").
title: Optional short bold title (e.g. the node or job name).
tag: Which configured recipient group to send to (default "default").
Returns "ok" on success, or an error string describing why it failed.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | default | |
| title | No | ||
| message | Yes |
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 the full burden. It discloses the core behavior (push notification), the return value ('ok' or error string), and implies the action is non-destructive. It could mention potential failure modes (e.g., network issues, gateway unavailability) or idempotency, but for a simple notification tool this is adequate.
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 well-structured: a brief purpose statement followed by usage guidelines, then parameter descriptions. It is concise with no wasted words, and each sentence adds value.
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 (3 parameters, 1 required), the description fully covers what the agent needs: purpose, when to use, parameter semantics, and return value. No output schema is provided, but the return is described in text. The context signals (no siblings, simple schema) confirm this is complete.
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 coverage is 0%, so the description must compensate. It adds rich context: for 'message' it advises 'Keep it one line and lead with what they'd act on', for 'title' it says 'Optional short bold title (e.g. the node or job name)', and for 'tag' it explains 'Which configured recipient group to send to (default "default")'. This far exceeds what the schema provides.
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 'Push a short notification to the user's phone (Telegram) via the local gateway,' which is a specific verb+resource pair. Though no siblings are listed, it distinguishes itself well from any potential notification tools by specifying the channel and gateway.
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?
Explicit guidance is provided: 'Use this to proactively reach the user when they may be away from the terminal...' with concrete examples (long-running task finished, build succeeded/failed, needing user decision) and a clear 'Do NOT use it for routine progress chatter or to echo an answer they are clearly watching.' This fully addresses when and when not to use.
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.
1 tool update
v0.1.0- First observed
send_notification
TDQS
Only one tool exists, so there is no possibility of confusion between tools. The purpose is clearly distinct by default.
With a single tool, naming is trivially consistent. The name 'send_notification' follows a clear verb_noun pattern.
One tool is borderline appropriate. The server's scope is limited to sending notifications, which could justify a single tool, but it feels thin compared to typical MCP servers that offer multiple operations.
The tool only sends notifications; there are no operations for managing recipients, viewing history, or configuring channels. While the core action is covered, significant gaps exist for a complete notification system.
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
Push notifications for AI agents - send instant iPhone notifications from any MCP client.
Let your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.
Reach your own phone from an AI agent: notifications, approval questions, reminders, ring, files.
Let agents send content-free push notifications to a paired phone via MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to send push notifications to mobile devices via Pushover, allowing users to receive instant alerts for task completions, errors, reminders, and custom messages through their AI conversations.1202MIT
- AlicenseBqualityDmaintenanceEnables AI agents to send push notifications to your phone through ntfy, with built-in security controls to prevent data exfiltration. It exposes a single tool notify_user for notifying when tasks complete or need attention.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables sending push notifications via ntfy with a single tool, allowing Claude agents to send notifications directly without shell access.MIT
- AlicenseAqualityAmaintenanceEnables AI agents to send push alerts to your phone via Blipr, useful for notifying when tasks complete, builds break, or approvals are needed.520MIT
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/slchenchn/page-user'
If you have feedback or need assistance with the MCP directory API, please join our Discord server