PushNotif MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PUSHNOTIF_API_KEY | Yes | Your PushNotif.biz.id API key (pn_live_...), sent as an `Authorization: Bearer YOUR_API_KEY` header. Sign up for free at https://pushnotif.biz.id to get 1,000 free starter credits, or self-register autonomously via OTP following https://pushnotif.biz.id/llms.txt. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| request_registration_otpA | Send a 6-digit email verification OTP to start registering a new PushNotif account. Use this tool first when a user wants to create a new account from chat; do not use it for existing accounts (use login_existing_account instead). Public endpoint requiring no API key; checks for duplicate emails, rate-limited to 5 requests per 10 minutes per IP, and sends an OTP valid for 10 minutes before calling register_new_account. Returns JSON { ok, status, email, message }. |
| register_new_accountA | Verify a 6-digit email OTP, create a new PushNotif tenant account with 1,000 free lifetime credits, register the initial website app, and issue a live API key. Use this tool immediately after request_registration_otp once the user providesotp_code; do not use it to add extra websites to an existing account (use create_app instead). Public endpoint requiring no prior API key; irreversibly creates a tenant record and auto-generates ECDSA P-256 VAPID keys. Returns JSON { ok, tenant: { id, name, email, api_key, credits }, app: { id, site_name, site_url, vapid_public_key } }. |
| login_existing_accountA | Authenticate an existing PushNotif account with email and password to retrieve its active API key and registered apps list. Use this tool when an existing user wants to connect their account in chat without opening the web dashboard; do not use it for new signups (use request_registration_otp and register_new_account instead). Read-only authentication check with no credit cost, rate-limited against brute-force attempts. Returns JSON { ok, tenant: { id, name, email, api_key, credits }, apps: [{ id, site_name, site_url }] }. |
| list_appsA | List all registered websites and mobile apps in the authenticated PushNotif workspace along with active subscriber counts and current credit balance. Use this tool first as a prerequisite before calling send_push_notification, schedule_push_notification, get_integration_guide, or configure_inapp_banner to obtain a valid app_id; do not use it to inspect individual device tokens (use list_subscribers instead). Read-only operation requiring PUSHNOTIF_API_KEY with zero credit cost. Returns JSON { tenant_name, credits_balance, total_apps, apps: [{ id, site_name, site_url, active_subscribers }] }. |
| create_appA | Register an additional website or mobile application under the authenticated PushNotif workspace and generate its unique ECDSA P-256 VAPID keypair. Use this tool when an authenticated user wants to add a new website domain or app; do not use it to modify an existing app's logo or welcome message (use update_app_branding instead) or to register a brand-new user account (use register_new_account instead). Requires PUSHNOTIF_API_KEY, costs 0 credits, and creates a persistent app record. Returns JSON { ok, app: { id, site_name, site_url, vapid_public_key, created_at }, sdk_snippet }. |
| send_push_notificationA | Broadcast an immediate push notification across Web Push (VAPID), Android (FCM), and iOS (APNs) to active subscribers of a specific app_id. Use this tool for instant real-time delivery; do not use it for future or recurring broadcasts (use schedule_push_notification instead) or in-page popups (use configure_inapp_banner instead). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY, deducts 1 credit (Rp 0.20) per successfully delivered device (0 credits charged for 404/410 dead tokens, which are auto-pruned), and is irreversible once dispatched. Set segment='all' for all active subscribers or pass a specific tag name to target a subset. Returns JSON { ok, campaign_id, total_targeted, total_delivered, total_gone_pruned, credits_deducted, credits_remaining }. |
| get_integration_guideA | Generate copy-pasteable SDK installation code and service worker setup instructions for a specific app_id and target framework. Use this tool when a developer asks how to install PushNotif on HTML, Laravel, Next.js/React, WordPress, or Flutter/mobile; do not use it to send notifications (use send_push_notification instead). Prerequisite: call list_apps first to get app_id. Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost. Returns JSON { app_id, site_name, framework, one_line_script, service_worker_url, code_snippet, verification_steps }. |
| update_profileA | Update the authenticated tenant's workspace display name or account password. Use this tool only for account-level profile or password changes; do not use it to change a website's notification logo or welcome push message (use update_app_branding instead). Requires PUSHNOTIF_API_KEY, costs 0 credits, and overwrites the workspace name (and password hash if new_password is supplied). Returns JSON { ok, tenant: { id, name, email }, password_updated }. |
| update_app_brandingA | Configure an application's notification icon URL and automated welcome push notification sent when a visitor first subscribes. Use this tool to customize app-level branding and onboarding welcome alerts; do not use it to change account-level workspace names (use update_profile instead) or in-page popups (use configure_inapp_banner instead). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY, idempotently updates the app record at 0 configuration cost (welcome pushes cost 1 credit per new subscriber when welcome_enabled=true). Returns JSON { ok, app_id, icon_url, welcome_enabled, welcome_title, welcome_body }. |
| create_qris_invoiceA | Create a prepaid credit top-up invoice payable via Indonesian QRIS (all banks and e-wallets) at a flat rate of Rp 0.20 per credit (Rp 1,000 = 5,000 lifetime credits). Use this tool when the user wants to add credit balance; do not use it to check whether an existing invoice has been paid (use check_billing_and_qris_status instead). Requires PUSHNOTIF_API_KEY, creates a PENDING order valid for 30 minutes, and automatically adds non-expiring credits upon payment webhook confirmation. Provide either package_id ('starter'=Rp 20,000, 'growth'=Rp 50,000, 'pro'=Rp 100,000) or a custom amount_rp (>= 1000). Returns JSON { ok, order: { id, amount_rp, credits_added, status, qris_checkout_url, expires_at } }. |
| schedule_push_notificationA | Schedule a one-time or recurring push notification campaign for a future timestamp, or cancel an existing pending schedule. Use this tool for delayed or recurring broadcasts (daily, weekly, cron); do not use it for immediate sending (use send_push_notification instead). Prerequisite: call list_apps first to obtain app_id, or call get_campaign_analytics to find a cancel_campaign_id. Requires PUSHNOTIF_API_KEY; credits (1 per delivered device) are deducted only when the scheduled dispatch executes. Pass cancel_campaign_id ('cmp_sch_xxxx') to cancel a queued job, or pass app_id, title, body, and scheduled_for (ISO-8601) to create one. Returns JSON { ok, action, scheduled_campaign: { id, app_id, title, scheduled_for, recurrence_rule, status } }. |
| get_campaign_analyticsA | Retrieve historical push campaign delivery metrics (sent count, click count, CTR percentage, credits spent) and active scheduled queue items. Use this tool to audit campaign performance or find scheduled campaign IDs (cmp_sch_xxxx); do not use it to check QRIS payment invoices (use check_billing_and_qris_status instead) or raw subscriber device lists (use list_subscribers instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost. Returns JSON { summary: { total_sent, total_clicks, avg_ctr_percent }, campaigns: [{ id, app_id, title, delivered_count, click_count, ctr_percent, created_at }], scheduled_queue: [...] }. |
| list_subscribersA | Retrieve active subscriber device records and platform breakdown counts (Web VAPID, Android FCM, iOS APNs) for the workspace or a specific app_id. Use this tool to inspect audience size, platform distribution, or subscriber tags; do not use it to view campaign click metrics (use get_campaign_analytics instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost. Returns JSON { total_active, platform_breakdown: { web, android_fcm, ios_apns }, subscribers: [{ id, app_id, platform, tags, created_at }] }. |
| check_billing_and_qris_statusA | Check QRIS top-up order payment status (PENDING or PAID), current credit balance, credit ledger history, and official PDF invoice URLs. Use this tool to verify whether a QRIS invoice from create_qris_invoice has been paid or to audit credit usage; do not use it to create a new top-up invoice (use create_qris_invoice instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost. Returns JSON { credits_balance, orders: [{ id, amount_rp, credits_added, status, invoice_pdf_url, created_at }], recent_ledger: [...] }. |
| configure_mobile_credentialsA | Store native mobile push credentials—Firebase Cloud Messaging (FCM HTTP v1 service-account.json) for Android APK and Apple Push Notification service (.p8 AuthKey, Key ID, Team ID, Bundle ID) for iOS—on a specific app_id. Use this tool when enabling native Android or iOS push delivery; do not use it for standard browser Web Push (which uses auto-generated VAPID keys from create_app). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY, costs 0 credits, and idempotently updates encrypted mobile credentials. Returns JSON { ok, app_id, android_fcm_configured, ios_apns_configured }. |
| configure_inapp_bannerA | Configure and publish an on-site In-App Popup or Banner (center modal, top sticky bar, or bottom slide-in card) rendered by the PushNotif SDK without requiring browser notification permission. Use this tool to display promotional popups or announcements to all active website visitors; do not use it to send OS lock-screen push notifications (use send_push_notification instead). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY; saving configuration costs 0 credits, and each live visitor impression deducts 1 credit. Returns JSON { ok, app_id, inapp_enabled, inapp_style, inapp_trigger, inapp_freq }. |
| configure_rss_autopushA | Configure automated 24/7 RSS, Atom, or XML Sitemap polling for an app_id, or trigger an immediate feed check and push broadcast via dispatch_now=true. Use this tool when a blog, news portal, or store wants newly published articles automatically broadcast as push notifications; do not use it for manual one-off messages (use send_push_notification instead). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY; feed URLs are validated against SSRF rules, deduplicated by item GUID/URL, and deduct 1 credit per delivered subscriber when a new post is broadcast. Returns JSON { ok, app_id, rss_enabled, rss_feed_url, rss_interval, dispatched_now, latest_item_title }. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Each tool targets a clearly distinct resource+action, and descriptions actively cross-reference the nearest confusable sibling (e.g. send vs. schedule vs. configure_inapp_banner vs. configure_rss_autopush, update_profile vs. update_app_branding). The send/schedule/banner/RSS quartet are all notification-adjacent yet cleanly separated by channel and timing. An agent can reliably pick the right tool.
Consistent snake_case verb_noun pattern throughout (list_apps, create_app, send_push_notification, configure_inapp_banner, check_billing_and_qris_status). Verbs are used with stable meaning (list/get for reads, create/configure/update for writes, check for status). No style mixing.
17 tools is slightly above the ideal 3-15 range but each earns its place given the broad domain (auth, apps, notifications, mobile/RSS/in-app channels, billing, analytics, subscribers). No obvious redundancy or filler tools. Marginally heavy but well-scoped for the feature surface.
Strong lifecycle coverage: registration/login, app creation and branding, multi-channel sending, scheduling/cancel, billing, analytics, subscriber inspection, and integration guides. Minor gaps remain—no delete_app, no subscriber/tag management, and scheduled campaigns can only be canceled, not edited. These are workaround-able, so a small deduction only.