This skill should be used when the user asks about OurFamilyWizard (OFW) co-parenting data. Triggers on phrases like "check OFW", "OurFamilyWizard inbox", "OFW messages", "OFW calendar", "OFW expenses", "what did my co-parent say", "log an expense in OFW", "OFW journal", or any request involving co-parenting messages, calendar events, shared expenses, or journal entries.
Browser
ofw-fpx
Try itAccess OurFamilyWizard (OFW) — messages, calendar, expenses, journal — from a shell with the fpx CLI (@fetchproxy/cli) instead of running the ofw-mcp server: capture the signed-in web app's Bearer token once via the browser bridge, then curl the REST API directly. Use when you want OFW data without the MCP, in a script, or on a machine where the MCP isn't installed.
What it does
Access OurFamilyWizard (OFW) — messages, calendar, expenses, journal — from a shell with the fpx CLI (@fetchproxy/cli) instead of running the ofw-mcp server: capture the signed-in web app's Bearer token once via the browser bridge, then curl the REST API directly. Use when you want OFW data without the MCP, in a script, or on a machine where the MCP isn't installed.
The skill document
OurFamilyWizard via fpx + curl (no MCP)
OFW's app (ofw.ourfamilywizard.com) has no API key a script can request —
the only credential is the Bearer token the web app itself mints on login
and stores in localStorage["auth"] (with localStorage["tokenExpiry"]
alongside). Once you have that token the API itself has no bot wall —
ofw-mcp's own src/client.ts calls it with plain Node fetch for every
request. So this skill is hybrid: fpx captures the token from a
signed-in browser tab ONCE, then plain curl does every read/write from
then on. fetchproxy never touches the actual API calls.
This is a shared family-court record. Every write here (send,
create_event, create_expense, create_journal_entry,
upload_attachment, the delete_*/bulk-delete calls) lands on the same
record the MCP's OFW_WRITE_MODE gate exists to protect. There is no
dry-run/confirm here — curl just does it. Treat every write like the MCP's
all mode: real, permanent, and visible to your co-parent.
One-time setup
npm install -g @fetchproxy/cli # provides `fpx`
fpx profile add ofw --domain ourfamilywizard.com
fpx profile declare ofw --local-storage auth --local-storage tokenExpiry
fpx pair -p ofw # prints a pair code → approve in Transporter
Requirements: the Transporter browser extension installed, with an
open, signed-in ofw.ourfamilywizard.com (or www.ourfamilywizard.com)
tab, and its Chrome Site access allowing ourfamilywizard.com. Pairing
persists across invocations.
Capture the token (once per shell / whenever it goes stale)
LS=$(fpx local-storage auth tokenExpiry -p ofw)
TOKEN=$(jq -r '.auth' <<<"$LS")
EXPIRES=$(jq -r '.tokenExpiry' <<<"$LS")
If auth comes back empty, sign into OFW in the browser tab first — the
same precondition ofw-mcp's own fetchproxy fallback documents in
src/auth.ts.
Core call
Every request needs the bearer token plus OFW's two protocol headers (sent on every call, not just login):
curl -s 'https://ofw.ourfamilywizard.com/pub/v2/profiles' \
-H "Authorization: Bearer $TOKEN" \
-H 'ofw-client: WebApplication' \
-H 'ofw-version: 1.0.0' \
| jq .
ofw-version is OFW's wire-protocol version (see src/protocol.ts),
unrelated to any package version — send it as-is. Writes add
-H 'Content-Type: application/json' --data '...' for JSON bodies, or
-F multipart fields for uploads/deletes — both shown per-endpoint in
references/requests.md.
The one rule: re-GET after every message POST to confirm it landed
OFW's POST /pub/v3/messages response is minimal ({"entityId": } or
legacy {"id": }) and — worse — its draft-replace path silently
no-ops while still echoing success. Never trust the POST status alone for
a send or draft save: immediately GET /pub/v3/messages/{id} with the
returned id and check the body/subject actually match what you sent. See
§2/§3 in references/requests.md.
Auth-error handling
- 401 — the token expired or was invalidated. OFW has no refresh-token
flow; re-mint by reloading/re-signing-in on the
ourfamilywizard.comtab, then re-run the capture step above. - 429 — OFW's own client waits 2s and retries exactly once
(
src/client.ts); do the same:sleep 2and resend the identical request. A second 429 is a real rate-limit — back off further. - Any other non-2xx is a real upstream error — surface the response body.
All 20 endpoint operations, request bodies, and jq projections are in
references/requests.md, transcribed from src/tools/*.ts, src/sync.ts,
and src/tools/_shared.ts — nothing here is guessed.
Notes
- Base URL is
https://ofw.ourfamilywizard.comfor every endpoint (thewww.host serves the web app UI, not the API). ofw-mcpmaintains a local SQLite message cache for fast list/search; this skill has no cache — every list call here goes straight to OFW, andGET /pub/v3/messages/{id}on an unread inbox message marks it read on OFW, exactly as it does for the MCP.- This project is developed and maintained by AI (Claude).
Related skills
Read and write OurFamilyWizard messages, calendar events, expenses, and journal entries from your agent.
Read Workday HR data (org chart, worker profiles, tasks, pay, benefits, compensation, your app menu) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the workday-mcp server — fetch any *.htmld data endpoint through your own signed-in *.myworkday.com tab (SSO/Ping/Okta/Entra already cleared). Use when you want Workday data without the MCP, in a script, or on a machine where the MCP isn't installed.
Query and manage OpenTable (opentable.com) restaurant reservations from a shell with the fpx CLI (@fetchproxy/cli) instead of running the opentable-mcp server — search restaurants, check slot availability, list reservations/favorites, and book/modify/cancel a table via one-shot GraphQL + REST calls through a signed-in browser tab. Use when you want OpenTable data or actions without the MCP, in a script, or on a machine where the MCP isn't installed.
Query OneHome (CoreLogic) — the agent magic-link real-estate portal at portal.onehome.com — from a shell with the fpx CLI (@fetchproxy/cli) instead of running the onehome-mcp server. Resolve the consumer's group / saved-search scope, search shared listings, and read listing detail via one-shot GraphQL calls routed through the signed-in browser tab. Use when you want OneHome data without the MCP, in a script, or on a machine where the MCP isn't installed.
Read HoneyBook client-portal data (contracts, invoices, proposals, payment methods, workspace status) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the honeybook-mcp server — capture a vendor session once via the signed-in browser tab, then curl api.honeybook.com directly. Use when you want HoneyBook data without the MCP, in a script, or on a machine where the MCP isn't installed.