pushengage-mcp
This MCP server connects AI assistants to your PushEngage account, letting you manage push notifications, audiences, campaigns, and site settings using plain language.
Key capabilities:
Authentication & Site Management: Log in/out via browser OAuth, check auth status, list and switch between multiple PushEngage sites.
Site Settings: View and update site details (name, URL, timezone, geolocation, branding), campaign defaults (UTM parameters, fallback notifications, expiry), and service worker configuration.
Audience Management: Create and manage URL-based subscriber segments, custom attributes, and audience groups for targeted campaigns (filters by device, country, engagement, subscription date, etc.).
Campaign & Automation Overview: List drip, triggered, RSS auto-push, and workflow automations, with optional per-campaign analytics (sent, views, clicks, CTR, goals).
Chat Widgets: View configured on-site chat widgets (e.g., WhatsApp, Messenger).
Analytics: Get all-time totals (subscribers, sends, views, clicks, goals) and time-series trends over custom date ranges, grouped by day, week, or month.
Send Notifications:
Send immediate or scheduled one-shot notifications, optionally targeted to audience groups.
Schedule per-subscriber timezone delivery.
Create recurring notifications.
Save drafts.
Run A/B tests with two variants (title, message, URL, images, buttons) and optional intelligent auto-winner based on CTR.
Include rich media and actions.
List existing notifications with per-notification analytics (A/B stats, timezone stats, goals).
Configuration: Optional environment variables for token storage and client label; works out-of-the-box.
@pushengage/mcp
Manage your PushEngage account from any AI assistant, in plain language.
PushEngage is a push notification platform for web push, mobile app push, WhatsApp, and on-site chat widgets, used to grow subscribers and recover revenue (cart abandonment, price drops, back-in-stock, and more).
This package is a Model Context Protocol (MCP) server. It connects MCP-capable assistants such as Claude Desktop, Claude Code, and Cursor to your PushEngage account so you can send and schedule notifications, run A/B tests, build audiences, inspect analytics, and manage site settings just by asking, without leaving your chat.
You log in once through your browser; the assistant then acts on your behalf against whichever PushEngage site you select.
Contents
Related MCP server: Campaign Monitor MCP
What you can do
Once connected, just describe what you want. A few examples:
Send and schedule
"Send a notification titled 'Sale ends tonight', message 'Last call, 50% off', linking to https://example.com/sale."
"Schedule that for 9 AM in each subscriber's local timezone."
"Set up a recurring digest every Monday and Thursday at 8 AM through the end of the month."
"Run an A/B test of two headlines and auto-roll-out the winner by click rate."
Target the right people
"Create a segment for visitors of /pricing."
"Build an audience of gold-plan customers in the US and send only to them."
Understand performance
"How many subscribers do I have, and what was my click rate over the last 30 days?"
"List my active drip campaigns with their sent, seen, and clicked stats."
Configure a site
"Set my default notification expiry to 7 days."
"Change my site timezone to Asia/Kolkata and turn on geolocation."
Requirements
A PushEngage account (free or paid) with at least one site.
Node.js 18 or newer (the assistant runs the server via
npx).An MCP-capable client (Claude Desktop, Claude Code, Cursor, or any other).
Install
Add the server to your client's MCP config. No global install is needed; npx fetches it on demand.
Claude Desktop (one-click bundle)
The easiest path on Claude Desktop is the MCP Bundle:
Download the latest
pushengage-mcp-<version>.mcpbfile from the GitHub releases page.Open it with Claude Desktop (double-click it, or drag it onto the window) and click Install.
Everything is bundled — no JSON editing needed. The install dialog optionally lets you set the label shown on the PushEngage authorize screen and a custom token file path (for running multiple accounts).
Claude Desktop (manual config)
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on your platform:
{
"mcpServers": {
"pushengage": {
"command": "npx",
"args": ["-y", "@pushengage/mcp"]
}
}
}Restart Claude Desktop. The "pushengage" server should appear in your tool list.
Cursor
Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"pushengage": {
"command": "npx",
"args": ["-y", "@pushengage/mcp"]
}
}
}Other MCP clients
Any client that speaks MCP over stdio works. Configure it to run the command npx -y @pushengage/mcp.
First run: logging in
Authentication is browser-based, so your credentials never touch the assistant.
Ask: "Log me into PushEngage." The server opens a browser tab to the PushEngage authorize page.
Click Authorize. The tab confirms success and an access token is saved locally.
Ask: "Show my PushEngage sites," then "Use site 12345" to pick the site to work with. The selection is remembered across restarts.
Every site-scoped tool acts on this current site unless you pass an explicit site_id. When the token expires you will see an AUTH_EXPIRED message; just ask to log in again.
Tools
All site-scoped tools default to the current site.
Authentication and sites
Tool | Purpose |
| Opens the browser to PushEngage and stores the token on success. |
| Shows whether you are authenticated and which site is selected. |
| Deletes the locally stored token. |
| Lists the PushEngage sites you can access. |
| Sets the current site used by the other tools. |
Site settings
Tool | Purpose |
| Site name, URL, timezone, geolocation, and the "Powered By PushEngage" branding toggle. |
| UTM parameters, fallback notification, fallback attributes, and default notification expiry. Updates merge over current values, so partial edits work. |
| Service worker registration, sub-folder support, and the worker file path. |
Audiences
Tool | Purpose |
| URL-rule based subscriber segments. |
| Saved targeting groups (device, country, segment, engagement, dates, attributes). Referenced by the send tools' |
| Custom subscriber attribute keys used in audience-group rules (max 50 per site). |
Campaigns and automations
Tool | Purpose |
| Drip autoresponders. Filter by status; set |
| Triggered campaigns (cart/browse abandonment, price drop, etc.). Filter by status; optional analytics. |
| RSS auto push campaigns. Filter by status. |
| Workflow automations. Filter by status; set |
Chat widgets
Tool | Purpose |
| The on-site widget that surfaces WhatsApp, Messenger, and other channels. Shows status, channels, devices, business-hours restriction, and targeting. |
Analytics
Tool | Purpose |
| Lifetime totals: subscribers, notifications sent, views, clicks, and goal count/value. |
| Per-bucket (day/week/month) subscribers, sends, views, clicks, CTR, and unsubscribes over a date range. |
Sending notifications
Tool | Purpose |
| Lists sent, scheduled, and draft notifications, newest first. Filter by status (dashboard-tab semantics), sent-date range, or tags; set |
| Sends or schedules a notification. One tool, three delivery modes: send now, one-shot schedule (optionally per-subscriber timezone), and recurring. Optional |
| An A/B notification with two variants. Pass |
Configuration
No configuration is required — the server talks to PushEngage's production API out of the box. These environment variables are available for less common setups:
Env var | Default | Purpose |
|
| Label shown on the authorize screen as the requesting app. Set it if you want a specific label, e.g. |
|
| Where the token is stored. Set this to run more than one PushEngage account side by side (see below). Must be an absolute path — it's used exactly as given, with no |
Running multiple PushEngage accounts side by side
Register the server under two different names, each with its own PE_MCP_CONFIG_PATH so the tokens don't collide:
{
"mcpServers": {
"pushengage-client-a": {
"command": "npx",
"args": ["-y", "@pushengage/mcp"],
"env": {
"PE_MCP_CONFIG_PATH": "/Users/you/.pushengage/mcp-client-a.json",
"PE_MCP_CLIENT_NAME": "Claude Desktop (Client A)"
}
},
"pushengage-client-b": {
"command": "npx",
"args": ["-y", "@pushengage/mcp"],
"env": {
"PE_MCP_CONFIG_PATH": "/Users/you/.pushengage/mcp-client-b.json",
"PE_MCP_CLIENT_NAME": "Claude Desktop (Client B)"
}
}
}
}Ask the assistant to log in under each server name separately; each authorizes against whichever PushEngage account you choose in the browser.
Security and token storage
Login is browser-based. The assistant never sees your PushEngage password.
The dashboard sends the token to the server as a POST request, so it never appears in a URL, browser history, or access log.
The token is stored at
~/.pushengage/mcp.jsonwith0600permissions (readable only by you). Its expiry is set by PushEngage and is shown bypushengage_auth_status.To revoke it, run
pushengage_auth_logoutor log out of all sessions in PushEngage under Settings → Security.
Troubleshooting
The server won't connect at all ("Connection closed")
If npx -y @pushengage/mcp runs fine when you type it directly in a terminal, but your client (Claude Desktop, Cursor, etc.) shows the server as disconnected or logs something like MCP error -32000: Connection closed, this is almost always a PATH problem, not a bug in the server.
These clients are launched from your Dock/Finder, not from a terminal, so they never load your shell's startup files (.zshrc, .zprofile, etc). If Node was installed via a version manager (nvm, fnm, volta, ...), those tools only add node/npx to PATH from inside those startup files — so the client can't find npx at all, the server process never starts, and you get a generic connection error instead of a clear "command not found."
Fix: point the client at the absolute path to npx (this skips the PATH lookup for finding it) and also pass that same folder as PATH in env (so npx's own #!/usr/bin/env node shebang can find node when it re-execs). Run which npx in your terminal to get the path, then use it in your client's config:
{
"mcpServers": {
"pushengage": {
"command": "/absolute/path/from/which-npx",
"args": ["-y", "@pushengage/mcp"],
"env": {
"PATH": "/absolute/folder/containing/that/npx:/usr/bin:/bin:/usr/sbin:/sbin"
}
}
}
}Restart the client after editing. If which npx instead prints something under /usr/local/bin or /opt/homebrew/bin, your Node install isn't version-manager-based and this likely isn't your issue — check the client's own MCP logs for the actual error instead.
Other errors
AUTH_EXPIRED— your token expired. Ask the assistant to log you in again.NO_SITE_SELECTED— callpushengage_list_sitesand then ask to use one of the returned sites before using a site-scoped tool.Browser doesn't open — this happens in headless or remote (e.g. SSH) sessions. The authorize URL is printed to the terminal running the server; open it manually.
Something else — every error the server returns starts with a
[CODE]tag and a plain-language explanation; share that with support if you need help.
License
Available Tools
27 toolspushengage_auth_loginLog in to PushEngageA
Opens a browser window to the PushEngage dashboard. After you click Authorize, an access token is stored locally and used for subsequent calls; the expiry is shown in the result. Requires a browser on the local machine. In headless or SSH environments the authorization URL is printed to the terminal so it can be opened manually.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| authorized | No | |
| expires_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral traits: interactive browser opening, storing the token locally, showing expiry, and printing a manual URL in headless environments. This goes well beyond the sparse annotations (readOnlyHint=false, openWorldHint=true, etc.) to give the agent a complete picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the primary action ('Opens a browser window...'). Every sentence adds valuable context without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's operational context: environment requirements, interactive flow, token storage, result contents (expiry), and manual fallback. It is sufficient for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema is fully covered and there is nothing for the description to explain. The baseline score of 4 applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it opens a browser window to the PushEngage dashboard for authorization. This distinguishes it from the sibling auth tools (status, logout) by describing the unique OAuth login flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the browser requirement and the fallback for headless/SSH environments, giving clear context for when manual intervention is needed. It doesn't explicitly contrast with auth_status or auth_logout, but the usage context is implied sufficiently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_auth_logoutLog outADestructiveIdempotent
Revokes the current PushEngage session on the server and deletes the locally stored token. After this call, all site-scoped tools require pushengage_auth_login before they can be used again.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| server_session_revoked | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing both server-side revocation and local token deletion, and it explains the post-condition that re-authentication is needed. This provides rich behavioral context beyond the destructiveHint and idempotentHint annotations, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences that pack essential information: the core action and the crucial consequence. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters) and the presence of an output schema, the description fully covers the tool's impact and side effects. It tells the agent exactly what to expect, including the need to re-login, making it complete in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema imposes no semantic burden. The description does not need to explain parameters; the baseline of 4 applies as the description fully clarifies the tool's behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs 'Revokes' and 'deletes' to identify the action, and clearly specifies the resources affected: the server session and locally stored token. This unambiguously distinguishes it from sibling tools like pushengage_auth_login and pushengage_auth_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the consequence for subsequent tool usage: all site-scoped tools require a fresh login. This gives clear guidance on when the tool is appropriate and what will follow, though it does not explicitly reference alternative tools like auth_status. This is strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_auth_statusCheck authentication and site statusARead-only
Returns the current login state: authenticated (bool), expires_at (token expiry ISO string), current_site_id, api_url, dashboard_url, and client_name. Use this to check whether pushengage_auth_login is needed before making other calls.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| api_url | No | |
| expires_at | No | |
| client_name | No | |
| authenticated | No | |
| dashboard_url | No | |
| current_site_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by listing the exact response fields (authenticated, expires_at, current_site_id, etc.) and clarifying its role in the authentication flow. It doesn't describe error behavior, but for a read-only status endpoint this is adequate given the annotations already signal no destructive side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: one listing the returned fields and one providing usage guidance. It is front-loaded with the core purpose, contains no redundant phrasing, and every sentence adds essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool, the description is complete. It names all return fields, states the purpose (checking authentication before other calls), and the output schema is available to detail types. There is no missing critical information for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter information. The description doesn't need to explain parameters, and the description clarifies the meaning of the tool's output fields, which serves as semantic context. The baseline for zero-parameter tools is 4, and that fits here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Returns the current login state' and enumerates the exact fields returned, such as authenticated, expires_at, current_site_id, and api_url. The verb 'Returns' combined with the resource (login/site status) is specific and distinguishes it from siblings like pushengage_auth_login and pushengage_auth_logout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this to check whether pushengage_auth_login is needed before making other calls.' This provides clear usage context and directly ties to an alternative tool (login), making it easy for the agent to choose between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_create_attributeCreate a subscriber attributeA
Creates a new subscriber attribute on the current site. Required: name (human-readable label, e.g. "Customer Plan") and key (machine identifier, e.g. "plan"). The key must start with a letter and contain only letters, numbers, hyphens, and underscores. The created key becomes a usable value for audience-group rules with field="attributes" (the rule's key property). PushEngage caps each site at 50 attributes; the API returns 422 if the limit is exceeded.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The machine identifier used in the JavaScript SDK and in audience-group rules. Must start with a letter and only contain letters, numbers, hyphens, and underscores. Max 64 chars. e.g. "plan", "signup_source", "lifetime-value". This is the same key you pass as `key` on an audience-group rule with field="attributes". | |
| name | Yes | Human-readable attribute name shown in the dashboard. 1–128 chars. e.g. "Customer Plan", "Sign-up Source". | |
| site_id | No | Override the currently selected site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| key | No | |
| name | No | |
| status | No | |
| view_url | No | |
| use_with_audience_group_rule | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses a critical behavioral trait: PushEngage caps each site at 50 attributes and the API returns 422 when exceeded. It also explains the relationship between the created key and audience-group rules, adding context that annotations do not provide. It doesn't mention auth requirements or response shape, but the output schema covers the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, front-loaded with the main purpose, and every sentence adds value: required fields, key format, audience-rule integration, and limit behavior. No unnecessary words or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a fully documented schema, annotations, and an output schema, the description covers the essential behavioral constraints (key format, limit, audience-rule usage). It doesn't describe the success response, but that is already provided by the output schema. The only minor gap is lack of explicit guidance on when not to use this tool, but overall it is contextually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions and examples for all three parameters. The description adds some contextual meaning (e.g., the audience-rule usage) but largely restates what the schema already provides. The 50-attribute limit is not a parameter-specific detail, so the added value on parameter semantics is marginal; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Creates a new subscriber attribute on the current site.' It distinguishes itself from siblings like create_segment and create_audience_group by explicitly naming the resource (attribute) and providing meaningful details (required name/key, examples).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is provided: it explains that the created key becomes usable in audience-group rules, and notes the 50-attribute cap. However, it does not explicitly state when to use this tool over alternatives or when not to use it, so it falls short of the 'explicit exclusions/alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_create_audience_groupCreate an audience groupA
Creates a new audience group on the current site. Required: name and filter. The filter is a subscriber-filter expression — { op: "or" | "and" (default "or"), value: 2-D array of rule groups }. Each rule is { field, op, value?, key? }. Rules WITHIN a group are AND-ed; groups in value are combined with the top-level op. See the inputSchema field descriptions for the supported field and op enums. Common patterns: "Mobile subscribers" → filter={ op: "or", value: [[{ field: "device", op: "in", value: ["mobile"] }]] }. "Subscribed in the last 7 days" → filter={ op: "or", value: [[{ field: "ts_created", op: "ts_elapsed_lt", value: 604800 }]] }. "Highly engaged" (≥20 sent AND ≥2 clicks) → filter={ op: "or", value: [[{ field: "sent_count", op: "gt", value: 20 }, { field: "click_count", op: "gt", value: 2 }]] }. Only set description and complex filters when the user explicitly describes them.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Audience-group display name. 1–150 chars. | |
| filter | Yes | Required. The subscriber-filter expression that decides which subscribers belong to this group. Use SubscriberFilterSchema: an outer op ("or"/"and") + a 2-D `value` array (groups of AND-ed rules). Each rule is { field, op, value?, key? }. Example — "all mobile subscribers": { op: "or", value: [[{ field: "device", op: "in", value: ["mobile"] }]] }. Example — "subscribed in the last 7 days": { op: "or", value: [[{ field: "ts_created", op: "ts_elapsed_lt", value: 604800 }]] }. (604800 = 7 × 24 × 3600 seconds.) | |
| site_id | No | Override the currently selected site. | |
| description | No | Optional human-readable description, up to 256 chars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| filter | No | |
| view_url | No | |
| description | No | |
| use_with_send_notification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false) and non-destructive behavior. The description adds valuable context on the filter expression semantics, such as how rules within and across groups combine, and includes examples. It does not reveal side effects like duplicate handling, but annotations cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose. It uses compact notation for the filter schema, provides efficient examples, and every sentence adds value. The usage caution at the end is a worthwhile addition without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex nested filter parameter, the description is highly complete: it explains the creation context, required parameters, filter semantics, and common patterns. An output schema exists, so return values are covered elsewhere. It does not discuss alternatives, but that gap is minor given the overall guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description goes far beyond by explaining the nested filter structure in plain language, providing three complete examples, and advising when to set description and complex filters. This makes the parameters much easier to use correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Creates a new audience group on the current site' with a specific verb and resource, and distinguishes from sibling tools like list_audience_groups. It also names the required parameters, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use (creating an audience group) and offers concrete filter patterns for common use cases. It does not explicitly mention alternatives or when-not-to-use, but the purpose is distinct among siblings and the guidance is sufficient for most scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_create_segmentCreate a segmentA
Creates a new segment on the current site. Required: segment_name. Optionally pass segment_criteria with URL include and/or exclude rules to define what subscribers belong to the segment — each rule is { rule: "start" | "exact" | "contains", value: "<url>" }. By default, segment criteria are evaluated only when a visitor subscribes to push notifications. Set add_segment_on_page_load=true (Segment on Page Visit) to evaluate those criteria on every page visit instead, so segment membership can change as subscribers browse the site. Only include segment_criteria and add_segment_on_page_load when the user explicitly describes the matching rules.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. | |
| segment_name | Yes | Segment display name. 1–150 characters. | |
| segment_criteria | No | URL-based include/exclude rules that decide which subscribers belong to this segment. Omit to create a name-only segment that the user populates later via the dashboard or workflows. When provided, at least one of `include` or `exclude` must have rules. | |
| add_segment_on_page_load | No | Segment on Page Visit. By default (false), segment criteria (such as URL rules) are evaluated only when a visitor subscribes to push notifications. Set to true to evaluate those criteria on every page visit instead, so segment membership can change as subscribers browse your site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| view_url | No | |
| segment_id | No | |
| segment_name | No | |
| segment_criteria | No | |
| add_segment_on_page_load | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's 'Creates' is consistent. It adds meaningful behavioral context by explaining the default evaluation timing (only on subscribe) and how add_segment_on_page_load changes it, plus the rule syntax. It does not cover edge cases like duplicate names, but the annotations cover the safety profile and the output schema covers response expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: three sentences front-loaded with the core purpose, followed by criteria syntax, then the page-load behavior nuance, and a closing guardrail. Every sentence serves a distinct informational purpose with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, 4 params, output schema present), the description covers the essential behavioral aspects: what the tool does, the criteria rule format, the default and alternative evaluation behavior, and when to include optional fields. The output schema handles return-value descriptions, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already well-documented. The description adds usage-level guidance (when to include optional parameters) but does not enrich semantic meaning beyond what the schema provides. The rule syntax and defaults are reiterated, which is helpful but not additive to schema knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Creates a new segment on the current site'), immediately distinguishing it from listing or updating tools. It clearly identifies the creation action and the resource type (segment), and the sibling context (e.g., list_segments) reinforces this distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use this tool: when creating a segment, with optional criteria. It explicitly instructs 'Only include segment_criteria and add_segment_on_page_load when the user explicitly describes the matching rules,' which is a valuable guardrail. However, it does not explicitly name alternatives or conditions where another tool (e.g., create_audience_group) might be preferred, though the segment-specific scope is implicitly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_get_analytics_summaryGet all-time analytics totalsARead-only
Returns the current site's all-time, site-wide totals: subscribers (current active count), notifications sent, views, clicks, and goal conversions/value. Not bounded by any date range — for trends over a period use pushengage_get_analytics_timeseries instead.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total_views | No | |
| total_clicks | No | |
| total_goal_count | No | |
| total_goal_value | No | |
| total_subscribers | No | |
| total_notifications_sent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds valuable context about the scope: 'all-time, site-wide totals' and the exact metrics returned, including the nuance that subscribers is a 'current active count'. It does not contradict annotations and provides useful behavioral detail beyond what the annotation alone offers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose and result, followed by a useful clarification and alternative. Every sentence earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, read-only, with an output schema), the description covers all essential context: what is returned, the site-wide scope, the all-time nature, and a pointer to the time-series tool for different needs. The output schema handles return value details, so nothing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the one parameter (site_id) with a clear description ('Override the currently selected site.'). The tool description itself adds no extra parameter semantics beyond the existing schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Returns' and names the exact resource: 'current site's all-time, site-wide totals' with a list of included metrics (subscribers, notifications sent, views, clicks, goal conversions/value). It clearly distinguishes itself from the sibling pushengage_get_analytics_timeseries by explicitly stating it is not bounded by date range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: for all-time site-wide totals, and explicitly points to an alternative ('for trends over a period use pushengage_get_analytics_timeseries instead'). This gives the agent clear decision criteria between the two analytics tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_get_analytics_timeseriesGet analytics over a date rangeARead-only
Returns a time series of the current site's analytics between start_date and end_date, bucketed by group_by. Each point has subscribers gained, notifications sent, views, clicks, ctr, and unsubscribes for that bucket. Use this for trends or metrics over a period; for all-time totals use pushengage_get_analytics_summary instead.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. | |
| end_date | Yes | End of the range (inclusive). Format: YYYY-MM-DD. Must be on or after start_date. | |
| group_by | No | How to bucket the series: one point per day, week, or month. | day |
| start_date | Yes | Start of the range (inclusive). Format: YYYY-MM-DD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| points | No | |
| end_date | No | |
| group_by | No | |
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds meaningful behavioral context: returns time-series data with specific metrics (subscribers gained, notifications sent, etc.) and bucketing behavior. No contradictions. Slightly less than 5 because it doesn't mention edge cases like empty ranges or timezone handling, but these are covered by output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no fluff. Each sentence adds value: first describes output, second gives usage guidance and alternative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description covers purpose, usage, key metrics, and alternative. The tool is moderate complexity, and the description fills all contextual gaps beyond the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter (start_date, end_date, group_by, site_id) already described. The description adds minimal extra meaning beyond mentioning 'bucketed by group_by', which the schema already states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns a time series') and clearly identifies the resource (current site's analytics) with date range and grouping. It distinguishes from the sibling summary tool by explicitly noting it's for trends/metrics over a period.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('for trends or metrics over a period') and names the alternative ('for all-time totals use pushengage_get_analytics_summary instead'), providing clear guidance and exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_get_campaign_defaultsGet campaign defaultsARead-only
Returns the current site's campaign default settings: utm_parameters (enabled + source/medium/campaign/term/content), fallback_notification (title/message/url), fallback_attributes (city/country), and default_expiry (broken into total_seconds + days/hours/minutes). These are the defaults applied to push campaigns, matching the dashboard's Campaign Defaults page.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| default_expiry | No | |
| utm_parameters | No | |
| fallback_attributes | No | |
| fallback_notification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, lowering the bar. The description adds context beyond annotations by detailing the exact structure of the returned data (utm_parameters, fallback_notification, fallback_attributes, default_expiry) and noting that these are the defaults applied to push campaigns. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a first sentence states the primary function, followed by a parenthetical list of fields and a closing clause that grounds the tool's purpose. Every sentence adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations indicating read-only behavior, the description is largely complete. It explains the return structure and the tool's relationship to the dashboard, but could be slightly enhanced by explicitly noting the optional site_id override behavior, though that is covered in the input schema. Overall, it is thorough for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the sole parameter site_id, which is described as 'Override the currently selected site.' The description does not mention this parameter, but the schema already provides sufficient semantics, so the baseline of 3 applies. The description adds no extra parameter context beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Returns the current site's campaign default settings' and enumerates the exact fields returned. This distinguishes it from the sibling 'update_campaign_defaults' tool, as the verb 'Returns' and the focus on reading defaults makes the read-only purpose explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use this tool—when you need the current campaign defaults—and notes that these match the dashboard's Campaign Defaults page. It does not explicitly name the update counterpart or provide exclusions, but the context is clear enough for an agent to select this over the write sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_get_service_worker_settingsGet service worker settingsARead-only
Returns the current site's Service Worker Settings (from the Advanced Settings page), using the dashboard labels: enable_service_worker_registration ("Enable the service worker registration from PushEngage"), enable_service_worker_in_subfolder ("Enable addition of service worker in another sub-folder"), and service_worker_file_path ("Path for service worker file").
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| service_worker_file_path | No | |
| enable_service_worker_in_subfolder | No | |
| enable_service_worker_registration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds context about the source page (Advanced Settings) and provides human-readable labels for the returned fields, which clarifies the data semantics beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the main action and uses a parenthetical list to explain field name mappings. No words are wasted; every element adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, read-only annotations, and presence of an output schema), the description fully covers what the tool does and what it returns. It doesn't need to explain return structure since the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter site_id is fully described in the schema ("Override the currently selected site."), and the description doesn't add further parameter-level detail. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current site's Service Worker Settings from the Advanced Settings page, with a specific verb "Returns" and precise resource. It also lists the exact fields returned, distinguishing it from the sibling update_service_worker_settings tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's read-only purpose clear ("Returns the current site's...") and implies it should be used to fetch settings, while the update sibling is for modifications. However, it doesn't explicitly name alternatives or state when not to use it, 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.
pushengage_get_site_detailsGet site detailsARead-only
Returns the current site's details, matching the dashboard's Site Details page: name, URL, image, timezone, geolocation toggle, and the "Powered By PushEngage" branding toggle.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| site_id | No | |
| site_url | No | |
| timezone | No | |
| site_name | No | |
| site_image | No | |
| enable_geolocation | No | |
| remove_powered_by_pushengage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds the specific fields returned and the 'current site' concept, but doesn't disclose behavioral traits like permission requirements or error handling. Moderate context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence. It front-loads the action and then lists the returned fields, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter tool with an output schema and read-only annotations, the description provides sufficient information: it identifies the resource and the fields returned. It doesn't elaborate on behavior when no site is selected, but this is a minor gap given the schema's site_id hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the single optional site_id parameter with a clear description ('Override the currently selected site') at 100% coverage. The tool description adds no extra parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Returns the current site's details' with a specific resource (site details) and lists the exact fields returned. It distinguishes from sibling 'pushengage_update_site_details' by using 'get' vs 'update'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching the current site's details, matching the dashboard page. It doesn't explicitly mention alternatives or when not to use it, but the verb 'return' and the optional site_id override make the usage context clear. The sibling tool list provides implicit distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_attributesList subscriber attributesARead-only
Lists subscriber attributes (custom keys set on subscribers via the JS SDK) on the current site, paginated (response includes has_more). Use this to discover attribute key values before constructing an audience-group filter rule with field="attributes".
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed) for paginating beyond the first batch. | |
| limit | No | How many attributes to return in this page. Min 1, max 100, default 10. To browse past the first 100, increase `page` instead of asking for a larger limit. | |
| site_id | No | Override the currently selected site. | |
| key_contains | No | Optional substring filter on the attribute `key`. Maps to API `key_like`. Use this when looking up an attribute by name (e.g. searching for "plan" to find the "plan" attribute key). |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| last_page | No | |
| attributes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds useful behavioral context: it clarifies that attributes are custom keys set via the JS SDK, notes that results are paginated with `has_more`, and mentions that it operates on the current site. This adds value beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and every clause adds value: the resource, the data source, pagination behavior, and the concrete use case. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with good annotations, a full output schema, and detailed parameter descriptions, the description covers the essential aspects: what it lists, the pagination flag, and why you'd use it. Nothing critical is missing for the agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all four parameters with detailed descriptions (100% coverage), so the description carries no burden to explain parameters. The baseline of 3 applies because the description does not add any additional parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') and a specific resource ('subscriber attributes'), with scope ('on the current site') and a distinguishing feature (paginated with `has_more`). It clearly differentiates from sibling tools like list_segments or list_audience_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Use this to discover attribute `key` values before constructing an audience-group filter rule with field="attributes".' This clearly states a key use case, but does not mention alternatives or when not to use the tool. It falls just short of the 'explicit when/when-not/alternatives' standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_audience_groupsList audience groupsARead-only
Lists audience groups on the current site, paginated (response includes has_more). Use this to look up audience-group IDs when the user references a group by name; those IDs are what pushengage_send_notification / pushengage_send_ab_notification accept in their audience_groups field.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed) for paginating beyond the first batch. e.g. with limit=100 the second page (101–200) is page=2. | |
| limit | No | How many audience groups to return in this page. Min 1, max 100, default 10. To browse past the first 100, increase `page` instead of asking for a larger limit. | |
| site_id | No | Override the currently selected site. | |
| name_contains | No | Optional substring filter on the audience-group name. Maps to API `name_like`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| last_page | No | |
| audience_groups | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and openWorldHint: true. The description adds valuable behavioral context beyond that: it notes pagination via `has_more` and explains the relationship of returned IDs to other tools (send_notification/send_ab_notification). This is useful supplementary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences deliver the core purpose, pagination detail, and a practical usage hint. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only list tool: it covers purpose, pagination, and the practical downstream use case of retrieving IDs. With a full input schema, output schema, and strong annotations, there are no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters already have detailed descriptions. The tool description does not add parameter-specific semantics beyond what the schema provides, so it earns the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Lists audience groups on the current site') and clearly distinguishes from siblings like pushengage_create_audience_group and pushengage_list_segments. Mentioning pagination adds scope clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool: 'Use this to look up audience-group IDs when the user references a group by name'. However, it does not mention alternatives or when not to use, so it falls short of a full exclusionary guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_chat_widgetsList chat widgetsARead-only
Lists the chat widgets on the current site, paginated (response includes has_more). A chat widget is the floating button that surfaces support channels (WhatsApp, Messenger, Email, etc.) on the site. Each item carries the configured channels, target devices, business-hours restriction, and a country/page targeting summary.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed) for paginating beyond the first batch. | |
| limit | No | How many chat widgets to return in this page. Min 1, max 100, default 10. To browse past the first 100, increase `page` instead of asking for a larger limit. | |
| status | No | Filter by status. "all" (default) returns every status. | all |
| site_id | No | Override the currently selected site. | |
| name_contains | No | Optional case-insensitive substring filter on the widget name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| last_page | No | |
| chat_widgets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds useful behavioral context: pagination with a `has_more` flag, and a summary of the fields each item includes. This goes beyond the annotations by explaining the return payload structure, without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a distinct purpose: action + pagination, definition of the resource, and what each item contains. No filler or repetition. The information is front-loaded with the core purpose first, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a rich output schema, the description is complete enough. It covers the resource, pagination behavior, and the kind of data returned. The existing output schema handles return-value details, and the annotations cover safety, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all 5 parameters with 100% coverage, including defaults and constraints. The tool description itself does not add parameter-level details, but the schema already does the heavy lifting. The description's mention of pagination and item fields is peripheral to the parameters, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource combination: "Lists the chat widgets on the current site." It also clarifies what a chat widget is, distinguishing this tool from other list tools in the sibling set. The scope is explicit (current site, paginated), leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context for when to use this tool: whenever you need to see the chat widgets configured on the site. It does not explicitly mention alternatives or exclusions, but the purpose is so specific that it implicitly separates itself from other list tools. A brief note about when not to use it or an alternative would push this to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_drip_campaignsList drip campaignsARead-only
Lists the drip autoresponder campaigns on the current site, paginated (response includes has_more). Optionally filter by status (default "all" = every status), mirroring the dashboard filter tabs. Set include_analytics=true only when the user asks for stats/performance (it costs an extra analytics lookup per page). Each item then also carries an analytics object: sent, seen, clicked, ctr, goal_count, goal_value.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| limit | No | How many to return per page. Min 1, max 100, default 10. | |
| status | No | Filter by status. "all" (default) returns every status. | all |
| site_id | No | Override the currently selected site. | |
| include_analytics | No | When true, include per-campaign analytics (sent/seen/clicked/CTR and goal count/value). Costs an extra analytics lookup, so only set it when the user asks for stats/performance. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| campaigns | No | |
| last_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint and openWorldHint annotations, the description discloses meaningful behavioral details: response includes has_more, include_analytics triggers an extra lookup per page, and the analytics object fields are listed. This gives the agent a clear picture of side effects and cost implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences front-load the main action and then efficiently cover filtering, analytics cost, and returned fields. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations provide safety context, the description covers all key aspects needed to invoke correctly: resource type, pagination, optional filters, analytics behavior, and result shape. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions, so baseline is 3. The description adds contextual semantics by noting status 'all' mirrors dashboard filter tabs and by emphasizing the trade-off of include_analytics, which slightly boosts understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Lists' identifies exact resource: drip autoresponder campaigns on the current site, with pagination and status filtering. This clearly distinguishes it from sibling list tools like list_triggered_campaigns and list_rss_campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: when to use on current site, pagination, filter by status, and when to set include_analytics (only for stats/performance). However, it does not explicitly compare to alternative list-campaign tools or mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_notificationsList notificationsARead-only
Lists push notifications on the current site, newest first, paginated (response includes has_more). Use this to discover notification IDs and review past or upcoming sends. Set include_analytics=true only when the user asks for stats — it costs an extra lookup and adds rolled-up counts and goal conversions to each row. Each item carries content, status, targeting criteria, and delivery stats; the criteria.audience_groups ids are reusable as the send tools' audience_groups input, and absent criteria means the notification went to all subscribers.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed) for paginating beyond the first batch. | |
| tags | No | Only notifications carrying at least one of these tags (up to 5). | |
| limit | No | How many notifications to return in this page. Min 1, max 100, default 10. To browse past the first 100, increase `page` instead of asking for a larger limit. | |
| status | No | Filter by status, matching the dashboard tabs: "sent" (includes currently sending), "scheduled" (includes active and paused recurring notifications), "draft" (includes archived). "all" (default) returns every status. | all |
| site_id | No | Override the currently selected site | |
| sent_after | No | Only notifications sent on or after this date (YYYY-MM-DD, site timezone). Must be 2017-07-01 or later, and must be paired with sent_before. | |
| sent_before | No | Only notifications sent on or before this date (YYYY-MM-DD, site timezone). Must be paired with sent_after and be on or after it. | |
| exclude_tags | No | Exclude notifications carrying any of these tags (up to 5). | |
| include_analytics | No | When true, merge in full delivery analytics (A/B variant totals and subscriber-timezone child sends roll up into the parent row) and goal conversions (goal_count/goal_value per row). Costs extra lookups; only set it when the user asks for stats/performance. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| last_page | No | |
| notifications | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavior: newest-first ordering, pagination with has_more, the extra lookup cost of include_analytics, the contents of each item (content, status, targeting, delivery stats), and the meaning of absent criteria. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three well-structured sentences, front-loaded with the action and result. It covers purpose, usage, key behaviors, and parameter trade-offs without redundancy. Every sentence contributes information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 optional parameters, output schema present), the description is comprehensive. It explains return item contents, pagination mechanics, analytics cost, and cross-tool integration with send tools. The output schema covers return structure, so the description needn't repeat it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema by explaining that include_analytics 'costs an extra lookup' and merges rolled-up counts and goal conversions—details not present in the schema. It also contextualizes pagination via has_more, which enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists push notifications on the current site, newest first, with pagination. It explicitly mentions discovering notification IDs and reviewing past/upcoming sends, distinguishing it from sibling tools like list_sites or list_segments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases ('discover notification IDs and review past or upcoming sends') and a clear directive for when to enable include_analytics ('only when the user asks for stats'). It also links to send tools via reusable audience_groups ids, but does not explicitly state alternatives like 'use get_analytics_summary for aggregated stats'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_rss_campaignsList RSS auto push campaignsARead-only
Lists the RSS auto push campaigns on the current site, paginated (response includes has_more). Each item includes the feed_url. Optionally filter by status (default "all" = every status), mirroring the dashboard filter tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| limit | No | How many to return per page. Min 1, max 100, default 10. | |
| status | No | Filter by status. "all" (default) returns every status. | all |
| site_id | No | Override the currently selected site. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| campaigns | No | |
| last_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnly and openWorld, so the safety profile is known. The description goes beyond annotations by disclosing pagination behavior via `has_more`, the inclusion of `feed_url` per item, and the status filter semantics mirroring dashboard tabs, providing useful operational context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the main purpose, followed by specific details. Every sentence earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with a complete schema and annotations, the description adequately covers the resource type, pagination, filter behavior, and item contents. The presence of an output schema means return values need not be described in prose, so no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra parameter context beyond what the schema provides, mostly the 'dashboard filter tabs' analogy for status, but does not meaningfully enhance understanding of page, limit, or site_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Lists' tied to the resource 'RSS auto push campaigns' on the current site, clearly distinguishing it from sibling list tools like list_drip_campaigns and list_triggered_campaigns. It also includes pagination and filter details that further specify the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and its parameters (status filter, pagination), and implies it should be used for RSS auto push campaigns specifically. However, it does not explicitly name alternatives or state when not to use this tool, unlike a perfect score would require.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_segmentsList segmentsARead-only
Lists segments on the current site, paginated (response includes has_more). Each item carries segment_id, name, current subscriber count, status, and any URL matching criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed) for paginating beyond the first batch. e.g. with limit=100 the second page (segments 101–200) is page=2. | |
| limit | No | How many segments to return in this page. Min 1, max 100, default 10. To browse past the first 100, increase `page` instead of asking for a larger limit. | |
| site_id | No | Override the currently selected site. | |
| name_contains | No | Optional case-insensitive substring filter on segment_name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| segments | No | |
| last_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds useful behavioral context beyond annotations: paginated response with 'has_more' and the specific fields included per item (e.g., current subscriber count). This adds transparency about what to expect when invoking the tool. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the primary purpose ('Lists segments on the current site'). It packs essential details (pagination, response fields) without any wasted words or redundancy. Every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read-only list operation with an output schema available. The description adequately conveys the scope (current site), pagination behavior, and item fields. With annotations covering safety and open-world semantics, and the output schema documenting return values, the description is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning each parameter (page, limit, site_id, name_contains) already has a detailed description in the schema. The tool description adds little beyond saying 'paginated' and mentioning 'has_more', which is already implied by the page/limit parameter descriptions. Per the baseline for high schema coverage, a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Lists segments on the current site, paginated.' It specifies the resource (segments), the action (lists), and the scope (current site). This distinguishes it from sibling tools like list_sites or list_attributes. The mention of response fields further clarifies what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need to list segments for the current site. It also implies usage for browsing segments with pagination. However, it does not explicitly mention when not to use it or reference alternatives (e.g., list_audience_groups), 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.
pushengage_list_sitesList sitesARead-only
Lists PushEngage sites the authenticated user can access. Returns site_id, site_name, site_url, and site_status. Also returns current_site_id so the assistant can see which site is already active without calling pushengage_auth_status. When the user asks to send a notification linking to their site's homepage, use site_url as the notification's url field.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sites | No | |
| current_site_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safe read-only nature. The description adds value by specifying the exact return fields and the fact that current_site_id is included, which is not merely repeating annotations. It also implies authentication requirements via 'authenticated user'. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, all information-dense. The first sentence states the core action and output fields, the second explains the current_site_id addition, the third provides a practical usage hint. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool with an output schema, the description covers the essential behavior: what it returns, the extra current_site_id, and a scenario for using site_url. It is complete given the tool's simplicity and available structured information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, making parameter semantics trivially covered by the schema (100% coverage). The description provides no parameter details, but since none exist, the baseline of 4 applies. The description does add meaning by explaining output fields, which helps the agent understand the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists PushEngage sites accessible to the authenticated user, naming the returned fields (site_id, site_name, site_url, site_status). It also distinguishes itself from pushengage_auth_status by noting it returns current_site_id, and provides a specific use case for site_url in notifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly references the alternative pushengage_auth_status, noting that calling this tool avoids needing a separate auth_status call when checking the active site. It also gives a concrete guideline for when to use site_url in notifications. However, it does not explicitly compare with siblings like get_site_details or select_site, so full exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_triggered_campaignsList triggered campaignsARead-only
Lists the triggered campaigns (Price Drop / Inventory Alert / Cart Abandonment / etc.) on the current site, paginated (response includes has_more). Optionally filter by status (default "all" = every status), mirroring the dashboard filter tabs. Set include_analytics=true only when the user asks for stats/performance (it costs an extra analytics lookup per page). Each item then also carries an analytics object: sent, seen, clicked, ctr, goal_count, goal_value.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| limit | No | How many to return per page. Min 1, max 100, default 10. | |
| status | No | Filter by status. "all" (default) returns every status. | all |
| site_id | No | Override the currently selected site. | |
| include_analytics | No | When true, include per-campaign analytics (sent/seen/clicked/CTR and goal count/value). Costs an extra analytics lookup, so only set it when the user asks for stats/performance. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| campaigns | No | |
| last_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint, but the description adds substantial behavioral detail beyond these: pagination response includes `has_more`, status defaults to 'all', and include_analytics incurs an extra per-page lookup. It also specifies the analytics object fields (sent, seen, clicked, ctr, goal_count, goal_value), providing transparency about return structure and cost. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and every sentence serves a purpose: main functionality, pagination, status filtering, and analytics cost/return. It front-loads the core verb and resource, then provides actionable guidance without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description need not explain return values in detail. It covers pagination, filtering, analytics trade-offs, and response format, making it complete for an agent to select and invoke the tool correctly. Complexity is well addressed with clear parameter-specific guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover all 5 parameters at 100% coverage, so baseline is 3. The description adds context beyond the schema by clarifying the analytics object's fields and reinforcing the cost of include_analytics. It also explains the pagination behavior ('has_more') which enriches the meaning of page/limit parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Lists the triggered campaigns' with specific examples (Price Drop / Inventory Alert / Cart Abandonment) and notes pagination via `has_more`. This specific verb+resource combination distinguishes it from sibling campaign list tools like list_drip_campaigns and list_rss_campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use the optional `include_analytics` parameter ('only when the user asks for stats/performance') and notes the status filter mirrors dashboard tabs. However, it does not explicitly mention when to prefer this tool over sibling list tools (e.g., list_drip_campaigns), though the campaign type examples imply it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_list_workflowsList workflow automationsARead-only
Lists the workflow automations on the current site, paginated (response includes has_more). Optionally filter by status (default "all" = every status), mirroring the dashboard filter tabs. Set include_analytics=true only when the user asks for stats/performance (it costs an extra analytics lookup per page). Each item then also carries an analytics object: entered, active, completed, failed (user counts), goal_count, goal_value.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-indexed). | |
| limit | No | How many to return per page. Min 1, max 100, default 10. | |
| status | No | Filter by status. "all" (default) returns every status. | all |
| site_id | No | Override the currently selected site. | |
| include_analytics | No | When true, include per-workflow analytics (entered/active/completed/failed users and goal count/value). Costs an extra analytics lookup; only set it when the user asks for stats. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| limit | No | |
| total | No | |
| has_more | No | |
| last_page | No | |
| workflows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond the readOnlyHint annotation: pagination with has_more, the cost implication of include_analytics, and the shape of the analytics object returned. This is exactly the kind of extra context that helps an agent anticipate side effects and performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, then details about pagination, filters, and analytics. Every sentence earns its place; there is no fluff or redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations provide the read-only hint, the description covers pagination, filter behavior, the special analytics flag, and what analytics fields are included. This is a complete picture for a list tool with five optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds little beyond the schema: it reiterates the include_analytics cost and the status filter, both already present in the parameter descriptions. It doesn't introduce new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Lists the workflow automations on the current site'. This clearly distinguishes it from sibling list tools (e.g., list_segments, list_notifications) by naming the exact resource type. It also notes pagination and filtering, which are additional clarifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context and some explicit guidance, especially for include_analytics ('only when the user asks for stats/performance') and status (mirrors dashboard tabs). It doesn't explicitly contrast with alternative tools, but since siblings target different resources, the purpose already implies when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_select_siteSelect current siteAIdempotent
Sets the current site used by all site-scoped tools (pushengage_send_notification, pushengage_list_segments, pushengage_get_analytics_summary, pushengage_list_drip_campaigns, etc.) when no site_id is provided. Persists across MCP restarts. Call pushengage_list_sites first to get a valid site_id.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | PushEngage site_id from pushengage_list_sites |
Output Schema
| Name | Required | Description |
|---|---|---|
| site_url | No | |
| site_name | No | |
| current_site_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context not in annotations, such as 'Persists across MCP restarts.' This clarifies the stateful mutation effect, complementing the readOnlyHint=false annotation, though it could mention the result of overwriting a previous selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with front-loaded action ('Sets the current site'), followed by persistence and a prerequisite. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple state-setting tool with one parameter and an output schema, the description covers the purpose, necessary prerequisite, and persistence behavior. It is sufficiently complete for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full meaning for site_id ('PushEngage site_id from pushengage_list_sites'). The description references the parameter but does not add new semantic detail beyond what the schema covers, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Sets the current site' used by all site-scoped tools, and explicitly lists example tools. This specific verb+resource combination distinguishes it from siblings like pushengage_list_sites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call pushengage_list_sites first to get a valid site_id, and explains when the selection applies ('when no site_id is provided'). This gives clear, actionable usage context for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_send_ab_notificationSend an A/B push notificationA
Creates an A/B notification on the current site with two variants (variant_a and variant_b). Required: variant_a (title, message, url) and variant_b (title, message, url). By default (intelligent_ab_test omitted) both variants ship as-is to the audience — no automatic winner picking. Pass intelligent_ab_test to enable intelligent / auto-winner mode: each variant is sent to sent_limit_percentage% of subscribers, and after winner_delay_minutes the higher-CTR variant is automatically delivered to the remaining audience (up to sent_limit total). Only include intelligent_ab_test when the user explicitly asks for an intelligent / auto-winner test. Do not add other optional fields (tags, audience_groups, per-variant image_url, utm_params, actions, etc.) unless the user explicitly asks. Audience: by default sends to all subscribers. Pass audience_groups (1-20 predefined audience-group IDs) only when the user mentions a saved/predefined audience group. Use status="schedule" with schedule_date to schedule for later, or status="draft" to save without sending.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Up to 5 tags, 36 chars each. Only when the user explicitly asks for tags. | |
| status | No | Send now (sent), schedule for later (schedule), or save without sending (draft). The API only accepts sent and scheduled in the body; draft is conveyed via the action query param while the body still carries status="sent". | sent |
| site_id | No | Override the currently selected site | |
| variant_a | Yes | A/B variant A. Required. | |
| variant_b | Yes | A/B variant B. Required. | |
| schedule_date | No | Required when status is "schedule". Format: YYYY-MM-DD HH:mm:ss in the site timezone. | |
| audience_groups | No | Send to one or more predefined audience groups (1-20 group IDs). Applies to both variants. Omit to send to all subscribers. Only set when the user mentions a saved/predefined audience group. | |
| intelligent_ab_test | No | OPTIONAL. Enables intelligent A/B testing: each variant is delivered to sent_limit_percentage% of subscribers, then after winner_delay_minutes the variant with the higher click-through rate is automatically sent to the remaining audience (up to sent_limit subscribers total). Omit this field to send a plain A/B where both variants ship as-is to the audience with no automatic winner selection. Only include when the user explicitly asks for an intelligent / auto-winner A/B test. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| view_url | No | |
| notification_id | No | |
| ab_notification_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false), the description explains default behavior (no auto-winner), the intelligent test flow (limited test phase, delay, winner rollout), and a subtle API quirk: 'draft' is conveyed via action query param while body still says status='sent'. This is exactly the kind of behavioral context the rubric values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet dense: every sentence contributes essential behavioral or usage information. It front-loads the core purpose, then layers conditional guidance without redundancy. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested variant objects, multiple optional fields, status handling, audience targeting, intelligent mode), the description covers all critical aspects. Since an output schema exists, return values need not be explained. The description fully prepares an agent to invoke the tool correctly, including edge cases like draft status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic value by explaining when to set intelligent_ab_test and what happens when omitted, and clarifies the meaning of sent_limit_percentage allocation. While many parameter details are already in the schema, this extra guidance about the interplay between parameters justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Creates an A/B notification on the current site with two variants', which clearly identifies the tool's action, resource, and scope. It distinguishes itself from the sibling non-A/B tool (pushengage_send_notification) and explicitly names the required variant_a/variant_b parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance: how to enable intelligent/auto-winner mode, when to include audience_groups, and which status values to use for scheduling/draft. It also warns against adding unrequested optional fields. However, it does not explicitly name sibling alternatives or state 'use this instead of send_notification when A/B testing is needed', though the name makes this inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_send_notificationSend a push notificationA
Creates and sends a push notification on the current site. Required fields: title, message, url. Do not add optional fields (tags, image_url, utm_params, audience_groups, actions, etc.) unless the user explicitly asks for them — for example, do not infer tags from the notification topic. Delivery modes (mutually exclusive — pick AT MOST one): (a) status="schedule" + schedule_date for a one-shot scheduled send; (b) pass recurring_schedule { days, times, start_date, end_date } for a recurring/repeating notification — leave status at "sent" (default) to activate the recurrence, or use "draft" to save without activating; (c) when scheduling one-shot, optionally pass send_in_subscribers_timezone=true to deliver at the scheduled wall-clock time in each subscriber's local timezone (only when the user explicitly asks, e.g. "send at 9am in their timezone"). Otherwise the notification is sent immediately. Use status="draft" to save without sending or activating. Audience: by default sends to all subscribers. Pass audience_groups (array of 1-20 predefined audience-group IDs) only when the user mentions a saved/predefined audience group. When the user asks to use the site URL, call pushengage_list_sites and use the current site's site_url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Destination URL when the subscriber clicks the notification | |
| tags | No | Up to 5 tags, 36 chars each. Only when the user explicitly asks for tags. | |
| title | Yes | Notification title | |
| status | No | Send now (sent), schedule for later (schedule), or save without sending (draft) | sent |
| actions | No | Action buttons. Only when the user explicitly asks. | |
| message | Yes | Notification message body | |
| site_id | No | Override the currently selected site | |
| ios_push | No | iOS-specific options. Only when the user explicitly asks. | |
| expire_in | No | Expiry in seconds (60–2419200). Only when the user explicitly asks. | |
| image_url | No | Small notification icon. Only when the user explicitly asks for an image. | |
| utm_params | No | UTM tracking params. Only when the user explicitly asks. | |
| android_push | No | Android-specific options. Requires channel_id when set. Only when the user explicitly asks. | |
| big_image_url | No | Large hero image. Only when the user explicitly asks for a big image. | |
| schedule_date | No | Required when status is "schedule". Format: YYYY-MM-DD HH:mm:ss in the site timezone. | |
| audience_groups | No | Send to one or more predefined audience groups (1-20 group IDs). Each ID refers to an audience group already configured in PushEngage. Omit this field to send to all subscribers. Only set this when the user mentions a saved/predefined audience group. | |
| recurring_schedule | No | OPTIONAL. Turns this into a recurring notification that fires on the chosen days/times between start_date and end_date. Mutually exclusive with status="schedule", schedule_date, and send_in_subscribers_timezone. With recurring_schedule set, leave status at "sent" (default) to activate the recurrence, or use "draft" to save without activating. Only set this when the user explicitly asks for a recurring/repeating notification. | |
| send_in_subscribers_timezone | No | Only valid when status="schedule" (and not combined with recurring_schedule). When true, schedule_date is interpreted in each subscriber's local timezone instead of the site timezone — one delivery is scheduled per subscriber timezone so every recipient receives the push at the same wall-clock time. Only set this when the user explicitly asks for subscriber-timezone delivery (for example: "send at 9am in their timezone"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| title | No | |
| status | No | |
| message | No | |
| view_url | No | |
| notification_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far beyond annotations: it explains default behavior (send immediately, all subscribers), the meaning of status values, mutual exclusivity of scheduling options, timezone interpretation, and the critical instruction not to infer optional fields. This rich behavioral context is not present in the annotations (which only state non-read-only, non-idempotent, non-destructive) and is exactly what an agent needs to avoid misusing the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but exceptionally well-structured and front-loaded. It opens with the core purpose, then proceeds through required fields, optional-field constraints, and delivery modes in a logically ordered, scannable format. Every sentence earns its place; the density is justified by the tool's 17 parameters and complex scheduling behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, 17 params, scheduling modes) and the availability of a full output schema, the description is remarkably complete. It covers all major decision points: send modes, audience targeting, optional-field restrictions, timezone handling, and the site-URL workflow. No critical operational aspect appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds substantial meaning beyond the schema: it calls out required fields, states that optional fields must not be added unless explicitly requested, clarifies the semantics of recurring_schedule (activate vs draft), and explains when send_in_subscribers_timezone is valid. This transforms the schema from a field list into actionable decision guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource statement: 'Creates and sends a push notification on the current site.' It clearly distinguishes the tool's core action and scope, and the level of detail makes it unmistakable what the tool accomplishes. It also implicitly differentiates from siblings like send_ab_notification by focusing on standard sends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive when-to-use guidance: explicit delivery modes, when to use draft vs sent vs schedule, when to pass audience_groups, and an explicit alternative (call pushengage_list_sites for site URL). However, it does not explicitly mention sibling alternatives like send_ab_notification or list_notifications for A/B testing or viewing existing notifications, which would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_update_campaign_defaultsUpdate campaign defaultsAIdempotent
Updates one or more of the current site's campaign default settings. Pass only the groups and fields you want to change: utm_parameters, fallback_notification, fallback_attributes, and/or default_expiry. The tool reads the current values and merges your changes, so partial edits are fine (e.g. change just utm_parameters.source, or set default_expiry to {days:7}). default_expiry is given as days/hours/minutes (omitted components count as 0; total must be between 1 minute and 28 days). When utm_parameters.enabled is true, source/medium/campaign must be non-empty after the merge. Provide at least one group. Returns the updated settings.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. | |
| default_expiry | No | Default notification expiry. Set as days/hours/minutes; omitted components count as 0. Total must be between 1 minute and 28 days. | |
| utm_parameters | No | UTM defaults appended to campaign URLs. Provide only the fields you want to change. | |
| fallback_attributes | No | Fallback subscriber city/country used when the browser can't resolve them. | |
| fallback_notification | No | Notification shown if the browser cannot fetch the sent notification. Title, message, and URL are all required by the API, so any you omit are kept from the current values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| default_expiry | No | |
| utm_parameters | No | |
| fallback_attributes | No | |
| fallback_notification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations. It explains the merge behavior ('reads the current values and merges your changes'), the constraints on default_expiry total duration, and the required fields when utm_parameters.enabled is true. This goes well beyond the simple readOnlyHint=false and idempotentHint=true annotations. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (about 120 words) and well-structured. It front-loads the purpose, then covers usage, constraints, and return value in a logical order. Every sentence adds value—no filler, no repetition of schema content. The examples are efficient and illustrative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tricky aspects of this tool: the merge model, partial update semantics, expiry restrictions, and cross-field validation. It even provides an example of a partial edit. The output schema exists, so the description appropriately only notes 'Returns the updated settings.' For a tool with nested objects and merge behavior, this is highly complete and would allow an agent to invoke it correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing detailed field descriptions. The description adds cross-field semantics and examples, such as partial edits, the merge behavior, expiry component omission rules, and validation constraints. This complements the schema rather than repeating it, earning above the baseline of 3 but not a 5 because the schema already handles most individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'Updates one or more of the current site's campaign default settings.' It names the specific groups (utm_parameters, fallback_notification, fallback_attributes, default_expiry), clearly distinguishing it from sibling update tools like update_site_details or update_service_worker_settings. It also states the return value ('Returns the updated settings'), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: when you need to change campaign default settings. It explains partial edits are supported and you must pass at least one group. However, it does not explicitly mention alternatives or when not to use it, so it stops short of a 5. The guidance is clear enough for an agent to select this tool over related get/update siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_update_service_worker_settingsUpdate service worker settingsAIdempotent
Updates the current site's Service Worker Settings. Pass only the fields you want to change: enable_service_worker_registration, enable_service_worker_in_subfolder, and/or service_worker_file_path. The tool reads the current values and merges your changes. When enable_service_worker_registration is true, service_worker_file_path must be non-empty after the merge. Provide at least one field. Returns the updated settings.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. | |
| service_worker_file_path | No | Path for service worker file. Required when the service worker registration is enabled. | |
| enable_service_worker_in_subfolder | No | Enable addition of service worker in another sub-folder. | |
| enable_service_worker_registration | No | Enable the service worker registration from PushEngage. Disable it only if your site already registers its own service worker. When true, service_worker_file_path is required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| service_worker_file_path | No | |
| enable_service_worker_in_subfolder | No | |
| enable_service_worker_registration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond the annotations: it reads current values and merges changes (partial update), enforces a validation rule (service_worker_file_path must be non-empty when enable_service_worker_registration is true), and requires at least one field. These traits are not covered by the idempotentHint, readOnlyHint, or destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: three sentences that front-load the purpose, then detail the usage pattern, validation rule, and return value. There is no fluff or redundant repetition of schema/annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 optional parameters, output schema present, good annotations), the description is quite complete. It explains the merge behavior, validation, and return value. It doesn't mention the optional site_id override, but the schema documents that. The output schema covers return structure, so no need for description to repeat it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for all 4 parameters (100% coverage), so the baseline is 3. The description adds important semantics by explaining the partial-update pattern and the at-least-one-field rule, which are not present in the schema properties themselves, thus adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Updates the current site's Service Worker Settings.' It lists the specific fields that can be changed (enable_service_worker_registration, enable_service_worker_in_subfolder, service_worker_file_path), which distinguishes it from the sibling read-only tool get_service_worker_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage instructions: 'Pass only the fields you want to change' and 'Provide at least one field.' It also explains the merge behavior, giving clear context on when to use this tool. However, it does not explicitly name alternatives or state when not to use it, relying on the tool's name and sibling list for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pushengage_update_site_detailsUpdate site detailsAIdempotent
Updates the current site's details. Pass only the fields you want to change: site_name (Site Name), site_url (Site URL), timezone (Website Time Zone, an IANA name), enable_geolocation (Enable Geolocation), and/or remove_powered_by_pushengage (Remove "Powered By PushEngage", which needs a paid plan). Provide at least one field. Returns the updated site details.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | No | Override the currently selected site. | |
| site_url | No | Site URL. A full http(s) URL, e.g. https://example.com. | |
| timezone | No | Website Time Zone as an IANA name, e.g. "America/New_York" or "Asia/Kolkata". | |
| site_name | No | Site Name. 3-150 characters. | |
| enable_geolocation | No | Enable Geolocation. Personalizes notifications based on the subscriber's location and timezone. | |
| remove_powered_by_pushengage | No | Remove "Powered By PushEngage" branding from notifications. Requires a paid (white-label) plan; the API rejects it otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| site_id | No | |
| site_url | No | |
| timezone | No | |
| site_name | No | |
| site_image | No | |
| enable_geolocation | No | |
| remove_powered_by_pushengage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context: partial update semantics, the paid-plan requirement for remove_powered_by_pushengage, and the return of updated site details. It does not contradict annotations and goes beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no filler. It front-loads the main action, then lists the mutable fields and key constraints. Every sentence adds useful information, making it highly efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential aspects: what it does, which fields are affected, partial update behavior, and return value. The site_id override parameter is only in the schema, but the schema's description covers it. Given the simple tool and rich schema/output schema, the description is nearly complete, with only minor omissions like explicit mention of site_id behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra semantic value by clarifying that at least one field must be provided and by highlighting the paid-plan requirement for remove_powered_by_pushengage, which is not in the schema. It does not restate all parameter descriptions, but effectively supplements them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates the current site's details and enumerates the specific fields (site_name, site_url, timezone, enable_geolocation, remove_powered_by_pushengage). This distinguishes it from sibling tools like get_site_details (read-only) and update_campaign_defaults/update_service_worker_settings (different resources).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it updates the current site's details, supports partial updates ('Pass only the fields you want to change'), and requires at least one field. It does not explicitly mention alternatives or when not to use it, but the scope is unambiguous given the tool name and listed fields.
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.
27 tool updates
v0.1.0- First observed
pushengage_auth_login - First observed
pushengage_auth_logout - First observed
pushengage_auth_status - First observed
pushengage_create_attribute - First observed
pushengage_create_audience_group - First observed
pushengage_create_segment - First observed
pushengage_get_analytics_summary - First observed
pushengage_get_analytics_timeseries - First observed
pushengage_get_campaign_defaults - First observed
pushengage_get_service_worker_settings - First observed
pushengage_get_site_details - First observed
pushengage_list_attributes - First observed
pushengage_list_audience_groups - First observed
pushengage_list_chat_widgets - First observed
pushengage_list_drip_campaigns - First observed
pushengage_list_notifications - First observed
pushengage_list_rss_campaigns - First observed
pushengage_list_segments - First observed
pushengage_list_sites - First observed
pushengage_list_triggered_campaigns - First observed
pushengage_list_workflows - First observed
pushengage_select_site - First observed
pushengage_send_ab_notification - First observed
pushengage_send_notification - First observed
pushengage_update_campaign_defaults - First observed
pushengage_update_service_worker_settings - First observed
pushengage_update_site_details
TDQS
Scored across 27 tools
Each tool targets a distinct resource and action (auth, site, settings, segments, attributes, audience groups, notifications, analytics, campaign types). Even the list_* tools for different campaign types are clearly separated by resource name, leaving no ambiguity.
All tools follow a consistent pattern of pushengage_<verb>_<noun>. Verbs like list, create, get, update, send, and select are used predictably, and object names are clear and uniform. This makes the set highly intuitive to navigate.
27 tools is above the typical well-scoped range, but it is justified by PushEngage's broad feature set covering authentication, site management, subscriber targeting, analytics, and multiple campaign types. While slightly heavy, each tool maps to a distinct API operation and earns its place.
The set covers core read and create operations but lacks update/delete for many resources (segments, attributes, audience groups) and has no tools for managing individual subscribers or canceling scheduled notifications. These gaps create dead ends for agents trying to perform lifecycle management.
Maintenance
Related MCP Connectors
Send, search, and manage notifications, accounts, and push preferences
Query people, segments, campaigns, and message deliveries; send transactional email or broadcasts.
Manage lists, contacts and campaigns, and read campaign performance reports on EmailOctopus.
Manage web personalization campaigns, audiences and visitor data in Personyze.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- FlicenseBqualityDmaintenanceEnables management of email campaigns, subscribers, lists, segments, journeys, templates, transactional email, and client/account settings through the Campaign Monitor API via natural language.1001-

OneSignal MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceEnables OneSignal push notification workflows in Cursor, including message sending, segment management, template creation, Journeys, custom events, and mobile SDK setup.MIT- FlicenseBqualityCmaintenanceEnables programmatic Reddit growth campaign management via the Engain API, including task scheduling, upvote/downvote orders, opportunity discovery, and account management.29-