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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/bundle.js +32 -5
- package/dist/index.js +1 -1
- package/dist/tools/healthcheck.js +9 -0
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "HoneyBook client-portal tools for Claude Code",
|
|
10
|
-
"version": "0.7.
|
|
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.
|
|
18
|
+
"version": "0.7.1",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Chall"
|
|
21
21
|
},
|
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: {
|
|
39278
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
9
|
+
"version": "0.7.1",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "honeybook-mcp",
|
|
14
|
-
"version": "0.7.
|
|
14
|
+
"version": "0.7.1",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|