Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

Pushary

REMOTE · PUSHARY.COM · 2 COMPONENTS · SCANNED AUG 3

Notify me when my agent needs me: approve from my phone, answer questions away from the terminal.

+54 this week 76 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability64
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4183 tokens (~199/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management17
  • Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · pushary.com

# add to Claude Code
claude mcp add --transport http pushary-pushary https://pushary.com/api/mcp/mcp
# ~/.codex/config.toml
[mcp_servers.pushary-pushary]
url = "https://pushary.com/api/mcp/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "pushary-pushary": {
      "type": "remote",
      "url": "https://pushary.com/api/mcp/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add pushary-pushary --url https://pushary.com/api/mcp/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  pushary-pushary:
    url: "https://pushary.com/api/mcp/mcp"
// mcp.json
{
  "mcpServers": {
    "pushary-pushary": {
      "type": "http",
      "url": "https://pushary.com/api/mcp/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 2 Aug 26 0
    • Tool “ask_user” rewrote its description, which is the text the model reads security
  • 1 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +5
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +46
    • Transport: unverified → pass security
    • Authorization: Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. security
    • MCP protocol: unverified → pass functional
    • Tool coverage: unverified → 100 functional
    • First check of Tool coverage: 100 functional
    • First check of Schema quality: excellent functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: fail functional
  • 27 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 22

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://pushary.com/api/mcp/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.pushary.com CN=YR2,O=Let's Encrypt,C=US 26 Jun 2026 24 Sept 2026 RSA 2048 SHA256-RSA 54a92c50c2df64b64318504c26cdcf5e969
SANs: *.pushary.com, pushary.com
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f
DNSSEC insecure

Validation of pushary.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
pushary.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Challenged, unverified

The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.

Result Challenged, unverified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://pushary.com/.well-known/oauth-protected-resource"

Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://pushary.com/.well-known/oauth-protected-resource"
Header Value
strict-transport-security max-age=31536000; includeSubDomains; preload
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin

Protected resource metadata

Document https://pushary.com/.well-known/oauth-protected-resource
Retrieved Yes
Problem metadata_incomplete
Resource https://pushary.com
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://pushary.com/api/mcp/mcp Verified 200
http (plaintext) http://pushary.com/api/mcp/mcp HTTPS enforced 308 https://pushary.com/api/mcp/mcp
MCP tools — 21 exposed · ~4,056 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
activate_flow ~61

Activate a draft or paused flow so it starts running. Review the flow steps first with list_flows or the dashboard. SIDE EFFECT: the flow begins processing subscriber events and sending its notifications automatically until paused.

NameTypeReqDescription
idstringyesThe flow ID to activate

No output schema declared.

No examples provided.

ask_user ~1,065

Ask the user a question as a push notification on their phone and block until they answer. Reach for this whenever you need the user's decision and they may be away from the terminal: approving a risky or irreversible step (deleting files, force pushing, spending money, sending external messages), picking between implementation options, or supplying missing input. The user answers from the lock screen or a decision page; you do not need a separate wait_for_answer call because this tool waits by default. Three question types: "confirm" (yes/no), "select" (2 to 6 fixed choices), "input" (free text). Timing: a single call blocks for at most 55 seconds, but the question itself stays answerable for 10 minutes. On { answered: true } the response carries value with the user's choice or text. On { answered: false, timedOut: true } keep the returned correlationId and call wait_for_answer with it, retrying up to 3 times with timeoutMs 55000, before falling back to asking in the terminal. Every response carries answerUrl, the signed-in dashboard page where this question is waiting. When you report that you are waiting, print that URL to the user so they can answer from a browser instead of hunting for it. Works from Claude Code, Codex, Cursor, Hermes, or any MCP client; no Claude subscription is required. SIDE EFFECT: sends a real push notification.

NameTypeReqDescription
actionstringThe concrete operation about to happen, one line. Shown as the Action line.
actionBodystringThe diff (Edit/Write) or full command (Bash/apply_patch), secret-redacted and size-capped. Rendered as a collapsible detail block; never used as the push body.
agentNamestringName of the agent asking, format "{Agent} - {project}" (e.g. "Claude Code - myproject"). Shown in the notification title so the user knows which session needs them. Falls back to the MCP client name…
blockerstringThe single gating reason the agent stopped, one line. Shown as the Blocker line.
callbackUrlstringWebhook URL that receives a POST with the answer when the user responds, signed with the X-Pushary-Signature header. Useful when the agent process may exit before the answer arrives.
contextstringOne or two sentences about what the agent is working on, shown above the question so the user can decide without opening the terminal.
externalIdsarrayDeliver only to subscribers matching these external IDs.
intentstringThe user's stated task (from their last prompt), one line. Shown as the Intent line so the user can see why the agent stopped.
machineIdstringStable machine id of the asking agent, so two machines never collapse into one session.
optionsarrayThe 2 to 6 choices for a select question. Required when type is "select", ignored otherwise. The answered value is the chosen option string.
placeholderstringHint text shown inside the free-text field for input questions
questionstringyesThe question shown on the user's lock screen (max 500 chars). Phrase it so it is answerable at a glance; put background in context instead.
repoKeystringStable repository identity for the working directory, e.g. "github.com/acme/api". Lets an approval routing rule scoped to one repository avoid governing another. Optional; omit it and only workspace-…
scopePathstringSet ONLY when this approval exists because the path falls outside the scope the user ratified via propose_scope. Approving then widens the run scope to include this exact path, so the user is not ask…
sessionIdstringOpaque per-session id of the asking agent, so parallel sessions are attributed separately.
subscriberIdsarrayDeliver only to these subscriber IDs. Omit all targeting fields to reach every connected device.
tagsarrayDeliver only to subscribers that have any of these tags.
timeoutMsintegerHow long this call blocks, in milliseconds (max 55000). Defaults to the site policy timeout. The question stays open for 10 minutes regardless, so a timeout here is not a refusal; follow up with wait…
toolNamestringThe tool this approval is for (e.g. "Bash"), so the user can choose to always-allow it.
toolTargetstringCompact target of the tool call (e.g. the command head "git push" for Bash, or a file extension like ".ts" for Edit/Write). Used to mine policy suggestions.
typestringQuestion type: confirm renders yes/no buttons, select renders the options list, input renders a free-text field.
waitbooleantrue (default) blocks until the user answers or the timeout fires. Set false to return immediately with a pending correlationId and poll it yourself via wait_for_answer.

No output schema declared.

No examples provided.

cancel_question ~145

Retract a pending question so it can no longer be answered. Use this when a question became irrelevant before the user replied: the agent found the answer itself, the task was aborted, or a newer question supersedes it. Cancelling prevents a stale approval from arriving later and acting on work that has moved on. Only affects questions that are still pending; questions expire on their own 10 minutes after creation. Returns { cancelled: true } when a pending question was removed, { cancelled: false } when it was already answered, expired, or unknown.

NameTypeReqDescription
correlationIdstringyesThe correlationId of the pending question to cancel, as returned by ask_user or send_notification

No output schema declared.

No examples provided.

count_subscribers ~53

Get subscriber counts for the site broken down by status: total, active, and unsubscribed. A quick way to check audience size before sending, or to verify that at least one device is subscribed. Takes no parameters.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

create_campaign ~245

Create a push notification campaign in draft status. Nothing is delivered yet: send it with send_campaign, or set scheduledAt to queue it for a future time. Use campaigns instead of send_notification when the message targets an audience segment and you want delivery stats afterwards. SIDE EFFECT: creates a new campaign resource.

NameTypeReqDescription
actionUrlstringURL opened when the notification is clicked
bodystringyesNotification body text (max 500 chars)
iconUrlstringNotification icon URL
imageUrlstringLarge image URL shown in the notification
namestringyesInternal campaign name for identification. Not shown to subscribers.
scheduledAtstringISO 8601 datetime to schedule delivery (e.g. 2026-03-01T10:00:00Z). Omit to keep the campaign as a draft you send manually.
segmentIdstringTarget a specific subscriber segment by ID
tagsarrayTarget subscribers with any of these tags. Omit all targeting to reach every active subscriber.
titlestringyesNotification title shown to subscribers (max 100 chars)

No output schema declared.

No examples provided.

create_flow ~145

Create an automation flow that sends notification sequences in response to subscriber events, such as a welcome series after subscription or a follow-up after a notification click. The flow is created in draft status and does nothing until activate_flow is called. SIDE EFFECT: creates a new flow resource.

NameTypeReqDescription
descriptionstringWhat this flow does, for humans reading the dashboard
namestringyesFlow name for identification
stepsarrayOrdered list of flow steps
triggerCampaignIdstringScope notification-based triggers (click, impression, dismiss) to a specific campaign ID
triggerTypestringyesSubscriber event that starts the flow for that subscriber

No output schema declared.

No examples provided.

create_template ~134

Create a reusable notification template so the same title, body, and imagery can be reused across campaigns without retyping. Nothing is sent by this call. SIDE EFFECT: creates a new template resource.

NameTypeReqDescription
actionUrlstringURL opened when the notification is clicked
bodystringyesNotification body text (max 500 chars)
iconUrlstringNotification icon URL
imageUrlstringLarge image URL shown in the notification
namestringyesInternal template name for identification. Not shown to subscribers.
titlestringyesNotification title (max 100 chars)

No output schema declared.

No examples provided.

get_campaign ~70

Get full details of a campaign by ID: content, status, targeting, schedule, and delivery counts. Use it to verify a draft before send_campaign or to check the state of a campaign you sent earlier.

NameTypeReqDescription
idstringyesThe campaign ID, as returned by list_campaigns or create_campaign

No output schema declared.

No examples provided.

get_campaign_stats ~51

Get delivery statistics for a campaign: sent, delivered, clicked, and failed counts plus their rates. Use it after send_campaign to report how a campaign performed.

NameTypeReqDescription
idstringyesThe campaign ID

No output schema declared.

No examples provided.

get_subscriber ~71

Get full details of a single subscriber by ID: browser, OS, location, tags, subscription status, and activity. Use it to inspect one recipient before targeting them or to debug why a device did not receive a notification.

NameTypeReqDescription
idstringyesThe subscriber ID, as returned by list_subscribers

No output schema declared.

No examples provided.

list_campaigns ~94

List push notification campaigns in reverse chronological order, including each campaign's status (draft, scheduled, sending, sent, paused). Use it to find a campaign ID before calling get_campaign, send_campaign, or get_campaign_stats. Paginated; pass the cursor from the response to fetch the next page.

NameTypeReqDescription
cursorstringPagination cursor from a previous response
limitintegerNumber of results per page

No output schema declared.

No examples provided.

list_flows ~106

List automation flows for the site, optionally filtered by status. Use it to find a flow ID before calling activate_flow or pause_flow, or to check what automations are currently running. Paginated; pass the cursor from the response to fetch the next page.

NameTypeReqDescription
cursorstringPagination cursor from a previous response
limitintegerNumber of results per page
statusstringFilter by flow status. Only "active" flows process subscriber events.

No output schema declared.

No examples provided.

list_sessions ~145

Read-only fleet view. Returns the live agent sessions for your site, keyed by machine and session, with each session's computed status (active, idle, waiting, errored) and any pending approval questions. Use it to check what your parallel agents are doing, spot which one is blocked waiting on a human answer, or confirm a session is still alive before assigning follow-up work. Does NOT start, stop, or steer agents, and sends no notification.

NameTypeReqDescription
limitintegerMaximum number of sessions to return, most recently seen first
statusstringOnly return sessions with this computed status. "waiting" means the session is blocked on a pending question.

No output schema declared.

No examples provided.

list_subscribers ~154

List push notification subscribers for the site, with optional filters. Use it to find who can receive notifications, look up a subscriber ID for targeted delivery, or audit subscription health by status. Returns a paginated list; pass the cursor from the response to fetch the next page.

NameTypeReqDescription
cursorstringPagination cursor from a previous response
externalIdstringLook up the subscriber mapped to this external ID from your own system
limitintegerNumber of results per page (default 20, max 100)
statusstringFilter by subscription status. Only "active" subscribers can receive notifications.
tagsarrayOnly return subscribers that have any of these tags

No output schema declared.

No examples provided.

list_templates ~71

List reusable notification templates for the site. Use it to find an existing template before creating a duplicate with create_template. Paginated; pass the cursor from the response to fetch the next page.

NameTypeReqDescription
cursorstringPagination cursor from a previous response
limitintegerNumber of results per page

No output schema declared.

No examples provided.

pause_campaign ~64

Pause an active or currently sending campaign. Use it to stop a campaign that was sent by mistake or needs a content fix. SIDE EFFECT: halts further notification delivery for this campaign; notifications already delivered cannot be recalled.

NameTypeReqDescription
idstringyesThe campaign ID to pause

No output schema declared.

No examples provided.

pause_flow ~73

Pause an active flow so it stops reacting to subscriber events. Use it to halt an automation that is misfiring or no longer wanted; reactivate later with activate_flow. SIDE EFFECT: stops the flow from processing new events. In-progress executions may still complete.

NameTypeReqDescription
idstringyesThe flow ID to pause

No output schema declared.

No examples provided.

propose_scope ~421

Propose what this run will touch and block until the user ratifies it. Call ONCE at the start of a multi-step run, before doing work. The user sees the paths you intend to change, the areas you promise to leave alone, and your definition of done, and approves the whole thing in one tap. After that, editing a file outside the agreed scope stops being auto-approvable: it becomes a separate "wants to widen scope" question instead of a silent approval, so you are asked once about the boundary rather than repeatedly about each file. Use glob syntax ("src/**", "**/*.test.ts"). Shell commands are NOT scoped here, they stay governed by the permission policy. Scope lives for this session only and is never inherited by another run. Returns { ratified, answered, value }; ratified:true means the contract is live. If the user declines, do not proceed as if they had agreed, ask them what scope they want. SIDE EFFECT: sends a real push notification.

NameTypeReqDescription
agentNamestringName of the agent asking, format "{Agent} - {project}".
allowedPathsarrayGlobs you intend to change, e.g. ["src/**", "docs/*.md"]. Omit or leave empty to propose no path restriction, which the user is told plainly.
doneWhenstringyesWhat "finished" means for this run, one or two lines. Carried for the human to judge against; never enforced automatically.
machineIdstringStable machine id, so two machines never collapse into one session.
offLimitsPathsarrayGlobs you promise not to touch, e.g. ["**/.env*", "infra/**"]. These win wherever they overlap allowedPaths.
sessionIdstringyesYour per-session id. Required: a scope with no session cannot be enforced, and must never leak into another run.
timeoutMsintegerHow long this call blocks, in milliseconds (max 55000).

No output schema declared.

No examples provided.

send_campaign ~74

Send a draft or scheduled campaign immediately, skipping any schedule. Confirm the campaign content and targeting with get_campaign first. SIDE EFFECT: triggers push notification delivery to all targeted subscribers. This action cannot be undone; consider asking the user with ask_user before sending on their behalf.

NameTypeReqDescription
idstringyesThe campaign ID to send

No output schema declared.

No examples provided.

send_notification ~552

Send a one-way push notification to the user's phone and browser. Nothing is awaited; use ask_user instead when you need an answer back. Reach for this when a long-running task finishes and the user asked to be told, when the agent hits an error it cannot resolve on its own, or for any "notify me when my agent needs me" moment while the user is away from the terminal. By default the notification reaches every device connected to the site; narrow delivery with subscriberIds, externalIds, or tags. The optional context object turns the tap-through into a rich detail page (summary, bullet details, changed files, error info, next steps), and context.askQuestion embeds a decision prompt on that page, returning a linkedCorrelationId you can poll with wait_for_answer. Returns per-channel delivery counts for web and mobile, plus a warning when zero devices are connected. Works from Claude Code, Codex, Cursor, Hermes, or any MCP client; no Claude subscription is required. SIDE EFFECT: delivers real notifications to real devices immediately.

NameTypeReqDescription
agentNamestringName of the agent sending this notification, format "{Agent} - {project}" (e.g. "Claude Code - myproject"). Shown in the notification so the user knows which session is talking. Falls back to the MCP…
bodystringyesNotification body text (max 500 chars). One or two sentences the user can act on without opening anything.
contextobjectStructured context rendered as a rich detail page when the user taps the notification. Strongly recommended for task_complete and error notifications so the user can act from their phone.
externalIdsarrayDeliver only to subscribers matching these external IDs.
iconUrlstringURL of the notification icon image
imageUrlstringURL of a large image shown in the notification
machineIdstringStable machine id of the sending agent, so two machines never collapse into one session.
sessionIdstringOpaque per-session id of the sending agent, so parallel sessions are attributed separately in the activity feed.
subscriberIdsarrayDeliver only to these subscriber IDs. Omit all targeting fields to reach every connected device.
tagsarrayDeliver only to subscribers that have any of these tags.
titlestringyesNotification title shown on the lock screen (max 100 chars). Lead with the outcome, e.g. "Build finished" or "Migration failed".
urlstringURL opened when the user taps the notification. Ignored if context is provided, because a context detail page URL is generated automatically.

No output schema declared.

No examples provided.

wait_for_answer ~262

Poll for the user's answer to a previously created question. Use it in three cases: after ask_user with wait set to false, after an ask_user call that returned timedOut, or with the linkedCorrelationId from a send_notification that embedded an askQuestion. Each call blocks until the answer arrives or timeoutMs expires (default 30 seconds, max 55). Questions live for 10 minutes in Redis, so when a call comes back { answered: false }, retry with the same correlationId up to 3 times with timeoutMs 55000 to give the user time to reach their phone; only then treat the question as unanswered and fall back to asking in the terminal. Returns { answered: true, value } once the user responds, where value is "yes"/"no" for confirm, the chosen option for select, or the typed text for input.

NameTypeReqDescription
correlationIdstringyesThe correlationId from an earlier ask_user response, or the linkedCorrelationId from a send_notification with an embedded askQuestion
timeoutMsintegerHow long this call blocks, in milliseconds (default 30000, max 55000). Retry with the same correlationId to keep waiting; the question expires 10 minutes after it was asked.

No output schema declared.

No examples provided.