Skip to main content
Glama

PushNotif Official MCP Server

Server Details

Web Push (VAPID), Android (FCM), iOS (APNs), In-App Popup, Toast & Transactional Email OTP engine.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2024-11-05
URL
Repository
AarsyDesign/pushnotif-mcp
GitHub Stars
0
Server Listing
PushNotif MCP Server

TDQS

A4.4/5.0

Scored across 19 tools

Disambiguation4/5

Most tools target a distinct resource+action, and descriptions proactively cross-reference siblings ('do not use it for X, use Y instead'), which resolves nearly all ambiguity. The main soft spots are the multi-mode tools (schedule_push_notification creates/edits/cancels, send_transactional_email also verifies OTP, update_subscriber_tags also bulk-imports and unsubscribes) and the two on-site toast/banner configurators, which an agent could still confuse despite the clarifying notes.

Naming Consistency5/5

Every tool follows a strict snake_case verb_noun pattern (create_app, list_apps, send_push_notification, configure_rss_autopush, get_campaign_analytics). Verb choice is predictable per resource lifecycle, with no camelCase or stylistic mixing.

Tool Count4/5

19 tools is at the upper end of comfortable but each covers a real capability (apps, subscribers, push, scheduling, email, billing, webhooks, RSS, banners). Slightly heavy — a few multi-mode tools carry several operations that could have been split, but nothing feels redundant.

Completeness4/5

Strong lifecycle coverage: apps (create/list/update/delete), subscribers (list/tag/unsubscribe/import), campaigns (send/schedule/edit/cancel/analytics), billing (invoice/status), plus email, webhook, RSS, and on-site surfaces. Minor gaps remain — no dedicated get_app or campaign-delete, and no API key rotation/account deletion path beyond login updates.

Available Tools

19 tools
check_billing_and_qris_statusA
Read-onlyIdempotent
Inspect

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_campaign_analytics instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost; pass order_id to inspect a single invoice or omit it to list recent orders and ledger entries. Returns JSON { credits_balance, orders: [{ id, amount_rp, credits_added, status, invoice_pdf_url, created_at }], recent_ledger: [{ id, delta, reason, created_at }] }.

NameRequiredDescriptionDefault
order_idNoOptional specific QRIS order ID in format ord_xxxx (from create_qris_invoice) to check; omit to return the latest orders and ledger history

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds authentication requirements (PUSHNOTIF_API_KEY), operational cost context (0 credit cost), and the behavioral difference between passing versus omitting order_id. These details materially help an agent invoke the tool correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: purpose, usage routing, operational constraints, parameter behavior, and return shape are all presented without filler. Every sentence contributes to correct tool selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by explicitly documenting the JSON return shape, including credits_balance, orders, and recent_ledger. Annotations cover safety behavior, and the single parameter is fully described, leaving no meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline would be 3. The description adds practical meaning by explaining that order_id inspects a single invoice, while omitting it lists recent orders and ledger entries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: checking QRIS top-up order payment status, credit balance, ledger history, and invoice URLs. It clearly distinguishes this tool from create_qris_invoice and get_campaign_analytics, so an agent can identify its scope without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: verifying whether an order from create_qris_invoice has settled or auditing credit consumption. It also names two alternatives and when not to use this tool: creating invoices and viewing campaign analytics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_email_automationA
Idempotent
Inspect

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 PUSHNOTIF_API_KEY and costs 0 credits. Returns JSON { ok, app_id, push_enabled, email_otp_enabled, email_invoice_enabled, email_status_enabled, email_brand_name, email_reply_to }.

NameRequiredDescriptionDefault
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
push_enabledNoSet true to enable Web Push Notification collection on the website, or false to disable
email_reply_toNoBusiness Reply-To email address where customer replies are routed
email_brand_nameNoSender brand name shown in the recipient inbox (e.g., 'Kopi Nusantara')
email_otp_enabledNoSet true to enable 6-digit Email OTP generation and verification for this app
email_status_enabledNoSet true to enable order status and shipping tracking emails
email_invoice_enabledNoSet true to automatically send paid invoice receipts via email when a payment webhook arrives

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses the API-key requirement, the zero-credit cost, and the exact return JSON shape. That is meaningful operational context the agent would otherwise have to guess.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary action, then usage rules, then prerequisites and returns. Dense but every sentence carries actionable information; only the long field enumeration is slightly list-like.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool, the description covers purpose, channel routing, auth requirement, cost, and return shape, with annotations already handling the safety profile. Nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter. The description names the controlled fields but adds no syntax, format, or default behavior beyond what the schema provides, so it lands at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Configure per-app module switches ... plus sender brand name and Reply-To email address') and enumerates exactly which switches are controlled (OTP, webhook receipts, order status, push). An agent can distinguish it from siblings like send_transactional_email without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the when ('enable or disable individual channels per website') and the when-not with a named alternative ('do not use it to send an immediate email or OTP (use send_transactional_email instead)'). The routing decision is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_inapp_bannerA
Idempotent
Inspect

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. Requires PUSHNOTIF_API_KEY; saving configuration is idempotent and costs 0 credits, while each live visitor display deducts 1 credit (inapp_trigger controls when the banner fires—such as 'scroll_50' for 50% page scroll or 'event:add_to_cart' for custom DOM events—combined with inapp_freq to cap repeat impressions per visitor). Returns JSON { ok, app_id, inapp_enabled, inapp_style, inapp_trigger, inapp_freq }.

NameRequiredDescriptionDefault
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
inapp_bodyYesBanner supporting message text (1 to 240 characters)
inapp_freqNoPer-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 'always'
inapp_styleNoVisual layout: 'modal' (center dialog), 'top_bar' (sticky top ribbon), or 'bottom_slide' (corner slide-in toast)
inapp_titleYesBanner headline text (1 to 100 characters)
segment_tagNoOptional 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_accentNoOptional 6-digit hex color code for the CTA button and accent border (default: '#0058BE')
inapp_cta_urlNoOptional HTTPS destination URL opened when the CTA button is clicked
inapp_enabledNoSet true to publish the banner live on the website, or false to pause it (default: true)
inapp_triggerNoTrigger condition: 'immediate' (default), 'delay_5s', 'delay_10s', 'scroll_50', 'scroll_80', or custom DOM event 'event:<name>'
inapp_cta_textNoOptional CTA button label (must be paired with inapp_cta_url to render a clickable action button)
inapp_image_urlNoOptional HTTPS image/poster URL (supports transparent PNG/WEBP)
inapp_image_sizeNoOptional poster width preset when using image_only: 'compact', 'standard' (default), 'large', 'xl', or 'full'
inapp_custom_htmlNoOptional raw HTML card markup when inapp_template_id is ai_custom (renders up to 96vw x 94vh)
inapp_template_idNoOptional template preset: 'default', 'ai_custom' (custom HTML card), 'voucher_copy', 'flash_timer', 'feature_grid', or 'event_invite'
inapp_image_transparentNoSet true when using a transparent PNG/WEBP poster in image_only style so no card box is rendered

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses PUSHNOTIF_API_KEY requirement, the cost model (0 credits to save, 1 credit per live visitor display), idempotent save behavior, and the exact return payload shape. These are non-obvious operational facts an agent cannot get from the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling exclusion, then prerequisite, cost, and return shape in a logical order with zero filler. It is a single dense block, though, and the trigger/freq parenthetical pushes toward the edge of readability for a 16-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter mutation tool with no output schema, the description covers the prerequisite call, auth key, credit cost, idempotency, and even the return JSON keys. An agent has everything needed to invoke it correctly and predict the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining the interplay between inapp_trigger and inapp_freq (trigger fires the banner, freq caps repeat impressions) and gives concrete trigger examples like 'scroll_50' and 'event:add_to_cart'. It does not explain segment_tag or the template/image interaction, which the schema carries alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (configure and publish an In-App Popup/Banner) and enumerates the three concrete render modes (center modal, top sticky bar, bottom slide-in toast) plus the rendering mechanism (PushNotif SDK, no browser push permission). It explicitly excludes OS lock-screen notifications and names send_push_notification as the sibling for that case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use it ('visual in-page promos and announcements'), when not to ('do not use it for OS lock-screen notifications'), the substitute (send_push_notification), and a hard prerequisite ('call list_apps first to obtain app_id'). Nothing key is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_payment_webhookA
Idempotent
Inspect

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 tipping page, or e-commerce store to automatically show a Live Activity Toast, broadcast a Web Push, and/or send a transactional receipt email upon settlement; do not use it for RSS blog feeds (use configure_rss_autopush instead) or manual push campaigns (use send_push_notification instead). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY; generating the webhook URL costs 0 credits, while live or simulated push broadcasts deduct 1 credit per delivered device (toast_only mode costs 0 credits on display). Returns JSON { ok, app_id, mode, webhook_url, supported_platforms, setup_guides, simulation_result }.

NameRequiredDescriptionDefault
modeNoAction 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 Push notification only)
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
platformNoPlatform format to simulate when simulate_test=true: 'midtrans' (default), 'supabase', 'saweria', 'shopify', 'xendit', 'woocommerce', or 'github'
item_nameNoOptional custom product/order/table name for test simulation (default: 'Paket Premium Rp 149.000')
buyer_nameNoOptional custom actor/buyer name for test simulation (default: 'Budi (Jakarta)')
simulate_testNoSet true to immediately fire a test incoming webhook event to verify Live Activity Toast and Web Push delivery

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the API key requirement, the credit model (URL generation free, 1 credit per delivered device, toast_only free), and the JSON return keys. The only blemish is the format claim: it says '9 auto-detected formats' but then lists roughly fourteen names, several of which (Mayar, Lynk.id, Duitku, Tripay, Trakteer, Custom JSON) are absent from the platform parameter's enumerated values — a factual inconsistency an agent could trip on.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the simulate_test branch, then usage, exclusions, prerequisites, cost, and return shape — every sentence carries signal. The verbose parenthetical platform list is the one place where volume exceeds value, especially since it is numerically inconsistent with the schema enum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description enumerates the response keys, and it covers auth, prerequisites, cost, side effects of the test mode, and sibling routing. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns an extra point by attaching cost consequences to the mode parameter (toast_only = 0 credits) and by explaining that platform/item_name/buyer_name only matter when simulate_test=true, which the per-parameter schema text does not make explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+artifact: 'Generate the ready-to-paste Universal Incoming Webhook URL (POST /api/v1/apps/{app_id}/incoming-event)' plus the alternative branch when simulate_test=true. An agent can distinguish this from configure_rss_autopush and send_push_notification without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the use cases (payment gateway, Supabase, tipping page, e-commerce) and the exclusions with named alternatives ('do not use it for RSS blog feeds (use configure_rss_autopush instead) or manual push campaigns (use send_push_notification instead)'). It also states the prerequisite ('call list_apps first to obtain app_id').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_rss_autopushA
Idempotent
Inspect

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_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 so each post is sent only once, and deduct 1 credit per delivered subscriber when a new item is broadcast (setting dispatch_now=true immediately fetches and broadcasts the newest feed entry even if rss_enabled=false). Returns JSON { ok, app_id, rss_enabled, rss_feed_url, rss_interval, dispatched_now, latest_item_title }.

NameRequiredDescriptionDefault
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
rss_prefixNoOptional text prepended to each auto-generated notification title (e.g., 'Artikel Baru: ')
rss_enabledNoSet true to enable background RSS/Sitemap polling at rss_interval, or false to pause background polling
dispatch_nowNoSet true to immediately fetch the latest feed entry and broadcast it to active subscribers right now
rss_feed_urlNoPublic HTTPS URL of the RSS 2.0, Atom, or XML Sitemap feed (required when enabling polling or calling dispatch_now=true)
rss_intervalNoBackground polling interval: '5m', '15m', '30m' (default), '1h', '3h', or 'daily_digest'

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false, openWorldHint=true, so the description's added context is the differentiator: SSRF URL validation, GUID/URL deduplication so each post is sent once, the PUSHNOTIF_API_KEY requirement, and a per-subscriber credit cost of 1 per broadcast. It falls just short of 5 because it does not state what happens to an existing configuration when parameters are omitted (partial update vs reset).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the immediate-dispatch variant before routing, prerequisites, and cost. The middle sentence is dense with nested parentheticals and stacked clauses, which is efficient but slightly harder to scan than a cleanly split structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating multi-mode configuration tool with open-world network behavior, the description covers prerequisites, auth, validation, deduplication, billing impact, mode precedence, and even the return shape ({ ok, app_id, rss_enabled, ... }) despite no output schema. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description still adds genuine meaning by clarifying that dispatch_now fetches and broadcasts 'even if rss_enabled=false', a precedence rule absent from the schema's property text. It also reinforces that rss_feed_url is required when enabling polling or dispensing, but adds no interval-duration or prefix-format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Configure automated 24/7 RSS, Atom, or XML Sitemap polling for an app_id') and adds the alternate mode ('trigger an immediate feed check and push broadcast via dispatch_now=true'). It also names the two siblings it is not (send_push_notification, schedule_push_notification), so an agent can discriminate it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('when a blog, news portal, or store wants newly published URLs automatically broadcast') plus two explicit exclusions that name the correct alternative tool for each. It also states a prerequisite sequence ('call list_apps first to obtain app_id'), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_social_toastA
Idempotent
Inspect

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 (use configure_inapp_banner instead). Requires PUSHNOTIF_API_KEY and costs 0 credits. Returns JSON { ok, app_id, toast_enabled, toast_theme, toast_position, toast_action, sensors }.

NameRequiredDescriptionDefault
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
toast_themeNoVisual theme: 'light_emerald' (default), 'dark_slate', 'royal_blue', or 'ai_custom' (bespoke HTML/CSS)
toast_actionNoClick behavior: 'subscribe_push' (default), 'custom_url', or 'none'
toast_enabledNoSet true to enable Live Activity Toast on the website, or false to turn it off
toast_positionNoScreen corner: 'bottom_left' (default) or 'bottom_right'
toast_custom_urlNoOptional HTTPS URL opened when toast_action='custom_url'
toast_sensor_buyNoAuto-detect checkout/payment forms and incoming payment webhooks
toast_sensor_subNoAuto-show toast when a new visitor subscribes to push notifications
toast_custom_bodyNoOptional custom message body override for the Live Toast
toast_custom_htmlNoOptional bespoke HTML/CSS markup when toast_theme='ai_custom'
toast_sensor_authNoAuto-detect signup/login forms on the website
toast_custom_titleNoOptional custom headline override for the Live Toast (leave empty to use automated sensor feed)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which already cover idempotency and non-destructiveness), the description discloses the auth requirement (PUSHNOTIF_API_KEY), the credit cost (0), and the critical side-effect constraint that it does not overwrite the In-App Promo Banner. It also returns the response shape, all of which annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and the sibling exclusion are front-loaded, and every sentence carries information (auth, cost, return shape). The opening is a long, dense sentence with a nested parenthetical that could be split for readability, keeping it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no output schema, the description covers auth, cost, non-destructive scoping relative to the banner, and the JSON return shape. There is no meaningful gap an agent would need to guess at before calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3; the description adds slight value by framing the three 'automated DOM/webhook sensors' that map to the sensor params and by enumerating the returned fields. It doesn't restate enums or defaults, but it doesn't need to given the rich schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Configure) plus the exact resource (standalone Live Activity Social Proof Toast) and its three sensors, and even parenthesizes what the toast actually is. It explicitly separates itself from configure_inapp_banner, so an agent can distinguish it from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use cases (enable/disable toasts, change theme or corner, toggle auto-capture sensors) and an explicit when-not with a named alternative ('do not use it for promo popups (use configure_inapp_banner instead)'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_appAInspect

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). Requires PUSHNOTIF_API_KEY, costs 0 credits, and creates a persistent app record where site_url must be a valid HTTPS origin (or http://localhost for local testing). Returns JSON { ok, app: { id, site_name, site_url, vapid_public_key, created_at }, sdk_snippet }.

NameRequiredDescriptionDefault
site_urlYesCanonical HTTPS origin URL of the website (must start with https:// or http://localhost)
site_nameYesDisplay name of the website or mobile application (2 to 80 characters)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (non-read-only, non-destructive, non-idempotent), and the description adds the information that actually matters for calling it: PUSHNOTIF_API_KEY is required, the operation costs 0 credits, and it creates a persistent record. It also discloses the generated artifacts (ECDSA P-256 VAPID keypair, SDK snippet), which cannot be inferred from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense but front-loaded: the purpose sentence comes first, then usage routing, then constraints and return shape, in that order. Every sentence carries distinct information and none repeats the name or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-idempotent mutation tool with no output schema, the description supplies auth requirements, cost, persistence, input validation rules, and the exact return JSON shape. An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters, including the HTTPS/localhost constraint and the 2–80 character name limit. The description's restatement of the site_url origin rule adds little beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('Register a new website domain or mobile application') plus the concrete side effects (VAPID keypair, HTML SDK snippet). It explicitly names the siblings it is not (update_app_branding, delete_app), so an agent can separate it from every adjacent tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the positive trigger ('when adding an additional website or app to an existing account') and two explicit exclusions with the correct alternatives for each. Nothing about tool selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_qris_invoiceAInspect

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 valid for 30 minutes at 0 fee, and automatically credits the workspace upon payment webhook confirmation; if both package_id and custom amount_rp are supplied, amount_rp takes precedence (minimum Rp 1,000). Returns JSON { ok, order: { id, amount_rp, credits_added, status, qris_checkout_url, expires_at } }.

NameRequiredDescriptionDefault
amount_rpNoCustom top-up amount in Indonesian Rupiah (minimum 1000, maximum 10000000; 1 IDR = 5 lifetime credits, overrides package_id)
package_idNoPreset 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

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses the required PUSHNOTIF_API_KEY, that the order is PENDING and expires in 30 minutes at zero fee, that crediting happens automatically on webhook confirmation (i.e. the call does not itself deliver credits), and the amount_rp-vs-package_id precedence. This is the mutation lifecycle detail an agent needs and cannot get from readOnlyHint/destructiveHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then exclusion, then auth/lifecycle, then parameter conflict, then return shape. Every clause carries information, though the inline JSON return shape makes the sentence long and slightly heavy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully spells out the returned JSON fields including qris_checkout_url and expires_at. The remaining hole is behavior with zero arguments, since both parameters are optional and the description never says which one is defaulted to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, and the description adds the flat Rp 0.20/credit rate, the Rp 1,000 minimum, and the precedence rule in prose. It does not state what happens when neither optional parameter is supplied (required params = 0), which is the one semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a prepaid credit top-up invoice') plus the payment rail (Indonesian QRIS, all banks and e-wallets), which makes it trivially distinguishable from billing/status siblings. An agent knows exactly what is being created without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger ('when the user wants to purchase additional credits') and the anti-trigger with the exact alternative tool ('do not use it to check whether an existing invoice has been paid (use check_billing_and_qris_status instead)'). No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_appA
DestructiveIdempotent
Inspect

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 verify the exact app_id and active subscriber count. Requires PUSHNOTIF_API_KEY, costs 0 credits, and is irreversibly destructive (confirm_delete must be set to true or the call is rejected). Returns JSON { ok, deleted_app_id, deleted_site_name, subscribers_removed }.

NameRequiredDescriptionDefault
app_idYesTarget application ID in format app_xxxx to permanently delete (obtain from list_apps)
confirm_deleteYesSafety confirmation flag: must be explicitly set to true to execute permanent deletion

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and confirm_delete is in the schema, but the description adds real context the annotations cannot: the cascade deletion scope, the API key requirement, the zero credit cost, and that the call is rejected without confirm_delete=true. Only missing the return format, which prevents a 5. It does not contradict the idempotentHint=true annotation, since a repeat delete would leave the same end state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, no redundancy: purpose and cascade first, then usage boundary, then prerequisite and cost/auth, then return shape. Each sentence carries distinct, actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers authentication, cost, cascade scope, confirmation safety, and return keys, which is thorough for a two-parameter destructive tool with no output schema. The description could not have done much more without becoming verbose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description restates confirm_delete behavior and app_id provenance from list_apps but adds no syntax or format detail beyond what the schema provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (permanently delete) and resource (registered application) plus the exact cascade of what is removed: subscriber device tokens, scheduled campaigns, delivery history. The scope alone distinguishes it from update_app_branding and configure_inapp_banner, which it names explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition (user asks to remove a duplicate or decommissioned app) and an explicit when-not-to-use condition (pausing notifications or changing app settings), naming the two alternative tools. It also states a prerequisite: call list_apps first to verify app_id and subscriber count.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_campaign_analyticsA
Read-onlyIdempotent
Inspect

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 subscriber device lists (use list_subscribers instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost; omitting app_id aggregates metrics across all workspace apps up to limit rows. 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: [{ id, app_id, title, scheduled_for, recurrence_rule, status }] }.

NameRequiredDescriptionDefault
limitNoMaximum number of recent campaigns to return (1 to 50, default: 10)
app_idNoOptional application ID filter in format app_xxxx (omit to aggregate across all workspace apps)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, so the safety bar is covered; the description goes well beyond that by disclosing the required PUSHNOTIF_API_KEY credential, the 0-credit cost, and the aggregation semantics when app_id is omitted. These are operationally relevant facts an agent could not derive from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is ordered well: purpose, metric scope, usage and exclusions, auth/cost, then return shape, so it is front-loaded with what matters most. The single dense paragraph and the full JSON return sketch could be tightened, but every clause carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the burden of describing returns and does so fully (summary totals plus campaign and scheduled_queue item shapes). For a two-parameter read-only tool this covers everything an agent needs to call it and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already documented and baseline is 3. The description adds meaning beyond the schema by explaining the consequence of omitting app_id (aggregation across all workspace apps bounded by limit rows), which clarifies intent rather than repeating format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieve) and specific resources (push campaign delivery metrics and scheduled queue items), enumerating the exact metric fields and the cmp_sch_xxxx ID format. It also explicitly names the siblings it is not (check_billing_and_qris_status, list_subscribers), so an agent can distinguish it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use cases (audit campaign performance, look up scheduled campaign IDs before editing/canceling) and names the follow-on tool schedule_push_notification. It also states explicit when-not cases with the correct alternatives for QRIS invoices and subscriber device lists, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_appsA
Read-onlyIdempotent
Inspect

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 configure_rss_autopush; do not use it to inspect individual subscriber devices (use list_subscribers instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost; when include_sdk_framework is passed ('html', 'nextjs', 'laravel', 'wordpress', 'flutter'), each app entry also includes ready-to-paste SDK setup code. Returns JSON { tenant_name, credits_balance, total_apps, apps: [{ id, site_name, site_url, active_subscribers, sdk_guide }] }.

NameRequiredDescriptionDefault
app_idNoOptional specific app_id (format app_xxxx) to filter and inspect in detail
include_sdk_frameworkNoOptional target stack ('html', 'nextjs', 'laravel', 'wordpress', or 'flutter') to include copy-paste SDK & service worker installation code

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds material context not in them: the PUSHNOTIF_API_KEY requirement, the zero-credit cost, and the conditional side effect of include_sdk_framework injecting SDK snippets per app. It also states the exact return payload, which matters since no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph, front-loaded with the purpose and then prerequisites, exclusions, and return shape in priority order. No filler sentences, though the inline JSON return signature makes it heavier to read than ideal; a short bullet structure would scan faster.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param, no-output-schema read tool, everything an agent needs is present: auth requirement, cost, prerequisite ordering, alternative for device-level inspection, optional parameter behavior, and the response shape. Nothing material is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value by enumerating and explaining the effect of include_sdk_framework values ('html', 'nextjs', 'laravel', 'wordpress', 'flutter') — each app entry gains ready-to-paste setup code. It says nothing about the app_id filter parameter, leaving that entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb+resource+scope: 'List all registered websites and mobile apps in the workspace' including subscriber counts and credit balance. It explicitly distinguishes itself from list_subscribers and names the write tools it feeds, so an agent can place it correctly among 15 siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite rule ('use this tool first ... before calling send_push_notification, schedule_push_notification, update_app_branding, delete_app, configure_inapp_banner, configure_rss_autopush') and an explicit exclusion ('do not use it to inspect individual subscriber devices (use list_subscribers instead)'). Both when-to-use and when-not-to-use, with named alternatives, are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_subscribersA
Read-onlyIdempotent
Inspect

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 campaign click metrics (use get_campaign_analytics instead) or modify/import subscribers (use update_subscriber_tags instead). Read-only operation requiring PUSHNOTIF_API_KEY with 0 credit cost; filter by app_id and optional tag to narrow results. Returns JSON { total_active, platform_breakdown: { web, android_fcm, ios_apns }, subscribers: [{ id, app_id, platform, tags, created_at }], export_data }.

NameRequiredDescriptionDefault
tagNoOptional segment tag filter (returns only subscribers carrying this tag)
limitNoMaximum number of subscriber records to return (1 to 100, default: 15)
app_idNoOptional application ID filter in format app_xxxx (omit to aggregate across all apps in the workspace)
export_formatNoOptional backup export format: 'csv' or 'json' to include full VAPID endpoint/p256dh/auth migration dump for the specified app_id

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish readOnly, idempotent, non-destructive, and closed-world behavior. The description adds useful context beyond annotations: it requires PUSHNOTIF_API_KEY, has 0 credit cost, supports zero-downtime migration export, and describes the return payload shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded: purpose, usage, exclusions, requirements, and return shape all appear in a single efficient paragraph. Every sentence contributes to selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by naming the returned JSON fields and explaining export behavior. Given the annotations and complete parameter schema, an agent has enough information to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds semantic value for export_format by explaining the full VAPID endpoint/p256dh/auth migration dump, and it clarifies app_id and tag filtering, though limit is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource (retrieve active subscriber device records) and clearly covers the platform breakdown and export modes. It also distinguishes the tool from get_campaign_analytics and update_subscriber_tags, so an agent can select it without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit use cases: inspect audience size, see platform distribution, export subscriber tokens, or obtain a subscriber_id before calling update_subscriber_tags. It also states when not to use it, naming both get_campaign_analytics for campaign metrics and update_subscriber_tags for modification/import.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

login_existing_accountA
Idempotent
Inspect

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 update_app_branding instead). Requires valid email and password (no prior API key needed), costs 0 credits, and is rate-limited against brute-force attempts; read-only unless new_name or new_password is supplied. Returns JSON { ok, tenant: { id, name, email, api_key, credits }, apps: [{ id, site_name, site_url }], profile_updated }.

NameRequiredDescriptionDefault
emailYesRegistered PushNotif account email address
new_nameNoOptional new workspace display name (2 to 80 characters) to update upon login
passwordYesCurrent account login password
new_passwordNoOptional new account password (minimum 6 characters) to replace the current password

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint false, idempotent true, destructive false), it discloses cost (0 credits), a brute-force rate limit, the conditional mutation behavior ('read-only unless new_name or new_password is supplied'), and the exact response envelope. This resolves the ambiguity inherent in a tool whose readOnlyHint is false despite being primarily a login.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the primary action and scope, then alternatives, then operational facts. Dense but every clause carries information; the response-shape clause is arguably the least essential given no output schema exists, but it is still useful and compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter login-and-profile-update tool with no output schema, the description covers preconditions, cost, rate limiting, conditional mutation, alternatives, and the return JSON shape. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters. The description adds value by framing new_name and new_password as optional inline profile updates triggered on login and tying them to the 'profile_updated' return value, which the schema alone does not convey. It does not restate length constraints, which is fine since the schema covers them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (authenticate), resource (existing PushNotif account), and the concrete outcome (retrieve live API key and registered apps, with optional profile update). It also explicitly contrasts with register_new_account and update_app_branding, so an agent can route between siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use this tool (existing users connecting from chat, or updating credentials) and when not to, naming the correct alternatives for signups and app-level branding. The prerequisites ('requires valid email and password, no prior API key needed') are also spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_new_accountAInspect

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 websites to an existing account (use create_app instead). Public endpoint requiring no API key; step 1 is rate-limited to 5 OTPs per 10 minutes per IP (valid 10 minutes), while step 2 irreversibly creates a tenant and ECDSA P-256 VAPID keypair. Returns JSON { ok, step, tenant: { id, name, email, api_key, credits }, app: { id, site_name, site_url, vapid_public_key } }.

NameRequiredDescriptionDefault
nameNoWorkspace or company display name (2 to 80 characters; required when verifying otp_code)
emailYesEmail address to register (must not already belong to an existing PushNotif account)
otp_codeNoOptional 6-digit numeric OTP from email: omit on first call to send the OTP email, then provide on second call to complete registration
passwordNoAccount login password (minimum 6 characters; required when verifying otp_code)
site_urlNoOptional full HTTPS origin URL of the initial website (e.g., https://example.com)
site_nameNoOptional display name for the initial website or app (defaults to workspace name)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the rate limit (5 OTPs per 10 min per IP), OTP validity window, that step 2 irreversibly creates a tenant plus an ECDSA P-256 VAPID keypair, and that the endpoint is public with no API key. These are behavioral facts the structured fields do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The two-step mechanism and sibling exclusions are front-loaded, and every clause carries operational information. It is dense to the point of being a single long sentence, which slightly hurts scannability, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A non-idempotent, open-world mutation tool with no output schema is fully covered: the description supplies the return payload shape (ok, step, tenant, app fields including the API key and VAPID key), the rate limit, and the irreversibility warning. An agent has everything needed to call it correctly and interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the conditional coupling of otp_code with password and name and by tying each parameter set to a step. It does not add format constraints beyond what the schema already states (length minimums, HTTPS origin).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource (register a new account via OTP) and spells out the two-step protocol explicitly. It names the sibling tools it is not (login_existing_account, create_app), so an agent can distinguish it from all 15 siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('only for brand-new user signups') and when-not-to-use rules with named alternatives for each case. The two-step invocation condition (omit otp_code first, pass it on the second call) is stated as a routing rule, not left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schedule_push_notificationAInspect

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 instead). Prerequisite: call list_apps to obtain app_id, or call get_campaign_analytics to obtain an existing cmp_sch_xxxx ID for editing or cancellation. Requires PUSHNOTIF_API_KEY; scheduling, editing, or canceling costs 0 credits up front, and 1 credit per delivered device is deducted only when the schedule fires (mutually exclusive modes: pass cancel_campaign_id to delete, update_campaign_id to modify fields in-place, or neither to create a new schedule). Returns JSON { ok, action, scheduled_campaign: { id, app_id, title, body, scheduled_for, recurrence_rule, status } }.

NameRequiredDescriptionDefault
urlNoOptional HTTPS destination URL opened when the notification is tapped
bodyNoNotification body text (1 to 240 characters; required when creating, optional when editing via update_campaign_id)
titleNoNotification headline (1 to 100 characters; required when creating, optional when editing via update_campaign_id)
app_idNoTarget application ID in format app_xxxx (required when creating a new schedule)
scheduled_forNoISO-8601 execution timestamp with timezone offset (e.g., '2026-10-21T08:00:00+07:00')
recurrence_ruleNoRecurrence pattern: 'once' (default), 'daily', 'twice_daily', 'weekly', 'monthly', 'every_30m', 'every_3h', 'every_6h', or a 5-field cron expression
cancel_campaign_idNoOptional existing scheduled campaign ID (format cmp_sch_xxxx from get_campaign_analytics) to cancel and remove from the queue
update_campaign_idNoOptional 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

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses the PUSHNOTIF_API_KEY requirement, the credit model (0 up front, 1 credit per delivered device charged when the schedule fires), and the mutual exclusivity of cancel/update/create modes, plus the return shape. Minor gap: annotations declare destructiveHint=false while the description says cancel_campaign_id will 'delete' and 'remove from the queue' — the description could reconcile that asymmetry (irreversible queue removal vs. no data destruction) rather than leave it implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb+resource and every sentence carries information (alternatives, prerequisites, auth, cost, mode exclusivity, return shape). Dense single-paragraph packing of mode rules and cost rules makes it slower to scan than a short bulleted breakdown would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, zero-required mutation tool with conditional requirements and no output schema, the description supplies the mode logic, prerequisites, credential/cost behavior, and an inline return shape — everything needed to call it correctly in any of its three modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so per-parameter meaning is already documented; the description still adds value by explaining that the three mode parameters are mutually exclusive and that passing neither means create. It does not, however, explain interactions such as what happens if title/body are supplied with cancel_campaign_id, or how scheduled_for and recurrence_rule interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names specific verbs and a specific resource: creating, editing (via update_campaign_id) and cancelling (via cancel_campaign_id) scheduled/recurring push campaigns, and explicitly excludes two named siblings (send_push_notification for immediate sends, configure_rss_autopush for feed polling). An agent can distinguish this from every sibling without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('delayed, recurring, or editable future broadcasts'), when-not ('do not use it for immediate sending'), and named alternatives for the excluded cases. It also gives the prerequisite chain (call list_apps for app_id; call get_campaign_analytics for cmp_sch_xxxx), which is exactly the guidance an agent needs before invoking.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_push_notificationAInspect

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 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; when segment is set to a custom tag (from update_subscriber_tags) instead of 'all', only subscribers carrying that tag receive the broadcast, and omitting url defaults the tap action to the app's registered site_url. Returns JSON { ok, campaign_id, total_targeted, total_delivered, total_gone_pruned, credits_deducted, credits_remaining }.

NameRequiredDescriptionDefault
urlNoOptional HTTPS destination URL opened when the notification is tapped (defaults to app's site_url)
bodyYesNotification message body text (1 to 240 characters)
titleYesNotification headline shown on the lock screen (1 to 100 characters)
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
segmentNoTarget audience filter: 'all' (default) or a specific subscriber/merchant tag assigned via data-tags, PushNotif.addTag(), or update_subscriber_tags
icon_urlNoOptional HTTPS URL of a custom notification icon/logo (e.g., per-merchant logo override on a shared App ID)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate a non-read-only, non-idempotent, open-world operation, and the description adds substantial behavioral context beyond them: required PUSHNOTIF_API_KEY, credit cost per delivered device with dead-token exceptions, irreversibility after dispatch, and segment-specific delivery behavior. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and exclusions are front-loaded, and the description is dense with useful operational details. However, it is a long single paragraph that could be easier to scan if broken into shorter sentences or sections.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, irreversible mutation tool with billing and authentication implications, the description covers prerequisites, costs, side effects, segment behavior, defaults, and the return payload fields. Since no output schema exists, including the JSON return shape is especially valuable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already documented in the schema. The description reinforces a few semantic details, such as segment filtering and the url default, but mostly repeats information already present in the parameter descriptions rather than adding significant new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: broadcast an immediate push notification across Web Push, Android, and iOS to active subscribers of a specific app_id. It clearly distinguishes itself from schedule_push_notification and configure_inapp_banner, so an agent can identify its purpose without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use this tool (instant real-time delivery) and when not to use it, naming the alternatives for future/recurring broadcasts and on-site HTML popups. It also includes the prerequisite to call list_apps first to obtain app_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_transactional_emailAInspect

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 an OTP code (action=verify_otp) costs 0 credits. Returns JSON delivery receipt or OTP verification token.

NameRequiredDescriptionDefault
actionYesOperation 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)
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
otp_codeNo6-digit numeric OTP code (required when action='verify_otp')
to_emailYesSingle recipient email address (1-to-1 transactional only)
detail_textNoTransaction amount/items or shipping courier tracking info (e.g., 'Rp 85.000 — Kopi Susu' or 'DIKIRIM — Resi JNE: JP882910')
reference_idNoInvoice number or Order ID (e.g., 'INV-2026-001' or 'ORD-99281' for send_invoice / send_order_status)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses API key requirements, credit costs for sending versus verifying OTP, the prohibition on bulk use, and the return shape (JSON delivery receipt or verification token). These details materially help an agent understand side effects and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and stays dense with relevant details. It is slightly long due to parenthetical examples and cost details but every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with no output schema, the description covers purpose, action modes, cost model, API key requirement, restrictions, and return values. An agent has enough context to invoke it correctly without needing more explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantic context by linking action=verify_otp to zero credits and other actions to 25 credits, which helps an agent choose the right action mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: send transactional email or verify OTP. It explicitly distinguishes 1-to-1 transactional use from bulk marketing blasts, so an agent can identify the correct tool and avoid sibling tools like send_push_notification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: transactional 1-to-1 emails and managed OTP verification, with an explicit prohibition on bulk marketing. It does not name alternative sibling tools for related operations, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_app_brandingA
Idempotent
Inspect

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 configure app-level branding, onboarding welcome alerts, custom VAPID key migration, or native mobile credentials; do not use it to create a new app (use create_app instead) or configure on-site HTML popups (use configure_inapp_banner instead). Prerequisite: call list_apps first to obtain app_id. Requires PUSHNOTIF_API_KEY and idempotently updates only the fields provided at 0 configuration cost (when welcome_enabled=true, each new subscriber welcome push deducts 1 credit; APNs requires apns_key_id, apns_team_id, apns_bundle_id, and apns_p8_key together). Returns JSON { ok, app_id, icon_url, welcome_enabled, welcome_url, welcome_delay_sec, custom_vapid_updated, android_fcm_configured, ios_apns_configured }.

NameRequiredDescriptionDefault
app_idYesTarget application ID in format app_xxxx (obtain from list_apps)
icon_urlNoOptional direct HTTPS URL to a square PNG/JPG/WebP brand icon (recommended 192x192px)
apns_key_idNoOptional 10-character Apple Developer APNs Key ID (provide together with apns_team_id, apns_bundle_id, and apns_p8_key)
apns_p8_keyNoOptional full PEM content of Apple's AuthKey_XXXX.p8 private key file
welcome_urlNoOptional target promo/onboarding HTTPS URL opened when the subscriber clicks the welcome push notification (defaults to site_url)
apns_team_idNoOptional 10-character Apple Developer Team ID
welcome_bodyNoBody text of the automated welcome push notification (max 180 characters; used when welcome_enabled=true)
welcome_titleNoHeadline of the automated welcome push notification (max 80 characters; used when welcome_enabled=true)
apns_bundle_idNoOptional iOS application Bundle Identifier (e.g., 'id.company.app')
welcome_enabledNoSet true to automatically send a welcome push notification immediately after a visitor subscribes
vapid_public_keyNoOptional URL-safe Base64 VAPID Public Key imported from OneSignal, LaraPush, or Webpushr for zero-downtime migration
vapid_private_keyNoOptional URL-safe Base64 or PEM VAPID Private Key paired with vapid_public_key
welcome_delay_secNoOptional drip delay in seconds (0 to 300, default: 0) before firing the welcome push notification after opt-in
fcm_service_account_jsonNoOptional raw JSON string of Google Firebase Service Account key for native Android FCM HTTP v1 delivery

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, non-destructive behavior, but the description adds important operational context: PUSHNOTIF_API_KEY is required, only provided fields are updated, welcome pushes can deduct credits, and APNs fields must be supplied together. These details materially help an agent invoke the tool safely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loads the update action and then layers use cases, exclusions, prerequisites, operational notes, and return shape. It could be split for readability, but every section adds useful routing or behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no output schema, the description is unusually complete: it covers purpose, exclusions, prerequisites, authentication, cost behavior, field dependencies, and even the return JSON keys.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 14 parameters thoroughly. The description adds some grouping and reinforces the APNs field dependency, but most parameter semantics are already covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: update an existing application's notification icon, welcome push, VAPID keys, and mobile credentials. It clearly distinguishes this tool from create_app and configure_inapp_banner, so an agent can route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly lists when to use the tool: app-level branding, onboarding welcome alerts, custom VAPID migration, and native mobile credentials. It also names alternatives for excluded cases and states the prerequisite to call list_apps for app_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_subscriber_tagsA
Idempotent
Inspect

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 use it to list or export subscribers (use list_subscribers instead). Requires PUSHNOTIF_API_KEY and costs 0 credits. Returns JSON { ok, subscriber_id, action, tags, removed, imported, updated }.

NameRequiredDescriptionDefault
add_tagsNoOptional list of lowercase segment tag strings (e.g., ['vip', 'jakarta']) to attach to the subscriber for targeted broadcasts
import_csvNoOptional CSV text containing endpoint,p256dh,auth,tags rows to bulk-import into import_app_id
remove_tagsNoOptional list of segment tag strings to remove from the subscriber
unsubscribeNoSet true to permanently unsubscribe and delete this subscriber device record
import_app_idNoOptional target app_id (app_xxxx) when performing a zero-downtime bulk subscriber import via import_csv or import_subscribers
subscriber_idNoTarget subscriber device ID in format sub_xxxx (required when updating tags or unsubscribing a single device)
import_subscribersNoOptional JSON array of subscriber objects ({endpoint, p256dh, auth, tags}) to bulk-import into import_app_id

TDQS

A4.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial context beyond the annotations: required PUSHNOTIF_API_KEY, zero credit cost, the returned JSON shape, and the fact that unsubscribe is permanent and deletes the device record. However, that permanent-delete disclosure directly conflicts with the annotation destructiveHint=false — an agent trusting the hint could invoke a destructive branch without seeking confirmation. The content is otherwise rich, but the conflict makes the safety profile unreliable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The three operating modes are front-loaded in a single dense but well-ordered sentence, followed by usage routing, prerequisites, and return shape. Every clause carries information, though the density of mode/cost/auth/return details in one paragraph makes it slower to scan than a bulleted structure would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, output-schema-less tool with multiple modes, the description supplies the mode routing, the auth requirement, the cost, and the return fields ({ ok, subscriber_id, action, tags, removed, imported, updated }). Nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds orchestration semantics the schema does not: it explains that subscriber_id applies to tag/unsubscribe modes while import_app_id combines with import_csv or import_subscribers for bulk import, i.e. which parameter combinations form valid modes. That is meaningful beyond the per-field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (subscriber device, keyed by subscriber_id) and enumerates the three distinct operations it performs: tag add/remove, permanent unsubscribe, and bulk CSV/JSON import. It also explicitly distinguishes itself from list_subscribers, so an agent can route correctly without opening the sibling schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit when-to-use list ('manage subscriber segmentation, remove a device, or migrate subscribers from OneSignal/LaraPush/Webpushr') and an explicit when-not-to-use with the named alternative ('do not use it to list or export subscribers (use list_subscribers instead)'). The mode-selection conditions (unsubscribe=true, import_app_id + import_csv or import_subscribers) are stated inline.

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.

  1. 2 tool updates
    • Changedconfigure_inapp_banner6 fields changed
      • addedInput schema / properties / inapp_custom_html
        Added value: +{
        +  "description": "Optional raw HTML card markup when inapp_template_id is ai_custom (renders up to 96vw x 94vh)",
        +  "type": "string"
        +}
      • addedInput schema / properties / inapp_image_size
        Added value: +{
        +  "description": "Optional poster width preset when using image_only: 'compact', 'standard' (default), 'large', 'xl', or 'full'",
        +  "type": "string"
        +}
      • addedInput schema / properties / inapp_image_transparent
        Added value: +{
        +  "description": "Set true when using a transparent PNG/WEBP poster in image_only style so no card box is rendered",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / inapp_image_url
        Added value: +{
        +  "description": "Optional HTTPS image/poster URL (supports transparent PNG/WEBP)",
        +  "type": "string"
        +}
      • addedInput schema / properties / inapp_template_id
        Added value: +{
        +  "description": "Optional template preset: 'default', 'ai_custom' (custom HTML card), 'voucher_copy', 'flash_timer', 'feature_grid', or 'event_invite'",
        +  "type": "string"
        +}
      • addedInput schema / properties / segment_tag
        Added value: +{
        +  "description": "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)",
        +  "type": "string"
        +}
    • Changedsend_push_notification2 fields changed
      • addedInput schema / properties / icon_url
        Added value: +{
        +  "description": "Optional HTTPS URL of a custom notification icon/logo (e.g., per-merchant logo override on a shared App ID)",
        +  "type": "string"
        +}
      • changedInput schema / properties / segment / description
        Previous value: -"Target audience filter: 'all' (default) or a specific subscriber tag assigned via update_subscriber_tags"New value: +"Target audience filter: 'all' (default) or a specific subscriber/merchant tag assigned via data-tags, PushNotif.addTag(), or update_subscriber_tags"
  2. 19 tool updates
    • First observedcheck_billing_and_qris_status
    • First observedconfigure_email_automation
    • First observedconfigure_inapp_banner
    • First observedconfigure_payment_webhook
    • First observedconfigure_rss_autopush
    • First observedconfigure_social_toast
    • First observedcreate_app
    • First observedcreate_qris_invoice
    • First observeddelete_app
    • First observedget_campaign_analytics
    • First observedlist_apps
    • First observedlist_subscribers
    • First observedlogin_existing_account
    • First observedregister_new_account
    • First observedschedule_push_notification
    • First observedsend_push_notification
    • First observedsend_transactional_email
    • First observedupdate_app_branding
    • First observedupdate_subscriber_tags

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Unified notification MCP server with 36 tools to send messages across 23 channels — Email, SMS, Slack, Telegram, Discord, Teams, WhatsApp, Firebase Push, and more.
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents and applications to send audio notifications with text-to-speech, message streaming, agent-to-agent conversations, and web push notifications through a persistent message store and MCP integration.
    43 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables any MCP-compatible AI agent to send WhatsApp messages, SMS, OTP codes, and email through a single REST API.
    18
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage OneSignal push notifications, email, SMS, and user management through natural language. Supports multi-channel messaging, segmentation, templates, analytics, and iOS Live Activities with 50+ tools for complete OneSignal API coverage.
    1
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.