honeybook-mcp 0.7.0 → 0.8.0

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.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "HoneyBook client-portal tools for Claude Code",
10
- "version": "0.7.0"
10
+ "version": "0.8.0"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "HoneyBook",
16
16
  "source": "./",
17
17
  "description": "HoneyBook client-portal MCP for Claude — view wedding-vendor contracts and invoices via MCP",
18
- "version": "0.7.0",
18
+ "version": "0.8.0",
19
19
  "author": {
20
20
  "name": "Chris Chall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "honeybook",
3
3
  "displayName": "HoneyBook",
4
- "version": "0.7.0",
4
+ "version": "0.8.0",
5
5
  "description": "HoneyBook client-portal MCP for Claude — view wedding-vendor contracts and invoices via MCP",
6
6
  "author": {
7
7
  "name": "Chris Chall",
package/README.md CHANGED
@@ -91,6 +91,31 @@ HoneyBook has no public client-portal API. This MCP reuses the same auth state y
91
91
 
92
92
  Sessions are stored in memory and persisted to `~/.honeybook-mcp/sessions.json` (mode 0600) so they survive MCP restarts. Re-run `use_magic_link` when a session expires.
93
93
 
94
+ ### Questionnaire ("flow") links
95
+
96
+ A vendor can send a second, different shape of link:
97
+
98
+ ```
99
+ https://<vendor>.hbportal.co/flow/<flowId>?hash=…&userId=…
100
+ ```
101
+
102
+ That one does **not** sign you into the portal. It opens a single questionnaire and stores a per-flow credential — HoneyBook calls it *weak auth* — under `localStorage["HONEYBOOK_REACT_WEAK_AUTH_<flowId>"]`. Capture it with `use_flow_link` and read it with `get_flow`.
103
+
104
+ The two credential kinds are kept apart on purpose, in two files and two stores:
105
+
106
+ | | portal session | flow credential |
107
+ |---|---|---|
108
+ | capture tool | `use_magic_link` | `use_flow_link` |
109
+ | link shape | `/app/link/resolve/…` | `/flow/<flowId>?hash=…` |
110
+ | stored in | `~/.honeybook-mcp/sessions.json` | `~/.honeybook-mcp/flows.json` |
111
+ | can read | workspaces, files, invoices, payment methods | that one questionnaire |
112
+
113
+ Each tool refuses the other's link shape by name, and a portal tool asked to run with only a flow credential says so rather than failing later with an opaque HoneyBook error. `list_active_sessions` reports both kinds, separately.
114
+
115
+ `get_flow` makes the same two calls the questionnaire page does: the public `GET /api/v2/flow/<flowId>/minimal` for the vendor company id, then `GET /api/v2/client/flow/<flowId>/active?ctxc=<companyId>`. If the first does not carry a company id it stops there and says so — calling `/active` without `ctxc` answers a bare `400` that reads like an expired credential.
116
+
117
+ One thing to expect: the storage key contains the flow id, so every new questionnaire is a **new key in the declared fetchproxy scope**. The extension gates on the scope you approved at pair time, so it asks you to re-approve once per questionnaire. That is the extension working, not a fault.
118
+
94
119
  ## Available tools
95
120
 
96
121
  Tools that touch a vendor accept an optional `origin` argument (e.g. `https://acme.hbportal.co`). When only one session is active it is inferred.
@@ -98,7 +123,9 @@ Tools that touch a vendor accept an optional `origin` argument (e.g. `https://ac
98
123
  | Tool | What it does | Permission |
99
124
  |------------------------|-----------------------------------------------------------|------------|
100
125
  | `use_magic_link` | Capture a session from a magic-link URL | Confirm |
101
- | `list_active_sessions` | Show currently active portal sessions | Auto |
126
+ | `list_active_sessions` | Show active credentials, split by kind | Auto |
127
+ | `use_flow_link` | Capture a questionnaire (flow) credential | Confirm |
128
+ | `get_flow` | Read one questionnaire and its answers | Auto |
102
129
  | `list_workspace_files` | Files from one vendor; filter by type | Auto |
103
130
  | `get_workspace_file` | Full detail for one file | Auto |
104
131
  | `get_workspace` | Workspace detail + status flags | Auto |
@@ -110,6 +137,11 @@ Tools that touch a vendor accept an optional `origin` argument (e.g. `https://ac
110
137
 
111
138
  - **"HoneyBook auth expired"** — re-open the vendor's magic link in Chrome and re-run `use_magic_link`.
112
139
  - **"No active HoneyBook session"** — call `use_magic_link` first.
140
+ - **"No active HoneyBook portal session. N flow (questionnaire) credentials are active"** — you captured a `/flow/` link but the tool you called needs a client-portal one. Run `use_magic_link` with an `/app/link/resolve/…` link, or use `get_flow` to read the questionnaire.
141
+ - **"that is a questionnaire (flow) link, not a client-portal link"** — use `use_flow_link` for it.
142
+ - **"no auth hash for flow …"** — the link you passed had lost its `?hash=` parameter (the page rewrites the URL after it loads). Re-copy the original link out of the vendor email.
143
+ - **"HoneyBook error 400 … NOT an auth failure"** on `get_flow` — a required input was missing, not your credential. Usually a pinned `HONEYBOOK_API_VERSION` that has gone stale: unset it so the live value is read from `/api/gon`. Re-running `use_flow_link` will not help.
144
+ - **"no context id for flow …"** — HoneyBook's public `/minimal` route did not return the vendor company id the questionnaire read needs. Also not a credential problem.
113
145
  - **"fetchproxy capture failed"** — install the [fetchproxy 0.3.0 extension](https://github.com/chrischall/fetchproxy), then open the vendor's magic link in that browser.
114
146
  - **"fetchproxy capture timed out"** — the extension found no signed-in portal tab to read. Open the vendor's magic link, confirm the portal page has loaded, then retry.
115
147
  - **"no confirmed browser session"** — the extension is connected but has not approved this MCP. Open the Transporter popup and approve the pair code it shows, then retry.