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

VariableRequiredSecretDescription
OFW_USERNAMENoNoYour OurFamilyWizard login email address. Optional — if omitted, the server falls back to the fetchproxy browser extension (requires being signed in to ourfamilywizard.com).
OFW_PASSWORDNoYesYour OurFamilyWizard password. Optional — see OFW_USERNAME.
OFW_WRITE_MODENoNoWrite-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_WRITESNoNoSet 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_READNoNoDefault "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_BODIESNoNoDefault "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_DAYSNoNoAllow 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_DAYSNoNoDeny list of days message content may NOT be read (same format as OFW_READ_DAYS; wins over it). Unset = none.
OFW_SESSION_CACHENoNoSet to false to disable the on-disk session cache and re-authenticate on every process start. Defaults to enabled.
OFW_SESSION_FILENoNoAbsolute path for the session cache file. Defaults to $MCP_DATA_DIR/.ofw-mcp/session.json.
OFW_EXPENSE_ONLYNoNoSet true to register only healthcheck plus expense tools. All profile/dashboard, message, calendar, and journal tools are structurally absent.
OFW_EXPENSE_UPLOAD_ONLYNoNoSet 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_ATTACHMENTSNoNoSet "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_DIRNoNoWhere 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_DIRNoNoThe 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_IDENTITYNoNoExplicit 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_DIRNoNoOverrides the message cache directory (default ~/.cache/ofw-mcp).
OFW_DISABLE_FETCHPROXYNoNoSkip the fetchproxy fallback, so missing credentials become a hard error (useful in headless CI).
OFW_AUTO_REFRESHNoNoWhen 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_SECONDSNoNoHow 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_REQUESTSNoNoPer-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_MSNoNoPer-request timeout for OFW API calls, in milliseconds (default 30000). Each retry gets its own fresh window.
OFW_DEBUG_LOGNoNoLog every OFW request/response to stderr (Authorization redacted). Diagnostic only.
DISPLAY_TZNoNoIANA 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_PORTNoNoLocalhost 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_HOSTNoNoBind 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_DIRNoNoAbsolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/).

Checks

CheckResultDetail
Source repository linkedPasshttps://github.com/chrischall/ofw-mcp
Version pinnedPassEvery package has an explicit version
Secrets requestedInfoAsks for 1 secret: OFW_PASSWORD
Known package registryPassAll packages come from npm, PyPI, OCI, NuGet or MCPB
Namespace ownershipInfoName verified via GitHub account chrischall
Registry text aimed at the AIPassDescription and settings contain no hidden characters or instructions to the AI
Install scriptsPassofw-mcp@2.22.0 runs nothing at install
Code red flagsWarnReads 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 AIPassNo 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.

Popularity17 / 40

14 GitHub stars, 1,189 downloads last week, no Hacker News posts found. Best two of the three, each on a log scale.

Activity15 / 25

Last push 2026-10-28, last release 2026-10-28, 0 commits in 90 days.

Issue health15 / 15

48 closed of 48 issues.

Our checks16 / 20

1 warning, each costing a fifth.

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 nameio.github.chrischall/ofw-mcp
PublisherGitHub account chrischall
How the name is verifiedName verified via GitHub account chrischall. The registry ties the name prefix to that account or domain; it does not check the code.
TypeLocal: runs on your machine from a package
Packagesnpm ofw-mcp 2.22.0 (stdio)
Version2.22.0
Published
Last updated
Source repositoryhttps://github.com/chrischall/ofw-mcp
WebsiteNone linked
CategoryEmail & messaging (assigned by keyword rule, not by hand)

Related servers in Email & messaging