@paigy/mcp 0.40.0 → 0.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -116,14 +116,24 @@ Then pair: `PAIGY_AGENT=gemini npx -p @paigy/mcp@latest paigy-mcp-onboard`.
116
116
 
117
117
  ## Tools
118
118
 
119
- - **`pair`** — pair this agent with the user's Paigy account (one-time). No args to start: returns the code to show the user **and begins polling for approval in the background**; pass the returned `device_code` to collect the result (it returns the moment the user approves). On success it prompts you to allowlist Paigy's notify/await tools so they run without an approval prompt each time.
120
- - **`unpair`** — log this agent out of the user's Paigy account; revokes the token server-side and deletes the local one.
121
- - **`paigy-enable-tools`** (a CLI, *not* a tool) — allowlist Paigy's notify/await tools so they run without an approval prompt each time. `npx -y -p @paigy/mcp@latest paigy-enable-tools` (or `paigy-harness enable-tools`); `--scope project` limits it to the current repo instead of `~/.claude/settings.json`. Merges, never clobbers; leaves `pair`/`unpair` human-approved. **This is deliberately not an MCP tool.** It writes the calling agent's own permission allowlist, which every host worth trusting treats as privilege escalation — Claude Code's auto mode denies it outright, and the user's consent inside Paigy is invisible to the classifier making that call. `pair` returns the command for the agent to print; a human runs it.
122
- - **`contact`** — THE way to reach the user: tell them something, or ask and get their answer. Core form is two fields — `ask` (plain prose: what you need to tell them or find out) and `waiting` (what happens to your work meanwhile: `none` = just informing, `soft` = want an answer but can keep working, `hard` = stopped until answered — reaches them urgently and escalates to a real phone call). Paigy's broker picks the channel, phrasing, and answer format. When the choices themselves must be *seen*, attach `options` (each may carry a sandboxed `html` or `image` preview); attach `visuals` for context screenshots. Returns `{ notificationId, threadId }`; a threaded follow-up supersedes that thread's pending items, and an identical threaded re-send escalates in place. If a reply comes back as `{kind:'clarify', chunks:[...]}`, contact again on the SAME threadId with an expanded ask. (The former `notify_user`/`notify` names remain accepted as hidden aliases for older setups, and the fully-shaped wire form — context/select/urgency — is still accepted from code; neither is part of the model surface anymore.)
123
- - **Waiting is part of `contact`.** A contact that rings holds its first ~45 s window itself and returns the outcome in `wait` (`reply` / `partial` / `remind` / `idle`); to keep waiting on that call, call `contact` again with only `{ wait: notificationId }` — nothing is sent. A message delivery is never polled for; its reply arrives through `check_replies` or the wake. (There is no separate `await_reply` tool since 0.40.0.)
124
- - **`check_replies`** — catch-up sweep: returns replies you haven't consumed yet (now marked seen) plus still-pending notifications, new user-initiated requests, and owed callbacks.
125
- - **`set_task_state`** — report progress on a request: `in_progress` / `completed` / `needs_input`.
126
- - **`schedule_callback`** — promise the user a follow-up (`on_done` / `on_blocked` / `scheduled`) so it's not dropped if you go idle.
119
+ One catalog, on every transport (2026-09-11): the agent tools are `AGENT_TOOLS` in
120
+ `packages/schema/src/tools.ts` — contact, check_replies, get_thread, search_threads,
121
+ create_goal, claim_goal, get_goal, update_goal — and both this server and the hosted MCP
122
+ (`apps/api/src/mcp`) publish that list and dispatch it through the SDK's one `runTool`.
123
+ This server adds only onboard, pair and unpair, the tools that mint and delete the token
124
+ file this machine holds. See the [SDK contract](../../packages/sdk/README.md) for the
125
+ single-Goal start shape. Notification returns immediately. Call holds one cancellable
126
+ ~45-second window here (the hosted transport returns after one read); continue with
127
+ contact({deliveryId}) without sending another ask. Durable Entries and accepted answers can
128
+ repeat on reads; check_replies lists every open Delivery addressed to you (a request the
129
+ user started toward you, an answer relayed to something you asked, a handoff) without
130
+ consuming any of it, and claim_goal is the catch-up for your own Goals. Bookkeeping ids
131
+ (`operationId`, `idempotencyKey`) are minted here, never asked of the model. Retired
132
+ reply-lease/ACK/work/callback tools and hidden notification aliases are rejected.
133
+
134
+ The standalone listener below is still a **legacy host and target-release blocker**.
135
+ Its old reply intake must migrate before enabling it against the target runtime; it is
136
+ not a compatibility fallback for target MCP tools.
127
137
 
128
138
  ## Configuration
129
139