ofw mcp for VS Code
io.github.chrischall/ofw-mcp
OurFamilyWizard co-parenting for Claude — messages, calendar, expenses, and journal
client:VS Code
transport:stdio
runtime:npm
Install ofw mcp in VS Code
.vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "ofw-username",
"description": "OFW_USERNAME",
"password": true
},
{
"type": "promptString",
"id": "ofw-password",
"description": "OFW_PASSWORD",
"password": true
},
{
"type": "promptString",
"id": "ofw-write-mode",
"description": "OFW_WRITE_MODE",
"password": true
},
{
"type": "promptString",
"id": "ofw-calendar-writes",
"description": "OFW_CALENDAR_WRITES",
"password": true
},
{
"type": "promptString",
"id": "ofw-allow-mark-read",
"description": "OFW_ALLOW_MARK_READ",
"password": true
},
{
"type": "promptString",
"id": "ofw-confirm-mark-read",
"description": "OFW_CONFIRM_MARK_READ",
"password": true
},
{
"type": "promptString",
"id": "ofw-fetch-unread-bodies",
"description": "OFW_FETCH_UNREAD_BODIES",
"password": true
},
{
"type": "promptString",
"id": "ofw-read-days",
"description": "OFW_READ_DAYS",
"password": true
},
{
"type": "promptString",
"id": "ofw-no-read-days",
"description": "OFW_NO_READ_DAYS",
"password": true
},
{
"type": "promptString",
"id": "ofw-session-cache",
"description": "OFW_SESSION_CACHE",
"password": true
},
{
"type": "promptString",
"id": "ofw-session-file",
"description": "OFW_SESSION_FILE",
"password": true
},
{
"type": "promptString",
"id": "ofw-expense-only",
"description": "OFW_EXPENSE_ONLY",
"password": true
},
{
"type": "promptString",
"id": "ofw-expense-upload-only",
"description": "OFW_EXPENSE_UPLOAD_ONLY",
"password": true
},
{
"type": "promptString",
"id": "ofw-inline-attachments",
"description": "OFW_INLINE_ATTACHMENTS",
"password": true
},
{
"type": "promptString",
"id": "ofw-attachments-dir",
"description": "OFW_ATTACHMENTS_DIR",
"password": true
},
{
"type": "promptString",
"id": "ofw-upload-dir",
"description": "OFW_UPLOAD_DIR",
"password": true
},
{
"type": "promptString",
"id": "ofw-cache-identity",
"description": "OFW_CACHE_IDENTITY",
"password": true
},
{
"type": "promptString",
"id": "ofw-cache-dir",
"description": "OFW_CACHE_DIR",
"password": true
},
{
"type": "promptString",
"id": "ofw-disable-fetchproxy",
"description": "OFW_DISABLE_FETCHPROXY",
"password": true
},
{
"type": "promptString",
"id": "ofw-auto-refresh",
"description": "OFW_AUTO_REFRESH",
"password": true
},
{
"type": "promptString",
"id": "ofw-freshness-ttl-seconds",
"description": "OFW_FRESHNESS_TTL_SECONDS",
"password": true
},
{
"type": "promptString",
"id": "ofw-sync-max-requests",
"description": "OFW_SYNC_MAX_REQUESTS",
"password": true
},
{
"type": "promptString",
"id": "ofw-request-timeout-ms",
"description": "OFW_REQUEST_TIMEOUT_MS",
"password": true
},
{
"type": "promptString",
"id": "ofw-debug-log",
"description": "OFW_DEBUG_LOG",
"password": true
},
{
"type": "promptString",
"id": "display-tz",
"description": "DISPLAY_TZ",
"password": true
},
{
"type": "promptString",
"id": "fetchproxy-ws-port",
"description": "FETCHPROXY_WS_PORT",
"password": true
},
{
"type": "promptString",
"id": "fetchproxy-ws-host",
"description": "FETCHPROXY_WS_HOST",
"password": true
},
{
"type": "promptString",
"id": "fetchproxy-identity-dir",
"description": "FETCHPROXY_IDENTITY_DIR",
"password": true
}
],
"servers": {
"ofw-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ofw-mcp"
],
"env": {
"OFW_USERNAME": "${input:ofw-username}",
"OFW_PASSWORD": "${input:ofw-password}",
"OFW_WRITE_MODE": "${input:ofw-write-mode}",
"OFW_CALENDAR_WRITES": "${input:ofw-calendar-writes}",
"OFW_ALLOW_MARK_READ": "${input:ofw-allow-mark-read}",
"OFW_CONFIRM_MARK_READ": "${input:ofw-confirm-mark-read}",
"OFW_FETCH_UNREAD_BODIES": "${input:ofw-fetch-unread-bodies}",
"OFW_READ_DAYS": "${input:ofw-read-days}",
"OFW_NO_READ_DAYS": "${input:ofw-no-read-days}",
"OFW_SESSION_CACHE": "${input:ofw-session-cache}",
"OFW_SESSION_FILE": "${input:ofw-session-file}",
"OFW_EXPENSE_ONLY": "${input:ofw-expense-only}",
"OFW_EXPENSE_UPLOAD_ONLY": "${input:ofw-expense-upload-only}",
"OFW_INLINE_ATTACHMENTS": "${input:ofw-inline-attachments}",
"OFW_ATTACHMENTS_DIR": "${input:ofw-attachments-dir}",
"OFW_UPLOAD_DIR": "${input:ofw-upload-dir}",
"OFW_CACHE_IDENTITY": "${input:ofw-cache-identity}",
"OFW_CACHE_DIR": "${input:ofw-cache-dir}",
"OFW_DISABLE_FETCHPROXY": "${input:ofw-disable-fetchproxy}",
"OFW_AUTO_REFRESH": "${input:ofw-auto-refresh}",
"OFW_FRESHNESS_TTL_SECONDS": "${input:ofw-freshness-ttl-seconds}",
"OFW_SYNC_MAX_REQUESTS": "${input:ofw-sync-max-requests}",
"OFW_REQUEST_TIMEOUT_MS": "${input:ofw-request-timeout-ms}",
"OFW_DEBUG_LOG": "${input:ofw-debug-log}",
"DISPLAY_TZ": "${input:display-tz}",
"FETCHPROXY_WS_PORT": "${input:fetchproxy-ws-port}",
"FETCHPROXY_WS_HOST": "${input:fetchproxy-ws-host}",
"FETCHPROXY_IDENTITY_DIR": "${input:fetchproxy-identity-dir}"
}
}
}
}
VS Code prompts for each input the first time the server starts, so no secret is written to the file. VS Code docs