NestDaddy

Ofw Mcp

io.github.chrischall/ofw-mcp · v2.29.1

OurFamilyWizard co-parenting for Claude — messages, calendar, expenses, and journal

Connect Runs on your machine

Terminal
claude mcp add ofw-mcp -e OFW_USERNAME=<OFW_USERNAME> -e OFW_PASSWORD=<OFW_PASSWORD> -e OFW_WRITE_MODE=<OFW_WRITE_MODE> -e OFW_CALENDAR_WRITES=<OFW_CALENDAR_WRITES> -e OFW_ALLOW_MARK_READ=<OFW_ALLOW_MARK_READ> -e OFW_CONFIRM_MARK_READ=<OFW_CONFIRM_MARK_READ> -e OFW_FETCH_UNREAD_BODIES=<OFW_FETCH_UNREAD_BODIES> -e OFW_READ_DAYS=<OFW_READ_DAYS> -e OFW_NO_READ_DAYS=<OFW_NO_READ_DAYS> -e OFW_SESSION_CACHE=<OFW_SESSION_CACHE> -e OFW_SESSION_FILE=<OFW_SESSION_FILE> -e OFW_EXPENSE_ONLY=<OFW_EXPENSE_ONLY> -e OFW_EXPENSE_UPLOAD_ONLY=<OFW_EXPENSE_UPLOAD_ONLY> -e OFW_INLINE_ATTACHMENTS=<OFW_INLINE_ATTACHMENTS> -e OFW_ATTACHMENTS_DIR=<OFW_ATTACHMENTS_DIR> -e OFW_UPLOAD_DIR=<OFW_UPLOAD_DIR> -e OFW_CACHE_IDENTITY=<OFW_CACHE_IDENTITY> -e OFW_CACHE_DIR=<OFW_CACHE_DIR> -e OFW_DISABLE_FETCHPROXY=<OFW_DISABLE_FETCHPROXY> -e OFW_AUTO_REFRESH=<OFW_AUTO_REFRESH> -e OFW_FRESHNESS_TTL_SECONDS=<OFW_FRESHNESS_TTL_SECONDS> -e OFW_SYNC_MAX_REQUESTS=<OFW_SYNC_MAX_REQUESTS> -e OFW_REQUEST_TIMEOUT_MS=<OFW_REQUEST_TIMEOUT_MS> -e OFW_DEBUG_LOG=<OFW_DEBUG_LOG> -e DISPLAY_TZ=<DISPLAY_TZ> -e FETCHPROXY_WS_PORT=<FETCHPROXY_WS_PORT> -e FETCHPROXY_WS_HOST=<FETCHPROXY_WS_HOST> -e FETCHPROXY_IDENTITY_DIR=<FETCHPROXY_IDENTITY_DIR> -- npx -y [email protected]
claude_desktop_config.json
{
  "mcpServers": {
    "ofw-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "OFW_USERNAME": "<OFW_USERNAME>",
        "OFW_PASSWORD": "<OFW_PASSWORD>",
        "OFW_WRITE_MODE": "<OFW_WRITE_MODE>",
        "OFW_CALENDAR_WRITES": "<OFW_CALENDAR_WRITES>",
        "OFW_ALLOW_MARK_READ": "<OFW_ALLOW_MARK_READ>",
        "OFW_CONFIRM_MARK_READ": "<OFW_CONFIRM_MARK_READ>",
        "OFW_FETCH_UNREAD_BODIES": "<OFW_FETCH_UNREAD_BODIES>",
        "OFW_READ_DAYS": "<OFW_READ_DAYS>",
        "OFW_NO_READ_DAYS": "<OFW_NO_READ_DAYS>",
        "OFW_SESSION_CACHE": "<OFW_SESSION_CACHE>",
        "OFW_SESSION_FILE": "<OFW_SESSION_FILE>",
        "OFW_EXPENSE_ONLY": "<OFW_EXPENSE_ONLY>",
        "OFW_EXPENSE_UPLOAD_ONLY": "<OFW_EXPENSE_UPLOAD_ONLY>",
        "OFW_INLINE_ATTACHMENTS": "<OFW_INLINE_ATTACHMENTS>",
        "OFW_ATTACHMENTS_DIR": "<OFW_ATTACHMENTS_DIR>",
        "OFW_UPLOAD_DIR": "<OFW_UPLOAD_DIR>",
        "OFW_CACHE_IDENTITY": "<OFW_CACHE_IDENTITY>",
        "OFW_CACHE_DIR": "<OFW_CACHE_DIR>",
        "OFW_DISABLE_FETCHPROXY": "<OFW_DISABLE_FETCHPROXY>",
        "OFW_AUTO_REFRESH": "<OFW_AUTO_REFRESH>",
        "OFW_FRESHNESS_TTL_SECONDS": "<OFW_FRESHNESS_TTL_SECONDS>",
        "OFW_SYNC_MAX_REQUESTS": "<OFW_SYNC_MAX_REQUESTS>",
        "OFW_REQUEST_TIMEOUT_MS": "<OFW_REQUEST_TIMEOUT_MS>",
        "OFW_DEBUG_LOG": "<OFW_DEBUG_LOG>",
        "DISPLAY_TZ": "<DISPLAY_TZ>",
        "FETCHPROXY_WS_PORT": "<FETCHPROXY_WS_PORT>",
        "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
        "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "mcpServers": {
    "ofw-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "OFW_USERNAME": "<OFW_USERNAME>",
        "OFW_PASSWORD": "<OFW_PASSWORD>",
        "OFW_WRITE_MODE": "<OFW_WRITE_MODE>",
        "OFW_CALENDAR_WRITES": "<OFW_CALENDAR_WRITES>",
        "OFW_ALLOW_MARK_READ": "<OFW_ALLOW_MARK_READ>",
        "OFW_CONFIRM_MARK_READ": "<OFW_CONFIRM_MARK_READ>",
        "OFW_FETCH_UNREAD_BODIES": "<OFW_FETCH_UNREAD_BODIES>",
        "OFW_READ_DAYS": "<OFW_READ_DAYS>",
        "OFW_NO_READ_DAYS": "<OFW_NO_READ_DAYS>",
        "OFW_SESSION_CACHE": "<OFW_SESSION_CACHE>",
        "OFW_SESSION_FILE": "<OFW_SESSION_FILE>",
        "OFW_EXPENSE_ONLY": "<OFW_EXPENSE_ONLY>",
        "OFW_EXPENSE_UPLOAD_ONLY": "<OFW_EXPENSE_UPLOAD_ONLY>",
        "OFW_INLINE_ATTACHMENTS": "<OFW_INLINE_ATTACHMENTS>",
        "OFW_ATTACHMENTS_DIR": "<OFW_ATTACHMENTS_DIR>",
        "OFW_UPLOAD_DIR": "<OFW_UPLOAD_DIR>",
        "OFW_CACHE_IDENTITY": "<OFW_CACHE_IDENTITY>",
        "OFW_CACHE_DIR": "<OFW_CACHE_DIR>",
        "OFW_DISABLE_FETCHPROXY": "<OFW_DISABLE_FETCHPROXY>",
        "OFW_AUTO_REFRESH": "<OFW_AUTO_REFRESH>",
        "OFW_FRESHNESS_TTL_SECONDS": "<OFW_FRESHNESS_TTL_SECONDS>",
        "OFW_SYNC_MAX_REQUESTS": "<OFW_SYNC_MAX_REQUESTS>",
        "OFW_REQUEST_TIMEOUT_MS": "<OFW_REQUEST_TIMEOUT_MS>",
        "OFW_DEBUG_LOG": "<OFW_DEBUG_LOG>",
        "DISPLAY_TZ": "<DISPLAY_TZ>",
        "FETCHPROXY_WS_PORT": "<FETCHPROXY_WS_PORT>",
        "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
        "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "ofw-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "OFW_USERNAME": "<OFW_USERNAME>",
        "OFW_PASSWORD": "<OFW_PASSWORD>",
        "OFW_WRITE_MODE": "<OFW_WRITE_MODE>",
        "OFW_CALENDAR_WRITES": "<OFW_CALENDAR_WRITES>",
        "OFW_ALLOW_MARK_READ": "<OFW_ALLOW_MARK_READ>",
        "OFW_CONFIRM_MARK_READ": "<OFW_CONFIRM_MARK_READ>",
        "OFW_FETCH_UNREAD_BODIES": "<OFW_FETCH_UNREAD_BODIES>",
        "OFW_READ_DAYS": "<OFW_READ_DAYS>",
        "OFW_NO_READ_DAYS": "<OFW_NO_READ_DAYS>",
        "OFW_SESSION_CACHE": "<OFW_SESSION_CACHE>",
        "OFW_SESSION_FILE": "<OFW_SESSION_FILE>",
        "OFW_EXPENSE_ONLY": "<OFW_EXPENSE_ONLY>",
        "OFW_EXPENSE_UPLOAD_ONLY": "<OFW_EXPENSE_UPLOAD_ONLY>",
        "OFW_INLINE_ATTACHMENTS": "<OFW_INLINE_ATTACHMENTS>",
        "OFW_ATTACHMENTS_DIR": "<OFW_ATTACHMENTS_DIR>",
        "OFW_UPLOAD_DIR": "<OFW_UPLOAD_DIR>",
        "OFW_CACHE_IDENTITY": "<OFW_CACHE_IDENTITY>",
        "OFW_CACHE_DIR": "<OFW_CACHE_DIR>",
        "OFW_DISABLE_FETCHPROXY": "<OFW_DISABLE_FETCHPROXY>",
        "OFW_AUTO_REFRESH": "<OFW_AUTO_REFRESH>",
        "OFW_FRESHNESS_TTL_SECONDS": "<OFW_FRESHNESS_TTL_SECONDS>",
        "OFW_SYNC_MAX_REQUESTS": "<OFW_SYNC_MAX_REQUESTS>",
        "OFW_REQUEST_TIMEOUT_MS": "<OFW_REQUEST_TIMEOUT_MS>",
        "OFW_DEBUG_LOG": "<OFW_DEBUG_LOG>",
        "DISPLAY_TZ": "<DISPLAY_TZ>",
        "FETCHPROXY_WS_PORT": "<FETCHPROXY_WS_PORT>",
        "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
        "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
      }
    }
  }
}

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools

This server runs locally, so its tools are listed by your MCP client once it starts.

Environment variables

NameDescription
OFW_USERNAME
Optional
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
Optional, secret
Your OurFamilyWizard password. Optional — see OFW_USERNAME.
OFW_WRITE_MODE
Optional
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
Optional
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
Optional
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_CONFIRM_MARK_READ
Optional
Default "false". Set "true" to show an unread message's subject, sender and sent time and ask for confirmation before opening it marks it read. Sync fetchUnreadBodies asks too; allowMarkRead probes are disabled.
OFW_FETCH_UNREAD_BODIES
Optional
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
Optional
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: unread inbox messages show subject only and are never marked read; sent and read messages stay readable. Unset = every day.
OFW_NO_READ_DAYS
Optional
Deny list of days unread inbox messages may NOT be opened (same format as OFW_READ_DAYS; wins over it). Unset = none.
OFW_SESSION_CACHE
Optional
Set to false to disable the on-disk session cache and re-authenticate on every process start. Defaults to enabled.
OFW_SESSION_FILE
Optional
Absolute path for the session cache file. Defaults to $MCP_DATA_DIR/.ofw-mcp/session.json.
OFW_EXPENSE_ONLY
Optional
Set true to register only healthcheck plus expense tools. All profile/dashboard, message, calendar, and journal tools are structurally absent.
OFW_EXPENSE_UPLOAD_ONLY
Optional
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
Optional
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
Optional
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
Optional
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
Optional
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
Optional
Overrides the message cache directory (default ~/.cache/ofw-mcp).
OFW_DISABLE_FETCHPROXY
Optional
Skip the fetchproxy fallback, so missing credentials become a hard error (useful in headless CI).
OFW_AUTO_REFRESH
Optional
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 ref…
OFW_FRESHNESS_TTL_SECONDS
Optional
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
Optional
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
Optional
Per-request timeout for OFW API calls, in milliseconds (default 30000). Each retry gets its own fresh window.
OFW_DEBUG_LOG
Optional
Log every OFW request/response to stderr (Authorization redacted). Diagnostic only.
DISPLAY_TZ
Optional
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
Optional
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
Optional
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
Optional
Absolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/).

Details

Package[email protected] (NPM, stdio)
First published12 Nov 2026
Last updated12 Nov 2026
Registry nameio.github.chrischall/ofw-mcp

More communication servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.