A TypeScript implementation of a simple MCP server that exposes datetime information to agentic systems and chat REPLs
PushNotif Official is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Web Push (VAPID), Android (FCM), iOS (APNs), In-App Popup, Toast & Transactional Email OTP engine.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http pushnotif-official-mcp https://pushnotif.biz.id/mcp --header 'Authorization: Bearer ${AUTHORIZATION}'
# 2 — ask your agent for something these tools do
# register_new_account, login_existing_account, list_apps and 16 more
It needs AUTHORIZATION (Bearer pn_live_YOUR_API_KEY (Get 1,000 free quota at https://pushnotif.biz.id)): this sends it in the Authorization header from your environment, so export it first — its endpoint answers 401 without it.
PushNotif Official costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it. Claude Code reads AUTHORIZATION (Bearer pn_live_YOUR_API_KEY (Get 1,000 free quota at https://pushnotif.biz.id)) from your environment each time it connects and sends it in the Authorization header — its endpoint answers 401 without it — so the key stays out of its config: export it in your shell profile (macOS, Linux), or run setx AUTHORIZATION … and open a new terminal (Windows).
claude mcp add --scope user --transport http pushnotif-official-mcp https://pushnotif.biz.id/mcp --header 'Authorization: Bearer ${AUTHORIZATION}'Reconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take Authorization header (Bearer pn_live_YOUR_API_KEY (Get 1,000 free quota at https://pushnotif.biz.id)) if you want to set it.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
19 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Two-step onboarding tool to request a 6-digit email OTP (step 1: omit otp_code) or verify the OTP to create a new PushNotif account with 1,000 free lifetime credits, register the initial website, and return a live API key (step 2: pass otp_code, password, and name). Use this tool only for brand-new user signups; do not use it for existing accounts (use login_existing_account instead) or to add web
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | Email address to register (must not already belong to an existing PushNotif account) | |
| name | string | no | Workspace or company display name (2 to 80 characters; required when verifying otp_code) |
| password | string | no | Account login password (minimum 6 characters; required when verifying otp_code) |
| otp_code | string | no | Optional 6-digit numeric OTP from email: omit on first call to send the OTP email, then provide on second call to complete registration |
| site_name | string | no | Optional display name for the initial website or app (defaults to workspace name) |
| site_url | string | no | Optional full HTTPS origin URL of the initial website (e.g., https://example.com) |
Authenticate an existing PushNotif account using email and password to retrieve its live API key and registered apps, with optional inline profile name or password update (when new_name or new_password is provided). Use this tool for existing users connecting from chat or updating account credentials; do not use it for new signups (use register_new_account instead) or app-level branding (use updat
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | Registered PushNotif account email address | |
| password | string | yes | Current account login password |
| new_name | string | no | Optional new workspace display name (2 to 80 characters) to update upon login |
| new_password | string | no | Optional new account password (minimum 6 characters) to replace the current password |
List all registered websites and mobile apps in the workspace with active subscriber counts, current credit balance, and optional framework SDK installation snippets (when include_sdk_framework is set). Use this tool first as a prerequisite to obtain a valid app_id before calling send_push_notification, schedule_push_notification, update_app_branding, delete_app, configure_inapp_banner, or configu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | Optional specific app_id (format app_xxxx) to filter and inspect in detail |
| include_sdk_framework | string | no | Optional target stack ('html', 'nextjs', 'laravel', 'wordpress', or 'flutter') to include copy-paste SDK & service worker installation code |
Register a new website domain or mobile application under the authenticated workspace and generate its unique ECDSA P-256 VAPID keypair and 1-line HTML SDK snippet. Use this tool when adding an additional website or app to an existing account; do not use it to modify an existing app's icon, welcome push, or mobile keys (use update_app_branding instead) or to remove an app (use delete_app instead).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| site_name | string | yes | Display name of the website or mobile application (2 to 80 characters) |
| site_url | string | yes | Canonical HTTPS origin URL of the website (must start with https:// or http://localhost) |
Update an existing application's notification icon URL, automated welcome push message (including drip delay welcome_delay_sec and promo target URL welcome_url), zero-downtime custom VAPID keys (vapid_public_key & vapid_private_key for migrating from OneSignal/LaraPush), and optional native mobile push credentials (Android FCM HTTP v1 service account JSON and iOS APNs .p8 key). Use this tool to co
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| icon_url | string | no | Optional direct HTTPS URL to a square PNG/JPG/WebP brand icon (recommended 192x192px) |
| welcome_enabled | boolean | no | Set true to automatically send a welcome push notification immediately after a visitor subscribes |
| welcome_title | string | no | Headline of the automated welcome push notification (max 80 characters; used when welcome_enabled=true) |
| welcome_body | string | no | Body text of the automated welcome push notification (max 180 characters; used when welcome_enabled=true) |
| welcome_url | string | no | Optional target promo/onboarding HTTPS URL opened when the subscriber clicks the welcome push notification (defaults to site_url) |
| welcome_delay_sec | integer | no | Optional drip delay in seconds (0 to 300, default: 0) before firing the welcome push notification after opt-in |
| vapid_public_key | string | no | Optional URL-safe Base64 VAPID Public Key imported from OneSignal, LaraPush, or Webpushr for zero-downtime migration |
| vapid_private_key | string | no | Optional URL-safe Base64 or PEM VAPID Private Key paired with vapid_public_key |
| fcm_service_account_json | string | no | Optional raw JSON string of Google Firebase Service Account key for native Android FCM HTTP v1 delivery |
| apns_key_id | string | no | Optional 10-character Apple Developer APNs Key ID (provide together with apns_team_id, apns_bundle_id, and apns_p8_key) |
| apns_team_id | string | no | Optional 10-character Apple Developer Team ID |
| apns_bundle_id | string | no | Optional iOS application Bundle Identifier (e.g., 'id.company.app') |
| apns_p8_key | string | no | Optional full PEM content of Apple's AuthKey_XXXX.p8 private key file |
Permanently delete a registered application (app_id) along with all of its subscriber device tokens, scheduled campaigns, and delivery history. Use this tool only when a user explicitly asks to remove a duplicate or decommissioned app; do not use it to pause notifications or change app settings (use update_app_branding or configure_inapp_banner instead). Prerequisite: call list_apps first to verif
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx to permanently delete (obtain from list_apps) |
| confirm_delete | boolean | yes | Safety confirmation flag: must be explicitly set to true to execute permanent deletion |
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 on-site HTML popups (use configure_inapp_banner instead). Prerequisite: call list_apps first to obtain app_id. Requires P
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| title | string | yes | Notification headline shown on the lock screen (1 to 100 characters) |
| body | string | yes | Notification message body text (1 to 240 characters) |
| url | string | no | Optional HTTPS destination URL opened when the notification is tapped (defaults to app's site_url) |
| segment | string | no | Target audience filter: 'all' (default) or a specific subscriber/merchant tag assigned via data-tags, PushNotif.addTag(), or update_subscriber_tags |
| icon_url | string | no | Optional HTTPS URL of a custom notification icon/logo (e.g., per-merchant logo override on a shared App ID) |
Create a new scheduled or recurring push notification campaign, edit an existing queued campaign (via update_campaign_id), or cancel a queued campaign before execution (via cancel_campaign_id). Use this tool for delayed, recurring, or editable future broadcasts; do not use it for immediate sending (use send_push_notification instead) or automated RSS feed polling (use configure_rss_autopush instea
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | Target application ID in format app_xxxx (required when creating a new schedule) |
| title | string | no | Notification headline (1 to 100 characters; required when creating, optional when editing via update_campaign_id) |
| body | string | no | Notification body text (1 to 240 characters; required when creating, optional when editing via update_campaign_id) |
| url | string | no | Optional HTTPS destination URL opened when the notification is tapped |
| scheduled_for | string | no | ISO-8601 execution timestamp with timezone offset (e.g., '2026-10-21T08:00:00+07:00') |
| recurrence_rule | string | no | Recurrence pattern: 'once' (default), 'daily', 'twice_daily', 'weekly', 'monthly', 'every_30m', 'every_3h', 'every_6h', or a 5-field cron expression |
| update_campaign_id | string | no | Optional existing scheduled campaign ID (format cmp_sch_xxxx from get_campaign_analytics) to edit in-place with new title, body, url, scheduled_for, or recurrence_rule |
| cancel_campaign_id | string | no | Optional existing scheduled campaign ID (format cmp_sch_xxxx from get_campaign_analytics) to cancel and remove from the queue |
Configure and publish an on-site In-App Popup or Banner (center modal, top sticky bar, or bottom slide-in toast) rendered inside the website by the PushNotif SDK without requiring browser push permission. Use this tool for visual in-page promos and announcements; do not use it for OS lock-screen notifications (use send_push_notification instead). Prerequisite: call list_apps first to obtain app_id
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| inapp_enabled | boolean | no | Set true to publish the banner live on the website, or false to pause it (default: true) |
| inapp_style | string | no | Visual layout: 'modal' (center dialog), 'top_bar' (sticky top ribbon), or 'bottom_slide' (corner slide-in toast) |
| inapp_trigger | string | no | Trigger condition: 'immediate' (default), 'delay_5s', 'delay_10s', 'scroll_50', 'scroll_80', or custom DOM event 'event:<name>' |
| inapp_title | string | yes | Banner headline text (1 to 100 characters) |
| inapp_body | string | yes | Banner supporting message text (1 to 240 characters) |
| inapp_cta_text | string | no | Optional CTA button label (must be paired with inapp_cta_url to render a clickable action button) |
| inapp_cta_url | string | no | Optional HTTPS destination URL opened when the CTA button is clicked |
| inapp_accent | string | no | Optional 6-digit hex color code for the CTA button and accent border (default: '#0058BE') |
| inapp_freq | string | no | Per-visitor frequency cap: 'once_forever' (one-time announcement per visitor, never shown again), 'once_per_session' (default), 'once_per_day', 'cooldown_3h', 'cooldown_12h', 'once_per_week', or 'alwa |
| segment_tag | string | no | Optional target segment/merchant tag (e.g., 'seblak-nearby') to display a dedicated In-App Banner on pages matching that tag under a single shared App ID (default: 'all' for global fallback) |
| inapp_template_id | string | no | Optional template preset: 'default', 'ai_custom' (custom HTML card), 'voucher_copy', 'flash_timer', 'feature_grid', or 'event_invite' |
| inapp_custom_html | string | no | Optional raw HTML card markup when inapp_template_id is ai_custom (renders up to 96vw x 94vh) |
| inapp_image_url | string | no | Optional HTTPS image/poster URL (supports transparent PNG/WEBP) |
| inapp_image_size | string | no | Optional poster width preset when using image_only: 'compact', 'standard' (default), 'large', 'xl', or 'full' |
| inapp_image_transparent | boolean | no | Set true when using a transparent PNG/WEBP poster in image_only style so no card box is rendered |
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 URLs automatically broadcast as push notifications; do not use it for manual one-off messages (use send_push_notification instead) or fixed-time calendar campaigns (use schedule_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| rss_enabled | boolean | no | Set true to enable background RSS/Sitemap polling at rss_interval, or false to pause background polling |
| rss_feed_url | string | no | Public HTTPS URL of the RSS 2.0, Atom, or XML Sitemap feed (required when enabling polling or calling dispatch_now=true) |
| rss_interval | string | no | Background polling interval: '5m', '15m', '30m' (default), '1h', '3h', or 'daily_digest' |
| rss_prefix | string | no | Optional text prepended to each auto-generated notification title (e.g., 'Artikel Baru: ') |
| dispatch_now | boolean | no | Set true to immediately fetch the latest feed entry and broadcast it to active subscribers right now |
Generate the ready-to-paste Universal Incoming Webhook URL (POST /api/v1/apps/{app_id}/incoming-event) for 9 auto-detected formats (Midtrans, Xendit, Mayar, Lynk.id, Duitku, Tripay, Supabase Database/Auth, Saweria/Trakteer, Shopify, WooCommerce, GitHub, and Custom JSON), or trigger a live test event when simulate_test=true. Use this tool when connecting a payment gateway, Supabase backend, creator
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| mode | string | no | Action when incoming webhook event arrives: 'both' (default: show Live Activity Toast on website + send Web Push), 'toast_only' (show Live Activity Toast only, 0 credits), or 'push_only' (send Web Pus |
| simulate_test | boolean | no | Set true to immediately fire a test incoming webhook event to verify Live Activity Toast and Web Push delivery |
| platform | string | no | Platform format to simulate when simulate_test=true: 'midtrans' (default), 'supabase', 'saweria', 'shopify', 'xendit', 'woocommerce', or 'github' |
| buyer_name | string | no | Optional custom actor/buyer name for test simulation (default: 'Budi (Jakarta)') |
| item_name | string | no | Optional custom product/order/table name for test simulation (default: 'Paket Premium Rp 149.000') |
Retrieve active subscriber device records, assigned segment tags, platform breakdown counts (Web VAPID, Android FCM, iOS APNs), or full CSV/JSON backup export for zero-downtime migration. Use this tool to inspect audience size, platform distribution, export subscriber tokens (export_format="csv" or "json"), or obtain a subscriber_id before calling update_subscriber_tags; do not use it to view camp
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | Optional application ID filter in format app_xxxx (omit to aggregate across all apps in the workspace) |
| tag | string | no | Optional segment tag filter (returns only subscribers carrying this tag) |
| limit | integer | no | Maximum number of subscriber records to return (1 to 100, default: 15) |
| export_format | string | no | Optional backup export format: 'csv' or 'json' to include full VAPID endpoint/p256dh/auth migration dump for the specified app_id |
Assign or remove audience segment tags on a subscriber device (subscriber_id), permanently unsubscribe a device (unsubscribe=true), or bulk-import existing Web Push subscribers via CSV or JSON array (import_app_id + import_csv or import_subscribers) at 0 credit cost. Use this tool to manage subscriber segmentation, remove a device, or migrate subscribers from OneSignal/LaraPush/Webpushr; do not us
| Parameter | Type | Required | Notes |
|---|---|---|---|
| subscriber_id | string | no | Target subscriber device ID in format sub_xxxx (required when updating tags or unsubscribing a single device) |
| add_tags | array | no | Optional list of lowercase segment tag strings (e.g., ['vip', 'jakarta']) to attach to the subscriber for targeted broadcasts |
| remove_tags | array | no | Optional list of segment tag strings to remove from the subscriber |
| unsubscribe | boolean | no | Set true to permanently unsubscribe and delete this subscriber device record |
| import_app_id | string | no | Optional target app_id (app_xxxx) when performing a zero-downtime bulk subscriber import via import_csv or import_subscribers |
| import_csv | string | no | Optional CSV text containing endpoint,p256dh,auth,tags rows to bulk-import into import_app_id |
| import_subscribers | array | no | Optional JSON array of subscriber objects ({endpoint, p256dh, auth, tags}) to bulk-import into import_app_id |
Retrieve historical push campaign delivery metrics (delivered count, click count, CTR percentage, credits spent) and active scheduled queue items (cmp_sch_xxxx). Use this tool to audit campaign performance or look up scheduled campaign IDs before editing or canceling them with schedule_push_notification; do not use it to inspect QRIS payment invoices (use check_billing_and_qris_status instead) or
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | no | Optional application ID filter in format app_xxxx (omit to aggregate across all workspace apps) |
| limit | integer | no | Maximum number of recent campaigns to return (1 to 50, default: 10) |
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 non-expiring credits). Use this tool when the user wants to purchase additional credits; do not use it to check whether an existing invoice has been paid (use check_billing_and_qris_status instead). Requires PUSHNOTIF_API_KEY, generates a PENDING order
| Parameter | Type | Required | Notes |
|---|---|---|---|
| package_id | string | no | Preset package tier: 'starter' (Rp 20,000 = 100,000 credits), 'growth' (Rp 50,000 = 250,000 credits), or 'pro' (Rp 100,000 = 500,000 credits); ignored if amount_rp is explicitly provided |
| amount_rp | integer | no | Custom top-up amount in Indonesian Rupiah (minimum 1000, maximum 10000000; 1 IDR = 5 lifetime credits, overrides package_id) |
Check QRIS top-up order payment status (PENDING or PAID), current workspace credit balance, credit mutation ledger history, and official downloadable PDF invoice URLs. Use this tool to verify whether an order from create_qris_invoice has settled or to audit credit consumption; do not use it to generate a new payment invoice (use create_qris_invoice instead) or view campaign click rates (use get_ca
| Parameter | Type | Required | Notes |
|---|---|---|---|
| order_id | string | no | Optional specific QRIS order ID in format ord_xxxx (from create_qris_invoice) to check; omit to return the latest orders and ledger history |
Configure the standalone on-site Live Activity Social Proof Toast (corner notification card showing recent subscriber joins, logins, and purchases) and its 3 automated DOM/webhook sensors for an app_id without overwriting the In-App Promo Banner. Use this tool to enable/disable social proof toasts, change visual theme or screen corner, or toggle auto-capture sensors; do not use it for promo popups
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| toast_enabled | boolean | no | Set true to enable Live Activity Toast on the website, or false to turn it off |
| toast_theme | string | no | Visual theme: 'light_emerald' (default), 'dark_slate', 'royal_blue', or 'ai_custom' (bespoke HTML/CSS) |
| toast_custom_title | string | no | Optional custom headline override for the Live Toast (leave empty to use automated sensor feed) |
| toast_custom_body | string | no | Optional custom message body override for the Live Toast |
| toast_custom_html | string | no | Optional bespoke HTML/CSS markup when toast_theme='ai_custom' |
| toast_position | string | no | Screen corner: 'bottom_left' (default) or 'bottom_right' |
| toast_action | string | no | Click behavior: 'subscribe_push' (default), 'custom_url', or 'none' |
| toast_custom_url | string | no | Optional HTTPS URL opened when toast_action='custom_url' |
| toast_sensor_sub | boolean | no | Auto-show toast when a new visitor subscribes to push notifications |
| toast_sensor_auth | boolean | no | Auto-detect signup/login forms on the website |
| toast_sensor_buy | boolean | no | Auto-detect checkout/payment forms and incoming payment webhooks |
Configure per-app module switches (ON/OFF) for Transactional Email OTP, Automated Payment Webhook Email Receipts, Order Status Emails, and the Web Push Notification collector, plus sender brand name and Reply-To email address. Use this tool to enable or disable individual channels per website; do not use it to send an immediate email or OTP (use send_transactional_email instead). Requires PUSHNOTI
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| push_enabled | boolean | no | Set true to enable Web Push Notification collection on the website, or false to disable |
| email_otp_enabled | boolean | no | Set true to enable 6-digit Email OTP generation and verification for this app |
| email_invoice_enabled | boolean | no | Set true to automatically send paid invoice receipts via email when a payment webhook arrives |
| email_status_enabled | boolean | no | Set true to enable order status and shipping tracking emails |
| email_brand_name | string | no | Sender brand name shown in the recipient inbox (e.g., 'Kopi Nusantara') |
| email_reply_to | string | no | Business Reply-To email address where customer replies are routed |
Send a 1-to-1 locked transactional email (6-digit OTP challenge, paid invoice receipt, or order shipping status update) or verify a 6-digit OTP code entered by a user. Use this tool for transactional 1-to-1 emails and managed OTP verification; bulk marketing or promotional blasts are strictly prohibited. Requires PUSHNOTIF_API_KEY; sending an email or OTP deducts 25 credits (Rp 5), while verifying
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app_id | string | yes | Target application ID in format app_xxxx (obtain from list_apps) |
| action | string | yes | Operation mode: 'send_otp' (generate & email 6-digit OTP), 'verify_otp' (verify 6-digit code), 'send_invoice' (send paid receipt email), or 'send_order_status' (send order/shipping update) |
| to_email | string | yes | Single recipient email address (1-to-1 transactional only) |
| otp_code | string | no | 6-digit numeric OTP code (required when action='verify_otp') |
| reference_id | string | no | Invoice number or Order ID (e.g., 'INV-2026-001' or 'ORD-99281' for send_invoice / send_order_status) |
| detail_text | string | no | Transaction amount/items or shipping courier tracking info (e.g., 'Rp 85.000 — Kopi Susu' or 'DIKIRIM — Resi JNE: JP882910') |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install PushNotif Official or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| register_new_account | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| login_existing_account | state-write | state-write: declares readOnlyHint: false |
| list_apps | no tags | |
| create_app | state-write | state-write: declares readOnlyHint: false |
| update_app_branding | state-write | state-write: declares readOnlyHint: false |
| delete_app | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| send_push_notification | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| schedule_push_notification | untrusted-inputstate-write | untrusted-input: keyword "rss"; state-write: declares readOnlyHint: false |
| configure_inapp_banner | state-write | state-write: declares readOnlyHint: false |
| configure_rss_autopush | untrusted-inputexternal-sink | untrusted-input: keyword "rss"; external-sink: declares readOnlyHint: false, openWorldHint: true |
| configure_payment_webhook | external-sink | external-sink: keyword "webhook", declares readOnlyHint: false, openWorldHint: true |
| list_subscribers | sensitive-source | sensitive-source: keyword "export_data" |
| update_subscriber_tags | state-write | state-write: declares readOnlyHint: false |
| get_campaign_analytics | no tags | |
| create_qris_invoice | external-sink | external-sink: keyword "webhook", declares readOnlyHint: false, openWorldHint: true |
| check_billing_and_qris_status | no tags | |
| configure_social_toast | external-sinkstate-write | external-sink: keyword "webhook"; state-write: declares readOnlyHint: false |
| configure_email_automation | external-sinkstate-write | external-sink: keyword "webhook"; state-write: declares readOnlyHint: false |
| send_transactional_email | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 2.5.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish PushNotif Official can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.