ofw-mcp 2.19.4 → 2.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "OurFamilyWizard tools for Claude Code",
9
- "version": "2.19.4"
9
+ "version": "2.19.5"
10
10
  },
11
11
  "plugins": [
12
12
  {
@@ -14,7 +14,7 @@
14
14
  "displayName": "OurFamilyWizard",
15
15
  "source": "./",
16
16
  "description": "OurFamilyWizard co-parenting tools for Claude — messages, calendar, expenses, and journal via MCP",
17
- "version": "2.19.4",
17
+ "version": "2.19.5",
18
18
  "author": {
19
19
  "name": "Chris Chall"
20
20
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ofw",
3
3
  "displayName": "OurFamilyWizard",
4
- "version": "2.19.4",
4
+ "version": "2.19.5",
5
5
  "description": "OurFamilyWizard co-parenting tools for Claude — messages, calendar, expenses, and journal via MCP",
6
6
  "author": {
7
7
  "name": "Chris Chall"
package/README.md CHANGED
@@ -97,7 +97,7 @@ Ask Claude: *"What does my OFW dashboard look like?"* — it should show your un
97
97
  `ofw-mcp` tries three auth paths in order; whichever succeeds first is used. Existing setups keep working unchanged.
98
98
 
99
99
  1. **Env-var credentials (legacy, recommended for Claude Desktop).** Set `OFW_USERNAME` + `OFW_PASSWORD` and the server logs in via OFW's form endpoint. This is the path shown in the Claude Desktop config above.
100
- 2. **fetchproxy fallback (no env vars needed).** When the credentials are absent, the server reads `localStorage["auth"]` once at startup from your already-signed-in `ourfamilywizard.com` tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension. After that one read, all OFW API calls go directly from Node — the extension is **not** in the request hot path. Install the fetchproxy extension (Chrome Web Store / Safari `.dmg`), sign into OurFamilyWizard once, and the MCP just works. If you have multiple OFW accounts and want them to use separate caches, set `OFW_CACHE_IDENTITY` to a label per profile.
100
+ 2. **fetchproxy fallback (no env vars needed).** When the credentials are absent, the server reads `localStorage["auth"]` once at startup from your already-signed-in `ourfamilywizard.com` tab via the **ContextMint Bridge** browser extension (built on [fetchproxy](https://github.com/chrischall/fetchproxy)). After that one read, all OFW API calls go directly from Node — the extension is **not** in the request hot path. Install ContextMint Bridge from its [releases page](https://github.com/nullnet-app/contextmint-bridge/releases) (Chrome: download the Chrome zip, unzip it, and load it unpacked at `chrome://extensions` with Developer mode on; Safari is not available yet — it will ship inside the ContextMint app, which has no public download — so use Chrome for now), sign into OurFamilyWizard once, and the MCP just works. ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (https://github.com/chrischall/fetchproxy#extension) points to it. Its source is public at https://github.com/nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the `.sha256` file published beside it (`shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256`). If you have multiple OFW accounts and want them to use separate caches, set `OFW_CACHE_IDENTITY` to a label per profile.
101
101
  3. **Error.** If neither path is available, the server tells you exactly which fix to apply. Set `OFW_DISABLE_FETCHPROXY=1` to skip the fetchproxy fallback entirely (turns missing credentials into a hard error — useful in headless CI).
102
102
 
103
103
  ### Credential options (env-var path)
@@ -275,9 +275,9 @@ Every outbound request passes its constructed URL through a host check before `f
275
275
 
276
276
  **"0 messages"** — Claude may have read the notification counts rather than the actual messages. Ask explicitly: *"List the messages in my OFW inbox"* or *"Use ofw_list_message_folders then ofw_list_messages"*.
277
277
 
278
- **"OFW auth: set OFW_USERNAME + OFW_PASSWORD, or install the fetchproxy extension…"** — neither auth path is configured. Either fill in the `env` block in your Claude Desktop config, or install the [fetchproxy extension](https://github.com/chrischall/fetchproxy) and sign into `ourfamilywizard.com` in your browser.
278
+ **"OFW auth: set OFW_USERNAME + OFW_PASSWORD, or install ContextMint Bridge…"** — neither auth path is configured. Either fill in the `env` block in your Claude Desktop config, or install [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) and sign into `ourfamilywizard.com` in your browser.
279
279
 
280
- **"fetchproxy fallback failed"** — the env-var path wasn't configured and the extension couldn't be reached. Confirm the fetchproxy extension is installed, signed into OFW, and that it's running (open the extension popup). If you want to disable the fallback entirely, set `OFW_DISABLE_FETCHPROXY=1`.
280
+ **"fetchproxy fallback failed"** / **"ContextMint Bridge is down"** — the env-var path wasn't configured and the extension couldn't be reached. Confirm ContextMint Bridge is installed, signed into OFW, and that it's running (open the extension popup). If you want to disable the fallback entirely, set `OFW_DISABLE_FETCHPROXY=1`.
281
281
 
282
282
  **"OFW login not attempted — this OurFamilyWizard email and password were already rejected"** — OFW refused these credentials earlier in this session. OFW counts failed sign-ins against the account, so the server does not re-send a rejected password on every call. Update `OFW_USERNAME` / `OFW_PASSWORD` to your current login (or restart the server) and try again.
283
283
 
package/dist/auth.js CHANGED
@@ -25,7 +25,7 @@
25
25
  //
26
26
  // 2. fetchproxy fallback (new)
27
27
  // When credentials are absent, we try to lift the user's session
28
- // out of their signed-in browser tab via the fetchproxy extension.
28
+ // out of their signed-in browser tab via ContextMint Bridge (fetchproxy).
29
29
  // The `@fetchproxy/bootstrap` helper spins up a one-shot WebSocket
30
30
  // bridge, asks the extension for `localStorage["auth"]` and
31
31
  // `localStorage["tokenExpiry"]` from any ourfamilywizard.com tab,
@@ -80,7 +80,7 @@ function fetchproxyDisabled() {
80
80
  * silently stopping matching the day this wording changed.
81
81
  */
82
82
  export const NO_AUTH_CONFIGURED = 'OFW auth: set OFW_USERNAME + OFW_PASSWORD, ' +
83
- 'or install the fetchproxy extension and sign into ourfamilywizard.com ' +
83
+ 'or install ContextMint Bridge and sign into ourfamilywizard.com ' +
84
84
  '(unset OFW_DISABLE_FETCHPROXY if it is set).';
85
85
  /**
86
86
  * Prefix of the message raised when the fetchproxy bridge is unreachable.
@@ -92,7 +92,7 @@ export const NO_AUTH_CONFIGURED = 'OFW auth: set OFW_USERNAME + OFW_PASSWORD, '
92
92
  * day the wording changed, while silently misreporting a downed bridge as an
93
93
  * unconfigured server.
94
94
  */
95
- export const BRIDGE_DOWN_PREFIX = 'OFW auth: fetchproxy bridge is down';
95
+ export const BRIDGE_DOWN_PREFIX = 'OFW auth: ContextMint Bridge is down';
96
96
  /** True for the {@link BRIDGE_DOWN_PREFIX} failure and nothing else. */
97
97
  export function isBridgeDown(e) {
98
98
  return e instanceof Error && e.message.startsWith(BRIDGE_DOWN_PREFIX);
@@ -145,7 +145,7 @@ export async function resolveAuth() {
145
145
  const expiryRaw = session.localStorage['tokenExpiry'];
146
146
  if (!token) {
147
147
  throw new Error('localStorage["auth"] missing on ourfamilywizard.com. ' +
148
- 'Sign into OFW in your browser (with the fetchproxy extension installed) and retry.');
148
+ 'Sign into OFW in your browser (with ContextMint Bridge installed) and retry.');
149
149
  }
150
150
  return {
151
151
  credential: token,