honeybook-mcp 0.7.0 → 0.7.1

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.7.1"
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.7.1",
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.7.1",
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
@@ -39232,6 +39232,18 @@ function statusOf(err) {
39232
39232
  const s = err.status ?? err.statusCode;
39233
39233
  return typeof s === "number" ? s : void 0;
39234
39234
  }
39235
+ var CREDENTIAL_ARMS = /* @__PURE__ */ new Set([
39236
+ "ok",
39237
+ "no_credential",
39238
+ "credential_rejected",
39239
+ "timeout",
39240
+ "http",
39241
+ "transport",
39242
+ "unknown"
39243
+ ]);
39244
+ function isArm(kind) {
39245
+ return kind !== void 0 && CREDENTIAL_ARMS.has(kind);
39246
+ }
39235
39247
  function credentialHint(arm, prefix, hostLabel, source) {
39236
39248
  switch (arm) {
39237
39249
  case "ok":
@@ -39269,13 +39281,27 @@ function registerCredentialHealthcheckTool(args) {
39269
39281
  try {
39270
39282
  state = await resolveCredential();
39271
39283
  } catch (e) {
39284
+ const classified = classifyThrown?.(e);
39272
39285
  const result2 = {
39273
39286
  ok: false,
39287
+ // Still false, and still no source: a classification explains WHY
39288
+ // nothing resolved, it does not invent a credential that did.
39274
39289
  credential: { source: null, resolved: false },
39275
39290
  // No `url`: nothing was probed, and naming one implies it was tried.
39276
39291
  probe: { elapsed_ms: 0 },
39277
- error: { kind: "no_credential", message: truncateErrorMessage(messageOf(e)) },
39278
- hint: hints?.no_credential ?? credentialHint("no_credential", prefix, hostLabel, null)
39292
+ error: {
39293
+ kind: classified?.kind ?? "no_credential",
39294
+ message: truncateErrorMessage(messageOf(e)),
39295
+ ...classified?.detail !== void 0 ? { detail: classified.detail } : {}
39296
+ },
39297
+ // The hint must follow the KIND beside it. Falling back to
39298
+ // `no_credential`'s copy under a classified kind would state a cause
39299
+ // the kind contradicts — the same disagreement this path exists to
39300
+ // remove. So: an inline hint wins; else the classified arm's own
39301
+ // copy (consumer override first); else, for a kind this module has
39302
+ // no copy for, the neutral `unknown` text rather than one that
39303
+ // asserts a cause; else the unclassified `no_credential` default.
39304
+ hint: classified?.hint ?? (isArm(classified?.kind) ? hints?.[classified.kind] ?? credentialHint(classified.kind, prefix, hostLabel, null) : classified !== void 0 ? credentialHint("unknown", prefix, hostLabel, null) : hints?.no_credential ?? credentialHint("no_credential", prefix, hostLabel, null))
39279
39305
  };
39280
39306
  return { content: [{ type: "text", text: JSON.stringify(result2, null, 2) }] };
39281
39307
  }
@@ -39373,7 +39399,7 @@ function bridgeErrorInfo(err) {
39373
39399
  // package.json
39374
39400
  var package_default = {
39375
39401
  name: "honeybook-mcp",
39376
- version: "0.7.0",
39402
+ version: "0.7.1",
39377
39403
  mcpName: "io.github.chrischall/honeybook-mcp",
39378
39404
  description: "HoneyBook client-portal MCP server for Claude",
39379
39405
  author: "Claude Code (AI) <https://www.anthropic.com/claude>",
@@ -39415,7 +39441,7 @@ var package_default = {
39415
39441
  typecheck: "tsc -p tsconfig.json --noEmit"
39416
39442
  },
39417
39443
  dependencies: {
39418
- "@chrischall/mcp-utils": "^0.19.2",
39444
+ "@chrischall/mcp-utils": "^0.19.3",
39419
39445
  "@fetchproxy/bootstrap": "^2.2.0",
39420
39446
  "@fetchproxy/server": "^2.2.0",
39421
39447
  "@modelcontextprotocol/sdk": "^1.29.0",
@@ -39635,6 +39661,7 @@ function registerHealthcheckTools(server) {
39635
39661
  },
39636
39662
  classifyThrown: (err) => {
39637
39663
  const msg = err instanceof Error ? err.message : String(err);
39664
+ if (msg === NO_ACTIVE_SESSION_MESSAGE) return void 0;
39638
39665
  if (/auth expired|use_magic_link|HBUnauthorizedError/.test(msg)) {
39639
39666
  return {
39640
39667
  kind: "credential_rejected",
@@ -40049,7 +40076,7 @@ var __dirname = dirname2(fileURLToPath(import.meta.url));
40049
40076
  await loadDotenvSafely({ path: join5(__dirname, "..", ".env"), override: false });
40050
40077
  await runMcp({
40051
40078
  name: "honeybook-mcp",
40052
- version: "0.7.0",
40079
+ version: "0.7.1",
40053
40080
  // x-release-please-version
40054
40081
  tools: [
40055
40082
  registerSessionTools,
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import { registerContractTools } from './tools/contracts.js';
12
12
  import { registerInvoiceTools } from './tools/invoices.js';
13
13
  await runMcp({
14
14
  name: 'honeybook-mcp',
15
- version: '0.7.0', // x-release-please-version
15
+ version: '0.7.1', // x-release-please-version
16
16
  tools: [
17
17
  registerSessionTools,
18
18
  registerWorkspaceFileTools,
@@ -38,6 +38,15 @@ export function registerHealthcheckTools(server) {
38
38
  },
39
39
  classifyThrown: (err) => {
40
40
  const msg = err instanceof Error ? err.message : String(err);
41
+ // "No active session" is NOT a rejection — there was nothing to reject.
42
+ // It has to be excluded explicitly because the message names
43
+ // `use_magic_link` as the FIX, and the regex below matches that literal
44
+ // as a symptom. The two only stopped colliding by luck: this classifier
45
+ // was never consulted for a `resolveCredential` throw until mcp-utils
46
+ // 0.19.3, and that is the exact path this message arrives on. Without
47
+ // this guard, a user who never connected is told their session expired.
48
+ if (msg === NO_ACTIVE_SESSION_MESSAGE)
49
+ return undefined;
41
50
  // Match the message the CLIENT throws, not HoneyBook's wire error.
42
51
  //
43
52
  // `HoneyBookClient.request()` already converts both 401 and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "honeybook-mcp",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
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>",
@@ -42,7 +42,7 @@
42
42
  "typecheck": "tsc -p tsconfig.json --noEmit"
43
43
  },
44
44
  "dependencies": {
45
- "@chrischall/mcp-utils": "^0.19.2",
45
+ "@chrischall/mcp-utils": "^0.19.3",
46
46
  "@fetchproxy/bootstrap": "^2.2.0",
47
47
  "@fetchproxy/server": "^2.2.0",
48
48
  "@modelcontextprotocol/sdk": "^1.29.0",
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.7.0",
9
+ "version": "0.7.1",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "honeybook-mcp",
14
- "version": "0.7.0",
14
+ "version": "0.7.1",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },