ofw-mcp
io.github.chrischall/ofw-mcp
About ofw-mcp
ofw-mcp is an MCP server published by the GitHub account chrischall. OurFamilyWizard co-parenting for Claude — messages, calendar, expenses, and journal
It runs on your own machine: your AI client starts it from the npm package ofw-mcp at version 2.22.0.
It asks for one secret: OFW_PASSWORD. Give it a key with the least access that still works.
Version 2.22.0 was published on 27 October 2026, and the source code is public, so you can read it before installing.
Written from the registry entry. 9 automated checks on the registry entry and the package code: 6 pass, 1 warn, 0 fail, 2 info. How we check.
What it asks for
| Variable | Required | Secret | Description |
|---|---|---|---|
OFW_USERNAME | No | No | Your OurFamilyWizard login email address. Optional — if omitted, the server falls back to the fetchproxy browser extension (requires being signed in to ourfamilywizard.com). |
OFW_PASSWORD | No | Yes | Your OurFamilyWizard password. Optional — see OFW_USERNAME. |
OFW_WRITE_MODE | No | No | Write-tool gate: "none" registers no write tools; "drafts" registers draft-level writes only (save/delete drafts, upload attachments); "all" registers everything (default). Unrecognized values fail closed to "none". |
OFW_CALENDAR_WRITES | No | No | Set to "true" to register calendar write tools (create/update/delete event) in "drafts" write mode. Events have no draft stage but are reversible. Never overrides "none". |
OFW_ALLOW_MARK_READ | No | No | Default "true". Set "false" to forbid any tool from marking a message read on OurFamilyWizard - reading a body for the first time stamps a co-parent-visible "First Viewed" time that cannot be undone. A ceiling: no per-call argument can raise it. |
OFW_FETCH_UNREAD_BODIES | No | No | Default "false". Whether ofw_sync_messages fetches unread inbox bodies by default (each fetch stamps a First Viewed time). Capped by OFW_ALLOW_MARK_READ. |
OFW_READ_DAYS | No | No | Allow list of days message content may be read, e.g. "mon,thu" (weekdays, YYYY-MM-DD, or YYYY-MM-DD..YYYY-MM-DD, in DISPLAY_TZ). Other days: subjects only, nothing marked read. Unset = every day. |
OFW_NO_READ_DAYS | No | No | Deny list of days message content may NOT be read (same format as OFW_READ_DAYS; wins over it). Unset = none. |
OFW_SESSION_CACHE | No | No | Set to false to disable the on-disk session cache and re-authenticate on every process start. Defaults to enabled. |
OFW_SESSION_FILE | No | No | Absolute path for the session cache file. Defaults to $MCP_DATA_DIR/.ofw-mcp/session.json. |
OFW_EXPENSE_ONLY | No | No | Set true to register only healthcheck plus expense tools. All profile/dashboard, message, calendar, and journal tools are structurally absent. |
OFW_EXPENSE_UPLOAD_ONLY | No | No | Set true for strict reimbursement upload mode: only healthcheck, ofw_upload_expense_pdf, ofw_create_expense, and ofw_update_expense register. Excludes ofw_mark_expense_reimbursed. Implies OFW_EXPENSE_ONLY. |
OFW_INLINE_ATTACHMENTS | No | No | Set "true" to return attachments as MCP content blocks by default (images render directly; other files come back as embedded resources) instead of writing to disk. Callers can still override per call via the tool's `inline` argument. |
OFW_ATTACHMENTS_DIR | No | No | Where ofw_download_attachment writes (default ~/Downloads/ofw-mcp). Every disk write is confined to it: a saveTo outside it (after resolving symlinks) is refused, and an existing file is replaced only with force:true. |
OFW_UPLOAD_DIR | No | No | The only directory ofw_upload_attachment may read from (default: OFW_ATTACHMENTS_DIR). Paths outside it after resolving symlinks, hidden files/dirs, and files over 25 MiB are refused. |
OFW_CACHE_IDENTITY | No | No | Explicit cache-key label; overrides OFW_USERNAME for fetchproxy-only multi-account setups. If you have multiple OFW accounts and want them to use separate caches, set it to a label per profile. |
OFW_CACHE_DIR | No | No | Overrides the message cache directory (default ~/.cache/ofw-mcp). |
OFW_DISABLE_FETCHPROXY | No | No | Skip the fetchproxy fallback, so missing credentials become a hard error (useful in headless CI). |
OFW_AUTO_REFRESH | No | No | When a cached read comes back EMPTY from a non-fresh cache, the read tools sync the backing folders and answer from the refreshed cache instead of refusing with UNVERIFIED_EMPTY (default off, i.e. refuse). Per-call autoRefresh overrides it. A refresh that does not make the read verifiable still refuses. |
OFW_FRESHNESS_TTL_SECONDS | No | No | How long a verified-against-OFW folder stays labelled `fresh` in read tools' `freshness` block (default 300). Unusable values fall back to the default — a typo must never widen the window in which stale data reads as current. |
OFW_SYNC_MAX_REQUESTS | No | No | Per-call OFW-request budget for ofw_sync_messages: a positive integer caps how many OFW requests one sync call may make before pausing; the next call resumes where it left off. Unset means unbounded (local installs walk fully in one call). |
OFW_REQUEST_TIMEOUT_MS | No | No | Per-request timeout for OFW API calls, in milliseconds (default 30000). Each retry gets its own fresh window. |
OFW_DEBUG_LOG | No | No | Log every OFW request/response to stderr (Authorization redacted). Diagnostic only. |
DISPLAY_TZ | No | No | IANA zone (e.g. America/New_York, the default) for every `<field>Display` value, and the zone a NAIVE source timestamp is assumed to be wall-clock in. OFW's API reports naive local times in the account's own zone, so this must match it. Unrecognized values fall back to the default. |
FETCHPROXY_WS_PORT | No | No | Localhost port of the fetchproxy concentrator the ContextMint Bridge extension connects to (default 37149). Every MCP on one machine shares it, so move it for all of them or not at all. |
FETCHPROXY_WS_HOST | No | No | Bind interface for the fetchproxy concentrator, a literal IP only (default 127.0.0.1). Keep on loopback; it exists for hosted deployments that run each MCP in its own network namespace. |
FETCHPROXY_IDENTITY_DIR | No | No | Absolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/). |
Checks
| Check | Result | Detail |
|---|---|---|
| Source repository linked | Pass | https://github.com/chrischall/ofw-mcp |
| Version pinned | Pass | Every package has an explicit version |
| Secrets requested | Info | Asks for 1 secret: OFW_PASSWORD |
| Known package registry | Pass | All packages come from npm, PyPI, OCI, NuGet or MCPB |
| Namespace ownership | Info | Name verified via GitHub account chrischall |
| Registry text aimed at the AI | Pass | Description and settings contain no hidden characters or instructions to the AI |
| Install scripts | Pass | ofw-mcp@2.22.0 runs nothing at install |
| Code red flags | Warn | Reads SSH or cloud credentials (dist/tools/attachments.js:108: "/.ssh/id_"); Hard-coded data-collection endpoint (dist/client.js:178: "requestBin"); Hard-coded data-collection endpoint (dist/tools/messages.js:1650: "requestBin") |
| Text aimed at the AI | Pass | No hidden characters or instructions to the AI in 50 files, including comments and the README |
Popularity & health: 63 / 100
Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.
6 forks, 350 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.
What people say
No Hacker News threads link to its source code.
Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.
Facts
| Registry name | io.github.chrischall/ofw-mcp |
|---|---|
| Publisher | GitHub account chrischall |
| How the name is verified | Name verified via GitHub account chrischall. The registry ties the name prefix to that account or domain; it does not check the code. |
| Type | Local: runs on your machine from a package |
| Packages | npm ofw-mcp 2.22.0 (stdio) |
| Version | 2.22.0 |
| Published | |
| Last updated | |
| Source repository | https://github.com/chrischall/ofw-mcp |
| Website | None linked |
| Category | Email & messaging (assigned by keyword rule, not by hand) |
Related servers in Email & messaging
- Keeploop7/7Mail, Calendar, Messages, Notes, Contacts, Slack on your Mac for…
- Apple Tools (Unified)7/7Unified Apple ecosystem MCP server for macOS: Mail, Calendar,…
macOS Apps7/7Mail, Calendar, Reminders, Notes, Messages and more on macOS: cited…- iCloud MCP7/7Apple Mail, Calendar, Contacts, Reminders, Notes, Messages and…
- netsi4/4netsi, the personal agent network: contacts, a pull-only inbox and…
- Librus Synergia6/7Librus Synergia school gradebook: grades, attendance, timetable,…