honeybook-mcp 0.8.0 → 0.8.2

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.8.0"
10
+ "version": "0.8.2"
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.8.0",
18
+ "version": "0.8.2",
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.8.0",
4
+ "version": "0.8.2",
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/dist/bundle.js CHANGED
@@ -39509,7 +39509,7 @@ function bridgeErrorInfo(err) {
39509
39509
  // package.json
39510
39510
  var package_default = {
39511
39511
  name: "honeybook-mcp",
39512
- version: "0.8.0",
39512
+ version: "0.8.2",
39513
39513
  mcpName: "io.github.chrischall/honeybook-mcp",
39514
39514
  description: "HoneyBook client-portal MCP server for Claude",
39515
39515
  author: "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -39822,7 +39822,11 @@ async function captureFlowCredentialViaFetchproxy(opts) {
39822
39822
  const errName = e?.name;
39823
39823
  if (errName === "FetchproxyScopeError" || /not in declared set/i.test(msg)) {
39824
39824
  throw new Error(
39825
- `HoneyBook flow auth: ${msg} \u2014 the declared scope names ONE key per flow ("${storageKey}"), so the extension asks you to approve each new questionnaire once. Revoke honeybook-mcp in the Transporter popup, re-run this tool, and approve the new scope.`
39825
+ `HoneyBook flow auth: the extension is refusing a scope this questionnaire needs ("${storageKey}"). The declared scope names ONE key per flow, so each new questionnaire is approved once \u2014 and it is one click, not a re-pair: open the Transporter popup, where honeybook-mcp should be offering to "expand its access" with this key, and press Grant. Then re-run this tool. That keeps the existing pairing.
39826
+
39827
+ Revoking and re-pairing also works \u2014 it is what the underlying error suggests \u2014 but it discards the pairing and makes you approve every scope again, so try Grant first.
39828
+
39829
+ Underlying error: ${msg}`
39826
39830
  );
39827
39831
  }
39828
39832
  if (bridgeError.type === "timeout" || /timeout/i.test(msg)) {
@@ -39902,21 +39906,28 @@ var FlowClient = class {
39902
39906
  }
39903
39907
  }
39904
39908
  /**
39905
- * Explain a bare 400.
39909
+ * Explain an untyped 400.
39910
+ *
39911
+ * A 400 with no `error_type` says nothing about which input was wrong and
39912
+ * reads exactly like an auth failure; left alone it sends people to
39913
+ * re-capture a credential that is fine, so the auth reading is denied
39914
+ * outright.
39906
39915
  *
39907
- * A flow read that is missing a required input answers `400` with
39908
- * `"Unexpected server error"` and no `error_type` — nothing in the body says
39909
- * which input, and it reads exactly like an auth failure. Left alone it sends
39910
- * people to re-capture a credential that is fine, so the two known causes are
39911
- * named here and the auth reading is denied outright.
39916
+ * What can NOT reach here is the client version. Probed live 2026-08-31,
39917
+ * every version failure — stale, garbage, empty, omitted — answers 400 with
39918
+ * `error_type: HBWrongAPIVersionError` and `error_data.server_api_version`,
39919
+ * which `hbApiRequest` intercepts and retries once on the server's own
39920
+ * number, so it self-heals a layer below. `ctxc` cannot reach here either:
39921
+ * the API ignores it entirely (omitted, bogus, and `/client/`-less all return
39922
+ * the same 200, byte-identical), and naming it here only misdirected. So the
39923
+ * version is offered as the input to CHECK rather than as a known cause, and
39924
+ * this is deliberately vaguer than 0.8.0's message: no cause is confirmed.
39912
39925
  */
39913
39926
  badRequestError(err) {
39914
39927
  return new Error(
39915
39928
  `${err.message}
39916
39929
 
39917
- HoneyBook answers a flow read with a bare 400 when a required input is missing, without saying which. The two that do it:
39918
- 1. hb-api-client-version \u2014 sent as ${this.apiVersion}. It is read from /api/gon at startup, so it normally tracks HoneyBook; if HONEYBOOK_API_VERSION is pinned in your environment that value can have rotted, so unset it to re-read the live one.
39919
- 2. ctxc \u2014 the company id from /api/v2/flow/<flowId>/minimal, required on every /api/v2/client/\u2026 read.
39930
+ HoneyBook answered this flow read with a 400 carrying no error_type, so nothing in the response says which input it objected to. The input worth checking is hb-api-client-version, sent as ${this.apiVersion}: it is read from /api/gon at startup, so it normally tracks HoneyBook, but a pinned HONEYBOOK_API_VERSION can have rotted \u2014 unset it to re-read the live one. (A version HoneyBook actively rejects answers with error_type HBWrongAPIVersionError and is retried automatically, so it would not surface here.)
39920
39931
  This is NOT an auth failure \u2014 the credential is very likely fine, so re-running \`use_flow_link\` will not help.`
39921
39932
  );
39922
39933
  }
@@ -39960,7 +39971,7 @@ async function fetchFlowMinimal(flowId, opts) {
39960
39971
  const detail = body.slice(0, 300);
39961
39972
  const cause = response.status === 404 ? `no flow ${flowId} \u2014 it may have been deleted, or the id is wrong` : /WrongAPIVersion/i.test(body) ? `HoneyBook rejected hb-api-client-version ${opts.apiVersion}; this package's pinned value needs updating` : "that route is public, so this is a HoneyBook-side problem rather than a credential one";
39962
39973
  throw new Error(
39963
- `HoneyBook flow: GET /api/v2/flow/${flowId}/minimal answered ${response.status} \u2014 ${cause}. It is where the context id (ctxc) required by the questionnaire read comes from.` + (detail ? ` Response: ${detail}` : "")
39974
+ `HoneyBook flow: GET /api/v2/flow/${flowId}/minimal answered ${response.status} \u2014 ${cause}. It is where the context id (ctxc) the questionnaire read sends comes from.` + (detail ? ` Response: ${detail}` : "")
39964
39975
  );
39965
39976
  }
39966
39977
  return await response.json();
@@ -40003,21 +40014,17 @@ async function getFlow(args) {
40003
40014
  apiVersion: client.getApiVersion()
40004
40015
  });
40005
40016
  const contextId = flowContextId(minimal);
40006
- if (!contextId) {
40007
- throw new Error(
40008
- `HoneyBook flow: no context id for flow ${flowId}. The questionnaire read requires \`ctxc\`, the vendor company id, and GET /api/v2/flow/<flowId>/minimal did not carry one at branding_data.company_id. Calling /active without it answers a bare 400 that reads like an auth failure, so this stops here: it is not an auth problem and re-running \`use_flow_link\` will not help.`
40009
- );
40010
- }
40011
- const query = new URLSearchParams({ ctxc: contextId });
40017
+ const path = `/api/v2/client/flow/${encodeURIComponent(flowId)}/active`;
40012
40018
  const flow = await client.request(
40013
40019
  "GET",
40014
- `/api/v2/client/flow/${encodeURIComponent(flowId)}/active?${query}`
40020
+ contextId ? `${path}?${new URLSearchParams({ ctxc: contextId })}` : path
40015
40021
  );
40016
40022
  const head = {
40017
40023
  flowId,
40018
40024
  portalOrigin: client.credential.portalOrigin,
40019
- // Reported because it is a second input the read depends on: when this call
40020
- // fails, knowing which company id was used is half the diagnosis.
40025
+ // Reported because it is a second input the request carries: when this call
40026
+ // fails, knowing which company id was sent is half the diagnosis. `null` is
40027
+ // a normal outcome, not an error — the read does not require one.
40021
40028
  contextId
40022
40029
  };
40023
40030
  if (args.section === "raw") return textResult({ ...head, flow });
@@ -40040,7 +40047,7 @@ function registerFlowTools(server) {
40040
40047
  description: "Capture a HoneyBook QUESTIONNAIRE (flow) credential via the fetchproxy browser extension. Use this for a link shaped https://<vendor>.hbportal.co/flow/<flowId>?hash=\u2026 \u2014 for a client-portal link (/app/link/resolve/\u2026) use `use_magic_link` instead. Prerequisites: install the fetchproxy extension, open the questionnaire link in that browser and let the page render, then run this tool. It snapshots localStorage[\"HONEYBOOK_REACT_WEAK_AUTH_<flowId>\"] into ~/.honeybook-mcp/flows.json. A flow credential is HoneyBook's 'weak auth': it is scoped to that ONE questionnaire and cannot read portal workspaces, files, invoices or payment methods. Because the storage key contains the flow id, the extension asks you to re-approve the scope once per new questionnaire.",
40041
40048
  inputSchema: {
40042
40049
  flow_link_url: external_exports.string().url().describe(
40043
- "Full questionnaire link from the vendor email, e.g. https://<vendor>.hbportal.co/flow/<flowId>?hash=\u2026&userId=\u2026 The ?hash= parameter is the credential, so use the original link rather than the URL the page rewrites to."
40050
+ "Questionnaire link, e.g. https://<vendor>.hbportal.co/flow/<flowId>?hash=\u2026&userId=\u2026 Only the /flow/<flowId> segment is required: the credential is read out of the open page's localStorage, so the rewritten step URL (/flow/<flowId>/1-Questions) works too. The URL's ?hash= is used only as a fallback when the page stored none, so prefer the original email link if the capture reports no hash."
40044
40051
  )
40045
40052
  },
40046
40053
  annotations: { readOnlyHint: false }
@@ -40050,7 +40057,7 @@ function registerFlowTools(server) {
40050
40057
  server.registerTool(
40051
40058
  "get_flow",
40052
40059
  {
40053
- description: 'Read a HoneyBook questionnaire (flow) \u2014 its pages, questions and any answers already submitted \u2014 using a credential captured by `use_flow_link`. Requires a flow credential; a client-portal session will NOT work here, and vice versa. Defaults to the most recently captured flow. Makes two calls: the public /api/v2/flow/<id>/minimal for the vendor company id, then /api/v2/client/flow/<id>/active?ctxc=<companyId>. A questionnaire larger than the default ceiling answers with its size and top-level keys instead; call again with section="raw" for the whole thing.',
40060
+ description: 'Read a HoneyBook questionnaire (flow) \u2014 its pages, questions and any answers already submitted \u2014 using a credential captured by `use_flow_link`. Requires a flow credential; a client-portal session will NOT work here, and vice versa. Defaults to the most recently captured flow. Makes two calls: the public /api/v2/flow/<id>/minimal for the vendor company id, then /api/v2/client/flow/<id>/active, passing that id as ?ctxc= when /minimal supplied one. A questionnaire larger than the default ceiling answers with its size and top-level keys instead; call again with section="raw" for the whole thing.',
40054
40061
  inputSchema: {
40055
40062
  flow_id: external_exports.string().optional().describe(
40056
40063
  "Flow id to read. Omit to use the most recently captured flow credential. Run `list_active_sessions` to see the active flow ids."
@@ -40513,7 +40520,7 @@ var __dirname = dirname2(fileURLToPath(import.meta.url));
40513
40520
  await loadDotenvSafely({ path: join6(__dirname, "..", ".env"), override: false });
40514
40521
  await runMcp({
40515
40522
  name: "honeybook-mcp",
40516
- version: "0.8.0",
40523
+ version: "0.8.2",
40517
40524
  // x-release-please-version
40518
40525
  tools: [
40519
40526
  registerSessionTools,
package/dist/flow-auth.js CHANGED
@@ -85,10 +85,30 @@ export async function captureFlowCredentialViaFetchproxy(opts) {
85
85
  // same reasoning as `auth.ts`.
86
86
  const errName = e?.name;
87
87
  if (errName === 'FetchproxyScopeError' || /not in declared set/i.test(msg)) {
88
- throw new Error(`HoneyBook flow auth: ${msg} — the declared scope names ONE key per flow ` +
89
- `("${storageKey}"), so the extension asks you to approve each new questionnaire ` +
90
- 'once. Revoke honeybook-mcp in the Transporter popup, re-run this tool, and approve ' +
91
- 'the new scope.');
88
+ // Lead with GRANT, and put the upstream text LAST.
89
+ //
90
+ // A GROWING scope does not block the session: the extension serves the
91
+ // intersection of approved and declared, stays connected, and queues a
92
+ // non-blocking "<serverName> wants to expand its access" offer carrying a
93
+ // Grant button. Only a domains/serverName change forces a re-pair.
94
+ //
95
+ // Ordering is the whole point and is easy to get wrong. `msg` is the
96
+ // upstream FetchproxyScopeError, and it ends with its OWN remedy —
97
+ // "Revoke this MCP in the Transporter extension popup, then re-run".
98
+ // Interpolating it first (as this did when the Grant advice was added)
99
+ // puts "Revoke" ahead of "Grant" no matter what we append, so a reader
100
+ // still does the expensive thing. It therefore goes at the END, behind an
101
+ // "Underlying error:" label, where it stays available for diagnosis
102
+ // without being the first instruction anyone reads.
103
+ throw new Error('HoneyBook flow auth: the extension is refusing a scope this questionnaire needs ' +
104
+ `("${storageKey}"). The declared scope names ONE key per flow, so each new ` +
105
+ 'questionnaire is approved once — and it is one click, not a re-pair: open the ' +
106
+ 'Transporter popup, where honeybook-mcp should be offering to "expand its access" ' +
107
+ 'with this key, and press Grant. Then re-run this tool. That keeps the existing ' +
108
+ 'pairing.\n\n' +
109
+ 'Revoking and re-pairing also works — it is what the underlying error suggests — but ' +
110
+ 'it discards the pairing and makes you approve every scope again, so try Grant ' +
111
+ `first.\n\nUnderlying error: ${msg}`);
92
112
  }
93
113
  if (bridgeError.type === 'timeout' || /timeout/i.test(msg)) {
94
114
  throw new Error('HoneyBook flow auth: fetchproxy capture timed out. The extension never returned ' +
@@ -73,23 +73,32 @@ export class FlowClient {
73
73
  }
74
74
  }
75
75
  /**
76
- * Explain a bare 400.
76
+ * Explain an untyped 400.
77
77
  *
78
- * A flow read that is missing a required input answers `400` with
79
- * `"Unexpected server error"` and no `error_type` — nothing in the body says
80
- * which input, and it reads exactly like an auth failure. Left alone it sends
81
- * people to re-capture a credential that is fine, so the two known causes are
82
- * named here and the auth reading is denied outright.
78
+ * A 400 with no `error_type` says nothing about which input was wrong and
79
+ * reads exactly like an auth failure; left alone it sends people to
80
+ * re-capture a credential that is fine, so the auth reading is denied
81
+ * outright.
82
+ *
83
+ * What can NOT reach here is the client version. Probed live 2026-08-31,
84
+ * every version failure — stale, garbage, empty, omitted — answers 400 with
85
+ * `error_type: HBWrongAPIVersionError` and `error_data.server_api_version`,
86
+ * which `hbApiRequest` intercepts and retries once on the server's own
87
+ * number, so it self-heals a layer below. `ctxc` cannot reach here either:
88
+ * the API ignores it entirely (omitted, bogus, and `/client/`-less all return
89
+ * the same 200, byte-identical), and naming it here only misdirected. So the
90
+ * version is offered as the input to CHECK rather than as a known cause, and
91
+ * this is deliberately vaguer than 0.8.0's message: no cause is confirmed.
83
92
  */
84
93
  badRequestError(err) {
85
94
  return new Error(`${err.message}\n\n` +
86
- 'HoneyBook answers a flow read with a bare 400 when a required input is missing, without ' +
87
- 'saying which. The two that do it:\n' +
88
- ` 1. hb-api-client-version — sent as ${this.apiVersion}. It is read from /api/gon at ` +
89
- 'startup, so it normally tracks HoneyBook; if HONEYBOOK_API_VERSION is pinned in your ' +
90
- 'environment that value can have rotted, so unset it to re-read the live one.\n' +
91
- ' 2. ctxc — the company id from /api/v2/flow/<flowId>/minimal, required on every ' +
92
- '/api/v2/client/… read.\n' +
95
+ 'HoneyBook answered this flow read with a 400 carrying no error_type, so nothing in the ' +
96
+ 'response says which input it objected to. The input worth checking is ' +
97
+ `hb-api-client-version, sent as ${this.apiVersion}: it is read from /api/gon at startup, ` +
98
+ 'so it normally tracks HoneyBook, but a pinned HONEYBOOK_API_VERSION can have rotted — ' +
99
+ 'unset it to re-read the live one. (A version HoneyBook actively rejects answers with ' +
100
+ 'error_type HBWrongAPIVersionError and is retried automatically, so it would not surface ' +
101
+ 'here.)\n' +
93
102
  'This is NOT an auth failure — the credential is very likely fine, so re-running ' +
94
103
  '`use_flow_link` will not help.');
95
104
  }
@@ -167,7 +176,7 @@ export async function fetchFlowMinimal(flowId, opts) {
167
176
  ? `HoneyBook rejected hb-api-client-version ${opts.apiVersion}; this package's pinned value needs updating`
168
177
  : 'that route is public, so this is a HoneyBook-side problem rather than a credential one';
169
178
  throw new Error(`HoneyBook flow: GET /api/v2/flow/${flowId}/minimal answered ${response.status} — ${cause}. ` +
170
- `It is where the context id (ctxc) required by the questionnaire read comes from.` +
179
+ `It is where the context id (ctxc) the questionnaire read sends comes from.` +
171
180
  (detail ? ` Response: ${detail}` : ''));
172
181
  }
173
182
  return (await response.json());
@@ -176,12 +185,14 @@ export async function fetchFlowMinimal(flowId, opts) {
176
185
  * The `ctxc` value: the vendor's company id.
177
186
  *
178
187
  * The app sets `params.ctxc` from `clientPortalConfigStore.clientPortalCompanyId`
179
- * in its request interceptor, and `branding_data.company_id` is that same id —
180
- * verified live as the only 24-hex value the `/minimal` response carries.
188
+ * in its request interceptor, and `branding_data.company_id` is that same id.
189
+ * (0.8.0's docblock called it the only 24-hex value in `/minimal`; it is not —
190
+ * `theme._id` is another — so this reads the field by name, as it always did.)
181
191
  *
182
- * Returns `null` rather than guessing: a wrong `ctxc` is the same bare 400 as a
183
- * missing one, so a fabricated value would be indistinguishable from a genuine
184
- * failure.
192
+ * Returns `null` rather than guessing, and `null` is a normal outcome: the read
193
+ * omits `ctxc` entirely in that case. The API ignores the value regardless —
194
+ * verified live 2026-08-31 that a bogus one returns the same 200 — so a
195
+ * fabricated id would be neither safer nor more honest than sending none.
185
196
  */
186
197
  export function flowContextId(minimal) {
187
198
  return minimal.branding_data?.company_id ?? null;
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import { registerContractTools } from './tools/contracts.js';
13
13
  import { registerInvoiceTools } from './tools/invoices.js';
14
14
  await runMcp({
15
15
  name: 'honeybook-mcp',
16
- version: '0.8.0', // x-release-please-version
16
+ version: '0.8.2', // x-release-please-version
17
17
  tools: [
18
18
  registerSessionTools,
19
19
  registerFlowTools,
@@ -82,24 +82,22 @@ export async function getFlow(args) {
82
82
  apiVersion: client.getApiVersion(),
83
83
  });
84
84
  const contextId = flowContextId(minimal);
85
- // Refuse rather than calling /active without it. A missing ctxc produces the
86
- // same bare 400 as a stale client version, and a 400 here reads as an auth
87
- // failure — so falling through would send someone to re-capture a credential
88
- // that is perfectly good.
89
- if (!contextId) {
90
- throw new Error(`HoneyBook flow: no context id for flow ${flowId}. The questionnaire read requires ` +
91
- '`ctxc`, the vendor company id, and GET /api/v2/flow/<flowId>/minimal did not carry one ' +
92
- 'at branding_data.company_id. Calling /active without it answers a bare 400 that reads ' +
93
- 'like an auth failure, so this stops here: it is not an auth problem and re-running ' +
94
- '`use_flow_link` will not help.');
95
- }
96
- const query = new URLSearchParams({ ctxc: contextId });
97
- const flow = await client.request('GET', `/api/v2/client/flow/${encodeURIComponent(flowId)}/active?${query}`);
85
+ // `ctxc` is sent when /minimal carries one and simply omitted when it does
86
+ // not. It is NOT required: probed live on 2026-08-31 with a real credential,
87
+ // omitting it — and sending a bogus one, and dropping `/client/` — returns
88
+ // the same 200 with a byte-identical body. 0.8.0 refused here instead, which
89
+ // could only ever invent a failure for a flow whose /minimal lacks
90
+ // branding_data.company_id. The URL still matches the app's own request,
91
+ // because matching the shipped client is the cheap way to stay right if the
92
+ // server ever does start enforcing it.
93
+ const path = `/api/v2/client/flow/${encodeURIComponent(flowId)}/active`;
94
+ const flow = await client.request('GET', contextId ? `${path}?${new URLSearchParams({ ctxc: contextId })}` : path);
98
95
  const head = {
99
96
  flowId,
100
97
  portalOrigin: client.credential.portalOrigin,
101
- // Reported because it is a second input the read depends on: when this call
102
- // fails, knowing which company id was used is half the diagnosis.
98
+ // Reported because it is a second input the request carries: when this call
99
+ // fails, knowing which company id was sent is half the diagnosis. `null` is
100
+ // a normal outcome, not an error — the read does not require one.
103
101
  contextId,
104
102
  };
105
103
  if (args.section === 'raw')
@@ -126,12 +124,12 @@ export function registerFlowTools(server) {
126
124
  flow_link_url: z
127
125
  .string()
128
126
  .url()
129
- .describe('Full questionnaire link from the vendor email, e.g. https://<vendor>.hbportal.co/flow/<flowId>?hash=…&userId=… The ?hash= parameter is the credential, so use the original link rather than the URL the page rewrites to.'),
127
+ .describe('Questionnaire link, e.g. https://<vendor>.hbportal.co/flow/<flowId>?hash=…&userId=… Only the /flow/<flowId> segment is required: the credential is read out of the open page\'s localStorage, so the rewritten step URL (/flow/<flowId>/1-Questions) works too. The URL\'s ?hash= is used only as a fallback when the page stored none, so prefer the original email link if the capture reports no hash.'),
130
128
  },
131
129
  annotations: { readOnlyHint: false },
132
130
  }, useFlowLink);
133
131
  server.registerTool('get_flow', {
134
- description: 'Read a HoneyBook questionnaire (flow) — its pages, questions and any answers already submitted — using a credential captured by `use_flow_link`. Requires a flow credential; a client-portal session will NOT work here, and vice versa. Defaults to the most recently captured flow. Makes two calls: the public /api/v2/flow/<id>/minimal for the vendor company id, then /api/v2/client/flow/<id>/active?ctxc=<companyId>. A questionnaire larger than the default ceiling answers with its size and top-level keys instead; call again with section="raw" for the whole thing.',
132
+ description: 'Read a HoneyBook questionnaire (flow) — its pages, questions and any answers already submitted — using a credential captured by `use_flow_link`. Requires a flow credential; a client-portal session will NOT work here, and vice versa. Defaults to the most recently captured flow. Makes two calls: the public /api/v2/flow/<id>/minimal for the vendor company id, then /api/v2/client/flow/<id>/active, passing that id as ?ctxc= when /minimal supplied one. A questionnaire larger than the default ceiling answers with its size and top-level keys instead; call again with section="raw" for the whole thing.',
135
133
  inputSchema: {
136
134
  flow_id: z
137
135
  .string()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "honeybook-mcp",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "mcpName": "io.github.chrischall/honeybook-mcp",
5
5
  "description": "HoneyBook client-portal MCP server for Claude",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
package/server.json CHANGED
@@ -6,12 +6,12 @@
6
6
  "url": "https://github.com/chrischall/honeybook-mcp",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.8.0",
9
+ "version": "0.8.2",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "honeybook-mcp",
14
- "version": "0.8.0",
14
+ "version": "0.8.2",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },