Claude.ai, Claude Desktop, and Cowork
Connect Pushary to claude.ai, the Claude Desktop app, or Claude Cowork by pasting one link, so Claude can notify you and ask you questions on your phone
You can connect Pushary to claude.ai (web), the Claude Desktop app, Cowork, and the Claude mobile apps by pasting one link. No terminal, no install, no config files.
Once connected, Claude can send you notifications and ask you questions on your phone while it works. This is the cooperative path: Claude chooses when to call the tools. It does not intercept native permission prompts. To approve risky commands before they run, use an agent with hooks like Claude Code (see Supported agents).
This setup connects MCP tools; it does not install native permission hooks. What you get is the part that fits them: Claude pings you and asks you on your phone during long tasks.
Get your connector URL
Claude signs you in, so the URL carries no credential and there is nothing in it to leak:
https://pushary.com/api/mcp/mcpIt is also shown in Settings, Connections under the Claude (claude.ai, Desktop, and Cowork) section, next to the account that has to sign in.
Add it in Claude
- In Claude, open Settings
- Go to Connectors (on claude.ai this lives under Customize, then Connectors)
- Click Add custom connector
- Paste the URL into the Remote MCP server URL field. Leave the OAuth Client ID and Secret fields empty — Claude registers itself, and those fields are only for authorization servers that cannot do that
- Give it a name like
Pusharyand click Add
Sign in with the Pushary account that owns your workspace. The URL carries no credential, so whichever account you pick at the sign-in screen is the one the connector speaks for. If your browser is signed into more than one Pushary account, the screen will happily accept the wrong one, and every tool call then fails with a generic "Authorization with Pushary failed". The Connections section names the account you need.
Claude asks you to sign in the first time it uses a tool, not always the moment you add the connector. Until then the dashboard shows nothing connected, which is expected: ask Claude to send you a test notification and the Claude section fills in.
Prefer a key in the URL? The Connections section still offers a keyed link behind Client cannot sign in? Use a key link instead. It works the same, expires after 90 days, and has to be treated like a password, so signing in is the better default wherever the client supports it.
Use it in Cowork
Connectors are configured at the account level and brokered through your Claude account, so the connector you just added works inside Cowork sessions too, on desktop, web, and mobile.
- Open a Cowork session
- Open Customize (or the + icon in the chat bar), then Connectors
- Turn on Pushary for the session
Cowork runs long tasks, often while you are away, which makes the connector most useful when Claude reaches for it on its own. Give it standing instructions once: in the Claude app, open Settings, then Cowork, and paste this into your standing instructions.
Use the Pushary Cowork plugin/skill or standing instructions to guide proactive connector use. Do not rely on repository memory files for this setup.
Pushary is connected as a custom connector. Use it proactively to reach me on my phone or Mac notch.
- When you need a decision or clarifying answer, call ask_user. Use type "confirm", "select", or "input" as appropriate. Ask once on one channel.
- Before a risky or irreversible action outside my existing authorization, call ask_user with type "confirm" and wait for approval. Silence is never consent.
- When a task finishes, call send_notification with context.type "task_complete" and a short summary. For an error you cannot resolve, use context.type "error"; use "info" for other updates.
- Only keep a reply channel open when a specific unresolved decision is required: call send_notification with context.askQuestion, then poll the returned linkedCorrelationId with wait_for_answer. Do not ask for optional feedback just to keep a finished turn alive.
- Follow handoffAction when present, otherwise nextAction. If ask_user times out on a live question, poll once with wait_for_answer. If still pending, cancel_question before asking in the current chat. If cancellation returns handoffAction "stop", stop. If cancellation returns false, poll once for 1 second and honor the answer that won the race. Expired, cancelled, missing, and unavailable questions are not new timeouts.
- Pass agentName as "Claude Cowork - <task name>" on every call, and reuse one opaque sessionId per task so parallel tasks stay separate. Never include credentials in these identifiers.
- Cancel a question when it is no longer needed. Once this turn ends, reopen Cowork for follow-up work; this connector cannot restart it.
- If Pushary tools are missing or disabled, report that once and continue within my authorization. Do not claim a notification or approval was delivered.The same block is available with a copy button in Settings, Connections. With the agentName convention in place, Cowork sessions show up in your Activity feed and Fleet view as Claude Cowork, grouped by task.
Cowork may ask you to approve connector tool calls inside the session, and depending on your version the "Allow always" option may not be offered for custom connectors. If you see repeated approval prompts for Pushary calls, keep the standing instructions focused on the moments that matter (risky steps and completion) rather than frequent check-ins.
Long, unattended sessions
A blocking question waits about 55 seconds per wait_for_answer call, and a question stays answerable for 10 minutes. Cowork sessions can run much longer than that while you are away. Two patterns cover it:
- For decisions Claude needs soon,
ask_user, then onewait_for_answercall if the question is still pending. Follow the returned handoff and cancel before moving the question to the current chat. - For a specific decision that can wait, use
send_notificationwithcontext.askQuestion, then poll the returnedlinkedCorrelationIdwhile the task is active. For updates that need no answer, usesend_notificationwithout a question.
What your phone can and cannot do with a Cowork session
The connector is an outbound channel. Cowork can reach your phone whenever it decides to, and you answer from the lock screen. There is no inbound channel back into a Cowork session, because this connector has no command consumer or task-launch API. The phone cannot push new work into it.
What works:
- Answering a question Cowork asked, of any type: confirm, select, or free text.
- Answering later from the notification page, for a question sent with
context.askQuestion.
What does not work, and why:
- Replying to a finished task. Once Cowork's turn ends, nothing in that session is listening. If you want to be able to reply, Cowork has to leave a question open before it stops:
send_notificationwithcontext.typeset totask_completeandcontext.askQuestionset to aninputquestion, thenwait_for_answeron the returnedlinkedCorrelationId. Only keep this reply channel open for a specific unresolved decision, not optional feedback. - Starting a new Cowork task from your phone. Messaging an agent and launching one are both features of the Pushary CLI, which drains them on your own machine. This connector does not provide a consumer for queued commands, regardless of whether the Cowork task runs locally or in the cloud. The Pushary app hides both controls on a Cowork session rather than queueing something that would never arrive.
If you want to send work to an agent from your phone, run it through the CLI instead: npx @pushary/agent-hooks setup. That covers Claude Code, Codex, Gemini CLI, Cursor, and Hermes.
What Claude can do
The connector exposes five tools: send_notification, ask_user, propose_scope, wait_for_answer, and cancel_question. See the tools reference. Those five are all Claude sees on a connector link. The subscriber, campaign, flow and session tools need a full API key from the CLI setup and are not offered here.
A blocking question waits for your answer for up to about 55 seconds. If you need longer, Claude can check again with wait_for_answer using the same question id (questions stay open for 10 minutes).
Prompts to try
Get pinged when a long task finishes:
When you finish this task, use Pushary to send me a notification with a short
summary of what changed.Ask before something irreversible:
Before you do anything destructive or irreversible, use Pushary to ask me to
confirm, and wait for my answer before continuing.Revoke or rotate
Disconnect Pushary under Claude’s Connectors settings to remove access from Claude. The public OAuth URL stays the same when reconnecting.
If you chose the legacy keyed link instead, open Pushary’s Settings, Connections and use Revoke link or Generate new link. The old keyed link stops working immediately; update it in Claude after rotating.
CLI and plugin setup
Run npx @pushary/agent-hooks@latest cowork for the same setup instructions. setup --agents cowork also uses this connector path, without writing CLI hooks or saving a key. Use pushary cowork --instructions for standing instructions or pushary cowork --skill > SKILL.md to export the skill for upload. CLI doctor does not verify an account-level connector.
The Pushary Cowork plugin bundles the skill and OAuth MCP configuration. If your Claude version does not add the connector from the plugin, add the URL above manually.
Anthropic now documents Cowork plugin hooks. This Pushary connector does not install or verify native permission hooks. Local and cloud tasks can have different capabilities; neither a skill nor a successful MCP connection proves native approval interception.
Verify the connection
Ask a harmless confirm question through Pushary inside Claude, answer from your phone or notch, and confirm Claude receives your answer. Use Claude Cowork - Setup check or Claude Chat - Setup check as the agent name. If it fails, check the Pushary account, connector enablement in the conversation, tool permission, and delivery mode. Printing a setup link is not a successful test.