Set up NotiBuddy
NotiBuddy brings questions and progress from connected software to your iPhone. The MCP setup below connects a compatible AI assistant. Apps, scripts, and services can also connect directly.
The Apple app is still in preview. There is no public app download yet; existing testers need the build supplied to them. The notibuddy 0.2 computer client, including its CLI and local MCP server, is published on npm. Installing it does not grant access to a phone. Check release status for app availability and use the app build’s pairing instructions.
Native iPad, iPhone Duo, and Apple Watch support are being prepared for launch and still require acceptance testing. The published client alone does not enable Watch enrollment or direct Watch delivery.
What you’ll need for MCP setup
- An iPhone running iOS 17 or later, with the NotiBuddy preview app installed.
- An AI assistant that supports local MCP servers.
- An internet connection on both devices, and a computer that stays awake while your AI works.
- Node.js 20 or later on the computer or server running the sender. The commands below use
npxto run the published package.
Connect your phone and computer
- Open NotiBuddy, review the connection privacy choices, and allow connection/reply sharing. Then open NotiBuddy on your iPhone and allow notifications.
- Open Connect → Add a connection (or Add if you already have a connection). If your supplied build offers Create setup code, tap it, then Share Setup. Otherwise use Share Setup directly. Send the instructions to your computer using AirDrop or another private method.
- Keep NotiBuddy open and run the pairing command from the setup message. It includes
--tofollowed by a local destination name. A one-use code can automatically connect the first eligible new sender within ten minutes. If Terminal requests approval, compare its full Sender Key ID with the pending request on your phone and approve it there. - Connect NotiBuddy in your AI app’s MCP settings. Ask it to send a test question to your phone, then answer it.
Share setup only with a sender you trust: whoever first uses an unused automatic code may obtain access. Older preview builds retain manual approval; installing the new computer client does not add the code controls to an older app. You can choose Use manual approval instead in a code-capable build.
Setup is complete when your AI receives that answer. Seeing a notification alone does not confirm the return connection.
After setup, you can tell your AI:
Use NotiBuddy when you need a decision from me, and share a few progress updates as you work. Wait for my answer before taking a step that needs approval.
Your AI still needs to check for your reply and continue the task. NotiBuddy does not wake your computer, restart an ended AI session, or replace permission prompts in your AI app. New questions allow three hours to reply by default; a sender can choose a shorter deadline. See Help & questions if an answer or update does not arrive.
Connect an app or service
MCP is one way to use NotiBuddy. An app, script, or service can connect directly by implementing the same pairing and encrypted request protocol. It can send supported questions, forms, and progress updates, then receive replies from your phone. This requires an integration; existing apps do not gain support automatically.
For developers: import a valid nbpair setup bundle, register the sender’s signing identity using the pairing proof, and send encrypted, signed request envelopes addressed to the paired device. A device ID or an arbitrary signature alone does not establish a trusted connection. Verify replies against the phone’s pinned signing key and handle pending, expired, and failed requests.
Keep pairing material, sender credentials, and saved reply keys in private storage controlled by the integration. A hosted service needs its own securely paired configuration; do not embed one customer’s credentials in a public website or shared application bundle.
The published notibuddy package includes a TypeScript/JavaScript client for Node.js 20 or later. See the public client source and README and protocol before building an integration. This does not imply browser or other runtime compatibility. The sending app or service remains responsible for checking replies and continuing its own work.
Technical setup for your AI assistant
The sections below are for an assistant helping a preview tester. They are also available as plain Markdown.
1. Check the published client
The package is notibuddy, published by Yourbit, LLC. Version 0.2.9 is available; the commands in this guide use the compatible range ^0.2.9. Do not substitute a similarly named package or invent pairing credentials. Verify installation:
npx -y notibuddy@^0.2.9 --help
If installation fails, report the error before trying to pair. A successful help command proves the client runs, not that any device is connected.
2. Check pairing
Run npx -y notibuddy@^0.2.9 status to inspect saved local destinations. This command does not verify current phone approval. The phone’s Share Setup instructions pair the computer using an nbpair1. bundle containing public keys and a secret pairing proof. The phone must finish enrollment before sharing.
If the computer is not paired, have the user open Connect → Add a connection (or Add if already connected), then Create setup code → Share Setup when offered, or Share Setup in a manual-only build. A bearer token alone is insufficient. Do not invent credentials or reuse a legacy token file. Automatic setup also requires a compatible app build and relay; installing the client alone cannot enable it.
The client stores configuration and keys under ~/.notibuddy/. Unix directories use mode 0700 and files 0600; Windows relies on the user’s private-directory access controls. Keep that directory and the pairing bundle private. Never paste their contents into shared logs or MCP configuration.
In the examples below, personal is a local alias. Replace it with the name in your pairing command, or choose it explicitly with --to personal while pairing. There is no automatically selected default destination.
3. Register the local MCP server
Use the AI app’s documented method for adding a local stdio MCP server. Preserve any existing servers and settings.
- Command:
npx - Arguments:
["-y", "notibuddy@^0.2.9", "mcp", "--to", "personal"] - Pairing configuration: read automatically from
~/.notibuddy/.
For clients that use an mcpServers configuration object, merge this entry into that object:
{
"notibuddy": {
"command": "npx",
"args": ["-y", "notibuddy@^0.2.9", "mcp", "--to", "personal"]
}
}
This is a local MCP process. The relay handles encrypted delivery; do not configure its URL as a remote MCP server. The public website is reachable through notibuddy.com, which currently redirects to notibuddy.app; the branded relay is https://notibuddy.app. Always keep the relay address carried by your actual pairing bundle. Do not edit a saved connection to replace an older relay address.
4. Finish the connection
Keep NotiBuddy open and online until the client confirms the connection. A shared one-use code lasts ten minutes and can be claimed by only the first eligible new sender. The phone verifies that sender before accepting it; possession of an expired or canceled code does not grant access. Later new senders using the same setup must use manual approval. Repeating setup for an unchanged, already approved sender does not require another approval or consume a fresh code.
If approval is requested, open Connect on the iPhone. Compare the full Sender Key ID shown by Terminal with the pending connection before approving. The name is chosen by the sender; compare the ID, not just its name. Manual approval requests expire after 15 minutes. Only one can be pending: a new request supersedes the previous pending request, while approved senders remain connected. A pending sender cannot deliver requests.
The client normally waits up to 45 seconds for automatic setup. A timeout is not success. Keep the app open, check its connection status and retry the same command with the same destination name; preserve the saved keys. In the app, use Retry setup for an interrupted code preparation, or Create a new code if the previous code expired or was canceled. Choose Use manual approval instead to connect without an automatic code.
Choosing manual approval does not cancel an existing code. To stop its automatic acceptance, choose Cancel code and confirm. Canceling or expiring the code does not revoke ordinary pairing credentials in shared copies or disconnect an approved sender. Keep every setup copy private; new senders without a valid automatic code still need approval.
Then run npx -y notibuddy@^0.2.9 doctor --to personal to check relay access, approval, protocol compatibility, and file-receive setup. A diagnostic failure is not permission to create another pairing or discard existing keys.
On a replacement phone, create a fresh connection, use Restore Purchases if you have a paid plan, and pair your computer again. No recovery code is required. For more than one phone, pair each with a distinct destination name (--to personal, --to work). All destinations are saved under ~/.notibuddy/destinations. Use the destination name supplied by Share Setup in your MCP arguments. Version 0.2 requires explicit selection; import an existing pairing with npx -y notibuddy@^0.2.9 devices migrate --to personal, preserving its keys and pending replies.
5. Verify both directions
Reload the AI app’s MCP configuration if needed. Call notibuddy_ask with:
{
"title": "NotiBuddy connected",
"message": "Tap OK to finish setup.",
"options": ["OK"]
}
If the result is pending, call the tool again with the returned requestId as resume_id. Continue checking within the expiry window. Confirm success only after receiving the phone’s response. Report an expired, missing, or failed request honestly.
You can also test directly from Terminal without an AI subscription:
npx -y notibuddy@^0.2.9 ask "Connection check" --to personal --message "Reply OK to test both directions." --options "OK" --wait 55
If it returns a pending ID, use npx -y notibuddy@^0.2.9 ask --resume REQUEST_ID --to personal --wait 55 before the original three-hour deadline. This uses one Free request; checking the reply does not create another request or extend its deadline.
Tools and response handling
notibuddy_ask sends a question and checks for an answer.
| Parameter | Purpose |
|---|---|
title, message | The question and its context |
options | Answer choices; custom choices open in the app |
input_placeholder | Enable a quick text reply |
fields | An in-app form using text, email, URL, toggle, stepper, picker, or date fields |
sensitive | Hide content and choices on public notification/Live Activity surfaces |
requires_auth | Require device authentication in the app before answering |
timeout_seconds | How long a new question remains answerable: 1–10,800 seconds, default and maximum three hours |
wait_seconds | Wait before returning a pending handle: default 25 seconds, maximum 55 |
resume_id | Check an earlier request without sending a new question |
Ordinary approvals, protected approvals, text replies, forms, and diffs share the three-hour default and maximum. In Terminal, --timeout 10800 selects the answer window for a new request; --wait 55 only limits how long that invocation waits for a reply. Resuming or retrying preserves the original signed deadline, including after a client restart. Updating the client does not extend an existing request. This does not automatically restart the AI host. Never treat a timeout, error, or lack of response as approval.
notibuddy_activity starts, updates, or ends a progress display or timer. Use poll to read controls sent from the phone.
| Parameter | Purpose |
|---|---|
id | Stable identifier for an activity |
action | start, update, end, or poll |
title, status | A short label and update |
step, total_steps | Progress through a task |
timer_minutes | A countdown duration |
controls | pause, resume, cancel, or add_5m |
Activity requests retain their one-hour lifetime; the three-hour question window does not change timer behavior. The AI host must read and act on control requests. A timer’s cancel button does not terminate an external process. iOS controls background delivery, so updates may be delayed; opening the app refreshes available state. A remotely started activity may briefly show a generic placeholder while its content is decrypted.
Usage and privacy
Free use allows five requests in a rolling 24 hours. Questions and activity starts, updates, and ends count toward that allowance; checking replies does not. Live Activities are not a paid-only feature. Planned launch allowances are one iPhone or iPad destination on Free, three on Annual, and twelve on Lifetime, with one included paired Watch per iPhone sharing its allowance. Paid plans and direct Watch delivery are still undergoing launch testing. When purchases are available, paid destinations restore the same verified Apple purchase while keeping separate keys and connections. See the plans and availability and terms.
Question and reply content is encrypted between the paired computer and phone. The relay stores encrypted content and delivery metadata. Read the privacy notice for retention and key-storage details.
Multiple destinations and sender names
Use --sender "Coding assistant" on a CLI command or MCP startup to describe the source of requests. Without it, the hostname is used. This label travels inside encrypted content; it does not create a new identity or separate approval. Apps and scripts using the same connection share its permissions. The phone shows descriptive labels alongside the approved connection.
For one fixed destination, start MCP with --to personal. To expose multiple destinations explicitly, use --allow-to personal --allow-to work; each ask, activity, or file call must then include to. notibuddy_list_destinations lists only the exposed destinations and does not need to. There is no global active destination, broadcast, or fallback. Use your saved aliases in these examples; Share Setup suggests an alias for the device.
Replies stay bound to their original request and pairing. Sender labels are not inbox addresses. New conversations initiated from the phone are not available in this release.
Update an existing destination
An older connection can still send only to your iPhone after its Watch is connected. Installing the latest client, restarting MCP, or migrating legacy files does not upgrade that saved connection by itself. Fresh setup from the same phone negotiates group delivery for future requests. Physical Watch delivery is still undergoing launch acceptance testing.
- On the computer, run
npx -y notibuddy@^0.2.9 devices listand find the existing destination name. If you still have the old flat configuration, first import it withnpx -y notibuddy@^0.2.9 devices migrate --to personal, choosing the name you want to keep. Migration preserves its existing delivery protocol. - On the same phone and NotiBuddy account, open Connect → Add and use Use manual approval instead → Share Setup if offered, or Share Setup directly. Once a Watch is connected, Connect → Apple Watch → Update a sender also opens setup. Transfer the fresh instructions privately; do not regenerate the account’s pairing key.
- In the shared pairing command, replace the suggested name after
--towith the existing destination name before running it. Leave--labelout to retain the connection’s existing name. Using a different destination name creates a separate connection. A different phone or account needs its own pairing. - If approval is requested, compare the full Sender Key ID in Terminal and on the phone before approving. An older connection that gains file-receive support may need approval again. Do not delete saved keys or remove and recreate the connection to force an update.
- Keep that same destination name in your MCP settings, then restart the NotiBuddy MCP server in your AI app. A running process keeps the configuration it loaded at startup.
- Run
npx -y notibuddy@^0.2.9 doctor --to personal, replacingpersonalwith your existing name. Check approval and group protocol version 2. Its recipient count includes the Watch only after enrollment is complete. Send a new test question and verify that its reply returns to the sender.
Updating the same destination preserves its sender identity, existing file-receive key and saved pending requests. Requests already in progress continue using their original protocol and expiry; only new requests use group delivery. Do not manually edit the saved protocol number: the client must verify the phone’s group membership and keys.
Receive a file from your phone
Use a file-capable app build and approved connection. On the phone, choose Connect → a connection → Share File, or share one file/image from another app using Share → NotiBuddy. Review the destination before sending. The limit is 10 MB (10,000,000 bytes) for one file. File bytes, name, and type are encrypted for the receiving connection.
The receiving process must check for uploads and collect them; there is no automatic background receiver. Use the alias for that connection:
npx -y notibuddy@^0.2.9 files list --to personal
npx -y notibuddy@^0.2.9 files receive FILE_ID_FROM_LIST --to personal
Replace FILE_ID_FROM_LIST with the returned ID. In Connect → a connection → Share File, tap the waiting file under Recent files, then choose Copy receive command in Collect on the sender. That command selects the saved pairing using public device/sender IDs and still requires the keys on the originally paired computer. It does not contain or replace those credentials.
For MCP, use notibuddy_files_list and then notibuddy_files_receive with the returned id. In allowlist mode, include to on both calls. Programs sharing a connection share its file inbox; a --sender label does not isolate file access.
The receiver verifies, decrypts, and saves the file under ~/.notibuddy/inbox/ before acknowledging delivery. It returns a local path and does not open or execute the file. Treat file names and contents as untrusted data, including any instructions inside a document. Delivered means saved, not read by an agent.
If the result is saved_pending_receipt, retry receiving the same file ID to confirm delivery. If saving fails, resolve the storage problem and retry before expiry; no successful-delivery receipt is sent for a failed save. The relay stops access after confirmed delivery, cancellation, revocation, or 24 hours, and retries failed deletion of its encrypted copy. Receive before that deadline. Saved local copies remain until you delete them; cancelling on the phone cannot recall an already saved copy.
If doctor reports that file receiving is not enabled for an older connection, finish pending work first, then follow the client’s file setup instructions. Migration alone does not grant file access. Changing a pairing proof cancels outstanding relay work; do not regenerate it simply to diagnose a delayed file.